收藏 分享(赏)

O3_AT指令及响应.ppt

上传人:hwpkd79526 文档编号:8434121 上传时间:2019-06-26 格式:PPT 页数:27 大小:166.50KB
下载 相关 举报
O3_AT指令及响应.ppt_第1页
第1页 / 共27页
O3_AT指令及响应.ppt_第2页
第2页 / 共27页
O3_AT指令及响应.ppt_第3页
第3页 / 共27页
O3_AT指令及响应.ppt_第4页
第4页 / 共27页
O3_AT指令及响应.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、第3讲 AT指令及响应,3.0 AT响应概念及类型3.1 主动响应捕获服务3.2 发送AT响应(嵌入式应用程序向外部程序、端口发) 3.3 模拟发送AT指令并捕获相关响应3.4 自定义指令及自定义AT响应3.5 小结 以嵌入式编程方式处理响应:收主动响应对外发响应指令:模拟端口(物理、逻辑(含app)处理AT指令自定义AT指令,内容结构,1.目标 2.简介 3.相关头文件 4.相关事件 5.相关函数(1)函数原型(2)参数(3)返回值(4)相关事件(5)回调函数 6.举例(1)程序框图(2)代码 7.小结,3 .0 AT指令响应,3.0.0目标学习响应概念及类型 .0.1 AT响应及类型AT响

2、应: Wcpu执行AT指令,产生相应的输出即响应.(ok指示信息错误信息)响应类型:最终响应RSP主动响应UNS中间响应INT,3 .1主动响应捕获服务,3.1.1主动响应捕获服务申请捕获 adl_atUnSoSubcribe( )释放捕获 adl_atUnSoUnSubcribe( ),3 .1主动响应捕获服务,3.1.2申请主动响应捕获服务 简介: OS提供API捕获主动响应信息服务.利用此功能可实现指定响应出现时执行指定操作的功能.头文件: adl_UnSoHandler.h相关事件 :隐式事件,即主动响应包含指定信息相关函数函数原型 S16adl_atUnSoSubcribe(ASCI

3、I *UnSostr ,adl_atUnSoHandler_t UnSohdl) 回调函数UnSohdl ,每次指定主动响应事件发生, 回调函数立即执行,响应IDs或实际字符响应作为参数被传递过来.函数体完成用户需要的功能.参数 UnSoStr :希望捕获的信息或其变量名.如”+WIND:4”UnSohdl: 回调函数,每次捕获到UnSostr ,立即调用此函数.返回值OK:服务申请成功ERROR(-1) :服务申请出错,3 .1主动响应捕获服务(续),3.1.2申请主动响应捕获服务(续) 返回值OK:服务申请成功ERROR(-1) :服务申请出错 注意:每次出现指定主动响应信息,回调函数都会

4、执行,除非撤销服务申请。对一个主动响应可以多次申请捕获服务,即一个主动响应可以有多个回调函数进行处理。只有主动响应可以申请捕获服务。,3 .1主动响应捕获服务(续),3.1.2申请主动响应捕获服务(续) UnSoStr 预定义响应IDs集ADL_STR_NO_STRING, / Unknown stringADL_STR_OK, / “OK“ADL_STR_BUSY, / “BUSY“ADL_STR_NO_ANSWER, / “NO ANSWER“ADL_STR_NO_CARRIER, / “NO CARRIER“ADL_STR_CONNECT, / “CONNECT“ADL_STR_ERRO

5、R, / “ERROR“ADL_STR_CME_ERROR, / “+CME ERROR:“ADL_STR_CMS_ERROR, / “+CMS ERROR:“ADL_STR_CPIN, / “+CPIN:“ADL_STR_LAST_TERMINAL, / All terminal responses are before this lineADL_STR_RING = ADL_STR_LAST_TERMINAL, / “RING“ADL_STR_WIND, / “+WIND:“ADL_STR_CRING, / “+CRING:“ADL_STR_CPINC, / “+CPINC:“ADL_ST

6、R_WSTR, / “+WSTR:“ADL_STR_LAST / Last string ID,3 .1主动响应捕获服务(续),3.1.2申请主动响应捕获服务(续) 回调函数typedef bool (*adl_atUnSohandler_t )(adl_atUnsolicited_t *)(自定义数据类型:函数类型,类似 Int)如:adl_atUnSohandler_t UnSohdl 则函数形式为: bool UnSohdl(adl_atUsolicited_t *) 参数参数是adl_atUsolicited_t类型结构体,此结构体保存响应信息并传递到回调函数,Typdef struc

7、t adl_strID_e RspID;u16 StrLength;ascii StrData1; adl_atunsolicited_t;返回值TURE :返回TURE意味用户希望将响应信息转发到外部程序(TE、HyperTerminal) FALSE:响应信息不向外转发,3 .1主动响应捕获服务(续),3.1.3撤销主动响应捕获服务简介: OS提供API撤销主动响应信息服务头文件: adl_at.h相关事件 :无函数原型 S16adl_atUnSoUnSubcribe(ASCII *UnSostr ,adl_atUnSoHandler_t UnSohdl)回调函数:无参数 UnSoStr

8、:希望撤销捕获的信息或其变量名UnSohdl: 撤销的回调函数名返回值OK:服务撤销成功ERROR(-1) :服务撤销出错,3 .1主动响应捕获服务(续),3.1.4主动响应捕获服务实例#include “adl_at.h“ const u16 wm_apmCustomStackSize = 4096; bool wind4_handler (adl_atUnsolicited_t *paras)/回调函数 TRACE(1,“Inside wind4 handler“); TRACE(1, “rn+WIND:4 received“); adl_atUnSoUnSubscribe(“+WIND:

9、 4”,wind4_handler);/撤销捕获 return FALSE; ,void adl_main ( adl_InitType_e InitType )/入口函数 TRACE ( 1, “Embedded Application : Main“ ); if (adl_atUnSoSubscribe(“+WIND: 4”,wind4_handler)!=0)/申请捕获 TRACE(1,“Error in subscribing +WIND: 4“); else TRACE(1,“Successfully subscribed +WIND: 4“); ,1.申请捕获 2.进入回调 3撤销

10、捕获,3 .2发送AT响应,3.2.0 目标学习响应类型学习发送各种类型AT响应 3.2.1相关APIs32 adl_atSendResponse ()s32 adl_atSendStdResponse ()s32 adl_atSendStdResponseExt () void adl_atSendResponsePort()void adl_atSendStdResponsePort ()void adl_atSendStdResponseExtPort() 3.2.2头文件adl_RspHandler.hadl_Str.h / 定义了 adl_strId_eadl_port.h /定义了

11、adl_port_e 3.2.3 AT响应类型(U16 Type)ADL_AT_RSP 0x01 /最终响应ADL_AT_UNS 0x02 /主动响应ADL_AT_INT 0x04 /中间响应,3 .2发送AT响应(续),3.2.4相关函数功能:嵌入式应用程序向外部应用(TE、HT)发送AT响应s32 adl_atSendResponse ( u16 Type, ascii *Text ) /发送字符s32 adl_atSendStdResponse ( u16 Type, adl_strID_e RspID ) /发送标准响应s32 adl_atSendStdResponseExt ( u1

12、6 Type, adl_strID_e RspID, u32 arg )/发送带参数标准响应 功能:嵌入式应用程序向外部端口(物理端口、虚拟端口)发送响应void adl_atSendResponsePort(u16 Type, adl_port_e Port, ascii *String) /向指定端口发送字符 Void adl_atSendStdResponsePort (u16 Type, adl_port_e Port, adl_strID_e RspID ) /向指定端口发送标准响应 Void adl_atSendStdResponseExtPort(u16 Type, adl_po

13、rt_e Port, adl_strID_e RspID, u32 arg ) /向指定端口发送带参数标准响应 adl_Str.h / 定义了 adl_strId_e adl_port.h /定义了adl_port_e,3 .2发送AT响应(续),3.2.5发送响应实例#include “adl_at.h“ const u16 wm_apmCustomStackSize = 4096;void adl_main ( adl_InitType_e InitType ) adl_atSendResponse(ADL_AT_UNS,“rnUnsolicited Responsesrn“); adl_

14、atSendStdResponse(ADL_AT_UNS,ADL_STR_BUSY); adl_atSendStdResponseExt(ADL_AT_UNS,ADL_STR_WIND,4); adl_atSendResponse(ADL_AT_INT,“rnIntermediate responsern“); adl_atSendStdResponse(ADL_AT_INT,ADL_STR_BUSY); adl_atSendStdResponseExt(ADL_AT_INT,ADL_STR_WIND,20); adl_atSendResponse(ADL_AT_RSP,“rnFinal Re

15、sponsesrn“); adl_atSendStdResponse(ADL_AT_RSP,ADL_STR_BUSY); adl_atSendStdResponseExt(ADL_AT_RSP,ADL_STR_WIND,4); adl_atSendResponsePort (ADL_AT_RSP, ADL_PORT_UART1, ”rnRsp to a port”); ,3 .3模拟发送AT指令,3.2.1 目标理解外部程序、嵌入式程序、Fireware的关系学习在嵌入式程序中发送AT指令并接收响应 3.2.2 外部程序(TE、HT)、嵌入式程序、Firmware关系3.2.3头文件adl_a

16、t.h,3 .3模拟发送AT指令(续),3.3.4相关函数函数集:Void adl_atCmdCreate () /模拟发送AT指令,并捕获响应Void adl_atCmdSendTxt() /模拟发送中间文本功能:模拟(UART1、BT或嵌入式程序自己)发送AT指令并捕获AT响应相关事件:用户在参数,指定捕获响应事件 函数原型(1)Void adl_atCmdCreate (ascii *CmdStr,u16 RspFlag,adl_atRspHandler_t RSPhdl,NULL) ;回调函数:Rsphdl, 一旦用户产生指定,响应发生捕获事件调用此函数.用户可在函数体中处理响应消息参

17、数CmdStr:欲发送AT指令字符串,自动增加结束符CR(r)RspFlag:(模拟)嵌入式程序响应向外部发送标志 :TRUE 发送,FALSE 不发送模拟UART1、端口:此参数可用宏ADL_AT_PORT_TYPE设置如:ADL_AT_PORT_TYPE(UART1,TURE) 模拟UART1 发送AT且 响应向外部发送,3 .3模拟发送AT指令(续),3.3.4相关函数(续)函数原型(1) Void adl_atCmdCreate (ascii *CmdStr,u16 RspFlag,adl_atRspHandler_t RSPhdl,NULL) ; 参数Rsphdl:回调函数,产生指定

18、响应,发生捕获事件,调用此函数.原型:Typedef bool(*adl_atRspHandler_t)(adl_atReponse_t *)参数: adl_atRsponse_t *传递进入回调函数响应内容Typedef struct adl_strID_e RspID;/响应ID,如果接收的标准响应U16 StLength;/响应的数据的长度ascii StrData1/响应数据的指针adl_atResponse_t返回值:用户设置返回值.TRUE:响应向外部发送.FALSE不发,NULL用户指定标准或中间响应事件列表,以Null结束.如果参数是 “*”,NULL 则所有响应均会产生响应事

19、件,调用回调. NULL,NULL 则不产生响应事件,不调用回调函数,3 .3模拟发送AT指令(续),3.3.4相关函数(续)函数原型(2) Void adl_atCmdSendTxt (adl_port_e Port,ascii *Text) ; 功能:为需要发送中间信息的指令(如AT+CMGS)发送中间信息. 文本尾部自动添加”Ctrl-Z”(x1A) 回调函数: 此函数引起响应也产生捕获事件,也调用函数(1)的回调函数 参数Port: 需要接收文本的端口,可以是物理端口或虚拟端口Text:需要发送的文本内容.文本尾部自动添加”Ctrl-Z”(x1A)返回值: OK:成功,表示文本将被发送

20、到adl_atCmdCreate()使用的句柄负数:发送错误ADL_RET_ERR_PARAM :有空字符ADL_RET_ERR_UNKNOWN_HDL:端口无效ADL_RET_ERR_BAD_STATE:当前句柄(指令)不需中间文本,3 .3模拟发送AT指令(续),3.3.5模拟发送AT指令实例功能:利用模拟发送AT指令发短消息命令,中间文本,发送成功则向外部发发成功! 三个函数功能 adl_main() /入口函数,申请+WIND:4捕获服务,捕获事件产生则调用回调函数 wind_4_handler() /回调函数,模拟发送AT+CMGS,任何响应事件产生调用回调函数 CMGS_Handl

21、er()/回调函数,发送中间文本;成功则向外部程序发送成功信息 执行流程: 函数-产生”+WIND:4”捕获事件调用回调函数-产生”rn”捕获事件调用回调函数Part1-产生ADL_STR_OK事件-调用回调函数part2,3 .3模拟发送AT指令(续),3.3.5模拟发送AT指令实例(续)bool CMGS_Handler (adl_atResponse_t *paras) /PART1/* If ”rn” received, send text */if (!wm_strncmp (paras-StrData, ”rn”, 3)/* Send the intermediate text *

22、/adl_atCmdSendText(ADL_PORT_UART1, “This is a test message” ); /PART2if ( paras-RspId = ADL_STR_OK )/* Send a response to the user */adl_atSendResponsePort (ADL_AT_RSP, ADL_PORT_UART1, ”rnSMS sent succesfully”); return TRUE; ,3 .3模拟发送AT指令(续),3.3.5模拟发送AT指令实例(续)bool wind_4_handler(adl_atUnsolicited_t

23、* paras) s8 sRet=0;TRACE(1,“Inside wind 4 handler“);adl_atCmdCreate(“AT+CMGS=123456780”, ADL_AT_PORT_TYPE(ADL_PORT_UART1, TRUE), CMGS_Handler , “*”, NULL)/模拟UART1发短消息,过程UART1可视,捕获所有响应return (0);/允许”+WIND:4”主动响应信息对外转发 void adl_main ( adl_InitType_e InitType ) TRACE(1,“Inside adl_main“);adl_atUnSoSubs

24、cribe(“+WIND: 4“,wind_4_handler); ,3 .4自定义AT指令服务,3.4.1目标学习自定义AT指令服务 3.4.2功能自定义AT指令,可以向标准AT指令一样,外部应用程序输入该指令后,执行响应的回调函数. 3.4.3相关函数定义AT指令: adl_atCmdSubscribe()撤销定义: adl_atCmdUnSubscribe()注意: AT指令名任意自定义,当指令名与标准指令重复时执行自定义指令.自定义AT指令只有在嵌入式应用程序执行时才有效. 自定义AT指令最后(回调函数)必须输出一条最终响应”AT_STR_OK或AT_STR_ERROR或其他”,否则端

25、口将拒绝其他任何内部外部AT指令,3 .4自定义AT指令服务,3.4.4自定义AT指令函数:adl_atCmdSubscribe()库文件:adl_at.h, adl_Cmdhandler.h事件: 捕获到外部输入自定义AT指令 函数原型: s16 adl_atCmdSubscribe(ascii *Cmdstr ,adl_at_CmdHandler_t Cmdhdl,u16 Options) 参数:Cmdstr: 自定义AT指令名称Cmdhdl:回调函数,外部输入自定义AT事件发生,调用之Options:自定义AT指令类型,0x0100类型时参数个数允许范围ADL_CMD_TYPE_PARA

26、 0x0100 /AT+CMD=x,yADL_CMD_TYPE_TEST 0x0200 /AT+CMD=? ADL_CMD_TYPE_READ 0x0400 /AT+CMD?ADL_CMD_TYPE_ACT 0x0800 /AT+CMDADL_CMD_TYPE_ROOT 0x1000 /特定字符开头的类型Options可以是以上一种类型或几种类型的”或”运算如:参数0x1ba= ADL_CMD_TYPE_PARA|0x00a|0x0b0/设置参数类型,允许最少a个最多b个数参数返回值:OK成功,ERROR(-1)失败,3 .4自定义AT指令服务(续),3.4.4自定义AT指令(续) 函数原型:

27、 s16 adl_atCmdSubscribe(ascii *Cmdstr ,adl_at_CmdHandler_t Cmdhdl,u16 Options) 回调函数:Cmdhdl原型:typedef void (*adl_at_CmdHandler_t)(adl_at_CmdPreparser_t*)参数: 自定义AT事件发生后,传递到回调函数的数据typedefu16 Str_length;/自定义AT指令字符长度u16 Type;/指令类型(5种之一) wm_lst_paralist;/ADL_CMD_TYPE_PARA类型参数列表u16 Nbpara;/ ADL_CMD_TYPE_PA

28、RA类型参数范围ascii Strdata1;/自定义AT指令字符串指针adl_atPort_e Port;/源端口adl_at_CmdPreparser_t,3 .4自定义AT指令服务(续),3.4.4自定义AT指令(续)回调函数:typedef void (*adl_at_CmdHandler_t)(adl_at_CmdPreparser_t*)typedefu16 Str_length;/自定义AT指令字符长度u16 Type;/指令类型(5种之一) wm_lst paralist;/ADL_CMD_TYPE_PARA类型参数列表 u16 Nbpara;/ ADL_CMD_TYPE_PA

29、RA类型有效参数数目ascii Strdata1;/指向自定义AT指令字符串指针adl_atPort_e Port;/源端口adl_at_CmdPreparser_tparalist:传递进来的ADL_CMD_TYPE_PARA参数可使用ADL_GET_PARAM(_P_,_i_)宏返回参数字符串指针_p_:adl_at_CmdPreparser_t参数指针_i_:参数索引序号(从0开始),3 .4自定义AT指令服务,3.4.5撤销自定义AT指令函数:adl_atCmdUnSubscribe()库文件:adl_at.h, adl_Cmdhandler.h事件: 无 函数原型: s16 adl_

30、atCmdUnSubscribe(ascii *Cmdstr ,adl_at_CmdHandler_t Cmdhdl)参数:Cmdstr: 自定义AT指令名称Cmdhdl:回调函数,自定义时指定函数返回值:OK成功,ERROR 指令没发现,3 .4自定义AT指令服务,3.4.6自定义AT指令实例 #include “adl_globle.h“ const u16 wm_apmCustomStackSize = 1024; void command_handler(adl_atCmdPreParser_t *paras);void adl_main ( adl_InitType_e InitTy

31、pe ) TRACE(1,“Inside adl_main“);adl_atCmdSubscribe(“AT+TEST“, (adl_atCmdHandler_t)command_handler, ADL_CMD_TYPE_TEST|ADL_CMD_TYPE_READ|ADL_CMD_TYPE_ACT|ADL_CMD_TYPE_PARA|0x0011); ,3 .4自定义AT指令服务,3.4.6自定义AT指令实例(续) void command_handler(adl_atCmdPreParser_t *paras) ascii buffer35;switch (paras-Type)case

32、 ADL_CMD_TYPE_READ:adl_atSendResponse(ADL_AT_RSP,“rnIssued AT+TEST?rn“);break;case ADL_CMD_TYPE_TEST:adl_atSendResponse(ADL_AT_RSP,“rnIssued AT+TEST=?rn“);break;case ADL_CMD_TYPE_ACT:adl_atSendResponse(ADL_AT_RSP,“rnIssued AT+TESTrn“);break;case ADL_CMD_TYPE_PARA: wm_strcpy(buffer,“rnIssued AT+TEST

33、= “);wm_strcat(buffer,ADL_GET_PARAM(paras,0);wm_strcat(buffer,“rn“);adl_atSendResponse(ADL_AT_RSP,buffer);break;adl_atSendResponse(ADL_AT_RSP,“rnOKrn“); ,3.5 小结,1 主动响应捕获服务adl_atUnSoSubscrible()adl_atUnSoUnSubscrible()2 发送AT响应(6) adl_atSendResponse()adl_atSendStdResponseExtPort()3 模拟发送AT指令并捕获相关响应adl_atCmdCreate()adl_atCmdSentText()4 自定义指令及自定义AT响应adl_atCmdSubscrible()adl_atCmdUnSubscrible(),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报