# WLAN - [简介](#section11660541593) - [目录](#section161941989596) - [接口说明](#section1564411661810) - [使用说明](#section19806524151819) - [相关仓](#section1371113476307) ## 简介 该仓下主要包含WLAN相关HDI接口与实现,提供功能包括: 1. 创建和销毁HAL层和WLAN驱动的通道; 2. 获取本设备支持的WLAN特性; 3. 创建特性所对应的实例等。 **图 1** WLAN驱动模块架构图 ![](figures/wlan-driver-module-architecture_zh.png "wlan-driver-module-architecture_zh") ## 目录 WLAN源代码目录结构如下所示: ``` /drivers/peripheral/wlan ├── client # 实现用户态与内核态通信的client模块存放目录 │ └── include # client相关头文件存放目录 │ └── src # client代码存放目录 ├── hal # hal层框架代码 │ └── include # hal内部头文件存放目录 │ └── src # hal层代码的具体实现存放目录 ├── interfaces # 对外接口存放目录 │ └── include # 对外提供的接口头文件存放目录 ``` ## 接口说明 WLAN驱动HAL模块提供给Wi-Fi service可直接调用的能力接口,主要功能有:创建/销毁 IWiFi对象、设置MAC地址等。提供的接口说明如下表所示: **表 1** hal层对外接口

头文件

接口名称

功能描述

wifi_hal.h

int32_t WifiConstruct(struct IWiFi **wifiInstance);

创建IWiFi对象,提供IWiFi基本能力。

int32_t WifiDestruct(struct IWiFi **wifiInstance);

销毁IWiFi对象。

int32_t (*start)(struct IWiFi *);

创建HAL和驱动之间的通道及获取驱动支持的网卡信息。

int32_t (*stop)(struct IWiFi *);

销毁通道。

int32_t (*getSupportFeature)(uint8_t *supType, uint32_t size);

获取该设备支持的WLAN特性(不考虑当前的使用状态)。

int32_t (*getSupportCombo)(uint64_t *combo, uint32_t size);

获取多网卡共存情况。

int32_t (*createFeature)(int32_t type, struct IWiFiBaseFeature **ifeature);

根据输入类型创建对应的特性。

int32_t (*getFeatureByIfName)(const char *ifName, struct IWiFiBaseFeature **ifeature);

通过网络接口名字获取对应的特性。

int32_t (*registerEventCallback)(CallbackFunc cbFunc);

注册IWiFi的回调函数,监听异步事件。

int32_t (*unRegisterEventCallback)(void);

去注册IWiFi的回调函数。

int32_t (*destroyFeature)(struct IWiFiBaseFeature *ifeature);

销毁对应的特性。

int32_t (*resetDriver)(const uint8_t chipId);

WLAN驱动进行重置。

wifi_hal_ap_feature.h

int32_t (*getAsscociatedStas)(const struct IWiFiAp *apFeature, struct StaInfo *staInfo, uint32_t count, uint32_t *num);

获取连接上的所有STA的信息(目前只包含MAC地址)。

int32_t (*setCountryCode)(const struct IWiFiAp *apFeature, const char *code, uint32_t len);

设置国家码。

wifi_hal_sta_feature.h

int32_t (*setScanningMacAddres)(const struct IWiFiSta *staFeature, unsigned char *scanMac, uint8_t len);

设置扫描单个MAC地址。

wifi_hal_base_feature.h

const char *(*getNetworkIfaceName)(const struct IWiFiBaseFeature *baseFeature);

获取网络接口的名字。

int32_t (*getFeatureType)(const struct IWiFiBaseFeature *);

获取特性的类型。

int32_t (*setMacAddress)(const struct IWiFiBaseFeature *, unsigned char *, uint8_t);

设置MAC地址。

int32_t (*getDeviceMacAddress)(const struct IWiFiBaseFeature *, unsigned char *, uint8_t);

获取设备持久化的MAC地址。

int32_t (*getValidFreqsWithBand)(const struct IWiFiBaseFeature *baseFeature, int32_t band, int32_t *freqs, uint32_t count, uint32_t *num);

获取指定频段(2.4G或者5G)下支持的频率。

int32_t (*setTxPower)(const struct IWiFiBaseFeature *, int32_t);

设置发射功率。

int32_t (*getChipId)(const struct IWiFiBaseFeature *baseFeature, uint8_t *chipId);

获得当前驱动的芯片ID。

int32_t (*getIfNamesByChipId)(const uint8_t chipId, char **ifNames, uint32_t *num);

通过芯片ID获得当前芯片所有的网卡名。

## 使用说明 HAL模块使用步骤: 1. 使用WifiConstruct创建一个WiFi实体。 2. 用创建的WiFi实体调用start开启HAL和驱动之间的通道,获得驱动网卡信息。 3. 通过createFeature一个apFeature或者staFeature。后面可通过这些Feature去调用具体的实现接口,下面基于创建的apFeature。 4. 调用和使用相关接口:如setMacAddress设置MAC地址、getDeviceMacAddress获取设备的MAC地址等。 5. 调用destroyFeature,销毁掉创建的这个Feature。 6. 调用stop销毁创建的通道。 7. 执行WifiDestruct销毁创建的WiFi实体。 代码示例: ``` #include "wifi_hal.h" #include "wifi_hal_sta_feature.h" #include "wifi_hal_ap_feature.h" #include "wifi_hal_cmd.h" #include "wifi_hal_event.h" #define MAC_LEN 6 static void *hal_main() { int ret; struct IWiFi *wifi; /* 创建一个WiFi实体 */ ret = WifiConstruct(&wifi); if (ret != 0 || wifi == NULL) { return; } /* 开启HAL和驱动之间的通道 */ ret = wifi->start(wifi); if (ret != 0) { return; } /* 创建apFeature */ ret = wifi->createFeature(PROTOCOL_80211_IFTYPE_AP, (struct IWiFiBaseFeature **)&apFeature); if (ret != 0) { return; } /* 获取设备的MAC地址 */ unsigned char mac[MAC_LEN] = {0}; ret = apFeature->baseFeature.getDeviceMacAddress((struct IWiFiBaseFeature *)apFeature, mac, MAC_LEN); if (ret != 0) { return; } /* 销毁掉创建的这个Feature */ ret = wifi->destroyFeature((struct IWiFiBaseFeature *)apFeature); if (ret != 0) { return; } /* 销毁创建的通道 */ ret = wifi->stop(wifi); if (ret != 0) { return; } /* 销毁创建的WiFi实体 */ ret = WifiDestruct(&wifi); if (ret != 0) { return; } return; } ``` ## 相关仓 [驱动子系统](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) [drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md) [drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md) [drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md) drivers\_peripheral