电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1238|回复: 0
收起左侧

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

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-10-26 19:56:38 | 显示全部楼层 |阅读模式
Hi3861 AT指令源码分析,如何添加一条自己的AT指令, 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指令,代码如下:



初始化部分暂时先不看,主要是底层相关的。我们重点看下 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 是注册通用指令。代码如下:



其实就是把 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 \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
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表