QCT6085AT命令模块设计与实现(XXXX0331)6967.docx
《QCT6085AT命令模块设计与实现(XXXX0331)6967.docx》由会员分享,可在线阅读,更多相关《QCT6085AT命令模块设计与实现(XXXX0331)6967.docx(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1AT命令模块框架设计11.1ATCOP 功能划分11.2AT 命令处理流流程详解31.3AT 命令表结构构71.4命令表表项解释111.5增加一一条 AT 命令151.5.1基基本流程151.5.2增增加一条同步步AT命令范例例181.5.3增增加一条异步步AT命令范例例201.5.4主主动上报的AAT事件如何何实现实现方方法272高通AT命命令模块主要要文件功能333AT 命令令 的流程343.1同步 AT 命令令 的流程343.2异步 AT 命令令 的流程343.3主动上上报 AT 命令 的流程34 QCT60885 AT命命令模块设计计与实现1 AT命令模块框框架设计本节对 AT 命令
2、模块的的总体设计与与实现进行了了详细描述,并并对 AT 命令表结构构内容做了说说明,最后解解释了如何添添加一条 AAT 命令。1.1 ATCOP 功功能划分高通的 AT 模块,也就就是 AT 命令处理器器(ATCOOP)完成了了多种 ATT 命令的解解析、处理以以及产生和发发送命令响应应消息,同时时也处理在 AT 命令令执行过程中中的各种ATT 相关的事事件。在高通通的软件平台台中,ATCCOP 作为为数据服务模模块(DS data serviices)的的一个子任务务来实现。在在 ds_ttask 中中完成对 ddsat_ttask 的的初始化和调调用功能,所所有的AT 命令通过 TTE 和
3、 TA 之间间的串行接口口发送。收到到的 AT 命令缓存在在 DS 的消消息队列 ddsi_cmmd_q 中中,并由 dds 的消息息分发机制统统一分发给各各个子任务。ATCOP 的处理流程包括 SIO 数据预处理模块、AT 命令解析器、AT 命令处理器、AT 命令响应产生器、AT 命令表及命令处理功能模块。1通过串口设设备(SIOO)接收的ATT命令数据,首首先由SIOO数据预处理理,产生一个个null-termiinatedd命令行并由由DS分发给AT命令解析析器。2产生的nuull-teerminaated命令令行由AT命令解析析器解析,解解析器为每个个要解析的命命令产生一个个token
4、n结构,并送送到处理队列列由AT命令处理理器处理。在在AT命令处理理器被调用前前,解析器将将每个命令的的tokenn结构放入队队列中。3AT命令处处理器完成对对每个tokken结构进进行表查找,同同时将该tooken结构构从队列中移移除。如果查查找到,对应应的处理函数数被调用处理理该命令;AAT命令在命命令表中定义义,每个命令令表入口包含含对应命令执执行函数的指指针。4AT命令响响应产生器将将命令响应数数据格式化,产产生结果编码码,并将响应应数据发送给给DTE。5ATCOPP每次处理一一条AT命令行命命令,如果任任何命令行的的命令产生一一个错误,在在错误前就会会产生命令处处理的响应,同同时产生
5、一个个错误代码,不不再对该命令令进行后续处处理。1.2 AT 命令处理理流程详解 图 1 AT 命令处理流流程图详细描述了 AAT 命令模模块在处理各各类 AT 命令的具体体具体流程。1 DS_Taskk的建立,SIO 唤醒醒 rx收到数据,将将sio唤醒2初始化解析析函数dsat_proceess_siio_commmand去去掉命令行中中的AT前缀,然后后把以NULLL结尾的命命令行传给函函数dsatt_proccess_ccmd_liine来进行行后续的分析析和处理。ddsatpaar_parrse_cmmd_linne函数完成成对命令行的的解析,检查查每个AT命令的首首字符然后根根据A
6、T命令的类类型调用相应应的解析函数数。每个ATT命令名(包包括首符号,如如,$QCDMG) 以及相关的的命令参数都都被从命令行行中解析出来来,然后放到到一个tokkendatta strructurre中。命令令行中的每个个命令都产生生一个tokken sttructuure,放到到tokenn排队上等待待后续处理,此此时一个命令令行解析完成成。一般添加加或修改ATT命令时不改改动这部分代代码。3命令解析根据命令的不同同首字符,不不同的解析函函数解析ATT命令后,把把解析的信息息填充到上一一步产生的ttokenddata sstructture中,然然后返回结果果。如果结果果是OK (意味味着
7、参数、参参数个数以及及特殊处理码码speciialproocessiing coode等等都都已经存好),此此时tokeen data struccture已已放在队列中中等待AT命令处理理器(AT commaand prrocesssor)后续续处理。命令令行中的每个个命令都在队队列中放一个个tokennstruccture。例例如,exttendedd or ppropriietaryy AT 命命令调用的分分析函数是 parsee_exteended_cmd。4命令执行每个命令产生的的tokennstruccture被被函数dsaatcmdpp_queuue_tokken放入队队列中。命
8、令令解析完成后后,调用函数数 proccess_aat_cmdd_linee处理队列中中的每个tookensttructuure。从队队列中取出并并删除一个命命令tokeenstruucturee后,在命令令表中搜索该该命令。顶层命令表(ttop leevel ccommannd tabble)在文文件dsattetsittgt.c中中。顶层命令令表又指向文文件dsattctab.c 和 dsattetsicctab.cc中的多个命命令表,这些些表定义了所所支持的ATT命令集。在表中查找到该该命令后,调调用表中对应应的处理函数数执行该命令令。命令执行行后如果有返回数据据时,返回的的响应数据在在
9、函数dsaat_fmtt_respponse中中格式化。每每个tokeen结构都进进行这样的处处理。最后调调用函数dssatrspp_sendd_respponse把把命令响应送送到DTE。对于于异步 ATT 命令处理理流程与正常常 AT 命令令略有不同,在在命令预处理理、命令解析析过程都是一一样的,在命命令处理过程程中(proocess_at_cmmd_linne),如果果命令处理函函数返回 DDSAT_OOK,说明命命令处理完成成调用 dssat_fmmt_ressponsee 函数格式式化响应数据据并发送,正正常的命令处处理流程;如如果命令处理理函数返回 DSAT_ASYNCC_CMD
10、说明 当 前 命 令 是 异 步 命 令 , 此 时 函 数 proccess_aat_cmdd_linee 设 置 变 量dsatccmdp_pprocesssing_asyncc_cmd = TRUUE,表示当当前正在处理理异步命令,然然后返回,不不再进行后续续处理,直到到该命令处理理完成,函数数返回 DSSAT_OKK(未必一定定是DSATT_OK,当当返回不是 DSAT_ASYNCC_CMD 和 DSATT_ASYNNC_EVEENT 时,说说明异步命令令/事件处理完完成)。当 DS 收到到异步事件经经任务分发器器,再次调用用 dsatt_proccess_aasync_cmd 函函数
11、,在该函数中通过过查找异步事事件表 assync_eevent_tablee,调用相应应的事件处理理函数继续处处理,如果事事件处理函数数返回值不是是 DSATT_ASYNNC_CMDD 或 DSATT_ASYNNC_EVEENT,说明明异步事件处处理完成,调调用 proocess_at_cmmd_linne 继续处处理命令行的的命令。1.3 AT 命令表结结构AT 命令的处处理是由命令令表驱动的,ATCOP 实现的命令表是一个分级的表结构,主要分为:主表(master table)、子表(sub table)、命令表(command table),如图 4.2 所示。其中主表是一个二维的数组,
12、数组的行表示 AT 命令的分类,分为:基本 AT命令(basic_table)、寄存器 AT 命令(sreg_table)、扩展 AT 命令(extended_table)、厂商 AT 命令(vendor_table)四大类;数组的列表示是 ETSI 模式还是其它模式的AT 命令。图 2 ATT 命令表结结构图主表定义在 ddsati.h文件中:typedeff struuct dssati_ccmd_sttructbyte naame200;uint32 attriib;byte sppeciall;byte coompounnd;const vvoid *val_pptr;const vv
13、oid *def_llim_pttr;dsat_reesult_enum_type (*procc_funcc)( dsaat_modde_enuum_typpe,const sstructt dsatti_cmdd_struuct*,const ttokenss_struuct_tyype*,dsm_iteem_typpe* );booleann (*aborrt_funnc)( connst sttruct dsatii_cmd_strucct* ); dsatii_cmd_type;typedeff struuctconst ddsati_cmd_ttype *tablee_ptr;co
14、nst uunsignned innt *taable_ssize; dsatii_at_ccmd_taable_eentry_type;typedeff dsatti_at_cmd_ttable_entryy_typee*dsati_aat_cmdd_tablle_typpeNUMM_AT_CCMD_CAATEGORRIESNUM_OOPER_CMD_MODDES;分类表定义在文文件 dsaatetsiitgt.cc 中:const ddsati_at_cmmd_tabble_tyype att_cmd_tablee = basicc_tablle_enttries, NULLL , sre
15、g_tablee_entrries, NULL , extennded_ttable_entriies, NNULL , vendoor_tabble_enntriess, NULLL ;1基本命令表表基本命令的格式式为:其中或或者是单个字字母(A-ZZ),或者是是“&”字符接单单个字母。是一个十十进制数,可可以是一位,也也可以是多位位。最最前面的 00 会被忽略略。默认为 0。如果一一个不带的基本命命令带了,则返回回 TOO MANYPPARAMEETERS。2寄存器命令令表所有以字母“SS”开头的命命令统称为 S 寄存器器命令,格式式如下:S? SS=S 寄存器命令令名由字母“S”接上一个
16、十进制数构成,这个十进制数称为寄存器序号(parameter number)。如果寄存器序号不被识别,说明不存在该命令,返回COMMAND NOT SUPPORT。每个 S 寄存存器保存一个个字符。命令令名后面如果果接“?”表示是 RREAD 命命令,返回此此 S 寄存器器当前保存的的字符的 AASCII 码值,以 33 位十进制制数表示,位位数不足的前前面补 0;如果接接“=”表示是 SSET 命令令,将值值对应的字符符替换此 SS 寄存器保保存的字符。3扩展命令表表和厂商提供供的命令表扩展命令均由“+”开头,厂商定义的命令也是由一个特殊符号开头,例如“$”,“%”等。本文文中所实现的的命令
17、均为扩扩展命令。所所有的扩展命命令和厂商定定义命令又可可以分为两类:AActionncommaand 和 Paraameterr commmand。1)actioon commmandaction commaand 指完完成某个具体体的动作,而而不仅仅是与与 MS 本地地的参数打交交道的命令,例例如 AT+CMGS 等。actiion coommandd 可以带参参数也可以不不带。Actionn commaand 包含含 EXECCUTIONN 命令和 TEEST 命令令。(1)EXECCUTIONN 命令EXECUTIION 命令令格式如下:不带参数:带 1 个参数数:=带多个参数:=表表示
18、多个参数数,中间以“,”分隔。对于有默认值的参数,可以在命令中省略,此时以默认值代替。如果所有的参数数都省略,则则后面的“=”也一并略略去。如果不被识别,则则表示此命令令不存在,返返回 COMMMAND NOT SSUPPORRT。可识别的的前提下,如如果不能带参参数的命令带带了参数,或或者参数个数数超出定义,则则返回 TOOOMANYY PARAAMETERRS。(2)TESTT 命令TEST 命令令格式:=?如果 MS 不不能识别,返返回 COMMMAND NOT SSUPPORRT。如果 MSS 可以识别别,且命令令是不带参数数的,则返回回 OK。如果果命令带参数数,则先返回回各个参数的
19、的可取值范围围,最后再加加上 OK。2)parammeter commaandparametter coommandd 包括与 MSS 本地的参参数打交道的的命令,这些些参数有些会会影响到 aatcionncommaand 的执执行。parrameteer commmand 又分为 SEET 命令、REAAD 命令和和TEST 命令。(1)SET 命令命令格式为:带带 1 个参数数:=带多个参数:=SET 命令用用于设置参数数。表示多多个参数,中中间以“,”分隔。对对于有默认值值的参数,可可以在命令中中省略,此时时以默认值代代替。如果所所有的参数都都省略,则后面的“=”也一并略略去。如果不被识
20、别,则则表示此命令令不存在,返返回 COMMMAND NOT SSUPPORRT。可识别的的前提下,如如果不能带参参数的 命令 带了 参数 ,或者 参数 个数 超出 定义, 则返 回 TOO MANY PARAMMETERSS。(2)READD 命令命令格式:?READ 命令令用于读取参参数当前值。(3)TESTT 命令命令格式:=?如果 MS 不不能识别,返返回 COMMMAND NOT SSUPPORRT。如果 MSS 可以识别别,且命令令是不带参数数的,则返回回 OK。如果果命令带参数数,则先返回回各个参数的的可取值范围围,最后再加加上 OK。1.4 命令表项解释 下面依次介绍各各个表项
21、的含含义:1nameAT命令名,包包括需要处理理的+,$,&和终止的NUULL。如+IPRR,$QCDMMG,S6,&C,ZZ。2attittude32位的掩码,用用来指定单个个或多个命令令属性。表44.1列出了了AT命令的所所有属性,后后面给出了具具有该属性的的命令。3speciial如果有需要,就就指定处理编编码,否则就就是SPECCIAL_NNONE,指指定处理编码码定义在dssati.hh。只是用在在与外部软件件的兼容性时时。表1 AT命命令属性列表表4compoound数字命令的参数数个数或是字字符串命令的的最大长度(不不包括NULLL)。例如:S0,带带有一个数字字参数,coomp
22、ounnd=1;对对于一个命令令的字符串参参数定义大小小为30,compoound=229。5valuee_ptr指针变量,存储储参数值。如如果变量是一一个数组(具具有多个参数数的命令),该该指针指向数数组的第一个个元素。具有有LIST属性性的命令,存存储在*vaal_ptrr中的值不是是真正的参数数值,而是数数组listt_v指向的的地址。对于于带有MIXXED_PAARAM属性性的命令,指指针指向dssat_miixed_pparam_val_ttype,这这是一个字符符串或是数字字值的联合体体unionn类型。数组组的成员是字字符串还是数数值依赖于对对应数组成员员的属性deef_limm
23、_ptr。该该指针指向的的变量可以是是下面的类型型之一:1)dsat_num_iitem_ttype带有有数字参数或或是LISTT属性的命令令;2)dsat_strinng_iteem_typpe带有字符符串参数的命命令;3)dsat_mixedd_paraam_vall_typee带有混合类类型参数的命命令,参数可可以是规定值值的字符串,某某一范围的数数字,或是限限定长度的字字符串;4)NULL表示示命令没有参参数。6defauult liimit pptr定义默认值和允允许范围的参参数该指针的变量可可以是下面类类型中的一个个:1)dflm_type带带有CONFFIG属性的的命令;2)de
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QCT6085AT 命令 模块 设计 实现 XXXX0331 6967
限制150内