89 Star 721 Fork 451

魔罗/AT Command

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
readme.md 3.72 KB
一键复制 编辑 原始数据 按行查看 历史
roger.luo 提交于 2年前 . 提交V2版本

简介

AT command(V2) 一款管理AT命令通信交互组件, 适用于Modem、WIFI模块、蓝牙等使用AT命令或者ASCII命令行通信的场景,它涵盖了大部分AT通信形式,如参数设置,查询,二进制数据发送等,同时也支持自定义命令交互管理,由于它的每个命令请求都是异步的,所以对于无操作系统的环境也支持。相对于V1版本,新版本在命令接收匹配,URC不定长度数据捕获以及内存安全上做了大量优化,让它可以应对更多复杂产品应用。

下面是一个最基本使用的演示:

/**
 * @brief  命令响应处理程序
 */
static void read_csq_callback(at_response_t *r)   
{
    int rssi, ber;
    //+CSQ: <rssi>,<ber>
    if (r->code == AT_RESP_OK) {
        //命令响应成功后,解析出rssi,ber.
        if (sscanf(r->prefix, "+CSQ:%d,%d", &rssi, &ber) == 2) {
            printf("rssi:%d, ber:%d\r\n", rssi, ber);
        }
    } else {
        printf("'CSQ' command response failed!\r\n");
    }
}

/**
 * @brief  读CSQ值请求
 */
static void read_csq(void)
{
    //发送CSQ查询命令,超时时间为1000ms,重发次数为0
    at_send_singlline(at_obj, read_csq_callback, 1000, 0, "AT+CSQ"); 
}

上面的示例展示了AT命令通信的基本使用方式:

  • 命令请求:执行命令发送之后,命令并不会立即从数据通道发送出去,而是先进入命令队列。
  • 异步通知:无论命令执行成功与否,都会以异步方式通知请求者。

框架介绍

整个组件由两部分内容组成:

  • AT 作业管理, 管理所有AT异步请求及命令收发工作。
  • URC(主动上报) 处理模块,实时捕获URC消息并上报事件,它跟AT作业是并行的,是一个可选的模块。

AT 作业

'AT Command'组件的基本处理单元是AT作业, 它实际上是一个状态机轮询程序,不仅仅可以处理单个命令收发,还可以是批量命令,自定义命令等,应用程序在进行AT通信请求时,系统会根据请求类型生成一个新的作业对象,然后将对象按照执行优先级预先缓存到队列中,接着系统会从队列逐个取出并选择相应的状态机处理程序进行处理,处理完毕之后再以回调方式将结果上报给应用程序,整个环节跟流水作业生产产品一样,它的基本处理流程图如下所示:

AT处理框架

AT作业生命周期

AT作业生命周期可以简单分为五个阶段:创建阶段、就绪阶段、运行阶段、完成/终止阶段、销毁阶段。

AT作业
  • 创建阶段: 根据请求类型生成作业项,这个阶段可以为新作业项绑定一个上下文,用来监视作业的整个工作过程,包含运行状态,AT命令响应信息等.
  • 就绪阶段: 作业被提交入队列之后就进入了就绪状态,系统按队列顺序一个接着一个取出来并运行.
  • 运行阶段: 此时进入运行一个状态机,以一般AT命令为例,它包含了命令发送,数据接收匹配,超时重试等处理.
  • 完成/终止阶段: 当命令请求的响应信息匹配成功之后,则进入完成状态,如果在这之前命令请求被提示终止,则进入终止状态。
  • 销毁阶段: 在这个阶段系统会将作业从队列中移出同时将相关内存释放.

URC 处理模块

URC 处理模块可以实时捕获URC消息,上层应用需要提供URC消息的匹配规则(消息前后缀)及事件处理入口,它们共同组成了URC订阅表,一旦URC解析器匹配到表中某项规则时,立即以事件方式返回给订阅者进行处理(有关这部分的使用可以参考URC消息处理)。

AT作业

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/moluo-tech/AT-Command.git
git@gitee.com:moluo-tech/AT-Command.git
moluo-tech
AT-Command
AT Command
master

搜索帮助