资源简介
AT命令简易解析
AT命令的应用场合很多,也是应用最为通用的命令。而AT命令并不像通信协议特定的数据帧格式,解析AT命令需要匹配每个字符。AT命令一般有三种状态:查询、执行、设置,根据这三种状态,本文将使用一种简易的方法解析AT命令
AT命令的应用场合很多,也是应用最为通用的命令。而AT命令并不像通信协议特定的数据帧格式,解析AT命令需要匹配每个字符。AT命令一般有三种状态:查询、执行、设置,根据这三种状态,本文将使用一种简易的方法解析AT命令
代码片段和文件信息
#define QUERY_CMD 0x01 /* 查询命令 */
#define EXECUTE_CMD 0x02 /* 执行命令 */
#define SET_CMD 0x03 /* 设置命令 */
tyepdef struct {
char *cmd; /* AT指令 */
int (*deal_func)(int opt int argc char *argv[]);
}at_cmd_t;
int deal_uart_func(int argc char *argv[]);
at_cmd_t at_table[] = {
{“AT+UART?“ deal_uart_func}
};
#define AT_TABLE_SIZE (sizeof(at_table) / sizeof(at_cmd_t))
/*
* @brief 字符串拆分解析处理
AT命令中的多个参数进行字符串参数拆分处理,比如AT+UART=9600081,
最后拆分为9600、0、8、1字符串存入argv[]中
* @return 检测归类的参数个数
**/
int string_split(char *strp uint32_t strsize char ch char *argv[] uint32_t argcM )
{
int ch_index = 0;
int argc_index = 0;
uint8_t spliflag = 0;
if ((!strsize) || (!argcM)) return 0;
argv[argc_index++] = &strp[ch_index];
for (ch_index = 0; ch_index < strsize; ch_index++) {
if (strp[ch_index] == ‘ch‘) {
strp[ch_index] = ‘\0‘;
#if 0 /* 处理连续出现ch情况 */
if (1 == splitflag) {
argv[argc_index++] = &strp[ch_index];
}
#endif
splitflag = 1;
} else if (splitflag == 1) {
splitflag = 0;
argv[argc_index++] = &strp[ch_index];
if (argc_index >= argcM) break;
} else {
splitflag = 0;
}
}
return argc_index;
}
#define respond_error() printf(“ERROR\r\n“)
#define respond_ok() printf(“OK\r\n“);
/*
将接收到AT命令跟列表中的AT指令进行匹对解析,归类划分为查询类型、执行类型、设置类型。
查询类型:命令后缀为‘?’+‘\r’+’\n’,例如:AT+UART?\r\n.
执行类型:命令后缀只为’\r’+’\n’,例如:AT+UART\r\n.
设置类型:命令‘=’后有多个参数,并以’\r’+’\n’结尾,例如:AT+UART=9600081\r\n
*/
int at_cmd_parse(uint8_t *pdata uint16_t size)
{
int ret = -1;
char *ptr = NULL;
int argc = ARGC_LIMIT;
uint16_t offset = 0;
int index = 0;
char *argv[ARGC_LIMIT] = { (char *)0 };
if (strstr((const char *)pdata “AT“) == NULL) goto at_end;
for (index = 0; in
- 上一篇:聚类技术---复杂网络社团检测
- 下一篇:谷粒商场-2020年最新版学习资料.txt
相关资源
- SpringBoot+H2+mybatis-plus59130
- Navicat Premium 15汉化包.zip55438
- Rational Rose Common破解文件
- scratch 第1课 翻跟斗的小猫(入门)
- stm32f407上的两个can发送和接收例程
- Wolfram Mathematica 矩阵初等变换函数(
- scratch3.0 源程序(说相声)
- STM32 led 时钟
- STM32 2.4G通信例程
- Scratch 飞机大战.sb3
- Scratch 吃豆人追踪者.sb3
- Scratch 变脸(将人物图片变成各种各样
- 直流无刷电机方波驱动 stm32 例程代码
- The Secret Path 3D 3D魔方迷宫[源码][scra
- scratch垃圾分类源码(最终版本).sb
- STM32中文资料
- CC2540、CC2541透传模块-AT指令手册
- STM32蓝牙和串口程序
- Eeupdate.exe
- The direction of synaptic plasticity mediated
- Reparatory Effects of Nicotine on NMDA Recepto
- Apolipoprotein E4 Impairs in vivo Hippocampal
- Histamine excites rat lateral vestibular nucle
- 电脑卡西欧计算器 fx-991CN X Emulator19中
- Fabrication and all-optical poling characteris
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- Crystal Impact Match!2.1.3 试用延长
- Xpath生成器,自动生成可用的Xpath。
评论
共有 条评论