Skip to content

如何添加自定义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
Back to top