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指令多变本文只是

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

(0)
上一篇 2022年3月31日
下一篇 2022年3月31日

相关推荐