2 Star 0 Fork 984

zhao_haipeng / drivers_peripheral

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README_zh.md 15.73 KB
一键复制 编辑 原始数据 按行查看 历史
NickYang 提交于 2022-03-09 14:44 . inner source review issues fix

WLAN

简介

该仓下主要包含WLAN相关HDI接口与实现,提供功能包括:

  1. 创建和销毁HAL层和WLAN驱动的通道;
  2. 获取本设备支持的WLAN特性;
  3. 创建特性所对应的实例等。

图 1 WLAN驱动模块架构图

目录

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;
}

相关仓

驱动子系统

drivers_framework

drivers_adapter

drivers_adapter_khdf_linux

drivers_peripheral

1
https://gitee.com/zhao_haipeng/drivers_peripheral.git
git@gitee.com:zhao_haipeng/drivers_peripheral.git
zhao_haipeng
drivers_peripheral
drivers_peripheral
master

搜索帮助