• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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) 参数说明:
25262) 返回值:
27   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
28```
29
30#### 2. WIFI模块关闭接口
31
32```c
33unsigned int WifiDisable(void);
341) 参数说明:
35362) 返回值:
37   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
38```
39
40#### 3. WIFI模块启动STA模式:
41
42```c
43unsigned int WifiStartStation(void);
441) 参数说明:
45462) 返回值:
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) 参数说明:
86872) 返回值:
88   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
89```
90
91#### 8. WIFI模块停止扫描热点:
92
93```c
94unsigned int WifiAbortScan(void);
951) 参数说明:
96972) 返回值:
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) 参数说明:
1291302) 返回值:
131   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
132```
133
134#### 12. WIFI模块关闭AP模式:
135
136```c
137unsigned int WifiStopAP(void);
1381) 参数说明:
1391402) 返回值:
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