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