OpenHarmony开发者论坛

标题: 简析OpenHarmony的WiFi能力 [打印本页]

作者: 深开鸿_王石    时间: 2023-12-20 10:52
标题: 简析OpenHarmony的WiFi能力
[md]**WiFi功能是无线短距的重要能力,在工作、生活中我们已经离不开WiFi设备了,比如家里的路由,手机,各种智能家居设备。Wi-Fi(发音: /ˈwaɪfaɪ/),又称“无线网路”,是Wi-Fi联盟的商标,一个基于IEEE 802.11标准的无线局域网技术。“Wi-Fi”常被写成“WiFi”或“Wifi”,但是这些写法并没有被Wi-Fi联盟认可。1999年,几家富有远见的公司联合起来组成了一个全球性非营利性协会——无线以太网兼容性联盟(Wireless Ethernet Compatibility Alliance, WECA),其目标是使用一种新的无线网络技术,无论品牌如何,都能带来最佳的用户体验。在2000年,该小组采用术语“Wi-Fi”作为其技术工作的专有名称,并宣布了正式名称:Wi-Fi Alliance。Wi-Fi以IEEE 802.11为标准,Wi-Fi联盟在2018年发起“Generational Wi-Fi”行销计画,基于主要的Wi-Fi技术(PHY)版本,引入了更容易让消费者了解的“Wi-Fi世代名称”(Wi-Fi generation names),格式为“Wi-Fi”后跟一个整数,并鼓励采用世代名称作为行业术语。**

* **第一代,以IEEE 802.11原始标准为准,工作频段为2.4GHz,最高速率半双工2 Mbit/s。 **
* **第二代,以IEEE 802.11b为准,工作频段为2.4GHz,最高速率半双工11 Mbit/s,认证计画为“Wi-Fi CERTIFIED b”。 **
* **第三代,以IEEE 802.11a为准,工作频段为5GHz,最高速率54 Mbit/s,认证计画为“Wi-Fi CERTIFIED a”。基于IEEE\_802.11g、2.4GHz工作频段、最高速率半双工54 Mbit/s,认证计画为“Wi-Fi CERTIFIED g”。 **
* **第四代,以IEEE 802.11n为准,世代名称为“Wi-Fi 4”,信道宽度20MHz、40MHz,工作频段为2.4GHz和5GHz,最高4条空间流,最大副载波调制64-QAM,最高速率半双工600 Mbit/s,认证计画为“Wi-Fi CERTIFIED n”。 **
* **第五代,以IEEE 802.11ac为准,世代名称为“Wi-Fi 5”,信道宽度20MHz、40MHz、80MHz、80+ 80MHz、160MHz,工作频段为5GHz,最高8条空间流,最大副载波调制256-QAM,最高速率半双工6.9 Gbit/s,认证计画为“Wi-Fi CERTIFIED ac”。**
* **第六代,以IEEE 802.11ax为准,世代名称为“Wi-Fi 6”,信道宽度20MHz、40MHz、80MHz、80+ 80MHz、160MHz,工作频段为2.4GHz和5GHz,最高8条空间流,最大副载波调制1024-QAM,最高速率半双工**[29](#)9.6 Gbit/s,认证计画为“Wi-Fi CERTIFIED 6”。

*注意:Wi-Fi与[IEEE 802.11](https://zh.m.wikipedia.org/wiki/IEEE_802.11)常常被混淆,两者的区别可以概述为IEEE 802.11是一种无线局域网标准,而Wi-Fi是IEEE 802.11标准的一种实现。*

#### 概述

**在OpenHarmony和系统功能相关的部分大多都放在foundation这个文件夹里,而通讯相关的部分则是在communication这个文件夹内。我们本篇要分析的WiFi功能就是在foundation/communication/wifi路径下,具体目录结构如下:**

```
.
├── dhcp                        //dhcp: 动态主机设置协议(Dynamic Host Configuration Protocol)是IP网络的网络协议,在应用层使用UDP协议工作,主要用途为:1,自动分配IP地址;2,对所有电脑做中央管理;
│   ├── BUILD.gn
│   ├── bundle.json
│   ├── dhcp.gni
│   ├── dhcp_lite.gni
│   ├── interfaces
│   ├── services
│   └── test
└── wifi                        //wifi实现部分
    ├── application
    ├── BUILD.gn
    ├── bundle.json
    ├── frameworks
    ├── hisysevent.yaml
    ├── interfaces
    ├── services
    ├── test
    ├── utils
    ├── wifi.gni
    └── wifi_lite.gni
```

**在OpenHarmony的源码里还有两个和wifi相关的目录,都是针对小型开发板的**

* **wifi\_aware (仅支持Hi3861开发板)**

```
.
├── BUILD.gn
├── bundle.json
├── frameworks
│   └── source
├── hals
│   └── hal_wifiaware.h
├── interfaces
│   └── kits
├── LICENSE
├── README.md
└── README_zh.md
```

* **wifi\_lite (wifi-iot开发板)**

```
.
├── BUILD.gn
├── bundle.json
├── interfaces
│   ├── README.md
│   └── wifiservice
├── LICENSE
├── README.md
└── README_zh.md
```

#### 架构简析

* **根据目录结构和内部文件及编译框架总结架构如下:**

  ![image.png](https://forums-obs.openharmony.c ... gdjnxxhgj84mrxz.png "image.png")

  * **应用层:提供WiFi Direct接口使用DEMO,使用@ohos.wifi接口提供的p2p相关接口,实现一个WLAN直连的Setting界面;**
  * **接口层:提供两个dts接口(@ohos.wifi.d.ts, @ohos.wifiext.d.ts)和NativeC接口(软总线会使用这些接口实现分布式通信能力)**
  * **框架层:分两个子层,NAPI框架实现层,为wifi,wifiext和wifi\_native\_js,其中wifi\_native\_js已经被淘汰;Native SDK层,实现所有js层代码接口适配并调用innerapi的实现;WiFi接口实现层,使用IPC架构同WiFi服务层通信(WIFI\_DEVICE\_ABILITY\_ID:1120; WIFI\_HOTSPOT\_ABILITY\_ID:1121;WIFI\_P2P\_ABILITY\_ID:1123;WIFI\_SCAN\_ABILITY\_ID:1124)将从NAPI收到的命令,或者别的子系统收到的命令经由IPC架构发送给服务层,并注册服务层observer,收听由服务层上报的事件;**
  * **服务层:分三个子部分,能力部分,管理部分,硬件部分,分别如下:**
    * **能力集部分,对上提供应用接口支持,采用systemability能力框架,分以下几个功能模块:**
      * **wifi\_standard\_sa\_profile: wifi能力配置(1120:wifi\_device\_ability;1121:wifi\_hotspot\_ability;1123:wifi\_p2p\_ability;1124:wifi\_scan\_ability)**
      * **wifi\_device\_ability: wifi设备能力,如开关wifi,配置(ssid, 密码,加密方式等),连接情况;**
      * **wifi\_hotspot\_ability: wifi热点能力,如wifi热点配置,开关,设置黑名单,电源模式;**
      * **wifi\_p2p\_ability: p2p能力,如wifi直连的开关,设备发现,创建群组,p2p连接,获取连接信息,状态,hid2d;**
      * **wifi\_scan\_ability: 扫描能力,如wifi扫描的开关;**
    * **管理部分,对上对接能力集的功能,对下调用idl\_client接口调用硬件能力,分以下几个功能模块:**
      * **wifi\_manager\_service.so: 提供service的管理能力,管理serviceDllMap,通过load对应的so提供sta,ap(根据wifi\_feature\_with\_ap\_num配置决定),p2p,scan服务实例获取接口; 同时提供wifi服务的管理能力,比如权限,wifi的配置,network supplier;**
      * **wifi\_common\_service.so: 提供wifi芯片的能力配置,主要服务是ChipCapability(IsSupportDbdc, Csa, RadarDetect, DfsChannel, IndoorChannel),通过idlclient请求驱动数据;**
      * **wifi\_sta\_service: wifi station(无线客户端)服务,对接实现sta能力集能力;**
      * **wifi\_ap\_service: wifi ap(无线接入点)服务,对接实现ap能力集能力; **
      * **wifi\_p2p\_service: wifi p2p(无线直连)服务,对接实现p2p能力集能力; **
      * **wifi\_scan\_service: wifi扫描服务,对接实现扫描能力集能力; **
      * **wifi\_idl\_client: wifi硬件适配层客户端,提供cRPC调用wifi设备的硬件抽象层;**
      * **wifi\_toolkit: wifi工具簇,包括ifconfig,iptools,arp,dhcp,mac,rawsocket,ipv4,ipv6,wifisetting,wificonfig等工具**
    * **硬件抽象部分,分以下功能模块:**
      * **wifi\_hal\_service: 独立进程,wifi硬件抽象服务,采用cRPC架构,集成wpa\_supplicant-2.9的标准能力,调用hdi接口**
  * **硬件驱动:HDF:**

#### 功能简析

![image.png](https://forums-obs.openharmony.c ... d0bqavhsadhhlas.png "image.png")

1. **WiFi框架能力(NAPI接口,cadapter接口及wifi\_sdk)**
   * **NAPI接口为应用层(ets,js)提供接口,调用WiFi系统层能力**
   * **cadapter实现c接口,为其他能力提供接口(比如软总线),调用WiFi系统能力**
   * **wifi\_sdk封装了系统能力调用的框架,通过proxy方式访问具体的WiFi系统能力,具体如下:**
     * **#define WIFI\_DEVICE\_ABILITY\_ID 1120**
     * **#define WIFI\_HOTSPOT\_ABILITY\_ID 1121**
     * **#define WIFI\_P2P\_ABILITY\_ID 1123**
     * **#define WIFI\_SCAN\_ABILITY\_ID 1124**
2. **WiFi系统能力**
   * **WiFi系统能力通过继承SystemAbility,实现WiFi服务能力并实现IPC进行通信(服务端实现stub实现);**
   * **WiFi系统能力均为so动态库,被SystemAbility同一管理,包括:wifi\_device\_ability,wifi\_hotspot\_ability,wifi\_p2p\_ability,wifi\_scan\_ability;**
   * **WiFI系统服务通过调用WiFi服务实现功能;**
3. **WiFi服务**
   * **WiFi服务层包括:wifi\_scan\_service,wifi\_sta\_service 和 wifi\_ap\_service,wifi\_p2p\_service(后两个针对标准设备)**
   * **主服务为wifi\_manager\_service,内部管理一张dll表,定义对应的WiFi服务,通过WiFi能力层调用,加载不同dll,获得不同服务**
   * **WiFi服务层主要通过idl\_client同WiFi硬件抽象层进行数据交互**
4. **WiFi硬件抽象**
   * **WiFi硬件抽象层并不是完全意义的硬件抽象,即是WiFi协议层(wap\_supplicant-2.9)之上的适配层,又基于HDF之上使用HDI接口调用驱动能力**
   * **WiFi硬件抽象层是独立的进程,通过cRpc和WiFi服务层交互**
   * **在WiFi硬件层还有etc配置目录,内部存储WiFi的默认配置 **
   * **目前WiFi主要用的HDI部分集中在ap相关功能,如:WifiSetPowerModel,GetValidFrequenciesForBand,**
5. **WiFi协议层(wap\_supplicant-2.9)**
   * **参考链接:**[https://w1.fi/wpa\_supplicant/](https://w1.fi/wpa_supplicant/)
   * **实现WiFi接入和WiFi热点的协议栈**
   * **实现基础的驱动(nl80211)**

### 总结

1. **WiFi服务的结构和之前讲的蓝牙结构略有不同,为了提供更灵活的能力,WiFi实现了更多的SystemAbility,同时通过idl\_client,WiFi服务通过调用wap\_supplicant实现具体的WiFi能力;**
2. **目前OpenHarmony用的WiFi协议站为wpa\_supplicant-2.9,提供WiFi的接入和热点能力;**
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5