at表示方位的用法(编程之通讯解析框架延伸解析)

说明前面讲到用通讯解析框架一般mcu或者其他的嵌入式系统或多或少涉及到通讯不光有各种各样的字节指令还有字符串指令比如本文要讲的AT指令很多模块都涉及使用at指令作为指令集去做命令比如电话模块wifi模块蓝牙模块等等一般at指令解析比较繁琐如果用到统一的框架做解析呢注通讯解析框架的介绍可

at表示方位的用法(编程之通讯解析框架延伸解析)

说明前面讲到用通讯解析框架一般mcu或者其他的嵌入式系统或多或少涉及到通讯不光有各种各样的字节指令还有字符串指令比如本文要讲的AT指令很多模块都涉及使用at指令作为指令集去做命令比如电话模块wifi模块蓝牙模块等等一般at指令解析比较繁琐如果用到统一的框架做解析呢

注通讯解析框架的介绍可以看之前我写的文章内容这里不再赘述

下面我们着重讲解使用通讯解析框架解析at指令

以汉枫wifi模块为例

h框架文件

typedefstruct

U8Readbuf读内容

U16BufLen读内容长度

U8isUp主动上传还是下载

intYALWifiCmdPos其他命令位置

YALWifiCmdPM读数据地址

typedefstruct

constcharBufat内容

U8HandleYALWifiCmdPMbuf长度

U16GetID获取的CMDId

YALWifiCMDHandle读数据框架结构

enum

YALWIFICMDGETENTERAT1进入AT

YALWIFICMDGETANAENTERAT应答进入AT

YALWIFICMDSETCLOSESHOWAT关闭回显

C内容文件

U8GetYALWIFIEnterAtYALWifiCmdPMCmdPm

U8GetYALWIFIAckEnterAtYALWifiCmdPMCmdPm

U8GetYALWIFICloseShowAtYALWifiCmdPMCmdPm

U8YALWIFILINKENDr结尾

获取指令

constU8YALWIFIREQAT

constYALYALWifiCMDHandleYALWIFICmdhandle

GetYALWIFIEnterAtYALWIFICMDGETENTERAT进入AT

aGetYALWIFIAckEnterAtYALWIFICMDGETANAENTERAT应答AT

EGetYALWIFICloseShowAtYALWIFICMDSETCLOSESHOWAT关闭回显

intYALWifiCMDfindCmdPosU16Cmd

inti

U8CmdCtsizeofYALWIFICmdhandlesizeofYALWIFICmdhandle0

fori0iisGet

returnYALWIFIReadCMDCmdPmYALWifiCmdPos

else

ifStrcmpCmdPmReadbufU8a1

err0

returnerr

函数名称GetYALWIFIMacID

描述获取WiFi版本号和MACID

输入形参

返回值无

U8GetYALWIFIAckEnterAtYALWifiCmdPMCmdPm

u8err1

ifCmdPmisGet

returnYALWIFIReadCMDCmdPmYALWifiCmdPos

else

ifYALWifiCmdisOkCmdPmReadbuf

SetAtMode1

err0

returnerr

函数名称GetYALWIFICloseShowAt

描述关闭回显

输入形参

返回值无

U8GetYALWIFICloseShowAtYALWifiCmdPMCmdPm

u8err1

ifCmdPmisGet

U8infostr10

转义字符处理

memsetinfostr0sizeofinfostr

sprintfscharinfostrsizeofinfostroffsYALWIFILINKEND

strcatcharinfostrcharYALWIFILINKEND

returnYALWIFIReadWriteCMDCmdPmYALWifiCmdPosinfostr

else

ifYALWifiCmdisOkCmdPmReadbuf

err0

returnerr

函数名称YALWIFIReadCMD

描述读WiFi指令

输入形参YALWifiCmdPos列表位置

返回值0成功1失败

u8YALWIFIReadCMDintYALWifiCmdPos

ifCheckCmdPosYALWifiCmdPosreturn0

memcpySENDBUFYALWIFICmdhandleYALWifiCmdPosBufstrlencharYALWIFICmdhandleYALWifiCmdPosBuf

USART1SendStringSENDBUFstrlencharSENDBUF

return0

intYALWifiCMDfindCmdPosU16Cmd

inti

U8CmdCtsizeofYALWIFICmdhandlesizeofYALWIFICmdhandle0

fori0iCmdCti

ifCmdYALWIFICmdhandleiGetIDreturni

return1

解析at指令将字符串数据内容解析到该函数中

U8YALAnaDatarevcmdU8BufU16BufLen

intYALWifiCmdPos

YALWifiCmdPMcmdPm

YALWifiCmdPosYALWifiCMDfindCmdPosGetLastCmdId上一次请求的内容

ifCheckCmdPosYALWifiCmdPosreturn1

cmdPmReadbufBuf

cmdPmBufLenBufLen

cmdPmYALWifiCmdPosYALWifiCmdPos

cmdPmisGet0

returnYALWIFICmdhandleYALWifiCmdPosHandlecmdPm回调函数

发送cmd消息通过CMDId请求对应的at指令

voidYALWifiCMDSetCmdU16Cmd

intWifiCmdPos

YALWifiCmdPMcmdPm

cmdPmReadbufSendBuf

cmdPmBufLen0

cmdPmisGet1

WifiCmdPosWifiCMDfindCmdPosCmd

ifWifiCmdPos1return

ifCheckCmdPosWifiCmdPosreturn

cmdPmWifiCmdPosWifiCmdPos

YALWIFICmdhandleWifiCmdPosHandlecmdPm

SetLastCmdIdYALWIFICmdhandleWifiCmdPosGetID

总结通过框架将AT指令的头尾等公共部分作为框架一部分可变的内容部分作为识别的内容实体用于解析和发送比如作为识别码ATE中的E作为识别码

识别解析的内容通过各种的handle回调处理当发送一条AT指令对应的回一条AT指令解析和发送对应LastCmdId的关系去解对应的回应的AT指令内容当然AT指令多变本文只是

抛砖引玉可相互交流欢迎评论转发加关注

免责声明:本站部分内容和图片转载自互联网,该文观点仅代表原作者本人,文章内容仅供参考,不构成建议,也不代表本站赞同其观点。详情参阅本站的“免责声明”栏目。

相关内容

推荐阅读

发表评论

版权声明:本站部分内容和图片源于互联网,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。转载文章版权属于原作者所有,若有权属异议及违法违规内容请联系我们删稿。详情参阅本站“版权声明”及“举报投诉”栏目。

猜你喜欢