您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > QCT6085AT命令模块设计与实现(XXXX0331)
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主动上报的AT事件如何实现实现方法.................................................272高通AT命令模块主要文件功能........................................................................333AT命令的流程...............................................................................................343.1同步AT命令的流程................................................................................343.2异步AT命令的流程................................................................................343.3主动上报AT命令的流程.........................................................................34QCT6085AT命令模块设计与实现1AT命令模块框架设计本节对AT命令模块的总体设计与实现进行了详细描述,并对AT命令表结构内容做了说明,最后解释了如何添加一条AT命令。1.1ATCOP功能划分高通的AT模块,也就是AT命令处理器(ATCOP)完成了多种AT命令的解析、处理以及产生和发送命令响应消息,同时也处理在AT命令执行过程中的各种AT相关的事件。在高通的软件平台中,ATCOP作为数据服务模块(DSdataservices)的一个子任务来实现。在ds_task中完成对dsat_task的初始化和调用功能,所有的AT命令通过TE和TA之间的串行接口发送。收到的AT命令缓存在DS的消息队列dsi_cmd_q中,并由ds的消息分发机制统一分发给各个子任务。ATCOP的处理流程包括SIO数据预处理模块、AT命令解析器、AT命令处理器、AT命令响应产生器、AT命令表及命令处理功能模块。1.通过串口设备(SIO)接收的AT命令数据,首先由SIO数据预处理,产生一个null-terminated命令行并由DS分发给AT命令解析器。2.产生的null-terminated命令行由AT命令解析器解析,解析器为每个要解析的命令产生一个token结构,并送到处理队列由AT命令处理器处理。在AT命令处理器被调用前,解析器将每个命令的token结构放入队列中。3.AT命令处理器完成对每个token结构进行表查找,同时将该token结构从队列中移除。如果查找到,对应的处理函数被调用处理该命令;AT命令在命令表中定义,每个命令表入口包含对应命令执行函数的指针。4.AT命令响应产生器将命令响应数据格式化,产生结果编码,并将响应数据发送给DTE。5.ATCOP每次处理一条AT命令行命令,如果任何命令行的命令产生一个错误,在错误前就会产生命令处理的响应,同时产生一个错误代码,不再对该命令进行后续处理。1.2AT命令处理流程详解图1AT命令处理流程图详细描述了AT命令模块在处理各类AT命令的具体具体流程。1.DS_Task的建立,SIO唤醒rx收到数据,将sio唤醒2.初始化解析函数dsat_process_sio_command去掉命令行中的AT前缀,然后把以NULL结尾的命令行传给函数dsat_process_cmd_line来进行后续的分析和处理。dsatpar_parse_cmd_line函数完成对命令行的解析,检查每个AT命令的首字符然后根据AT命令的类型调用相应的解析函数。每个AT命令名(包括首符号,如,$QCDMG)以及相关的命令参数都被从命令行中解析出来,然后放到一个tokendatastructure中。命令行中的每个命令都产生一个tokenstructure,放到token排队上等待后续处理,此时一个命令行解析完成。一般添加或修改AT命令时不改动这部分代码。3.命令解析根据命令的不同首字符,不同的解析函数解析AT命令后,把解析的信息填充到上一步产生的tokendatastructure中,然后返回结果。如果结果是OK(意味着参数、参数个数以及特殊处理码specialprocessingcode等等都已经存好),此时tokendatastructure已放在队列中等待AT命令处理器(ATcommandprocessor)后续处理。命令行中的每个命令都在队列中放一个tokenstructure。例如,extendedorproprietaryAT命令调用的分析函数是parse_extended_cmd。4.命令执行每个命令产生的tokenstructure被函数dsatcmdp_queue_token放入队列中。命令解析完成后,调用函数process_at_cmd_line处理队列中的每个tokenstructure。从队列中取出并删除一个命令tokenstructure后,在命令表中搜索该命令。顶层命令表(toplevelcommandtable)在文件dsatetsitgt.c中。顶层命令表又指向文件dsatctab.c和dsatetsictab.c中的多个命令表,这些表定义了所支持的AT命令集。在表中查找到该命令后,调用表中对应的处理函数执行该命令。命令执行后如果有返回数据时,返回的响应数据在函数dsat_fmt_response中格式化。每个token结构都进行这样的处理。最后调用函数dsatrsp_send_response把命令响应送到DTE。对于异步AT命令处理流程与正常AT命令略有不同,在命令预处理、命令解析过程都是一样的,在命令处理过程中(process_at_cmd_line),如果命令处理函数返回DSAT_OK,说明命令处理完成调用dsat_fmt_response函数格式化响应数据并发送,正常的命令处理流程;如果命令处理函数返回DSAT_ASYNC_CMD说明当前命令是异步命令,此时函数process_at_cmd_line设置变量dsatcmdp_processing_async_cmd=TRUE,表示当前正在处理异步命令,然后返回,不再进行后续处理,直到该命令处理完成,函数返回DSAT_OK(未必一定是DSAT_OK,当返回不是DSAT_ASYNC_CMD和DSAT_ASYNC_EVENT时,说明异步命令/事件处理完成)。当DS收到异步事件经任务分发器,再次调用dsat_process_async_cmd函数,在该函数中通过查找异步事件表async_event_table,调用相应的事件处理函数继续处理,如果事件处理函数返回值不是DSAT_ASYNC_CMD或DSAT_ASYNC_EVENT,说明异步事件处理完成,调用process_at_cmd_line继续处理命令行的命令。1.3AT命令表结构AT命令的处理是由命令表驱动的,ATCOP实现的命令表是一个分级的表结构,主要分为:主表(mastertable)、子表(subtable)、命令表(commandtable),如图4.2所示。其中主表是一个二维的数组,数组的行表示AT命令的分类,分为:基本AT命令(basic_table)、寄存器AT命令(sreg_table)、扩展AT命令(extended_table)、厂商AT命令(vendor_table)四大类;数组的列表示是ETSI模式还是其它模式的AT命令。图2AT命令表结构图主表定义在dsati.h文件中:typedefstructdsati_cmd_struct{bytename[20];uint32attrib;bytespecial;bytecompound;constvoid*val_ptr;constvoid*def_lim_ptr;dsat_result_enum_type(*proc_func)(dsat_mode_enum_type,conststructdsati_cmd_struct*,consttokens_struct_type*,dsm_item_type*);boolean(*abort_func)(conststructdsati_cmd_struct*);}dsati_cmd_type;typedefstruct{constdsati_cmd_type*table_ptr;constunsignedint*table_size;}dsati_at_cmd_table_entry_type;typedefdsati_at_cmd_table_entry_type*dsati_at_cmd_table_type[NUM_AT_CMD_CATEGORIES][NUM_OPER_CMD_MODES];分类表定义在文件dsatetsitgt.c中:constdsati_at_cmd_table_typeat_cmd_table={{basic_table_entries,NULL},{sreg_table_entries,NULL},{extended_table_entries,NULL},{vendor_table_entries,NULL}};1.基本命令表基本命令的格式为:command[number]其中command或者是单个字母(A-Z),或者是“&”字符接单个字母。number是一个十进制数,可以是一位,也可以是多位。number最前面的0会被忽略。默认number为0。如果一个不带number的基本命令带了number,则返回TOOMANYPARAMETERS。2.寄存器命令表所有以字母“S”开头的命令统称为S寄存器命令,格式如下
本文标题:QCT6085AT命令模块设计与实现(XXXX0331)
链接地址:https://www.777doc.com/doc-416888 .html