
OpenHarmony中AT模块的代码理解(3) 原创 精华
OpenHarmony中AT模块的代码理解(2)
OpenHarmony中AT模块的代码理解(1)
现在开启第三篇,核心内容是AT命令的注册。
1、AT命令结构体
hi_char *at_cmd_name;为命令字符串,不包含“AT”字符。
hi_s8 at_cmd_len;为字符串长度
后面的四个回调函数,分别对应AT命令的四种类似:测试命令,查询命令,设置命令和执行命令。
如:{“+RST”, 4, HI_NULL, HI_NULL, (at_call_back_func)at_setup_reset_cmd, (at_call_back_func)at_exe_reset_cmd},
2、注册函数
hi_at_sys_cmd_register()这个函数中包含了很多注册的函数。每个函数又包含了一类的AT命令。
只取其中的一个,进行进一步的说明,拿这个函数hi_at_general_cmd_register()举例。函数中引用了AT命令的注册函数。
hi_at_register_cmd(g_at_general_func_tbl, AT_GENERAL_FUNC_NUM);
函数的参数有两个:结构体数组和结构体数组的长度。结构体数组就是第一部分中介绍的AT命令结构体。
下面对注册函数的实现进行说明。
其中几个核心函数的说明:
1)check_cmd_tbl(cmd_tbl, cmd_num);
确认需要注册的AT命令结构体中没有重复的指令。
2)at_get_list();
获取全局变量HI_PRV at_cmd_func_list g_at_cmd_list = { 0 }的指针。这个结构体数据中存储着已经注册的AT命令。
3)check_name_and_callback(cmd_list, i, cmd_tbl, cmd_num);
为检查要注册的AT命令是否有重复,避免重复注册。
4)for (i = 0; i < AT_CMD_LIST_NUM; i++) {}去遍历g_at_cmd_list中已经存储到了第几个位置。如果遍历到空位置,则将要注册的AT命令结构体的指针进行存储。
3、总结
注册部分功能,就是将AT命令的添加到g_at_cmd_list的数组中。等到通过串口接收到的指令进行解析的时候,还会遍历存储在g_at_cmd_list中的指令的。所有这个结构体数组,后续还会用到。
如果想要自己添加AT命令。可以仿照给出的通用规则,自己添加即可。这里不展开说明。
这篇文章,就先介绍到这里。下一篇,开始数据的解析部分。
