WLAN开发概述
简介
WLAN是基于统一驱动平台(以下简称HDF)开发的模块,该模块可实现跨操作系统迁移,自适应器件差异,模块化拼装编译等功能。各WLAN厂商驱动开发人员可根据WLAN模块提供的向下统一接口适配各自的驱动代码,HAL层开发人员可根据WLAN模块提供的向上统一接口获取如下能力:建立/关闭WLAN热点,扫描,关联WLAN热点等等。WLAN模块框架图如下:
图 1 WLAN框架

WLAN驱动接口架构
WLAN模块有三部分对外开放的API接口,如下图所示:
1、对HAL层提供的能力接口;
2、驱动直接调用WLAN模块能力接口;
3、提供给各厂商实现的能力接口,本章节以下内容将从以初始化为例进行开发指导。
图 2 WLAN模块开放能力分布图

接口说明
WLAN驱动模块对HAL层开发人员提供的接口功能有:建立/关闭WLAN热点、扫描WLAN、开始关联、断开连接等等。
WLAN驱动模块提供了驱动开发人员可直接调用的能力接口,主要功能有:创建/释放WifiModule、关联/取消关联、申请/释放net buf、lwip的pbuf和netbuf的相互转换等等。
表1 提供了部分接口说明如下:
表 1 可直接调用的接口
| 头文件 | 接口名称 | 功能描述 |
|---|---|---|
| wifi_module.h | struct WifiModule WifiModuleCreate(const struct HdfConfigWifiModuleConfig config); | 基于HDF开发WLAN驱动时,创建一个WifiModule。 |
| void WifiModuleDelete(struct WifiModule module); | 基于HDF开发WLAN驱动时,删除并释放WifiModule所有数据。 | |
| int32_t DelFeature(struct WifiModule module, uint16_t featureType); | 基于HDF开发WLAN驱动时,从WifiModule删除一个功能组件。 | |
| int32_t AddFeature(struct WifiModule module, uint16_t featureType, struct WifiFeature featureData); | 基于HDF开发WLAN驱动时,注册一个功能组件到WifiModule。 | |
| wifi_mac80211_ops.h | int32_t (startAp)(NetDevice netDev); | 启动AP。 |
| int32_t (stopAp)(NetDevice netDev); | 停止AP。 | |
| int32_t (connect)(NetDevice netDev, WifiConnectParams param); | 开始连接。 | |
| int32_t (disconnect)(NetDevice netDev, uint16_t reasonCode); | 断开连接。 | |
| hdf_netbuf.h | static inline void NetBufQueueInit(struct NetBufQueue q); | 初始化net buffer队列。 |
| struct NetBuf NetBufAlloc(uint32_t size); | 申请net buffer。 | |
| void NetBufFree(struct NetBuf nb); | 释放net buffer。 | |
| struct NetBuf Pbuf2NetBuf(const struct NetDevice netdev, struct pbuf lwipBuf); | lwip的pbuf转换为net buffer。 | |
| struct pbuf NetBuf2Pbuf(const struct NetBuf *nb); | net buffer转换为lwip的pbuf。 |
WLAN驱动模块提供了需驱动开发人员实现的能力接口,主要功能有:初始化/注销net device、打开/关闭net device、获取net device的状态等等。
表2 提供了部分接口说明如下:
表 2 需要开发人员实现的接口
| 头文件 | 接口名称 | 功能描述 |
|---|---|---|
| net_device.h | int32_t (init)(struct NetDevice netDev); | 初始化net device。 |
| struct NetDevStats (getStats)(struct NetDevice netDev); | 获取net device的状态。 | |
| int32_t (setMacAddr)(struct NetDevice netDev, void addr); | 设置mac地址。 | |
| void (deInit)(struct NetDevice netDev); | 注销net device。 | |
| int32_t (open)(struct NetDevice netDev); | 打开net device。 | |
| int32_t (stop)(struct NetDevice netDev); | 关闭net device。 |
