如何添加自定义AT命令
本文档详细介绍了如何在GPRS二次开发工程
中添加用户定义的 AT 命令,以 AT+UCTEST
命令为例展示每个步骤的示例代码。
自定义一个基本的、功能良好的命令需要以下两个步骤:
AT 命令集的源代码不开源,以库文件
的形式呈现,它也是解析自定义的 AT 命令的基础。
定义 AT 命令
在定义 AT 命令之前,请先决定 AT 命令的名称和类型。
命令命名规则:
- 命令应以
+
符号开头。 - 支持字母 (
A~Z, a~z
)、数字 (0~9
) 及其它一些字符 (!
、%
、-
、.
、/
、:
、_
)
命令类型:
每条 AT 命令最多可以有四种类型:测试命令、查询命令、设置命令和执行命令,更多信息参见 AT 命令分类。
然后,定义所需类型的命令。假设 AT+UCTEST
支持所有的四种类型,下面是定义每种类型的示例代码。
测试命令:
void preAt_test_cmd(u8_t idx, u8_t atsrc)
{
spe_ATCommand *atCmd = (spe_ATCommand *)preAt_get_cmd(idx);
if(atCmd->output)
{
char tmp[256];
SPRINTF(tmp, atCmd->output, atCmd->key);
preAt_io_sendMsg(atsrc, (u8_t*)tmp, strlen(tmp));
}
}
查询命令:
void preAt_query_cmd_UCTEST(u8_t atsrc)
{
u8_t state=0;
char tmp[256];
SPRINTF(tmp, "+UCTEST: %d", state);
preAt_io_sendMsg(atsrc, (u8_t*)tmp, strlen(tmp));
}
设置命令:
u8_t g_state = 0;
u8_t preAt_setup_cmd_UCTEST(u8_t *req)
{
#define STR_LEN_MAX 20
u8_t setState = 0;
u8_t str[STR_LEN_MAX] = {0};
if(*req == '=')
{
req++;
parse(req,"ds",&setState,STR_LEN_MAX,str);
g_state = setState;
}
else
{
return preAt_end_error; //响应ERROR
}
return preAt_end_ok; //响应OK
}
注册 AT 命令
调用宏AT_CUSTOM_CMD_REGIST
来注册 AT 命令,以下是注册 AT+UCTEST
的示例(注:使用时请将其放于全局变量位置)。
AT_CUSTOM_CMD_REGIST("+UCTEST",preAt_setup_cmd_UCTEST,preAt_test_cmd,preAt_query_cmd_UCTEST,"this cmd is test cmd: %s");
如果你已经完成了上述两个步骤,请编译GPRS二次开发工程
并烧录固件,该命令即可在您的设备上正常运行。尝试运行一下吧!
下面是 AT+UCTEST
的运行情况。
例程
(1)测试命令
AT+UCTEST=?
this cmd is test cmd: +UCTEST
OK
(2)查询命令
AT+UCTEST?
+UCTEST: 0
OK
(3)设置命令
AT+UCTEST=1,"test str"
OK