当前位置: 首页 > 科技观察

跟着小白学鸿蒙——OpenHarmony的WiFi能力简析

时间:2023-03-21 00:05:40 科技观察

更多开源内容请访问:开源基础软件社区https://ost.51cto.comWiFi功能是无线短距离的重要能力。我们的工作和生活中已经离不开WiFi设备,比如家庭路由器、手机,以及各种智能家居设备。Wi-Fi(发音:/?wa?fa?/),又称“无线网络”,是Wi-Fi联盟的商标,是一种基于IEEE802.11标准的无线局域网技术。“Wi-Fi”通常写成“WiFi”或“Wifi”,但这些拼写并没有得到Wi-Fi联盟的认可。1999年,几家有远见的公司联合起来组成了一个全球性的非营利性协会——无线以太网兼容性联盟(WirelessEthernetCompatibilityAlliance,WECA),其目标是使用一种新的无线网络技术,无论品牌是什么,它可以带来最好的用户体验。2000年,该组织采用“Wi-Fi”一词作为其技术工作的专有名称,并公布了正式名称:Wi-Fi联盟。Wi-Fi基于IEEE802.11。Wi-Fi联盟在2018年推出了“GenerationalWi-Fi”营销计划,在主要Wi-Fi技术(PHY)版本的基础上,推出消费者更容易理解的“Wi-Fi”。-Figenerationnames”(Wi-Figenerationnames),格式为“Wi-Fi”后跟一个整数,鼓励采用generationnames作为行业术语。第一代,基于IEEE802.11的原始标准,工作频段2.4GHz,最大半双工速率2Mbit/s,第二代基于IEEE802.11b,工作频率2.4GHz,最大半双工速率11Mbit/s,认证计划为“Wi-FiCERTIFIEDb”。第三代基于IEEE802.11a,工作频率为5GHz,最高速率为54Mbit/s,认证计划为“Wi-Fi-CERTIFIEDb”。FiCERTIFIEDa”。基于IEEE_802.11g,2.4GHz工作频段,最大半双工速率54Mbit/s,认证计划为“Wi-FiCERTIFIEDg”。第四代,基于IEEE802.11n,世代名称为“Wi-Fi4”,信道宽度为20MHz、40MHz,工作频段为2.4GHz和5GHz,最大4个空间流,最大子载波调制64-QAM,最大速率为半双工600Mbit/s,认证程序为“Wi-FiCERTIFIEDn”。第五代,基于IEEE802.11ac,代号为“Wi-Fi5”,信道宽度为20MHz、40MHz、80MHz、80+80MHz、160MHz,工作频段为5GHz,最大8个空间流,最大副载波调制256-QAM,最高半双工速率6.9Gbit/s,认证项目为“Wi-FiCERTIFIEDac”。第六代,基于IEEE802.11ax,世代名称为“Wi-Fi6”,信道宽度为20MHz、40MHz、80MHz、80+80MHz、160MHz,工作频段为2.4GHz和5GHz,最大8个空间流,最大副载波调制为1024-QAM,最高速率为半双工[29][30]9.6Gbit/s,认证计划为“Wi-FiCERTIFIED6”。注意:Wi-Fi经常与IEEE802.11混淆。两者的区别可以概括为IEEE802.11是无线局域网标准,而Wi-Fi是IEEE802.11标准的实现。概述在开源的鸿蒙源码中,大部分与系统功能相关的部分都放在foundation文件夹下,而通信相关的部分在communication文件夹下。本文要分析的WiFi功能在foundation/communication/wifi路径下。具体目录结构如下:.├──dhcp//dhcp:动态主机配置协议(DynamicHostConfigurationProtocol)是IP网络的一种网络协议。应用层使用UDP协议工作,主要目的是:1.自动分配IP地址;2.集中管理所有电脑;│├──BUILD.gn│├──bundle.json│├──dhcp.gni│├──dhcp_lite.gni│├──接口│├──服务│└──test└──wifi//wifi实现部分├──application├──BUILD.gn├──bundle.json├──frameworks├──hisysevent.yaml├──interfaces├──services├──test├──utils├──wifi.gni└──wifi_lite.gni鸿蒙源码中有两个与wifi相关的目录。它适用于小型开发板。wifi_aware(只支持Hi3861开发板).├──BUILD.gn├──bundle.json├──frameworks│└──source├──hals│└──hal_wifiaware.h├──interfaces│└──kits├──LICENSE├──README.md└──README_zh.mdwifi_lite(wifi-iot开发板).├──BUILD.gn├──bundle.json├──interfaces│├──README.md│└──wifiservice├──LICENSE├──README.md└──README_zh.md架构简介根据目录结构、内部文件和编译框架,架构总结如下:应用层:使用DEMO提供WiFiDirect接口,使用@ohos.wifi接口提供的p2p相关接口,实现了WLAN直连的设置接口。接口层:提供两个dts接口(@ohos.wifi.d.ts、@ohos.wifiext.d.ts)和NativeC接口(软总线会使用这些接口实现分布式通信能力)。框架层:分为两个子层,NAPI框架实现层为wifi、wifiext和wifi_native_js,其中wifi_native_js已被淘汰;NativeSDK层实现所有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架构,注册服务层观察者监听服务层上报的事件。服务层:分为能力部分、管理部分、硬件部分三个子部分,分别为:能力集部分,为上层提供应用接口支持,采用系统能力框架,是分为以下几个功能模块: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:提供服务管理能力,管理serviceDllMap,并通过加载对应的so(根据wifi_feature_with_ap_num配置确定),提供sta,ap,p2p,scan服务实例获取接口;同时提供wifi服务管理功能,如权限、wifi配置、网络供应商。wifi_common_service.so:提供wifi芯片的能力配置,主要服务是ChipCapability(IsSupportDbdc、Csa、RadarDetect、DfsChannel、IndoorChannel),通过idlclient请求驱动数据。wifi_sta_service:wifistation(无线客户端)服务,对接实现stacapabilityset能力。wifi_ap_service:wifiap(无线接入点)服务,对接实现ap能力集能力。wifi_p2p_service:wifip2p(无线直连)服务,对接实现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:功能分析NAPI和cadapterWiFi系统能力WiFi服务idl_clientWiFiHalwpa_supplicantIFACE跨进程,IPC调用通过samgr获取服务Proxy对象链接对应服务so,c++调用链接对应idlso,c接口调用cRPC调用链接wap_supplicant.so,c该接口调用udpNAPI和cadapterWiFi系统能力WiFi服务idl_clientWiFiHalwpa_supplicantIFACE。WiFi框架能力(NAPI接口、cadapter接口和wifi_sdk)NAPI接口为应用层(ets、js)提供接口,调用WiFi系统层能力。cadapter实现c接口,为其他能力(如软总线)提供接口,调用WiFi系统能力。wifi_sdk封装了调用系统能力的框架,通过代理访问具体的WiFi系统能力,如下:#defineWIFI_DEVICE_ABILITY_ID1120.#defineWIFI_HOTSPOT_ABILITY_ID1121.#defineWIFI_P2P_ABILITY_ID1123.#defineWIFI_SCAN_ABILITY_ID1124.WiFi系统能力WiFi系统能力继承SystemAbility实现WiFi服务能力,实现IPC通信(服务端实现存根实现)。WiFi系统能力都是so动态库,由SystemAbility管理,包括:wifi_device_ability、wifi_hotspot_ability、wifi_p2p_ability、wifi_scan_ability。WiFI系统服务通过调用WiFi服务实现功能。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硬件抽象层进行数据交互。WiFi硬件抽象WiFi硬件抽象层并不是一个完整的硬件抽象。它是WiFi协议层(wap_supplicant-2.9)之上的适配层,使用HDI接口调用基于HDF的驱动能力。WiFi硬件抽象层是一个独立的进程,通过cRpc与WiFi服务层进行交互。WiFi硬件层还有一个etc配置目录,内部存放WiFi的默认配置。目前WiFi主要使用的HDI部分集中在ap相关的函数上,如:WifiSetPowerModel、GetValidFrequenciesForBand。WiFi协议层(wap_supplicant-2.9)参考链接:https://w1.fi/wpa_supplicant/。实现WiFi接入和WiFi热点的协议栈。实现基本驱动程序(nl80211)。综上所述,WiFi服务的结构与上面提到的蓝牙结构略有不同。为了提供更灵活的能力,WiFi实现了更多的SystemAbility。同时,WiFi服务通过idl_client调用wap_supplicant实现特定的WiFi能力。目前开源的鸿蒙使用的WiFi协议站为wpa_supplicant-2.9,提供WiFi接入和热点能力。了解更多开源知识,请访问:开源基础软件社区https://ost.51cto.com。