Wi-Fi 架構有三個 Wi-Fi HAL 途徑,由三個不同的介面代表。對於搭載 Android 14 以上版本的裝置,這三種介面都會提供穩定的 AIDL 套件。這些介面先前是使用 HIDL 定義的。
- 供應商 HAL:專為 Android 指令提供的 HAL 途徑。AIDL 檔案位於
hardware/interfaces/aidl
中,而 HIDL 檔案位於hardware/interfaces/wifi/1.x
中。 - Supplicant HAL:wpa_supplicant 的 HAL 途徑。AIDL 檔案位於
hardware/interfaces/supplicant/aidl
中,HIDL 檔案則位於hardware/interfaces/supplicant/1.x
中。 - Hostapd HAL:hostapd 的 HAL 途徑。AIDL 檔案位於
hardware/interfaces/hostapd/aidl
中,HIDL 檔案則位於hardware/interfaces/hostapd/1.x
中。
供應商 HAL
供應商 HAL 會提供 Android 專屬指令。基礎架構站 (STA) 和軟體存取點 (SAP) 模式的運作模式為選用 (非必要)。不過,對於 Wi-Fi Aware 和 Wi-Fi RTT 服務來說,這項要求是強制規定。
在 Android 14 以上版本中,供應商 HAL 介面會使用 AIDL 定義。在 Android 13 以下版本中,供應商 HAL 介面會使用 HIDL 定義。
在 HIDL 之前 (也就是 Android 8.0 之前),Android 使用的是現在稱為舊版 HAL的 HAL 機制。Android 原始碼目前提供 AIDL 或 HIDL 的預設實作項目,使用在舊版 HAL 上執行的 shim。
舊版 HAL 標頭位於 hardware/libhardware_legacy/include/hardware_legacy/
中。舊版 HAL 實作項目位於 AIDL 的 hardware/interfaces/wifi/aidl/default
和 HIDL 的 hardware/interfaces/wifi/1.x/default
。
申請者 HAL
Supplicant HAL 會為 wpa_supplicant 守護程序提供介面。從 Android 13 開始,此介面會使用 AIDL 定義 HAL。在 Android 13 之前的版本中,介面和供應商分區會使用 HIDL。
wpa_supplicant 原始碼位於 external/wpa_supplicant_8/wpa_supplicant
中。參考實作項目會提供 AIDL 介面,並在 aidl
子目錄中實作。
Hostapd HAL
Hostapd HAL 會為 hostapd 守護程式提供介面。從 Android 13 開始,此介面會使用 AIDL 定義 HAL。在 Android 13 之前的版本中,介面和供應商分區會使用 HIDL。
hostapd 原始碼位於 external/wpa_supplicant_8/hostapd
中。參考實作項目會提供 AIDL 介面,並在 aidl
子目錄中實作。
Wi-Fi 多介面並行
不同的 Android 裝置可以同時支援不同的 Wi-Fi 介面組合。支援的組合會在 HAL 中定義,並公開給架構。規格格式定義如下:hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl
適用於 AIDL Wi-Fi HAL、android/hardware/interfaces/wifi/1.6/IWifiChip.hal
適用於 Wi-Fi HAL 1.6,而 android/hardware/interfaces/wifi/1.0/IWifiChip.hal
適用於 Wi-Fi HAL 1.5 以下版本。
AIDL HAL (適用於 Android 14 以上版本) 和 Wi-Fi HAL 1.6 版 (適用於 Android 13) 新增了指定橋接 AP 介面 (同時使用兩個頻段) 做為明確組合項目的功能。
並行處理規格格式具有彈性且通用。可用來表示架構尚未支援的組合。如要設定特定組合,請使用 device/<oem>/<device>/BoardConfig-common.mk
中的 WIFI_HAL_INTERFACE_COMBINATIONS
建構旗標。
舉例來說,裝置可支援兩個 STA 和一個 NAN (Wi-Fi Aware) 或 P2P (Wi-Fi Direct) 類型的介面 (但不能同時支援兩者)。在 device/<oem>/<device>/BoardConfig-common.mk
中,這會以以下方式表示:
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}
另一個例子是裝置支援單一 AP 的 STA,或沒有其他介面的橋接 AP (同時支援雙頻)。這會以以下方式表示:
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}
或者,參考 HAL 也提供多種組合的設定,可透過 (舊版) 建構標記啟用。如需設定操作說明,請參閱: