鸿蒙开发往期必看:
HarmonyOS NEXT应用开发性能实践总结
一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!
“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)
“一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路径!
功能简介
无线局域网数据传输是端侧设备不可或缺的一部分,用户可以方便地接入到无线网络进行数据传输和共享,并且在无线网络覆盖区域自由移动,彻底摆脱有线的束缚。基于HDF(Hardware Driver Foundation)驱动框架开发的WLAN驱动,能够屏蔽硬件器件差异,为上层WLAN服务提供稳定的基础能力接口,包括启动扫描、关联/取消关联热点、获取MAC地址、设置MAC地址、获取链路信息等。
基本概念
开发前,开发者应了解一下WLAN涉及的基本概念:
-
AP
无线接入点(Access Point,简称AP),是网络的中心节点,提供无线接入服务。其它无线设备接入后,可以进行数据访问。
-
STA
站点(Station,简称STA),是无线局域网的最基本组成单元。每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。
-
ssid
无线网络的名称,用来标识一个无线网络,每个无线网络都有自己的ssid。
-
bssid
用于标识WLAN中的基本服务集,是唯一的48位MAC地址。
-
Scan
终端设备扫描环境中的无线网络,获取到周围的无线网络信息。包括热点名称(ssid)、工作频带和信号强度等。
-
Associate
终端设备指定有效的热点进行连接,成功后即可与AP端数据通信。终端同一时刻只可以和一个AP建立链路。
运作机制
本文主要介绍基于HDF(Hardware Driver Foundation)驱动框架开发的WLAN功能。WLAN整体框架:
-
上层服务基于业务需要调用HDI接口,将用户态消息通过WPA层或HAL层下发至Client层。WPA层接口提供设置加密方式、关联热点、设置信道、隐藏热点等功能,HAL层接口作为WPA接口的补充,提供设置国家码、设置MAC地址、获取信道信息等功能。
-
Message模块将用户态的消息按组件分发至AP、STA等模块。
-
Hdf_Mac80211定义底层驱动相关的MAC层接口。命令字段下发至Hdf_Mac80211,再通过Bus模块发送到WLAN芯片固件侧。
-
Bus模块向上提供统一的总线抽象接口。通过向下调用Platform层提供的SDIO接口和封装适配USB、PCIE接口,屏蔽不同内核的差异;通过对不同类型的总线操作进行统一封装,屏蔽不同芯片差异,能够对不同芯片厂商提供完备的总线驱动能力,不同厂商共用此模块接口,从而使厂商的开发更为便捷和统一。
-
EAPOL(Extensible Authentication Protocol Over LAN),基于局域网的扩展认证协议,主要用于在客户端和设备(接入设备、服务器)之间传送EAP协议报文,以允许EAP协议报文在LAN上传送,完成认证流程,实现设备上线功能。
-
NetDevice用于建立专属网络设备,屏蔽不同OS的差异,对WiFi驱动提供统一接口,提供统一的HDF NetDevice数据结构,及其统一管理、注册、去注册能力;对接轻设备及富设备上的Linux的网络设备层。
-
NetBuf为WLAN驱动提供Linux或者LiteOS原生的网络数据缓冲的统一数据结构的封装以及对网络数据的操作接口的封装。
-
协议栈与NetDevice模块、NetBuf模块共同协同完成数据流交互。
约束与限制
WLAN驱动为上层WLAN服务提供稳定的基础能力接口,HDI接口适用于标准系统,HAL接口适用于小型系统及轻量系统。
开发指导
场景介绍
WLAN驱动的主要工作是为上层WLAN服务提供稳定的基础能力接口,保证用户可以方便地接入到无线网络,实现数据传输和共享。不同WLAN模组需要适配OpenHarmony时,请参考如下的接口说明和开发步骤。
接口说明
WLAN模块有三部分对外开放的API接口:
-
对上层服务提供HDI以及HAL能力接口。
-
提供给各厂商实现的能力接口。
-
驱动直接调用WLAN模块能力接口。
-
WLAN驱动模块对上层服务提供的能力接口,主要功能有:创建/销毁IWiFi对象、设置MAC地址、设置发射功率等。以下接口列举的为IDL接口描述生成的对应C语言函数接口,如表1、表2所示。接口声明见idl文件(/drivers/interface/wlan/v1_1/)。
表1 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 *) 销毁通道。 表2 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) 设置发射功率。 -
WLAN驱动模块提供了需要驱动开发人员自行去填充具体实现内容的能力接口,主要功能有:初始化/注销NetDevice、打开/关闭NetDevice、获取NetDevice的状态等。提供的部分接口说明如表3所示:
表3 net_device.h
接口名称 功能描述 int32_t (*init)(struct NetDevice *netDev) 初始化NetDevice。 struct NetDevStats *(*getStats)(struct NetDevice *netDev) 获取NetDevice的状态。 int32_t (*setMacAddr)(struct NetDevice *netDev,
鸿蒙开发往期必看:
HarmonyOS NEXT应用开发性能实践总结
一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!
“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)
“一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路径!
功能简介
无线局域网数据传输是端侧设备不可或缺的一部分,用户可以方便地接入到无线网络进行数据传输和共享,并且在无线网络覆盖区域自由移动,彻底摆脱有线的束缚。基于HDF(Hardware Driver Foundation)驱动框架开发的WLAN驱动,能够屏蔽硬件器件差异,为上层WLAN服务提供稳定的基础能力接口,包括启动扫描、关联/取消关联热点、获取MAC地址、设置MAC地址、获取链路信息等。
基本概念
开发前,开发者应了解一下WLAN涉及的基本概念:
-
AP
无线接入点(Access Point,简称AP),是网络的中心节点,提供无线接入服务。其它无线设备接入后,可以进行数据访问。
-
STA
站点(Station,简称STA),是无线局域网的最基本组成单元。每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。
-
ssid
无线网络的名称,用来标识一个无线网络,每个无线网络都有自己的ssid。
-
bssid
用于标识WLAN中的基本服务集,是唯一的48位MAC地址。
-
Scan
终端设备扫描环境中的无线网络,获取到周围的无线网络信息。包括热点名称(ssid)、工作频带和信号强度等。
-
Associate
终端设备指定有效的热点进行连接,成功后即可与AP端数据通信。终端同一时刻只可以和一个AP建立链路。
运作机制
本文主要介绍基于HDF(Hardware Driver Foundation)驱动框架开发的WLAN功能。WLAN整体框架:
-
上层服务基于业务需要调用HDI接口,将用户态消息通过WPA层或HAL层下发至Client层。WPA层接口提供设置加密方式、关联热点、设置信道、隐藏热点等功能,HAL层接口作为WPA接口的补充,提供设置国家码、设置MAC地址、获取信道信息等功能。
-
Message模块将用户态的消息按组件分发至AP、STA等模块。
-
Hdf_Mac80211定义底层驱动相关的MAC层接口。命令字段下发至Hdf_Mac80211,再通过Bus模块发送到WLAN芯片固件侧。
-
Bus模块向上提供统一的总线抽象接口。通过向下调用Platform层提供的SDIO接口和封装适配USB、PCIE接口,屏蔽不同内核的差异;通过对不同类型的总线操作进行统一封装,屏蔽不同芯片差异,能够对不同芯片厂商提供完备的总线驱动能力,不同厂商共用此模块接口,从而使厂商的开发更为便捷和统一。
-
EAPOL(Extensible Authentication Protocol Over LAN),基于局域网的扩展认证协议,主要用于在客户端和设备(接入设备、服务器)之间传送EAP协议报文,以允许EAP协议报文在LAN上传送,完成认证流程,实现设备上线功能。
-
NetDevice用于建立专属网络设备,屏蔽不同OS的差异,对WiFi驱动提供统一接口,提供统一的HDF NetDevice数据结构,及其统一管理、注册、去注册能力;对接轻设备及富设备上的Linux的网络设备层。
-
NetBuf为WLAN驱动提供Linux或者LiteOS原生的网络数据缓冲的统一数据结构的封装以及对网络数据的操作接口的封装。
-
协议栈与NetDevice模块、NetBuf模块共同协同完成数据流交互。
约束与限制
WLAN驱动为上层WLAN服务提供稳定的基础能力接口,HDI接口适用于标准系统,HAL接口适用于小型系统及轻量系统。
开发指导
场景介绍
WLAN驱动的主要工作是为上层WLAN服务提供稳定的基础能力接口,保证用户可以方便地接入到无线网络,实现数据传输和共享。不同WLAN模组需要适配OpenHarmony时,请参考如下的接口说明和开发步骤。
接口说明
WLAN模块有三部分对外开放的API接口:
-
对上层服务提供HDI以及HAL能力接口。
-
提供给各厂商实现的能力接口。
-
驱动直接调用WLAN模块能力接口。
-
WLAN驱动模块对上层服务提供的能力接口,主要功能有:创建/销毁IWiFi对象、设置MAC地址、设置发射功率等。以下接口列举的为IDL接口描述生成的对应C语言函数接口,如表1、表2所示。接口声明见idl文件(/drivers/interface/wlan/v1_1/)。
表1 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 *) 销毁通道。 表2 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) 设置发射功率。 -
WLAN驱动模块提供了需要驱动开发人员自行去填充具体实现内容的能力接口,主要功能有:初始化/注销NetDevice、打开/关闭NetDevice、获取NetDevice的状态等。提供的部分接口说明如表3所示:
表3 net_device.h
接口名称 功能描述 int32_t (*init)(struct NetDevice *netDev) 初始化NetDevice。 struct NetDevStats *(*getStats)(struct NetDevice *netDev) 获取NetDevice的状态。 int32_t (*setMacAddr)(struct NetDevice *netDev,