鸿蒙开源组件——WLAN

jiecho
发布于 2021-7-21 16:29
浏览
0收藏

简介

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

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

图 1 WLAN驱动模块架构图鸿蒙开源组件——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 *);

销毁通道。

wifi_hal_base_feature.h

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 (*setTxPower)(const struct IWiFiBaseFeature *, int32_t);

设置发射功率。

使用说明

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;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.

 

相关仓

驱动子系统

drivers_framework

openharmony-retired-drivers_peripheral_w.zip 80.75K 11次下载
已于2021-7-21 16:29:08修改
收藏
回复
举报
回复
    相关推荐