成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony中AT模塊的代碼理解之三

系統(tǒng) OpenHarmony
注冊部分功能,就是將AT命令的添加到g_at_cmd_list的數(shù)組中。等到通過串口接收到的指令進(jìn)行解析的時候,還會遍歷存儲在g_at_cmd_list中的指令的。所有這個結(jié)構(gòu)體數(shù)組,后續(xù)還會用到。

??想了解更多內(nèi)容,請?jiān)L問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

現(xiàn)在開啟第三篇,核心內(nèi)容是AT命令的注冊。

1、AT命令結(jié)構(gòu)體

typedef struct {
hi_char *at_cmd_name;
hi_s8 at_cmd_len;
at_call_back_func at_test_cmd;
at_call_back_func at_query_cmd;
at_call_back_func at_setup_cmd;
at_call_back_func at_exe_cmd;
} at_cmd_func;

hi_char *at_cmd_name;為命令字符串,不包含“AT”字符。

hi_s8 at_cmd_len;為字符串長度。

后面的四個回調(diào)函數(shù),分別對應(yīng)AT命令的四種類似:測試命令,查詢命令,設(shè)置命令和執(zhí)行命令。

如:{“+RST”, 4, HI_NULL, HI_NULL, (at_call_back_func)at_setup_reset_cmd, (at_call_back_func)at_exe_reset_cmd}。

2、注冊函數(shù)

hi_at_sys_cmd_register()這個函數(shù)中包含了很多注冊的函數(shù)。每個函數(shù)又包含了一類的AT命令。

hi_void hi_at_sys_cmd_register(hi_void)
{
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();
}

只取其中的一個,進(jìn)行進(jìn)一步的說明,拿這個函數(shù)hi_at_general_cmd_register()舉例。函數(shù)中引用了AT命令的注冊函數(shù)。

hi_at_register_cmd(g_at_general_func_tbl, AT_GENERAL_FUNC_NUM);

函數(shù)的參數(shù)有兩個:結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體數(shù)組的長度。結(jié)構(gòu)體數(shù)組就是第一部分中介紹的AT命令結(jié)構(gòu)體。

const at_cmd_func g_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_exe_reset_cmd},
{"+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},
};

下面對注冊函數(shù)的實(shí)現(xiàn)進(jìn)行說明。

hi_u32 hi_at_register_cmd(HI_CONST at_cmd_func *cmd_tbl, hi_u16 cmd_num)
{
hi_u32 ret = HI_ERR_FAILURE;
hi_u8 i;
if (cmd_tbl == HI_NULL || cmd_num == 0) {
return HI_ERR_FAILURE;
}
ret = check_cmd_tbl(cmd_tbl, cmd_num);
if (ret != HI_ERR_SUCCESS) {
return ret;
}
at_cmd_func_list *cmd_list = at_get_list();
for (i = 0; i < AT_CMD_LIST_NUM; i++) {
if ((cmd_list->at_cmd_list[i] == HI_NULL) || (cmd_list->at_cmd_num[i] == 0)) {
cmd_list->at_cmd_list[i] = cmd_tbl;
cmd_list->at_cmd_num[i] = cmd_num;
ret = HI_ERR_SUCCESS;
break;
}
ret = check_name_and_callback(cmd_list, i, cmd_tbl, cmd_num);
if (ret != HI_ERR_SUCCESS) {
break;
}
}
return ret;
}

其中幾個核心函數(shù)的說明:

(1)check_cmd_tbl(cmd_tbl, cmd_num)。

確認(rèn)需要注冊的AT命令結(jié)構(gòu)體中沒有重復(fù)的指令。

(2)at_get_list()。

獲取全局變量HI_PRV at_cmd_func_list g_at_cmd_list = { 0 }的指針。這個結(jié)構(gòu)體數(shù)據(jù)中存儲著已經(jīng)注冊的AT命令。

(3)check_name_and_callback(cmd_list, i, cmd_tbl, cmd_num)。

為檢查要注冊的AT命令是否有重復(fù),避免重復(fù)注冊。

(4)for (i = 0; i < AT_CMD_LIST_NUM; i++) {}去遍歷g_at_cmd_list中已經(jīng)存儲到了第幾個位置。如果遍歷到空位置,則將要注冊的AT命令結(jié)構(gòu)體的指針進(jìn)行存儲。

cmd_list->at_cmd_list[i] = cmd_tbl;
cmd_list->at_cmd_num[i] = cmd_num;

3、總結(jié)

注冊部分功能,就是將AT命令的添加到g_at_cmd_list的數(shù)組中。等到通過串口接收到的指令進(jìn)行解析的時候,還會遍歷存儲在g_at_cmd_list中的指令的。所有這個結(jié)構(gòu)體數(shù)組,后續(xù)還會用到。

如果想要自己添加AT命令??梢苑抡战o出的通用規(guī)則,自己添加即可。這里不展開說明。

這篇文章,就先介紹到這里。

??想了解更多內(nèi)容,請?jiān)L問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-03-15 15:24:53

操作系統(tǒng)RTOSAT模塊

2011-03-03 10:45:51

2011-03-21 14:31:36

Azure應(yīng)用程序

2018-12-10 14:59:20

代碼卷積模塊架構(gòu)

2011-03-21 15:22:04

Azure應(yīng)用程序

2022-05-26 15:28:03

網(wǎng)絡(luò)管理Socket 模塊

2015-10-30 15:30:54

LevelDBSSTableSybase

2023-04-26 15:29:35

NAPI模塊鴻蒙

2022-12-20 16:10:31

2022-01-12 14:45:26

鴻蒙HarmonyOS應(yīng)用

2011-03-11 13:26:32

SQL ServerBlocking阻塞

2021-07-07 15:29:52

存儲RocketMQ體系

2022-06-16 09:00:00

安卓權(quán)限SElinuxLinux

2011-06-24 16:26:20

SEO

2012-03-15 17:18:33

JavaHashMap

2012-02-15 10:37:38

JavaJava Socket

2024-03-19 14:14:27

線程開發(fā)

2019-07-30 12:36:10

云計(jì)算微軟亞馬遜

2021-02-22 14:04:47

Vue框架項(xiàng)目

2019-09-28 23:17:41

zabbix運(yùn)維監(jiān)控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕日韩一区 | 亚洲国产欧美日韩 | www国产亚洲精品久久网站 | 午夜在线影院 | 日本欧美在线观看视频 | 一级毛片在线播放 | 天天舔天天 | 在线视频中文字幕 | 热re99久久精品国产99热 | 欧美日韩亚洲一区 | 色婷婷国产精品综合在线观看 | 四虎影视在线 | 久久久视 | 国产精品欧美一区二区三区 | 国产精品免费观看 | 在线免费小视频 | 亚洲欧美一区二区三区视频 | 一级国产精品一级国产精品片 | 亚洲精品久久久一区二区三区 | 久久精品 | www.久久久久久久久 | 午夜精品91 | 亚洲国产欧美一区 | 日韩精品一区二区三区老鸭窝 | 黄色网址免费在线观看 | 狠狠爱一区二区三区 | 91免费看片 | 日本精品一区二区三区在线观看视频 | 欧美精品久久久久久 | 日韩第一区 | 国产免费一区二区三区 | 婷婷色在线播放 | 男女免费视频网站 | 成人自拍视频网站 | 国产美女一区二区 | 成年无码av片在线 | 国产精品一区二区福利视频 | www.久久精品 | 国产中文字幕在线观看 | 久久久久久成人 | 欧美日韩在线一区二区三区 |