AT指令解析:TencentOS Tiny AT指令解析源码分析2-数据类型定义

文章目录

简介

在TencentOS Tiny AT指令解析源码解析的过程中,为了更好地理解代码的实现,需要对其定义的数据类型有所了解,本篇主要是对TencentOS Tiny AT指令解析源码中的数据类型定义进行讲解,便于后续对源码逻辑进行讲解。

AT指令解析状态与AT指令状态

AT指令解析状态

AT指令解析状态主要AT指令在解析时使用的,用于标记当前解析结果,解析状态的枚举定义如下:

c 复制代码
typedef enum at_parse_status_en {
    AT_PARSE_STATUS_NONE,
    AT_PARSE_STATUS_NEWLINE,
    AT_PARSE_STATUS_EVENT,
    AT_PARSE_STATUS_EXPECT,
    AT_PARSE_STATUS_OVERFLOW,
    AT_PARSE_STATUS_OK,
    AT_PARSE_STATUS_FAIL,
    AT_PARSE_STATUS_ERROR
} at_parse_status_t;

AT_PARSE_STATUS_NONE :初识状态,程序开始执行时的状态
AT_PARSE_STATUS_NEWLINE :空行,不需要进行处理
AT_PARSE_STATUS_EVENT :事件,代表收到模组主动发送的数据
AT_PARSE_STATUS_EXPECT :期望值,表示收到的模组应答符合预期
AT_PARSE_STATUS_OVERFLOW :缓存区溢出
AT_PARSE_STATUS_OK :收到应答"OK"
AT_PARSE_STATUS_FAIL :收到应答"FAIL"
AT_PARSE_STATUS_ERROR:收到应答"ERROR"

AT指令状态

AT指令状态用于表示当前AT指令的执行状态,在AT指令接收处理中,对AT指令状态进行赋值,用于告知AT指令的执行结果。

c 复制代码
typedef enum at_echo_status_en {
    AT_ECHO_STATUS_NONE,
    AT_ECHO_STATUS_OK,
    AT_ECHO_STATUS_FAIL,
    AT_ECHO_STATUS_ERROR,
    AT_ECHO_STATUS_EXPECT,
} at_echo_status_t;

AT_ECHO_STATUS_NONE :初始值
AT_ECHO_STATUS_OK :指令执行成功
AT_ECHO_STATUS_FAIL :指令执行失败
AT_ECHO_STATUS_ERROR :指令执行发生错误
AT_ECHO_STATUS_EXPECT:指令执行应答符合预期

AT指令解析状态与AT指令状态的关系

在AT指令应答的解析时,首先AT指令解析模块会对接收的数据进行解析,并输出AT指令解析结果,然后根据AT指令解析结果得到AT指令的执行结果,后续采用信号量的方式将AT指令的执行结果,通知AT指令执行任务。

AT指令的数据结构

AT指令的数据结构中,涉及了应答数据缓存、预期数据缓存、信号量等内容。

数据结构定义如下:

c 复制代码
typedef struct at_echo_st {
    char               *buffer;
    size_t              buffer_size;
    char               *echo_expect;
    int                 line_num;
    at_echo_status_t    status;
    size_t              __w_idx;
    int                 __is_expecting;
    k_sem_t             __expect_notify;
    k_sem_t             __status_set_notify;
    int                 __is_fuzzy_match;
} at_echo_t;

buffer :在需要获取应答数据时,用于存储应答数据;不需要获取应答数据时,设置为NULL。
buffer_size :buffer的大小,buffer为NULL时,设置为0。
echo_expect :期望应答,不需要对比期望应答时,设置为NULL。
line_num :应答数据的中数据行数。
status :AT指令的状态。
__w_idx :记录当前应答缓存区中的数据长度。
__is_expecting :是否判断期望数据。
__expect_notify :收到期望数据时用于同步的信号量。
__status_set_notify :收到应答结果(OK、FAIL、ERROR)时用于同步的信号量。
__is_fuzzy_match:是否开启期望数据模糊匹配,开启时只要应答中包含期望数据即任务收到期望数据;不开启时,应答数据需要与期望完全一致才认为收到期望数据。

总结

以上内容,就是在分析TencentOS Tiny AT指令解析源码时需要了解的数据结构,了解这个数据定义后,能够更好地理解源码的实现。下一篇内容,我们将对正式开始对源码进行分析。

相关推荐
xie_pin_an7 小时前
深入浅出 C 语言数据结构:从线性表到二叉树的实战指南
c语言·数据结构·图论
总爱写点小BUG10 小时前
打印不同的三角形(C语言)
java·c语言·算法
xie_pin_an15 小时前
C 语言排序算法全解析:从原理到实战,附性能对比
c语言·算法·排序算法
再睡一夏就好15 小时前
深入解析Linux页表:从虚拟地址到物理内存的映射艺术
linux·运维·服务器·c语言·c++·页表·缺页异常
LinHenrY122716 小时前
初识C语言(编译和链接)
c语言·开发语言·蓝桥杯
l1t16 小时前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
松涛和鸣17 小时前
34、 Linux IPC进程间通信:无名管道(Pipe) 和有名管道(FIFO)
linux·服务器·c语言·网络·数据结构·数据库
秦苒&17 小时前
【C语言】详解数据类型和变量(一):数据类型介绍、 signed和unsigned、数据类型的取值范围、变量、强制类型转换
c语言·开发语言·c++·c#
LinHenrY122717 小时前
初识C语言(文件操作)
c语言·windows·microsoft
智者知已应修善业17 小时前
【删除有序数组中的重复项 II之O(N)算法】2024-1-31
c语言·c++·经验分享·笔记·算法