更多内容请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com现在开启第三章,核心内容是AT命令的注册。1、命令结构typedefstruct{hi_char*at_cmd_name;hi_s8at_cmd_len;at_call_back_funcat_test_cmd;at_call_back_funcat_query_cmd;at_call_back_funcat_setup_cmd;at_call_back_funcat_exe_cmd;}at_cmd_func;hi_char*at_cmd_name;为指令字符串,不包含“AT”字符。hi_s8at_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_voidhi_at_sys_cmd_register(hi_void){hi_at_general_cmd_register();#ifndefCONFIG_FACTORY_TEST_MODEhi_at_sta_cmd_register();hi_at_softap_cmd_register();#endifhi_at_hipriv_cmd_register();#ifndefCONFIG_FACTORY_TEST_MODE#ifdefLOSCFG_APP_MESHhi_at_mesh_cmd_register();#endifhi_at_lowpower_cmd_register();#endifhi_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()这个函数为例。函数中引用了AT命令的注册函数。hi_at_register_cmd(g_at_general_func_tbl,AT_GENERAL_FUNC_NUM);该函数有两个参数:结构体数组和结构体数组的长度。结构体数组就是上篇介绍的AT指令结构体。常量at_cmd_funcg_at_general_func_tbl[]={{"",0,HI_NULL,HI_NULL,HI_NULL,(at_call_back_func)at_exe_at_cmd},{"+RST",4,HI_NULL,HI_NULL,(at_call_back_func)at_setup_reset_cmd,(at_call_back_func)at_cmd},{"+RST",HI_NULL,HI_NULL+MAC",4,HI_NULL,(at_call_back_func)cmd_get_macaddr,(at_call_back_func)cmd_set_macaddr,HI_NULL},{"+HELP",5,HI_NULL,HI_NULL,HI_NULL,(at_call_back_func)at_exe_help_cmd},};下面对注册表数量进行说明。hi_u32hi_at_register_cmd(HI_CONSTat_cmd_func*cmd_tbl,hi_u16cmd_num){hi_u32ret=HI_ERR_FAILURE;嗨u8我;如果(cmd_tbl==HI_NULL||cmd_num==0){返回HI_ERR_FAILURE;}ret=check_cmd_tbl(cmd_tbl,cmd_num);if(ret!=HI_ERR_SUCCESS){返回ret;}at_cmd_func_list*cmd_list=at_get_list();for(i=0;i
