本帖最后由 l_xy 于 2020-10-18 17:20 编辑
原文链接:https://harmonyos.51cto.com/posts/994
这节主要讲下 hi3861 的AT指令相关。先看下AT指令在源码中的位置。上一节已经说到,hi3861 内核启动后的第一个入口函数。 代码路径: vendorhisihi3861hi3861appwifiiot_appsrcapp_main.c
hi_void app_main(hi_void)
在app_main函数中,会调用 hi_at_init 进行AT指令的相关初始化。如果初始化成功,则开始注册各类AT指令,代码如下: 初始化部分暂时先不看,主要是底层相关的。我们重点看下 hi_at_sys_cmd_register 注册AT指令的函数。
- hi_void hi_at_sys_cmd_register(hi_void)
-
- {
-
- printf("____>>>>> %s %d rn", __FILE__, __LINE__);
-
-
-
-
- hi_at_general_cmd_register();
-
- #ifndef CONFIG_FACTORY_TEST_MODE
-
- hi_at_sta_cmd_register();
-
- hi_at_softap_cmd_register();
-
- #endif
-
- hi_at_hipriv_cmd_register();
-
- #ifndef CONFIG_FACTORY_TEST_MODE
-
- #ifdef LOSCFG_APP_MESH
-
- hi_at_mesh_cmd_register();
-
- #endif
-
- hi_at_lowpower_cmd_register();
-
- #endif
-
- hi_at_general_factory_test_cmd_register();
-
- hi_at_sta_factory_test_cmd_register();
-
- hi_at_hipriv_factory_test_cmd_register();
-
- hi_at_io_cmd_register();
-
- }
复制代码
其中,hi_at_general_cmd_register 是注册通用指令。代码如下:其实就是把 g_at_general_func_tbl 数组的AT指令都注册进来。我们可以看到这个数组的内容: g_at_general_func_tbl的结构体原型如下:
- typedef struct {
-
- //AT指令命。前面省略AT
-
- hi_char *at_cmd_name;
-
- //指令的长度
-
- hi_s8 at_cmd_len;
-
- //at测试时调用的回调函数
-
- at_call_back_func at_test_cmd;
-
- //at查询时调用的回调函数
-
- at_call_back_func at_query_cmd;
-
- //at设置时调用的回调函数
-
- at_call_back_func at_setup_cmd;
-
- //at运行时调用的回调函数
-
- at_call_back_func at_exe_cmd;
-
- } at_cmd_func;
复制代码
看到这个数组,聪明的朋友应该知道怎么增加第一条属于自己的指令了吧~~~~
(1)增加AT指令 (2)完善相关函数:
- hi_u32 at_setup_mytest_cmd(hi_s32 argc, const hi_char *argv[])
-
- {
-
- hi_at_printf("at_setup_mytest_cmd rn");
-
- return HI_ERR_SUCCESS;
-
- }
-
-
-
-
- hi_void at_exe_mytest_cmd(hi_s32 argc, const hi_char *argv[])
-
- {
-
- hi_at_printf("at_exe_mytest_cmd rn");
-
- return HI_ERR_SUCCESS;
-
- }
-
-
-
-
- hi_u32 at_query_mytest_cmd(hi_s32 argc, const hi_char* argv[])
-
- {
-
- hi_at_printf("at_query_mytest_cmd rn");
-
- return HI_ERR_SUCCESS;
-
- }
-
-
-
-
- hi_u32 at_test_mytest_cmd(hi_s32 argc, const hi_char* argv[])
-
- {
-
- hi_at_printf("at_test_mytest_cmd rn");
-
- return HI_ERR_SUCCESS;
-
- }
复制代码
编译后我们开始测试: 发送:AT+MYTEST 接收:at_exe_mytest_cmd ERROR
发送:AT+MYTEST? 接收:at_query_mytest_cmd
发送:AT+MYTEST=1 接收:at_setup_mytest_cmd
|