• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: 网络适配层接口(此文件为DEMO,需集成方适配修改)
15  */
16 #ifndef HILINK_NETWORK_ADAPTER_H
17 #define HILINK_NETWORK_ADAPTER_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #ifndef MAC_ADDRESS_LEN
24 #define MAC_ADDRESS_LEN 6
25 #endif
26 
27 #define HILINK_MAX_AP_SSID_LEN 33
28 #define HILINK_BSSID_HEX_LEN 6
29 
30 /** @brief 扫描目标AP字段 */
31 typedef enum {
32     /* 根据AP的SSID名称扫描 */
33     WIFI_SCAN_TPYE_SSID,
34     /* 根据AP的BSSID扫描 */
35     WIFI_SCAN_TPYE_BSSID,
36     /* 根据AP频率扫描 */
37     WIFI_SCAN_TPYE_FREQ,
38 } HILINK_WifiScanType;
39 
40 typedef struct {
41     /* 目标AP的SSID, 扫描类型为ssid时必填 */
42     char ssid[HILINK_MAX_AP_SSID_LEN];
43     /* 目标AP的SSID的长度 */
44     unsigned int ssidLen;
45     /* 目标AP的bssid */
46     char bssid[HILINK_BSSID_HEX_LEN];
47     /* 目标AP的频率 */
48     int freqs;
49     /* 扫描目标AP的字段 */
50     HILINK_WifiScanType scanType;
51 } HILINK_APScanParam;
52 
53 typedef struct {
54     char ssid[HILINK_MAX_AP_SSID_LEN];
55     unsigned char bssid[HILINK_BSSID_HEX_LEN];
56     int securityType;
57     int rssi;
58     int band;
59     int frequency;
60 } HILINK_APInfo;
61 
62 typedef struct {
63     HILINK_APInfo *apList;
64     unsigned int num;
65 } HILINK_APList;
66 
67 typedef struct {
68     /**
69      * @brief 获取网络优化功能类型
70      *
71      *        返回的type使用bit位表示功能是否开启,1表示开启,0表示关闭
72      *        当前只支持以下几种功能类型
73      *
74      * @return 0x00:关闭网络优化所有功能
75      *         0x01: 表示开启路由引导设备连接至较优AP功能
76      *         0x02: 表示开启SDK连接WiFi逻辑,此时需要设备配合关闭本身WiFi重连功能
77      *         0x01|0x02:功能全开时
78      */
79     unsigned int (*getWifiRecoveryType)(void);
80 
81     /**
82      * @brief 根据参数扫描周围AP信息
83      *
84      *        此接口指定了BSSID、SSID以及频率相关的类型扫描, 目前只用了SSID方式
85      *
86      * @param param [IN] 扫描AP信息时指定的目标参数
87      * @return 0表示成功, 其他表示失败
88      */
89     int (*scanAP)(const HILINK_APScanParam *param);
90 
91     /**
92      * @brief SDK调用scanAP后, 调用此函数获取扫描周围AP信息的结果
93      *
94      *        scanList中apList字段内存由外部申请, SDK进行释放
95      *
96      * @param scanList [OUT] 扫描得到的目标AP列表以及个数
97      * @return 0表示成功, 1表示扫描未完成, 其他表示失败
98      */
99     int (*getAPScanResult)(HILINK_APList *scanList);
100 
101     /**
102      * @brief 重新启动WiFi模块
103      *
104      *        当设备WiFi断开后, 此函数会被调用重启WiFi模块;
105      *
106      * @return 0表示成功, 其他表示失败
107      */
108     int (*restartWiFi)(void);
109 
110     /**
111      * @brief 连接指定bssid的与配网ssid同名的Wi-Fi
112      *
113      *        securityType来源于getAPScanResult扫描结果
114      *        目标bssid来源于指定ssid扫描得到的列表
115      *        接口通常在扫描指定ssid后调用, 用于设备切换到更好的Wi-Fi
116      *
117      * @param securityType [IN] 目标Wi-Fi的加密类型
118      * @param bssid [IN] 目标Wi-Fi的bssid
119      * @param bssidLen [IN] bssid的长度
120      * @return 返回值必须为0
121      */
122     int (*connectWiFiByBssid)(int securityType, const unsigned char *bssid, unsigned int bssidLen);
123 
124     /**
125      * @brief 获取上一次连接WiFi失败原因
126      *
127      *        1、此接口由厂家实现, 当前在调用HILINK_ConnectWiFiByBssid接口后, 调用此接口获取连接失败原因
128      *        2、指定BSSID连接后将轮询调用此接口, 若连接动作未有结果, 函数返回-1, 直到连接动作有结果
129      *        3、如果WiFi连接成功, 出参result返回0
130      *
131      * @param result [OUT] 存放连接WiFi失败原因的内存指针
132      * @return 0表示成功, 其他表示失败
133      */
134     int (*lastConnResult)(int *result);
135 } WiFiRecoveryApi;
136 
137 /**
138  * @brief 获取本地IP
139  *
140  * @param localIp [IN] 缓冲区, 为点分十进制格式 eg. 192.168.1.2
141  * @param len [OUT] 存放IP的缓冲长度
142  * @return 0表示成功, 其他表示失败
143  */
144 int HILINK_GetLocalIp(char *localIp, unsigned char len);
145 
146 /**
147  * @brief 获取本地广播地址,用于app广播发现
148  *
149  * @param broadcastIp [IN] 缓冲区, 为点分十进制格式 eg. 192.168.1.255
150  * @param len [OUT] 存放IP的缓冲长度
151  * @return 0成功, 非0不支持app广播发现
152  */
153 int HILINK_GetLocalBroadcastIp(char *broadcastIp, unsigned char len);
154 
155 /**
156  * @brief 获取网络MAC地址 mac格式为{0xa1,0xb2,0xc3,0xd4,0xe5,0xf6}
157  *
158  * @param mac [IN] 存放MAC的缓冲区
159  * @param len [OUT] 缓冲区长度, 为MAC_ADDRESS_LEN
160  * @return 0表示成功, 其他表示失败
161  */
162 int HILINK_GetMacAddr(unsigned char *mac, unsigned char len);
163 
164 /**
165  * @brief 获取当前连接Wi-Fi的ssid
166  *
167  * @param ssid [IN] 存放ssid的缓冲区
168  * @param ssidLen [OUT] 缓冲区长度
169  * @return 0表示成功, 其他表示失败
170  */
171 int HILINK_GetWiFiSsid(char *ssid, unsigned int *ssidLen);
172 
173 /**
174  * @brief 设置Wi-Fi的连接信息
175  *
176  *        ssid和pwd为空表示清除WiFi信息, 设置的Wi-Fi信息需要持久化, 以确保设备重启后依然可以连接Wi-Fi
177  *
178  * @param ssid [OUT] 待连接Wi-Fi的ssid
179  * @param ssidLen [OUT] ssid的长度
180  * @param pwd [OUT] 待连接Wi-Fi的密码
181  * @param pwdLen [OUT] Wi-Fi密码长度
182  * @return 0表示成功, 其他表示失败
183  * 注意: (1)ssid和pwd为空表示清除wifi信息
184  *       (2)设置的wifi信息需要持久化,确保设备重启后依然可以连接wifi
185  */
186 int HILINK_SetWiFiInfo(const char *ssid, unsigned int ssidLen, const char *pwd, unsigned int pwdLen);
187 
188 /**
189  * @brief 重新启动WiFi模块
190  *
191  *        当设备WiFi断开后, 此函数会被调用重启WiFi模块;
192  *
193  * @return 0表示成功, 其他表示失败
194  */
195 int HILINK_RestartWiFi(void);
196 
197 /**
198  * @brief 连接指定bssid的与配网ssid同名的Wi-Fi
199  *
200  *        securityType来源于HILINK_GetAPScanResult扫描结果
201  *        目标bssid来源于指定ssid扫描得到的列表
202  *        接口通常在扫描指定ssid后调用, 用于设备切换到更好的Wi-Fi
203  *
204  * @param securityType [IN] 目标Wi-Fi的加密类型
205  * @param bssid [IN] 目标Wi-Fi的bssid
206  * @param bssidLen [IN] bssid的长度
207  * @return 0表示成功, 其他表示失败
208  */
209 int HILINK_ConnectWiFiByBssid(int securityType, const unsigned char *bssid, unsigned int bssidLen);
210 
211 /**
212  * @brief 获取上一次连接WiFi失败原因
213  *
214  *        1、此接口由厂家实现, 当前在调用HILINK_ConnectWiFiByBssid接口后, 调用此接口获取连接失败原因;
215  *        2、指定BSSID连接后将轮询调用此接口, 若连接动作未有结果, 函数返回-1, 直到连接动作有结果;
216  *        3、如果WiFi连接成功, 出参result返回0;
217  *
218  * @param result [OUT] 存放连接WiFi失败原因的内存指针
219  * @return 0表示成功, 其他表示失败
220  */
221 int HILINK_GetLastConnectResult(int *result);
222 
223 /**
224  * @brief 根据参数扫描周围AP信息
225  *
226  *        此接口指定了BSSID、SSID以及频率相关的类型扫描, 目前只用了SSID方式
227  *
228  * @param param [IN] 扫描AP信息时指定的目标参数
229  * @return 0表示成功, 其他表示失败
230  */
231 int HILINK_ScanAP(const HILINK_APScanParam *param);
232 
233 /**
234  * @brief SDK调用HILINK_ScanAP后, 调用此函数获取扫描周围AP信息的结果
235  *
236  *        scanList中apList字段内存由外部申请, SDK进行释放
237  *
238  * @param scanList [OUT] 扫描得到的目标AP列表以及个数
239  * @return 0表示成功, 1表示扫描未完成, 其他表示失败
240  */
241 int HILINK_GetAPScanResult(HILINK_APList *scanList);
242 
243  /**
244  * @brief 厂家实现网络优化相关功能函数,通过此接口注册给SDK使用
245  *
246  * @param cb [IN] 当前SDK仅在鸿蒙系统实现以下接口,鸿蒙系统可直接注册使用,其它形态需自行实现:
247  *                  HILINK_ConnectWiFiByBssid、HILINK_ScanAP、HILINK_GetAPScanResult、
248  *                  HILINK_RestartWiFi、HILINK_GetLastConnectResult
249  *                  以上接口只在部分芯片上验证通过,如果直接使用请自行验证,以保证功能正常。
250  *                getWifiRecoveryType需要厂商实现
251  * @param cbSize [IN] 回调函数结构体的大小,即sizeof(WiFiRecoveryApi)
252  * @warning 使用此接口需配备特定SDK版本,否则启动后功能不生效
253  */
254 int HILINK_RegWiFiRecoveryCallback(const WiFiRecoveryApi *cb, unsigned int cbSize);
255 
256 /**
257  * @brief 设置WiFi自恢复时的相关参数
258  *
259  * @param scanTimes [IN] WiFi自恢复时扫描AP的最大次数
260  * @param connectTimes [IN] WiFi自恢复时每个AP最大连接次数
261  * @return 正常返回0,异常返回其他错误码
262  */
263 int HILINK_SetWiFiRecoveryTimesParam(unsigned int scanTimes, unsigned int connectTimes);
264 
265 /**
266  * @brief 设置差WiFi环境下心跳超时离线导致重连WiFi的阈值
267  *
268  * @param hbLimit [IN] 心跳超时离线导致重连WiFi的阈值
269  * @return 正常返回0,异常返回其他错误码
270  */
271 int HILINK_SetHeartbeatLimit(unsigned int hbLimit);
272 
273 /**
274  * @brief 断开并重连WiFi
275  *
276  */
277 void HILINK_ReconnectWiFi(void);
278 
279 /**
280  * @brief 触发连接WiFi
281  *
282  * @return 0表示成功, 其他表示失败
283  */
284 int HILINK_ConnectWiFi(void);
285 
286 /**
287  * @brief 获取网络状态
288  *
289  * @param state [OUT] 返回0表示网络断开或已连接但网卡未分配得ip, 返回1表示已连接且分配得ip
290  * @return 0表示成功, 其他表示失败
291  */
292 int HILINK_GetNetworkState(int *state);
293 
294 /**
295  * @brief 获取当前连接的WiFi的 bssid
296  *
297  * @param bssid [IN] 存放bssid的缓冲区
298  * @param bssidLen [OUT IN] 出参表示缓冲区长度, 入参表示WiFi bssid长度
299  * @return 0表示成功, 其他表示失败
300  */
301 int HILINK_GetWiFiBssid(unsigned char *bssid, unsigned char *bssidLen);
302 
303 /**
304  * @brief 获取当前连接的WiFi信号强度, 单位db
305  *
306  * @param rssi [OUT] 信号强度
307  * @return 0表示成功, 其他表示失败
308  */
309 int HILINK_GetWiFiRssi(signed char *rssi);
310 
311 unsigned int get_wifi_recovery_type(void);
312 
313 #ifdef __cplusplus
314 }
315 #endif
316 #endif /* HILINK_NETWORK_ADAPTER_H */
317