跟著小白一起學(xué)鴻蒙—簡析 OpenHarmony 的 WiFi 能力
??想了解更多關(guān)于開源的內(nèi)容,請訪問:??
WiFi功能是無線短距的重要能力,在工作、生活中我們已經(jīng)離不開WiFi設(shè)備了,比如家里的路由,手機,各種智能家居設(shè)備。Wi-Fi(發(fā)音: /?wa?fa?/),又稱“無線網(wǎng)路”,是Wi-Fi聯(lián)盟的商標,一個基于IEEE 802.11標準的無線局域網(wǎng)技術(shù)。“Wi-Fi”常被寫成“WiFi”或“Wifi”,但是這些寫法并沒有被Wi-Fi聯(lián)盟認可。1999年,幾家富有遠見的公司聯(lián)合起來組成了一個全球性非營利性協(xié)會——無線以太網(wǎng)兼容性聯(lián)盟(Wireless Ethernet Compatibility Alliance, WECA),其目標是使用一種新的無線網(wǎng)絡(luò)技術(shù),無論品牌如何,都能帶來最佳的用戶體驗。在2000年,該小組采用術(shù)語“Wi-Fi”作為其技術(shù)工作的專有名稱,并宣布了正式名稱:Wi-Fi Alliance。Wi-Fi以IEEE 802.11為標準,Wi-Fi聯(lián)盟在2018年發(fā)起“Generational Wi-Fi”行銷計畫,基于主要的Wi-Fi技術(shù)(PHY)版本,引入了更容易讓消費者了解的“Wi-Fi世代名稱”(Wi-Fi generation names),格式為“Wi-Fi”后跟一個整數(shù),并鼓勵采用世代名稱作為行業(yè)術(shù)語。
- 第一代,以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”?;贗EEE_802.11g、2.4GHz工作頻段、最高速率半雙工54 Mbit/s,認證計畫為“Wi-Fi CERTIFIED g”。
- 第四代,以IEEE 802.11n為準,世代名稱為“Wi-Fi 4”,信道寬度20MHz、40MHz,工作頻段為2.4GHz和5GHz,最高4條空間流,最大副載波調(diào)制64-QAM,最高速率半雙工600 Mbit/s,認證計畫為“Wi-Fi CERTIFIED n”。
- 第五代,以IEEE 802.11ac為準,世代名稱為“Wi-Fi 5”,信道寬度20MHz、40MHz、80MHz、80+ 80MHz、160MHz,工作頻段為5GHz,最高8條空間流,最大副載波調(diào)制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條空間流,最大副載波調(diào)制1024-QAM,最高速率半雙工[29][30]9.6 Gbit/s,認證計畫為“Wi-Fi CERTIFIED 6”。
注意:Wi-Fi與??IEEE 802.11??常常被混淆,兩者的區(qū)別可以概述為IEEE 802.11是一種無線局域網(wǎng)標準,而Wi-Fi是IEEE 802.11標準的一種實現(xiàn)。
概述
在開源鴻蒙的源碼里和系統(tǒng)功能相關(guān)的部分大多都放在foundation這個文件夾里,而通訊相關(guān)的部分則是在communication這個文件夾內(nèi)。我們本篇要分析的WiFi功能就是在foundation/communication/wifi路徑下,具體目錄結(jié)構(gòu)如下:
在開源鴻蒙的源碼里還有兩個和wifi相關(guān)的目錄,都是針對小型開發(fā)板的。
- wifi_aware (僅支持Hi3861開發(fā)板)
- wifi_lite (wifi-iot開發(fā)板)
架構(gòu)簡析
- 根據(jù)目錄結(jié)構(gòu)和內(nèi)部文件及編譯框架總結(jié)架構(gòu)如下:
- 應(yīng)用層:提供WiFi Direct接口使用DEMO,使用@ohos.wifi接口提供的p2p相關(guān)接口,實現(xiàn)一個WLAN直連的Setting界面。
- 接口層:提供兩個dts接口(@ohos.wifi.d.ts, @ohos.wifiext.d.ts)和NativeC接口(軟總線會使用這些接口實現(xiàn)分布式通信能力)。
- 框架層:分兩個子層,NAPI框架實現(xiàn)層,為wifi,wifiext和wifi_native_js,其中wifi_native_js已經(jīng)被淘汰;Native SDK層,實現(xiàn)所有js層代碼接口適配并調(diào)用innerapi的實現(xiàn);WiFi接口實現(xiàn)層,使用IPC架構(gòu)同WiFi服務(wù)層通信(WIFI_DEVICE_ABILITY_ID:1120;WIFI_HOTSPOT_ABILITY_ID:1121;WIFI_P2P_ABILITY_ID:1123;WIFI_SCAN_ABILITY_ID:1124)將從NAPI收到的命令,或者別的子系統(tǒng)收到的命令經(jīng)由IPC架構(gòu)發(fā)送給服務(wù)層,并注冊服務(wù)層observer,收聽由服務(wù)層上報的事件。
- 服務(wù)層:分三個子部分,能力部分,管理部分,硬件部分,分別如下:
- 能力集部分,對上提供應(yīng)用接口支持,采用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設(shè)備能力,如開關(guān)wifi,配置(ssid,加密方式等),連接情況。
- wifi_hotspot_ability: wifi熱點能力,如wifi熱點配置,開關(guān),設(shè)置黑名單,電源模式。
- wifi_p2p_ability: p2p能力,如wifi直連的開關(guān),設(shè)備發(fā)現(xiàn),創(chuàng)建群組,p2p連接,獲取連接信息,狀態(tài),hid2d。
- wifi_scan_ability: 掃描能力,如wifi掃描的開關(guān)。
- 管理部分,對上對接能力集的功能,對下調(diào)用idl_client接口調(diào)用硬件能力,分以下幾個功能模塊:
- wifi_manager_service.so: 提供service的管理能力,管理serviceDllMap,通過load對應(yīng)的so提供sta,ap(根據(jù)wifi_feature_with_ap_num配置決定),p2p,scan服務(wù)實例獲取接口; 同時提供wifi服務(wù)的管理能力,比如權(quán)限,wifi的配置,network supplier。
- wifi_common_service.so: 提供wifi芯片的能力配置,主要服務(wù)是ChipCapability(IsSupportDbdc, Csa, RadarDetect, DfsChannel, IndoorChannel),通過idlclient請求驅(qū)動數(shù)據(jù)。
- wifi_sta_service: wifi station(無線客戶端)服務(wù),對接實現(xiàn)sta能力集能力。
- wifi_ap_service: wifi ap(無線接入點)服務(wù),對接實現(xiàn)ap能力集能力。
- wifi_p2p_service: wifi p2p(無線直連)服務(wù),對接實現(xiàn)p2p能力集能力。
- wifi_scan_service: wifi掃描服務(wù),對接實現(xiàn)掃描能力集能力。
- wifi_idl_client: wifi硬件適配層客戶端,提供cRPC調(diào)用wifi設(shè)備的硬件抽象層。
- wifi_toolkit: wifi工具簇,包括ifconfig,iptools,arp,dhcp,mac,rawsocket,ipv4,ipv6,wifisetting,wificonfig等工具。
- 硬件抽象部分,分以下功能模塊:
- wifi_hal_service: 獨立進程,wifi硬件抽象服務(wù),采用cRPC架構(gòu),集成wpa_supplicant-2.9的標準能力,調(diào)用hdi接口。
- 硬件驅(qū)動:HDF:
功能簡析
NAPI和cadapterWiFi系統(tǒng)能力WiFi服務(wù)idl_clientWiFiHalwpa_supplicantIFACE跨進程,IPC調(diào)用通過samgr獲取服務(wù)Proxy對象鏈接對應(yīng)服務(wù)so,c++調(diào)用鏈接對應(yīng)的idlso,c接口調(diào)用cRPC調(diào)用鏈接wap_supplicant.so, c接口調(diào)用udpNAPI和cadapterWiFi系統(tǒng)能力WiFi服務(wù)idl_clientWiFiHalwpa_supplicantIFACE。
- WiFi框架能力(NAPI接口,cadapter接口及wifi_sdk)
- NAPI接口為應(yīng)用層(ets,js)提供接口,調(diào)用WiFi系統(tǒng)層能力。
- cadapter實現(xiàn)c接口,為其他能力提供接口(比如軟總線),調(diào)用WiFi系統(tǒng)能力。
- wifi_sdk封裝了系統(tǒng)能力調(diào)用的框架,通過proxy方式訪問具體的WiFi系統(tǒng)能力,具體如下:
- #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系統(tǒng)能力
- WiFi系統(tǒng)能力通過繼承SystemAbility,實現(xiàn)WiFi服務(wù)能力并實現(xiàn)IPC進行通信(服務(wù)端實現(xiàn)stub實現(xiàn))。
- WiFi系統(tǒng)能力均為so動態(tài)庫,被SystemAbility同一管理,包括:wifi_device_ability,wifi_hotspot_ability,wifi_p2p_ability,wifi_scan_ability。
- WiFI系統(tǒng)服務(wù)通過調(diào)用WiFi服務(wù)實現(xiàn)功能。
- WiFi服務(wù)
- WiFi服務(wù)層包括:wifi_scan_service,wifi_sta_service 和 wifi_ap_service,wifi_p2p_service(后兩個針對標準設(shè)備)。
- 主服務(wù)為wifi_manager_service,內(nèi)部管理一張dll表,定義對應(yīng)的WiFi服務(wù),通過WiFi能力層調(diào)用,加載不同dll,獲得不同服務(wù)。
- WiFi服務(wù)層主要通過idl_client同WiFi硬件抽象層進行數(shù)據(jù)交互。
- WiFi硬件抽象
- WiFi硬件抽象層并不是完全意義的硬件抽象,即是WiFi協(xié)議層(wap_supplicant-2.9)之上的適配層,又基于HDF之上使用HDI接口調(diào)用驅(qū)動能力。
- WiFi硬件抽象層是獨立的進程,通過cRpc和WiFi服務(wù)層交互。
- 在WiFi硬件層還有etc配置目錄,內(nèi)部存儲WiFi的默認配置。
- 目前WiFi主要用的HDI部分集中在ap相關(guān)功能,如:WifiSetPowerModel,GetValidFrequenciesForBand。
- WiFi協(xié)議層(wap_supplicant-2.9)
- 參考鏈接:??https://w1.fi/wpa_supplicant/??。
- 實現(xiàn)WiFi接入和WiFi熱點的協(xié)議棧。
- 實現(xiàn)基礎(chǔ)的驅(qū)動(nl80211)。
總結(jié)
- WiFi服務(wù)的結(jié)構(gòu)和之前講的藍牙結(jié)構(gòu)略有不同,為了提供更靈活的能力,WiFi實現(xiàn)了更多的SystemAbility,同時通過idl_client,WiFi服務(wù)通過調(diào)用wap_supplicant實現(xiàn)具體的WiFi能力。
- 目前開源鴻蒙用的WiFi協(xié)議站為wpa_supplicant-2.9,提供WiFi的接入和熱點能力。