3.2 Hi3861 AT指令源码分析,如何添加一条自己的AT指令 精华

连志安
发布于 2020-9-24 23:04
浏览
5收藏

3.2 Hi3861 AT指令源码分析,如何添加一条自己的AT指令

这节主要讲下 hi3861 的AT指令相关。先看下AT指令在源码中的位置。上一节已经说到,hi3861 内核启动后的第一个入口函数。

代码路径:

vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c

 

hi_void app_main(hi_void)

 

在app_main函数中,会调用 hi_at_init 进行AT指令的相关初始化。如果初始化成功,则开始注册各类AT指令,代码如下:

  3.2 Hi3861 AT指令源码分析,如何添加一条自己的AT指令-鸿蒙开发者社区

初始化部分暂时先不看,主要是底层相关的。我们重点看下 hi_at_sys_cmd_register 注册AT指令的函数。

hi_void hi_at_sys_cmd_register(hi_void)

{

 printf("____>>>>> %s %d \r\n", __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 是注册通用指令。代码如下:

  3.2 Hi3861 AT指令源码分析,如何添加一条自己的AT指令-鸿蒙开发者社区

其实就是把 g_at_general_func_tbl 数组的AT指令都注册进来。我们可以看到这个数组的内容:

  3.2 Hi3861 AT指令源码分析,如何添加一条自己的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指令

  3.2 Hi3861 AT指令源码分析,如何添加一条自己的AT指令-鸿蒙开发者社区

(2)完善相关函数:

hi_u32 at_setup_mytest_cmd(hi_s32 argc, const hi_char *argv[])

{

 hi_at_printf("at_setup_mytest_cmd \r\n");

 return HI_ERR_SUCCESS;

}




hi_void at_exe_mytest_cmd(hi_s32 argc, const hi_char *argv[])

{

 hi_at_printf("at_exe_mytest_cmd \r\n");

 return HI_ERR_SUCCESS;

}




hi_u32 at_query_mytest_cmd(hi_s32 argc, const hi_char* argv[])

{

 hi_at_printf("at_query_mytest_cmd \r\n");

 return HI_ERR_SUCCESS;

}




hi_u32 at_test_mytest_cmd(hi_s32 argc, const hi_char* argv[])

{

 hi_at_printf("at_test_mytest_cmd \r\n");

 return HI_ERR_SUCCESS;

}

 

编译后我们开始测试:

发送:AT+MYTEST

接收:at_exe_mytest_cmd 

ERROR

 

发送:AT+MYTEST?

接收:at_query_mytest_cmd 

 

发送:AT+MYTEST=1

接收:at_setup_mytest_cmd 

分类
标签
6
收藏 5
回复
举报
3条回复
按时间正序
/
按时间倒序
索姆拉
索姆拉

赞赞 希望楼主继续多多分享干货 期待!

回复
2020-9-25 15:23:24
鲜橙加冰
鲜橙加冰

连老师不错。希望继续。

回复
2020-9-28 16:29:46
wx655328d5a3c26
wx655328d5a3c26

你好。根据您的攻略添加了MYTEST并且烧录,但是烧录之后并没有在HELP之后出现AT+MYTEST指令,并且三个测试返回均为ERROR。

回复
2023-11-16 15:10:17
回复
    相关推荐