1# WIFI概述 2 3## 简介 4 5- wifi模块基于RK平台开发,实现如下功能:建立/关闭WLAN热点、扫描、关联WLAN热点。 6 7- wifi模块支持2种模式: STA/AP: 8 9 - AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接 10- Sta模式: Station, 类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。 11 12## 接口说明 13 14### 包含头文件: 15 16```c 17#include "lz_hardware.h 18``` 19 20#### 1. WIFI模块使能接口 21 22```c 23unsigned int WifiEnable(void); 241) 参数说明: 25 无 262) 返回值: 27 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 28``` 29 30#### 2. WIFI模块关闭接口 31 32```c 33unsigned int WifiDisable(void); 341) 参数说明: 35 无 362) 返回值: 37 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 38``` 39 40#### 3. WIFI模块启动STA模式: 41 42```c 43unsigned int WifiStartStation(void); 441) 参数说明: 45 无 462) 返回值: 47 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 48``` 49 50#### 4. WIFI模块连接热点: 51 52```c 53unsigned int WifiConnect(unsigned char *ssid, unsigned char *passphrase); 541) 参数说明: 55 ssid: 热点名称 56 passphrase: 热点密码 572) 返回值: 58 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 59``` 60 61#### 5. WIFI模块获取连接信息: 62 63```c 64unsigned int WifiGetConnectInfo(WifiConnInfo *info); 651) 参数说明: 66 info: 连接信息包括ip,连接热点信息等,详见头文件wifi.h 672) 返回值: 68 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 69``` 70 71#### 6. WIFI模块断开连接: 72 73```c 74unsigned int WifiDisconnect(unsigned short reasonCode); 751) 参数说明: 76 reasonCode:断开连接代码-可使用 0 772) 返回值: 78 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 79``` 80 81#### 7. WIFI模块扫描热点: 82 83```c 84unsigned int WifiStartScan(void); 851) 参数说明: 86 无 872) 返回值: 88 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 89``` 90 91#### 8. WIFI模块停止扫描热点: 92 93```c 94unsigned int WifiAbortScan(void); 951) 参数说明: 96 无 972) 返回值: 98 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 99``` 100 101#### 9. WIFI模块获取扫描结果: 102 103```c 104unsigned int WifiGetScanResult(WifiScanResult **result, unsigned int *size); 1051) 参数说明: 106 result: 扫描结果-包含热点名称,mac地址等等 107 size: 热点数量 1082) 返回值: 109 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 110``` 111 112#### 10. WIFI模块AP模式下配置接口: 113 114```c 115unsigned int WifiConfigAP(unsigned char *ssid, unsigned char *preSharedKey, unsigned short channel); 1161) 参数说明: 117 ssid: 共享热点名称 118 preSharedKey: 共享热点密码 119 channel: 通道id 1202) 返回值: 121 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 122``` 123 124#### 11. WIFI模块启动AP模式: 125 126```c 127unsigned int WifiStartAP(void); 1281) 参数说明: 129 无 1302) 返回值: 131 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 132``` 133 134#### 12. WIFI模块关闭AP模式: 135 136```c 137unsigned int WifiStopAP(void); 1381) 参数说明: 139 无 1402) 返回值: 141 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 142``` 143 144## 使用实例 145 146```c 147#include "lz_hardware.h" 148#define LOG_FACTORY "WIFI_TEST" 149 150unsigned int sta_sample() 151{ 152 uint32_t ret = LZ_HARDWARE_SUCCESS; 153 unsigned int size = 0; 154 WifiConnInfo connInfo; 155 unsigned short reasonCode = LZ_HARDWARE_SUCCESS; 156 WifiScanResult *pResult; 157 int retry = 10; 158 159 //使能wifi 160 if (EnableWifi() != LZ_HARDWARE_SUCCESS) { 161 LZ_HARDWARE_LOGE(LOG_FACTORY, "EnableWifi error"); 162 return LZ_HARDWARE_FAILURE; 163 } 164 165 //扫描热点 166 if (WifiStartScan() != LZ_HARDWARE_SUCCESS) { 167 LZ_HARDWARE_LOGE(LOG_FACTORY, "Scan error"); 168 return LZ_HARDWARE_FAILURE; 169 } 170 171 //获取扫描结果 172 retry = 10; 173 pResult = (WifiScanResult *)malloc(sizeof(WifiScanResult) * WIFI_SCAN_HOTSPOT_LIMIT); 174 while (retry) { 175 if (WifiGetScanResult(&pResult, &size) == LZ_HARDWARE_SUCCESS) { 176 break; 177 } 178 179 ToyMsleep(1000); 180 retry--; 181 } 182 183 if (size <= 0) { 184 LZ_HARDWARE_LOGE(LOG_FACTORY, "Scan nothing error (size:%d)", size); 185 return LZ_HARDWARE_FAILURE; 186 } 187 188 LZ_HARDWARE_LOGI(LOG_FACTORY, "GetScanResult done"); 189 190 if (size > 0) { 191 LZ_HARDWARE_LOGI(LOG_FACTORY, "BSSID SSID RSSI Channel"); 192 LZ_HARDWARE_LOGI(LOG_FACTORY, "========================================"); 193 for (int i = 0; i < size; i++) { 194 char bssid[18]; 195 char ssid[33]; 196 sprintf(bssid, "%02x:%02x:%02x:%02x:%02x:%02x", 197 pResult[i].bssid[0], pResult[i].bssid[1], pResult[i].bssid[2], 198 pResult[i].bssid[3], pResult[i].bssid[4], pResult[i].bssid[5]); 199 sprintf(ssid, "%-32s", pResult[i].ssid); 200 LZ_HARDWARE_LOGI(LOG_FACTORY, "%s %s %d %u", 201 bssid, 202 ssid, 203 pResult[i].rssi, 204 pResult[i].frequency); 205 } 206 LZ_HARDWARE_LOGI(LOG_FACTORY, "========================================"); 207 } 208 209 //连接热点 210 WifiConnect(WIFI_SSID, WIFI_PSW); 211 if (WifiConnect(WIFI_SSID, WIFI_PSW) != LZ_HARDWARE_SUCCESS) { 212 LZ_HARDWARE_LOGE(LOG_FACTORY, "WifiConnect error"); 213 return LZ_HARDWARE_FAILURE; 214 } 215 216 LZ_HARDWARE_LOGI(LOG_FACTORY, "ConnectTo (%s) done", WIFI_SSID); 217 218 memset(&connInfo, 0, sizeof(WifiConnInfo)); 219 retry = 15; 220 while (retry) { 221 if (WifiGetConnectInfo(&connInfo) == LZ_HARDWARE_SUCCESS) { 222 if (connInfo.status == LZ_HARDWARE_WIFI_CONNECTED) { 223 goto connect_done; 224 } 225 } 226 227 ToyMsleep(1); 228 retry--; 229 } 230 231 LZ_HARDWARE_LOGI(LOG_FACTORY, "Connect timeout (%s) ", WIFI_SSID); 232 return LZ_HARDWARE_FAILURE; 233 234connect_done: 235 //断开连接 236 if (WifiDisconnect(reasonCode) != LZ_HARDWARE_SUCCESS) { 237 LZ_HARDWARE_LOGE(LOG_FACTORY, "Disconnect error"); 238 return LZ_HARDWARE_FAILURE; 239 } 240 241 LZ_HARDWARE_LOGI(LOG_FACTORY, "Disconnect done"); 242 243 //关闭wifi 244 if (WifiDisable() != LZ_HARDWARE_SUCCESS) { 245 LZ_HARDWARE_LOGE(LOG_FACTORY, "DisableWifi error"); 246 return LZ_HARDWARE_FAILURE; 247 } 248 249 LZ_HARDWARE_LOGI(LOG_FACTORY, "DisableWifi done"); 250 return ret; 251} 252``` 253