WLAN
简介
该仓下主要包含WLAN相关HDI和HAL接口与实现,提供主要功能包括:
- 创建和销毁IWiFi对象。
- 创建和销毁HAL层和WLAN驱动的通道。
- 设置MAC地址、设置国家码、获取网络设备信息等。

目录
WLAN源代码目录结构如下所示:
/drivers/peripheral/wlan
├── client # 实现用户态与内核态通信的client模块存放目录
│ └── include # client相关头文件存放目录
│ └── src # client代码存放目录
├── hal # hal层框架代码
│ └── include # hal层相关头文件存放目录
│ └── src # hal层代码存放目录
├── hdi_service # hdi层框架代码
│ └── service_common # hdi层通用接口存放目录
│ └── service_extend # hdi扩展接口存放目录
├── interfaces # hal接口的存放目录
│ └── include # 对外提供的接口头文件存放目录
接口说明
WLAN驱动模块通过HAL/HDI层(HAL是直调,HDI是通过IPC调用)对Wi-Fi Service提供接口,主要功能有:创建/销毁IWiFi对象、设置MAC地址等。提供的接口说明如下表所示:
表 1 hal层和hdi层对外接口
使用说明(HAL接口)
HAL接口使用步骤:
- 使用WifiConstruct创建一个WiFi实体。
- 用创建的WiFi实体调用start开启HAL和驱动之间的通道,获得驱动网卡信息。
- 通过createFeature函数创建一个apFeature或者staFeature。后面可通过apFeature或者staFeature去调用具体的实现接口,下面代码示例基于创建的apFeature。
- 调用和使用相关接口:如setMacAddress设置MAC地址、getDeviceMacAddress获取设备的MAC地址等。
- 调用destroyFeature,销毁创建的Feature。
- 调用stop销毁创建的通道。
- 执行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
#define HDF_SUCCESS 0
#define HDF_FAILURE (-1)
static int32_t hal_main()
{
int32_t ret;
struct IWiFi *wifi;
/* 创建一个WiFi实体 */
ret = WifiConstruct(&wifi);
if (ret != HDF_SUCCESS || wifi == NULL) {
return HDF_FAILURE;
}
/* 开启HAL和驱动之间的通道 */
ret = wifi->start(wifi);
if (ret != HDF_SUCCESS) {
return HDF_FAILURE;
}
/* 创建apFeature */
ret = wifi->createFeature(PROTOCOL_80211_IFTYPE_AP, (struct IWiFiBaseFeature **)&apFeature);
if (ret != HDF_SUCCESS) {
return HDF_FAILURE;
}
/* 获取设备的MAC地址 */
unsigned char mac[MAC_LEN] = {0};
ret = apFeature->baseFeature.getDeviceMacAddress((struct IWiFiBaseFeature *)apFeature, mac, MAC_LEN);
if (ret != HDF_SUCCESS) {
return HDF_FAILURE;
}
/* 销毁掉创建的这个Feature */
ret = wifi->destroyFeature((struct IWiFiBaseFeature *)apFeature);
if (ret != HDF_SUCCESS) {
return HDF_FAILURE;
}
/* 销毁创建的通道 */
ret = wifi->stop(wifi);
if (ret != HDF_SUCCESS) {
return HDF_FAILURE;
}
/* 销毁创建的WiFi实体 */
ret = WifiDestruct(&wifi);
if (ret != HDF_SUCCESS) {
return HDF_FAILURE;
}
return ret;
}
使用说明(HDI接口)
HDI接口使用步骤:
- 使用WlanInterfaceGetInstance获取WLAN服务对象。
- 使用Start创建HAL和驱动之间的通道。
- 通过GetSupportFeature获取该设备支持的WLAN特性。
- 调用Stop,销毁HAL和驱动之间的通道。
- 执行WlanInterfaceRelease销毁WLAN服务对象。
代码示例:
#include "v1_3/iwlan_interface.h"
#include "wlan_callback_impl.h"
#include "wlan_impl.h"
#define PROTOCOL_80211_IFTYPE_NUM 11
#define HDF_SUCCESS 0
#define HDF_FAILURE (-1)
static int32_t hdi_main()
{
int32_t rc;
const char *WLAN_SERVICE_NAME = "wlan_hal_c_service";
static struct IWlanInterface *g_wlanObj = NULL;
uint8_t supType[ PROTOCOL_80211_IFTYPE_NUM + 1 ] = {0};
uint32_t supTypeLen = PROTOCOL_80211_IFTYPE_NUM + 1;
/* 获取wlan服务对象。*/
g_wlanObj = WlanInterfaceGetInstance(WLAN_SERVICE_NAME);
if (g_wlanObj == NULL)
{
returnHDF_FAILURE;
}
/* 创建HAL和驱动之间的通道及获取驱动网卡信息。 */
rc = g_wlanObj->Start(g_wlanObj);
if (rc != HDF_SUCCESS)
{
return HDF_FAILURE;
}
/* 获取该设备支持的WLAN特性(不考虑当前的使用状态)。 */
rc = g_wlanObj->GetSupportFeature(g_wlanObj, supType, &supTypeLen);
if (rc != HDF_SUCCESS)
{
return HDF_FAILURE;
}
/* 销毁HAL和驱动之间的通道。 */
rc = g_wlanObj->Stop(g_wlanObj);
if (rc != HDF_SUCCESS)
{
return HDF_FAILURE;
}
/* 销毁wlan服务对象。 */
WlanInterfaceRelease(g_wlanObj);
return rc;
}