modem侧新增AT命令
下面列举出与ATCoP相关的一些主要的资源目录:
filename | Description | |
Dsat.h | ATCoP外部模块使用的定义,函数和数据结构 | |
Dsat.h | ATCoP外部模块使用的定义,函数和数据结构 | |
Dsati.h | ATCoP内部使用的定义,函数和数据结构 | |
Dsatprep.c | 接收自串口设备的数据的预处理 | |
Dsatpar.c | AT命令解析器,将命令行的AT命令解析到token结构中 | |
Dsatcmdp.c | AT命令处理器,查找token结构中的包含的命令并从命令列表中调用相应的命令处理函数处理命令 | |
Dsatrsp.c | 产生AT命令响应和格式化 | |
Dsatutil.c | 产生AT命令处理器 | |
Dsatparm.c | 通用AT参数类型命令过程 | |
Dsatarm.h | ATCoP内部使用的通用AT参数类型命令处理定义,函数和数据结构 | |
Dsatact.c | 通用ATactive type命令处理函数 | |
Dsatact.h | 通用AT动作类型命令处理的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatvend.c | 通用AT指定提供商类型命令处理 | |
Dsatvend.h | 通用AT指定提供商类型命令处理的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatctab.c | 通用AT命令表 | |
Dsatctab.h | 通用AT命令表定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatcmif.c | 通用呼叫管理接口 | |
Dsatcmif.h | 通用呼叫管理接口定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatvoice.c | 通用语音呼叫处理控制 | |
Dsatvoice.h | 通用语音呼叫处理控制的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatetsicall.c | ETSI呼叫控制命令处理 | |
Dsatetsicall.h | ETSI呼叫控制命令处理的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatetsicmif.c | ETSI命令呼叫管理接口 | |
Dsatetsicmif.h | ETSI命令呼叫管理接口的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatetsipkt.c | ETSI包数据命令处理 | |
Dsatetsipkt.h | ETSI包数据命令处理的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatetsime.c | ETSI移动设备命令处理 | |
Dsatetsime.h | ETSI移动设备命令处理的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatetsismsc.c | ETSI短消息服务命令处理 | |
Dsatetsismsa.c | ETSI短消息服务异步事件处理 | |
Dsatetsismsu.c | ETSI短消息服务命令处理实体 | |
Dsatetsisms.h | ETSI短消息服务命令处理的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatetsismsi.h | ETSI短消息服务命令处理的定义、函数和数据结构,供ATCoP内部模块的短消息服务单元使用 | |
Dsatetsictab.c | ETSIAT命令表 | |
Dsatetsictab.h | ETSIAT命令表的定义、函数和数据结构,供ATCoP内部模块使用 | |
Dsatetsitgt.c | 顶层AT命令表,命令表指针数组,ETSI指定目标的命令表,同步事件处理表。定义ETSI目标支持的AT命令集 | |
Dsatgsmfax.c | GSMfax命令处理 | |
Dsatgsmfax.h | GSMfax命令处理的定义、函数和数据结构,供ATCoP内部模块使用 | |
数据服务任务源文件列表: | ||
filename | Description | |
Dstask.h | 数据服务任务的外部或内部模块使用的定义,函数和数据结构 | |
Dsatsk.c | 数据服务任务和顶层分发 |
具体新增的过程:
以新增“+AGMR”为例。
1、 定义指针变量:
在dsati.h下的dsat_ext_index_enum_type枚举数组中添加一个指针变量如下:
DSAT_EXT_AGMR_IDX = 12039,
2、 建立AT命令和处理函数的映射:
在dsatctab.c下的dsat_basic_table_ex[] 数据下添加映射:
{ DSAT_EXT_AGMR_IDX, dsatact_exec_agmr_cmd },
3、 定义AT命令
下面我们增加的是一个最简单的命令,name是”+AGMR”,属性是无参数。
在dsatctab_ex.c下的dsat_ext_table[]数组中添加:
{ "+AGMR", READ_ONLY| RESTRICTED,
SPECIAL_NONE, 0, DSAT_EXT_AGMR_IDX, NULL },
4、 声明处理函数
上面完成以后就能定义其实际的处理函数了,在定义之前,我们先要声明一下,在dsatact.h下添加:
dsat_result_enum_type dsatact_exec_agmr_cmd
(
dsat_mode_enum_type mode, /* AT command mode: */
const dsati_cmd_type *parse_table, /* Ptr to cmd in parse table */
const tokens_struct_type *tok_ptr, /* Command tokens fromparser */
dsm_item_type *res_buff_ptr /* Place to put response */
);
5、 定义处理函数, 在dsatact.c下添加:
/*test-add yangxiangbin*/
dsat_result_enum_typedsatact_exec_agmr_cmd(
dsat_mode_enum_type mode, /* AT command mode: */
const dsati_cmd_type *parse_table, /* Ptr to cmd in parse table */
const tokens_struct_type *tok_ptr, /* Command tokens fromparser */
dsm_item_type *res_buff_ptr /* Place to put response */
)
{
dsat_result_enum_type result= DSAT_OK;
static char info[32] = "at_commands_test";
if((tok_ptr->op == (NA|EQ|AR)) ||
(tok_ptr->op == (NA|EQ|QU)) ||
(tok_ptr->op == (NA|QU)) ||
(tok_ptr->op == (NA)))
{
res_buff_ptr->used =(word) strlcpy((char*)res_buff_ptr->data_ptr,
(const char*)info,
res_buff_ptr->size);
}
/*command does not make sense */
else
{
result = DSAT_ERROR;
}
return result;
} /* dsatetsime_exec_agmr_cmd() */
超级终端输入at+agmr
at+agmr
at_commands_test
OK