生活物聯(lián)網(wǎng)平臺(tái)提供多種Wi-Fi設(shè)備的配網(wǎng)技術(shù)方案,對于不具備人機(jī)交互能力的設(shè)備,可以通過借助其他設(shè)備來協(xié)助配網(wǎng)。為此,生活物聯(lián)網(wǎng)平臺(tái)提供了開放的配網(wǎng)能力,便于您在不同的設(shè)備硬件平臺(tái)上快速適配和實(shí)現(xiàn)Wi-Fi配網(wǎng)功能。
下圖為生活物聯(lián)網(wǎng)平臺(tái)SDK中Wi-Fi設(shè)備配網(wǎng)模塊的分層框架。
- HAL_AWSS實(shí)現(xiàn)接口和OS、硬件的適配對接,為上層SDK的配網(wǎng)服務(wù)提供基礎(chǔ)的Wi-Fi通信能力。
在生活物聯(lián)網(wǎng)平臺(tái)SDK中,HAL_AWSS的適配實(shí)現(xiàn),主要提供了Wi-Fi配網(wǎng)需要適配的接口。
- AWSS模塊是SDK中提供的配網(wǎng)服務(wù),可以提供多種配網(wǎng)方式,依賴于HAL層的HAL_AWSS部分,以及HAL層其他相關(guān)接口的正確適配。
AWSS模塊為上層的應(yīng)用開發(fā)提供了配網(wǎng)相關(guān)的用戶編程接口,Examples為調(diào)用這些接口的完整示例的實(shí)現(xiàn)。
在生活物聯(lián)網(wǎng)平臺(tái)SDK中,AWSS用戶編程接口,主要用來調(diào)用實(shí)現(xiàn)設(shè)備的Wi-Fi配網(wǎng)功能。
通用HAL說明
Wi-Fi配網(wǎng)模塊中依賴生活物聯(lián)網(wǎng)平臺(tái)SDK的公共HAL接口(如下表所示)。請您參照生活物聯(lián)網(wǎng)平臺(tái)SDK中對應(yīng)模塊的說明完成對接。
序號 | 適配接口名 | 說明 |
---|---|---|
1 | HAL_MutexCreate | 創(chuàng)建一個(gè)互斥量對象,返回指向所創(chuàng)建互斥量的指針,用于同步訪問,對于僅支持單線程應(yīng)用,可實(shí)現(xiàn)為空函數(shù) |
2 | HAL_MutexDestroy | 銷毀一個(gè)互斥量對象,釋放資源 |
3 | HAL_MutexLock | 鎖住一個(gè)互斥量 |
4 | HAL_MutexUnlock | 解鎖一個(gè)互斥量 |
5 | HAL_UptimeMs | 獲取設(shè)備從上電到當(dāng)前時(shí)刻所經(jīng)過的毫秒數(shù) |
6 | HAL_Malloc | 申請一塊堆內(nèi)存 |
7 | HAL_Free | 釋放參數(shù)ptr指向的一塊堆內(nèi)存,當(dāng)傳入的參數(shù)為NULL時(shí)不執(zhí)行任何操作 |
8 | HAL_SleepMs | 睡眠函數(shù),使當(dāng)前執(zhí)行線程睡眠指定的毫秒數(shù) |
9 | HAL_GetProductKey | 獲取設(shè)備的ProductKey,用于標(biāo)識(shí)設(shè)備的品類,設(shè)備證書之一 |
10 | HAL_GetProductSecret | 獲取設(shè)備的ProductSecret,用于標(biāo)識(shí)設(shè)備的品類,設(shè)備證書之一 |
11 | HAL_GetDeviceName | 獲取設(shè)備的DeviceName,用于標(biāo)識(shí)設(shè)備單品的名字,設(shè)備證書之一 |
12 | HAL_GetDeviceSecret | 獲取設(shè)備的DeviceSecret, 用于標(biāo)識(shí)設(shè)備單品的密鑰, 設(shè)備證書之一 |
13 | HAL_Kv_Set | Flash中寫入鍵值對(Key-Value) |
14 | HAL_Kv_Get | Flash中讀取鍵值對的Value |
15 | HAL_Aes128_Init | 初始化AES加密的結(jié)構(gòu)體 |
16 | HAL_Aes128_Destroy | 銷毀AES加密的結(jié)構(gòu)體 |
17 | HAL_Aes128_Cbc_Encrypt | 以AES-CBC-128方式,根據(jù)HAL_Aes128_Init() 時(shí)傳入的密鑰,加密指定的明文
|
18 | HAL_Aes128_Cbc_Decrypt | 以AES-CBC-128方式,根據(jù)HAL_Aes128_Init() 時(shí)傳入的密鑰,解密指定的密文
|
19 | HAL_Aes128_Cfb_Encrypt | 以AES-CFB-128方式,根據(jù)HAL_Aes128_Init() 時(shí)傳入的密鑰,加密指定的明文
|
20 | HAL_Aes128_Cfb_Decrypt | 以AES-CFB-128方式,根據(jù)HAL_Aes128_Init() 時(shí)傳入的密鑰,解密指定的密文
|
21 | HAL_Timer_Create | 根據(jù)Name、TimerFunc和用戶上下文創(chuàng)建Timer |
22 | HAL_Timer_Start | Timer開始計(jì)時(shí),Timer超時(shí)時(shí)調(diào)用回調(diào)函數(shù)TimerFunc |
23 | HAL_Timer_Stop | 停止Timer計(jì)時(shí) |
24 | HAL_Timer_Delete | 刪除Timer,釋放資源 |
- /Living_SDK/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/imports/
- /Living_SDK/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/iot_import.h
HAL適配概述
Wi-Fi配網(wǎng)模塊需要適配的HAL接口的詳細(xì)說明如下表所示。
序號 | 適配接口名 | 說明 | 分類 |
---|---|---|---|
1 | HAL_Wifi_Get_Mac | 獲取設(shè)備的MAC地址, 格式應(yīng)當(dāng)是”XX:XX:XX:XX:XX:XX” | 配網(wǎng)通用 |
2 | HAL_Wifi_Get_IP | 獲取設(shè)備的IP地址,點(diǎn)分十進(jìn)制格式保存在字符串?dāng)?shù)組出參,二進(jìn)制格式則作為返回值,并以網(wǎng)絡(luò)字節(jié)序(大端)表達(dá),Station模式為連接AP時(shí)的IP地址,SoftAP模式為設(shè)備作為AP的Gateway IP地址 | 配網(wǎng)通用 |
3 | HAL_Awss_Get_Channelscan_Interval_Ms | 獲取在每個(gè)信道(channel)上掃描的時(shí)間長度,單位是毫秒 | 配網(wǎng)通用 |
4 | HAL_Awss_Get_Timeout_Interval_Ms | 獲取配網(wǎng)服務(wù)(AWSS)的超時(shí)時(shí)間長度,單位是毫秒 | 配網(wǎng)通用 |
5 | HAL_Awss_Get_Encrypt_Type | 獲取一鍵配網(wǎng)服務(wù)的安全等級 | 一鍵配網(wǎng) |
6 | HAL_Awss_Get_Conn_Encrypt_Type | 獲取基于連接的配網(wǎng)服務(wù)(熱點(diǎn)配網(wǎng)/零配)的安全等級 |
|
7 | HAL_Awss_Open_Monitor | 設(shè)備工作在監(jiān)聽(Monitor)模式,并在收到802.11幀的時(shí)候調(diào)用被傳入的回調(diào)函數(shù)(包括管理幀和數(shù)據(jù)幀) | 配網(wǎng)通用 |
8 | HAL_Awss_Close_Monitor | 關(guān)閉監(jiān)聽(Monitor)模式 | 配網(wǎng)通用 |
9 | HAL_Wifi_Scan | 啟動(dòng)一次Wi-Fi的空中掃描 | 配網(wǎng)通用 |
10 | HAL_Awss_Switch_Channel | 設(shè)置Wi-Fi設(shè)備切換到指定的信道(channel)上 | 配網(wǎng)通用 |
11 | HAL_Awss_Connect_Ap | 要求Wi-Fi網(wǎng)卡連接指定熱點(diǎn)(Access Point)的函數(shù),bssid指定特定AP,另外bssid也可能為空或無效值(全0或全0xff) | 配網(wǎng)通用 |
12 | HAL_Wifi_Send_80211_Raw_Frame | 在當(dāng)前信道(channel)上以基本數(shù)據(jù)速率(1Mbps)發(fā)送裸的802.11幀(raw 802.11 frame) | 配網(wǎng)通用 |
13 | HAL_Wifi_Enable_Mgmt_Frame_Filter | 使能或禁用對管理幀的過濾 | 配網(wǎng)通用 |
14 | HAL_Sys_Net_Is_Ready | 檢查Wi-Fi網(wǎng)卡、芯片或模組當(dāng)前的IP地址是否有效 | 配網(wǎng)通用 |
15 | HAL_Wifi_Get_Ap_Info | 獲取設(shè)備所連接的熱點(diǎn)(Access Point)的信息(SSID、Password、BSSID等) | 配網(wǎng)通用 |
16 | HAL_Wifi_Get_Link_Stat | 獲取當(dāng)前與AP連接鏈路狀態(tài)的信息(channel、RSSI等) | 配網(wǎng)通用 |
17 | HAL_Awss_Open_Ap | 開啟設(shè)備熱點(diǎn)(SoftAP模式) | 設(shè)備熱點(diǎn)配網(wǎng) |
18 | HAL_Awss_Close_Ap | 關(guān)閉當(dāng)前設(shè)備熱點(diǎn),并把設(shè)備由SoftAP模式切換到Station模式 | 設(shè)備熱點(diǎn)配網(wǎng) |
HAL_Wifi_Get_Mac
原型
char *HAL_Wifi_Get_Mac(_OU_ char mac_str[HAL_MAC_LEN]);
接口說明
獲取Wi-Fi網(wǎng)口的MAC地址,格式為XX:XX:XX:XX:XX:XX
。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
mac_str | char | 輸出 | 指向緩沖區(qū)數(shù)組起始位置的字符指針 |
返回值說明
指向緩沖區(qū)數(shù)組起始位置的字符指針。
HAL_Wifi_Get_IP
原型
uint32_t HAL_Wifi_Get_IP(_OU_ char ip_str[NETWORK_ADDR_LEN], _IN_ const char *ifname);
接口說明
獲取Wi-Fi網(wǎng)口的IP地址,點(diǎn)分十進(jìn)制格式保存在字符串?dāng)?shù)組出參,二進(jìn)制格式則作為返回值,并以網(wǎng)絡(luò)字節(jié)序(大端)表達(dá)。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
ip_str | char[] | 輸出 | 存放點(diǎn)分十進(jìn)制格式的IP地址字符串的數(shù)組 |
ifname | const char* | 輸入 | 指定Wi-Fi網(wǎng)絡(luò)接口的名字(如果只有一個(gè)網(wǎng)口,可以忽略此參數(shù),該參數(shù)可能為NULL) |
返回值說明
二進(jìn)制形式的IP地址,以網(wǎng)絡(luò)字節(jié)序(大端)組織。
HAL_Awss_Get_Channelscan_Interval_Ms
原型
int HAL_Awss_Get_Channelscan_Interval_Ms(void);
接口說明
獲取在每個(gè)信道(channel)上掃描的時(shí)間長度,單位是毫秒,建議設(shè)置為200ms~400ms(默認(rèn)250ms)。
參數(shù)說明
void
返回值說明
時(shí)間長度,單位為毫秒。
HAL_Awss_Get_Timeout_Interval_Ms
原型
int HAL_Awss_Get_Timeout_Interval_Ms(void);
接口說明
獲取配網(wǎng)服務(wù)(AWSS)的超時(shí)時(shí)間長度,單位是毫秒,建議配置為60s或60000ms。
參數(shù)說明
void
返回值說明
超時(shí)時(shí)長,單位是毫秒。
HAL_Awss_Get_Encrypt_Type
原型
int HAL_Awss_Get_Encrypt_Type(void);
接口說明
獲取一鍵配網(wǎng)服務(wù)的安全等級。
參數(shù)說明
void
返回值說明
值 | 說明 |
---|---|
0 | open (no encrypt) |
1 | aes256cfb with default aes-key and aes-iv |
2 | aes128cfb with default aes-key and aes-iv |
3 | aes128cfb with aes-key per product and aes-iv = 0 |
4 | aes128cfb with aes-key per device and aes-iv = 0 |
5 | aes128cfb with aes-key per manufacture and aes-iv = 0 |
others | 無效 |
HAL_Awss_Get_Conn_Encrypt_Type
原型
int HAL_Awss_Get_Conn_Encrypt_Type(void);
接口說明
獲取零配,熱點(diǎn)配網(wǎng)的安全等級。
參數(shù)說明
void
返回值說明
值 | 說明 |
---|---|
3 | aes128cfb with aes-key per product and aes-iv = random |
4 | aes128cfb with aes-key per device and aes-iv = random |
5 | aes128cfb with aes-key per manufacture and aes-iv = random |
others | 無效 |
HAL_Awss_Open_Monitor
原型
void HAL_Awss_Open_Monitor(_IN_ awss_recv_80211_frame_cb_t cb);
接口說明
設(shè)置Wi-Fi網(wǎng)卡工作在監(jiān)聽(Monitor)模式,并在收到802.11幀的時(shí)候調(diào)用被傳入的回調(diào)函數(shù)。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
cb | awss_recv_80211_frame_cb_t | 輸入 | 回調(diào)函數(shù)指針,當(dāng)Wi-Fi接收到幀時(shí)會(huì)調(diào)用此函數(shù) |
/**
* @brief 802.11幀的處理函數(shù),可以將802.11 Frame傳遞給這個(gè)函數(shù)
*
* @param[in] buf @n 80211 frame buffer, or pointer to struct ht40_ctrl
* @param[in] length @n 80211 frame buffer length
* @param[in] link_type @n AWSS_LINK_TYPE_NONE for most rtos HAL,
* and for linux HAL, do the following step to check
* which header type the driver supported.
@verbatim
a) iwconfig wlan0 mode monitor #open monitor mode
b) iwconfig wlan0 channel 6 #switch channel 6
c) tcpdump -i wlan0 -s0 -w file.pacp #capture 80211 frame & save
d) open file.pacp with wireshark or omnipeek
check the link header type and fcs included or not
@endverbatim
* @param[in] with_fcs @n 80211 frame buffer include fcs(4 byte) or not
* @param[in] rssi @n rssi of packet, range of [-127, -1]
*/
typedef int (*awss_recv_80211_frame_cb_t)(char *buf, int length,
enum AWSS_LINK_TYPE link_type, int with_fcs, signed char rssi);
返回值說明
void
HAL_Awss_Close_Monitor
原型
void HAL_Awss_Close_Monitor(void);
接口說明
設(shè)置Wi-Fi網(wǎng)卡離開監(jiān)聽(Monitor)模式,并開始以站點(diǎn)(Station)模式工作。
參數(shù)說明
void
返回值說明
void
HAL_Wifi_Scan
原型
int HAL_Wifi_Scan(awss_wifi_scan_result_cb_t cb);
接口說明
啟動(dòng)一次Wi-Fi的空中掃描,該API是一個(gè)阻塞操作,掃描沒有完成不能結(jié)束。所有的AP列表收集完成后,一個(gè)一個(gè)通過回調(diào)函數(shù)告知AWSS,最好不要限制AP的數(shù)量,否則可能導(dǎo)致中文GBK編碼的SSID熱點(diǎn)配網(wǎng)失敗。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
cb | awss_wifi_scan_result_cb_t | 輸入 | 掃描通知回調(diào)函數(shù) |
返回值說明
值 | 說明 |
---|---|
0 | 掃描正常結(jié)束 |
-1 | 其他情況 |
HAL_Awss_Switch_Channel
原型
void HAL_Awss_Switch_Channel(
_IN_ char primary_channel,
_IN_OPT_ char secondary_channel,
_IN_OPT_ uint8_t bssid[ETH_ALEN]);
接口說明
設(shè)置Wi-Fi網(wǎng)卡切換到指定的信道(channel)上。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
primary_channel | char | 輸入 | 首選信道 |
secondary_channel | char | 輸入 | 輔助信道,信道帶寬為40MHz時(shí)才會(huì)使用,信道寬度為20MHz時(shí)忽略該參數(shù) |
bssid | uint8_t | 輸入 | 生活物聯(lián)網(wǎng)平臺(tái)SDK1.3.0及以上版本中,此參數(shù)已廢棄,您若兼容1.3.0以前版本使用 |
返回值說明
void
HAL_Awss_Connect_Ap
原型
int HAL_Awss_Connect_Ap(
_IN_ uint32_t connection_timeout_ms,
_IN_ char ssid[HAL_MAX_SSID_LEN],
_IN_ char passwd[HAL_MAX_PASSWD_LEN],
_IN_OPT_ enum AWSS_AUTH_TYPE auth,
_IN_OPT_ enum AWSS_ENC_TYPE encry,
_IN_OPT_ uint8_t bssid[ETH_ALEN],
_IN_OPT_ uint8_t channel);
接口說明
要求Wi-Fi網(wǎng)卡連接指定熱點(diǎn)(Access Point)的函數(shù),bssid指定特定AP,另外bssid也可能為空或無效值(全0或全0xff)。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
connection_timeout_ms | uint32_t | 輸入 | 連接AP的超時(shí)時(shí)間 |
ssid | char | 輸入 | 目的AP的SSID |
passwd | char | 輸入 | 目的AP的PASSWORD |
auth | enum | 輸入 | 目的AP的加密方式,HAL可以忽略 |
encry | enum | 輸入 | 目的AP的認(rèn)證方式,HAL可以忽略 |
bssid | uint8_t | 輸入 | 目的AP的BSSID,該字段可能為NULL或設(shè)置為全0 |
channel | uint8_t | 輸入 | 目的AP的信道,該字段可以忽略 |
返回值說明
值 | 說明 |
---|---|
0 | 連接AP和DHCP成功 |
-1 | 連接AP或DHCP失敗 |
HAL_Wifi_Send_80211_Raw_Frame
原型
int HAL_Wifi_Send_80211_Raw_Frame(_IN_ enum HAL_Awss_Frame_Type type,
_IN_ uint8_t *buffer, _IN_ int len);
接口說明
在當(dāng)前信道(channel)上以基本數(shù)據(jù)速率(1Mbps)發(fā)送裸的802.11幀(raw 802.11 frame)。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
type | enum HAL_Awss_Frame_Type | 輸入 | 查看HAL_Awss_Frame_Type_t 定義
|
buffer | uint8_t * | 輸入 | 802.11裸數(shù)據(jù)幀,包括完整的MAC頭和FCS域 |
len | int | 輸入 | 802.11裸幀字節(jié)長度 |
/* 80211 frame type */
typedef enum HAL_Awss_Frame_Type {
FRAME_ACTION, // 802.11中的Action幀
FRAME_BEACON, // 802.11中的Beacon幀
FRAME_PROBE_REQ, // 802.11中的Probe Request幀
FRAME_PROBE_RESPONSE, // 802.11中的Probe Response幀
FRAME_DATA // 802.11中的數(shù)據(jù)幀
} HAL_Awss_Frame_Type_t;
返回值說明
值 | 說明 |
---|---|
0 | 發(fā)送成功 |
-1 | 發(fā)送失敗 |
HAL_Wifi_Enable_Mgmt_Frame_Filter
原型
int HAL_Wifi_Enable_Mgmt_Frame_Filter(
_IN_ uint32_t filter_mask,
_IN_OPT_ uint8_t vendor_oui[3],
_IN_ awss_wifi_mgmt_frame_cb_t callback);
接口說明
使能或禁用對特定管理幀的過濾。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
filter_mask | uint32_t | 輸入 | 幀過濾參數(shù) |
vendor_oui | uint8_t | 輸入 | Wi-Fi聯(lián)盟分配的廠商OUI,如果OUI為NULL,表示不對OUI過濾,反之要根據(jù)OUI過濾 |
callback | awss_wifi_mgmt_frame_cb_t | 輸入 | 用于接收802.11幀或者信息元素(IE)的回調(diào)函數(shù) |
返回值說明
值 | 說明 |
---|---|
= 0 | 發(fā)送成功 |
= -1 | 發(fā)送失敗 |
= -2 | 不支持 |
HAL_Sys_Net_Is_Ready
原型
int HAL_Sys_Net_Is_Ready();
接口說明
檢查系統(tǒng)網(wǎng)絡(luò)是否可用(設(shè)備是否已經(jīng)成功獲得IP地址并且當(dāng)前IP地址可用)。
參數(shù)說明
void
返回值說明
值 | 說明 |
---|---|
0 | 網(wǎng)絡(luò)不可用 |
1 | 網(wǎng)絡(luò)可用 |
HAL_Wifi_Get_Ap_Info
原型
int HAL_Wifi_Get_Ap_Info(
_OU_ char ssid[HAL_MAX_SSID_LEN],
_OU_ char passwd[HAL_MAX_PASSWD_LEN],
_OU_ uint8_t bssid[ETH_ALEN]);
接口說明
獲取所連接的熱點(diǎn)(Access Point)的信息。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
ssid | char | 輸出 | AP的SSID,該參數(shù)可能為NULL |
passwd | char | 輸出 | AP的Password,該參數(shù)為NULL |
bssid | uint8_t | 輸出 | AP的BSSID,該參數(shù)可能為NULL,如果bssid不對將導(dǎo)致零配設(shè)備發(fā)現(xiàn)失敗 |
返回值說明
值 | 說明 |
---|---|
0 | 操作成功 |
-1 | 操作失敗 |
HAL_Wifi_Get_Link_Stat
原型
int HAL_Wifi_Get_Link_Stat(_OU_ int *p_rssi,
_OU_ int *p_channel);
接口說明
獲取當(dāng)前與AP連接鏈路狀態(tài)的信息(channel、RSSI等)。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
p_rssi | char | 輸出 | 設(shè)備當(dāng)前關(guān)聯(lián)的AP的信號強(qiáng)度值 |
p_channel | char | 輸出 | 設(shè)備當(dāng)前關(guān)聯(lián)的AP所在的信道 |
返回值說明
值 | 說明 |
---|---|
0 | 操作成功 |
-1 | 操作失敗 |
HAL_Awss_Open_Ap
原型
int HAL_Awss_Open_Ap(const char *ssid,
const char *passwd,
int beacon_interval,
int hide);
接口說明
開啟設(shè)備熱點(diǎn)(SoftAP模式)。
參數(shù)說明
參數(shù) | 數(shù)據(jù)類型 | 方向 | 說明 |
---|---|---|---|
ssid | const char * | 輸入 | 熱點(diǎn)的ssid字符 |
passwd | const char * | 輸入 | 熱點(diǎn)的passwd字符 |
beacon_interval | int | 輸入 | 熱點(diǎn)的Beacon廣播周期(廣播間隔) |
hide | int | 輸入 |
|
返回值說明
值 | 說明 |
---|---|
0 | success |
-1 | unsupported |
-2 | failure with system error |
-3 | failure with no memory |
-4 | failure with invalid parameters |
HAL_Awss_Close_Ap
原型
int HAL_Awss_Close_Ap(void);
接口說明
關(guān)閉設(shè)備熱點(diǎn)。
參數(shù)說明
void
返回值說明
值 | 說明 |
---|---|
0 | success |
-1 | unsupported |
-2 | failure |