• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# WLAN<a name="ZH-CN_TOPIC_0000001078436908"></a>
2
3-   [简介](#section11660541593)
4-   [目录](#section161941989596)
5-   [接口说明](#section1564411661810)
6-   [使用说明](#section19806524151819)
7-   [相关仓](#section1371113476307)
8
9## 简介<a name="section11660541593"></a>
10
11该仓下主要包含WLAN相关HDI接口与实现,提供功能包括:
12
131.  创建和销毁HAL层和WLAN驱动的通道;
142.  获取本设备支持的WLAN特性;
153.  创建特性所对应的实例等。
16
17**图 1**  WLAN驱动模块架构图<a name="fig14142101381112"></a>
18![](figures/wlan-driver-module-architecture_zh.png "wlan-driver-module-architecture_zh")
19
20## 目录<a name="section161941989596"></a>
21
22WLAN源代码目录结构如下所示:
23
24```
25/drivers/peripheral/wlan
26├── client             # 实现用户态与内核态通信的client模块存放目录
27│   └── include       # client相关头文件存放目录
28│   └── src           # client代码存放目录
29├── hal                # hal层框架代码
30│   └── include       # hal内部头文件存放目录
31│   └── src           # hal层代码的具体实现存放目录
32├── interfaces         # 对外接口存放目录
33│   └── include       # 对外提供的接口头文件存放目录
34```
35
36## 接口说明<a name="section1564411661810"></a>
37
38WLAN驱动HAL模块提供给Wi-Fi service可直接调用的能力接口,主要功能有:创建/销毁 IWiFi对象、设置MAC地址等。提供的接口说明如下表所示:
39
40**表 1**  hal层对外接口
41
42<a name="table1521573319472"></a>
43<table><thead align="left"><tr id="row121519334474"><th class="cellrowborder" valign="top" width="15.950000000000001%" id="mcps1.2.4.1.1"><p id="p1221510339475"><a name="p1221510339475"></a><a name="p1221510339475"></a>头文件</p>
44</th>
45<th class="cellrowborder" valign="top" width="58.91%" id="mcps1.2.4.1.2"><p id="p0215153344716"><a name="p0215153344716"></a><a name="p0215153344716"></a>接口名称</p>
46</th>
47<th class="cellrowborder" valign="top" width="25.14%" id="mcps1.2.4.1.3"><p id="p1421503315478"><a name="p1421503315478"></a><a name="p1421503315478"></a>功能描述</p>
48</th>
49</tr>
50</thead>
51<tbody><tr id="row112150333476"><td class="cellrowborder" rowspan="12" valign="top" width="15.950000000000001%" headers="mcps1.2.4.1.1 "><p id="p2155710125317"><a name="p2155710125317"></a><a name="p2155710125317"></a>wifi_hal.h</p>
52<p id="p189132019183"><a name="p189132019183"></a><a name="p189132019183"></a></p>
53</td>
54<td class="cellrowborder" valign="top" width="58.91%" headers="mcps1.2.4.1.2 "><p id="p363110387399"><a name="p363110387399"></a><a name="p363110387399"></a>int32_t WifiConstruct(struct IWiFi **wifiInstance);</p>
55</td>
56<td class="cellrowborder" valign="top" width="25.14%" headers="mcps1.2.4.1.3 "><p id="p1363012387393"><a name="p1363012387393"></a><a name="p1363012387393"></a>创建IWiFi对象,提供IWiFi基本能力。</p>
57</td>
58</tr>
59<tr id="row112151233194714"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p7629163817393"><a name="p7629163817393"></a><a name="p7629163817393"></a>int32_t WifiDestruct(struct IWiFi **wifiInstance);</p>
60</td>
61<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p2627638173917"><a name="p2627638173917"></a><a name="p2627638173917"></a>销毁IWiFi对象。</p>
62</td>
63</tr>
64<tr id="row1214611564542"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p4950434142314"><a name="p4950434142314"></a><a name="p4950434142314"></a>int32_t (*start)(struct IWiFi *);</p>
65</td>
66<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1162543816393"><a name="p1162543816393"></a><a name="p1162543816393"></a>创建HAL和驱动之间的通道及获取驱动支持的网卡信息。</p>
67</td>
68</tr>
69<tr id="row167876105514"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p162433816392"><a name="p162433816392"></a><a name="p162433816392"></a>int32_t (*stop)(struct IWiFi *);</p>
70</td>
71<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p186235383393"><a name="p186235383393"></a><a name="p186235383393"></a>销毁通道。</p>
72</td>
73</tr>
74<tr id="row77607815516"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p6760128135514"><a name="p6760128135514"></a><a name="p6760128135514"></a>int32_t (*getSupportFeature)(uint8_t *supType, uint32_t size);</p>
75</td>
76<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1176014845516"><a name="p1176014845516"></a><a name="p1176014845516"></a>获取该设备支持的WLAN特性(不考虑当前的使用状态)。</p>
77</td>
78</tr>
79<tr id="row93918373572"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p2039103714572"><a name="p2039103714572"></a><a name="p2039103714572"></a>int32_t (*getSupportCombo)(uint64_t *combo, uint32_t size);</p>
80</td>
81<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p13916375570"><a name="p13916375570"></a><a name="p13916375570"></a>获取多网卡共存情况。</p>
82</td>
83</tr>
84<tr id="row25031321195815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p13503142195814"><a name="p13503142195814"></a><a name="p13503142195814"></a>int32_t (*createFeature)(int32_t type, struct IWiFiBaseFeature **ifeature);</p>
85</td>
86<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p11503172115585"><a name="p11503172115585"></a><a name="p11503172115585"></a>根据输入类型创建对应的特性。</p>
87</td>
88</tr>
89<tr id="row14371833185819"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1443863325820"><a name="p1443863325820"></a><a name="p1443863325820"></a>int32_t (*getFeatureByIfName)(const char *ifName, struct IWiFiBaseFeature **ifeature);</p>
90</td>
91<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1343819334584"><a name="p1343819334584"></a><a name="p1343819334584"></a>通过网络接口名字获取对应的特性。</p>
92</td>
93</tr>
94<tr id="row03398561587"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1933965615812"><a name="p1933965615812"></a><a name="p1933965615812"></a>int32_t (*registerEventCallback)(CallbackFunc cbFunc);</p>
95</td>
96<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p103396560587"><a name="p103396560587"></a><a name="p103396560587"></a>注册IWiFi的回调函数,监听异步事件。</p>
97</td>
98</tr>
99<tr id="row894162955918"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1694112914590"><a name="p1694112914590"></a><a name="p1694112914590"></a>int32_t (*unRegisterEventCallback)(void);</p>
100</td>
101<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p18948295597"><a name="p18948295597"></a><a name="p18948295597"></a>去注册IWiFi的回调函数。</p>
102</td>
103</tr>
104<tr id="row122731451103"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p2273125104"><a name="p2273125104"></a><a name="p2273125104"></a>int32_t (*destroyFeature)(struct IWiFiBaseFeature *ifeature);</p>
105</td>
106<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p92731553017"><a name="p92731553017"></a><a name="p92731553017"></a>销毁对应的特性。</p>
107</td>
108</tr>
109<tr id="row172153335473"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1292417115515"><a name="p1292417115515"></a><a name="p1292417115515"></a>int32_t (*resetDriver)(const uint8_t chipId);</p>
110</td>
111<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p17272317145516"><a name="p17272317145516"></a><a name="p17272317145516"></a>WLAN驱动进行重置。</p>
112</td>
113</tr>
114<tr id="row27321001058"><td class="cellrowborder" rowspan="2" valign="top" width="15.950000000000001%" headers="mcps1.2.4.1.1 "><p id="p134208191041"><a name="p134208191041"></a><a name="p134208191041"></a>wifi_hal_ap_feature.h</p>
115</td>
116<td class="cellrowborder" valign="top" width="58.91%" headers="mcps1.2.4.1.2 "><p id="p77321105516"><a name="p77321105516"></a><a name="p77321105516"></a>int32_t (*getAsscociatedStas)(const struct IWiFiAp *apFeature, struct StaInfo *staInfo, uint32_t count, uint32_t *num);</p>
117</td>
118<td class="cellrowborder" valign="top" width="25.14%" headers="mcps1.2.4.1.3 "><p id="p1673213014513"><a name="p1673213014513"></a><a name="p1673213014513"></a>获取连接上的所有STA的信息(目前只包含MAC地址)。</p>
119</td>
120</tr>
121<tr id="row39802291664"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p149801729465"><a name="p149801729465"></a><a name="p149801729465"></a>int32_t (*setCountryCode)(const struct IWiFiAp *apFeature, const char *code, uint32_t len);</p>
122</td>
123<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p098022910610"><a name="p098022910610"></a><a name="p098022910610"></a>设置国家码。</p>
124</td>
125</tr>
126<tr id="row14149145512411"><td class="cellrowborder" rowspan="1" valign="top" width="15.950000000000001%" headers="mcps1.2.4.1.1 "><p id="p18149155246"><a name="p18149155246"></a><a name="p18149155246"></a>wifi_hal_sta_feature.h</p>
127</td>
128<td class="cellrowborder" valign="top" width="58.91%" headers="mcps1.2.4.1.2 "><p id="p17149165511414"><a name="p17149165511414"></a><a name="p17149165511414"></a>int32_t (*setScanningMacAddres)(const struct IWiFiSta *staFeature, unsigned char *scanMac, uint8_t len);</p>
129</td>
130<td class="cellrowborder" valign="top" width="25.14%" headers="mcps1.2.4.1.3 "><p id="p181491255149"><a name="p181491255149"></a><a name="p181491255149"></a>设置扫描单个MAC地址。</p>
131</td>
132</tr>
133<tr id="row451796205011"><td class="cellrowborder" rowspan="8" valign="top" width="15.950000000000001%" headers="mcps1.2.4.1.1 "><p id="p2659417135013"><a name="p2659417135013"></a><a name="p2659417135013"></a>wifi_hal_base_feature.h</p>
134</td>
135<td class="cellrowborder" valign="top" width="58.91%" headers="mcps1.2.4.1.2 "><p id="p73831421111010"><a name="p73831421111010"></a><a name="p73831421111010"></a>const char *(*getNetworkIfaceName)(const struct IWiFiBaseFeature *baseFeature);</p>
136</td>
137<td class="cellrowborder" valign="top" width="25.14%" headers="mcps1.2.4.1.3 "><p id="p16363321101014"><a name="p16363321101014"></a><a name="p16363321101014"></a>获取网络接口的名字。</p>
138</td>
139</tr>
140<tr id="row1657914017107"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15117233152315"><a name="p15117233152315"></a><a name="p15117233152315"></a>int32_t (*getFeatureType)(const struct IWiFiBaseFeature *);</p>
141</td>
142<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p195182610507"><a name="p195182610507"></a><a name="p195182610507"></a>获取特性的类型。</p>
143</td>
144</tr>
145<tr id="row5518663503"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p125181260501"><a name="p125181260501"></a><a name="p125181260501"></a>int32_t (*setMacAddress)(const struct IWiFiBaseFeature *, unsigned char *, uint8_t);</p>
146</td>
147<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1151815635014"><a name="p1151815635014"></a><a name="p1151815635014"></a>设置MAC地址。</p>
148</td>
149</tr>
150<tr id="row851915617503"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p20519865500"><a name="p20519865500"></a><a name="p20519865500"></a>int32_t (*getDeviceMacAddress)(const struct IWiFiBaseFeature *, unsigned char *, uint8_t);</p>
151</td>
152<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p14519469509"><a name="p14519469509"></a><a name="p14519469509"></a>获取设备持久化的MAC地址。</p>
153</td>
154</tr>
155<tr id="row986761516115"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p2867181581116"><a name="p2867181581116"></a><a name="p2867181581116"></a>int32_t (*getValidFreqsWithBand)(const struct IWiFiBaseFeature *baseFeature, int32_t band, int32_t *freqs, uint32_t count, uint32_t *num);</p>
156</td>
157<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p15867101551112"><a name="p15867101551112"></a><a name="p15867101551112"></a>获取指定频段(2.4G或者5G)下支持的频率。</p>
158</td>
159</tr>
160<tr id="row18232258171117"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p145195620502"><a name="p145195620502"></a><a name="p145195620502"></a>int32_t (*setTxPower)(const struct IWiFiBaseFeature *, int32_t);</p>
161</td>
162<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p175191863503"><a name="p175191863503"></a><a name="p175191863503"></a>设置发射功率。</p>
163</td>
164</tr>
165<tr id="row1744948201219"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p7449128101215"><a name="p7449128101215"></a><a name="p7449128101215"></a>int32_t (*getChipId)(const struct IWiFiBaseFeature *baseFeature, uint8_t *chipId);</p>
166</td>
167<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1244998131219"><a name="p1244998131219"></a><a name="p1244998131219"></a>获得当前驱动的芯片ID。</p>
168</td>
169</tr>
170<tr id="row34351131216"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p743711161213"><a name="p743711161213"></a><a name="p743711161213"></a>int32_t (*getIfNamesByChipId)(const uint8_t chipId, char **ifNames, uint32_t *num);</p>
171</td>
172<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p164361118121"><a name="p164361118121"></a><a name="p164361118121"></a>通过芯片ID获得当前芯片所有的网卡名。</p>
173</td>
174</tr>
175</tbody>
176</table>
177
178## 使用说明<a name="section19806524151819"></a>
179
180HAL模块使用步骤:
181
1821.  使用WifiConstruct创建一个WiFi实体。
1832.  用创建的WiFi实体调用start开启HAL和驱动之间的通道,获得驱动网卡信息。
1843.  通过createFeature一个apFeature或者staFeature。后面可通过这些Feature去调用具体的实现接口,下面基于创建的apFeature。
1854.  调用和使用相关接口:如setMacAddress设置MAC地址、getDeviceMacAddress获取设备的MAC地址等。
1865.  调用destroyFeature,销毁掉创建的这个Feature。
1876.  调用stop销毁创建的通道。
1887.  执行WifiDestruct销毁创建的WiFi实体。
189
190代码示例:
191
192```
193#include "wifi_hal.h"
194#include "wifi_hal_sta_feature.h"
195#include "wifi_hal_ap_feature.h"
196#include "wifi_hal_cmd.h"
197#include "wifi_hal_event.h"
198
199#define MAC_LEN 6
200
201static void *hal_main()
202{
203    int ret;
204    struct IWiFi *wifi;
205
206    /* 创建一个WiFi实体 */
207    ret = WifiConstruct(&wifi);
208    if (ret != 0 || wifi == NULL) {
209        return;
210    }
211
212    /* 开启HAL和驱动之间的通道 */
213    ret = wifi->start(wifi);
214    if (ret != 0) {
215        return;
216    }
217
218    /* 创建apFeature */
219    ret = wifi->createFeature(PROTOCOL_80211_IFTYPE_AP, (struct IWiFiBaseFeature **)&apFeature);
220    if (ret != 0) {
221        return;
222    }
223
224    /* 获取设备的MAC地址 */
225    unsigned char mac[MAC_LEN] = {0};
226    ret = apFeature->baseFeature.getDeviceMacAddress((struct IWiFiBaseFeature *)apFeature, mac, MAC_LEN);
227    if (ret != 0) {
228        return;
229    }
230
231    /* 销毁掉创建的这个Feature */
232    ret = wifi->destroyFeature((struct IWiFiBaseFeature *)apFeature);
233    if (ret != 0) {
234        return;
235    }
236
237    /* 销毁创建的通道 */
238    ret = wifi->stop(wifi);
239    if (ret != 0) {
240        return;
241    }
242
243    /* 销毁创建的WiFi实体 */
244    ret = WifiDestruct(&wifi);
245    if (ret != 0) {
246        return;
247    }
248    return;
249}
250```
251
252## 相关仓<a name="section1371113476307"></a>
253
254[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md)
255
256[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md)
257
258[drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md)
259
260[drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md)
261
262drivers\_peripheral
263
264