Files
2020-09-10 10:22:30 +08:00
..
2020-09-10 10:22:30 +08:00
2020-09-10 10:22:30 +08:00
2020-09-10 10:22:30 +08:00

WLAN 驱动开发

简介

WLAN 是目前比较主流的接入方式,WLAN本身业务较为复杂,驱动代码量大,技术门槛相对较高,同时对芯片厂家高度依赖。HDF基于WLAN的业务特点,设计组件化的驱动开发框架,建立不同框架体系下一致的WIFI抽象,并以相同的规则来约束和规范鸿蒙生态中不同设备形态下WLAN驱动的开发。

架构

一个驱动分配两个大部分,一部分为基于HCS的驱动配置(图中 C),一部分是WLAN驱动实体(图中A+B)。其中WLAN驱动实体包含2个逻辑模块

A:公共核心驱动部分; B: 模组私有驱动部分;

组件A&组件A与周边的关系

目录

表1:源码路径

路径

描述

drivers\hdf\frameworks\model\network\wifi

wlan 模型,包含模型入口以及简单组件,netDevice

vendor\huawei\hdf\huawei_proprietary\wifi

wlan 驱动实体,CoreDriver部分,包含wlan 模型实例

vendor\huawei\hdf\libs\hi35xxxx

wlan 驱动实体,ChipDriver部分

vendor\hisi\hi35xx\hi35xxxx\config\wifi

HCS配置部分

使用

  1. WLAN 模型可以根据源码进行开发,CoreDriver 可以根据HCS配置组装。

表 1 WLAN 组件管理接口

头文件

接口名称

功能描述

wifi_module.h

struct WifiModule *WifiModuleCreate(const struct HdfConfigWifiModuleConfig *config);

基于HDF开发WIFI驱动时,创建一个WIFI Module。

void WifiModuleDelete(struct WifiModule *module);

基于HDF开发WIFI驱动时,删除并释放WIFI Module所有数据。

int32_t DelFeature(struct WifiModule *module, uint16_t featureType);

基于HDF开发WIFI驱动时,从 WIFI Module 删除一个功能组件。

int32_t AddFeature(struct WifiModule *module, uint16_t featureType, struct WifiFeature *featureData);

基于HDF开发WIFI驱动时,注册一个功能组件到 WIFI Module。

wifi_mac80211_ops.h

int32_t (*startVap)(NetDevice *netDev);

启动AP。

int32_t (*stopVap)(NetDevice *netDev);

停止AP。

int32_t (*connect)(NetDevice *netDev, WifiConnectParams *param);

开始连接。

int32_t (*disconnect)(NetDevice *netDev, uint16_t reasonCode);

断开连接。

hdf_netbuf.h

void NetBufQueueInit(struct NetBufQueue *q);

初始化net buffer队列。

struct NetBuf *NetBufDevAlloc(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。

表 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。

2.上层业务接口

3.对上业务功能

Wi-Fi驱动模块对HAL层开发人员提供的接口功能有:建立/关闭Wi-Fi热点、扫描Wi-Fi、开始关联、断开连接等等

表 3 上层业务接口

头文件

接口名称

功能描述

hdf_wifi_cmd.h

ErrorCode WifiHalScan(const RequestContext *context, const DataBlock *reqData, DataBlock *rspData);

启动扫描。

ErrorCode WifiHalSetAp(const RequestContext *context, const DataBlock *reqData, DataBlock *rspData);

设置AP启动参数。

ErrorCode WifiHalStopAp(const RequestContext *context, const DataBlock *reqData, DataBlock *rspData);

关闭AP模式。

ErrorCode WifiHalSendEapol(const RequestContext *context, const DataBlock *reqData, DataBlock *rspData);

发送EAPOL帧。

ErrorCode WifiHalReceiveEapol(const RequestContext *context, const DataBlock *reqData, DataBlock *rspData);

接收EAPOL帧。

ErrorCode WifiHalStaRemove(const RequestContext *context, const DataBlock *reqData, DataBlock *rspData);

删除STA

Wi-Fi驱动模块提供了驱动开发人员可直接调用的能力接口,主要功能有:创建/释放Wi-Fi Module、关联/取消关联、申请/释放net buf、开始关联、lwip的pbuf和netbuf的相互转换等等。