跟著小白一起學鴻蒙—簡析 OpenHarmony 的 WiFi 能力
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][30]9.6 Gbit/s,認證計畫為“Wi-Fi CERTIFIED 6”。
注意:Wi-Fi與??IEEE 802.11??常常被混淆,兩者的區別可以概述為IEEE 802.11是一種無線局域網標準,而Wi-Fi是IEEE 802.11標準的一種實現。
概述
在開源鴻蒙的源碼里和系統功能相關的部分大多都放在foundation這個文件夾里,而通訊相關的部分則是在communication這個文件夾內。我們本篇要分析的WiFi功能就是在foundation/communication/wifi路徑下,具體目錄結構如下:
在開源鴻蒙的源碼里還有兩個和wifi相關的目錄,都是針對小型開發板的。
- wifi_aware (僅支持Hi3861開發板)
- wifi_lite (wifi-iot開發板)
架構簡析
- 根據目錄結構和內部文件及編譯框架總結架構如下:
- 應用層:提供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:
功能簡析
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封裝了系統能力調用的框架,通過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。
- WiFi系統能力
- WiFi系統能力通過繼承SystemAbility,實現WiFi服務能力并實現IPC進行通信(服務端實現stub實現)。
- 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)之上的適配層,又基于HDF之上使用HDI接口調用驅動能力。
- 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,同時通過idl_client,WiFi服務通過調用wap_supplicant實現具體的WiFi能力。
- 目前開源鴻蒙用的WiFi協議站為wpa_supplicant-2.9,提供WiFi的接入和熱點能力。