Il framework Wi-Fi ha tre interfacce HAL Wi-Fi rappresentate da tre interfacce diverse. Per i dispositivi con Android 14 o versioni successive, tutte e tre le interfacce sono disponibili come pacchetti AIDL stabili. Queste interfacce sono state precedentemente definite utilizzando HIDL.
- HAL fornitore: una superficie HAL per i comandi specifici di Android. I file AIDL si trovano
in
hardware/interfaces/wifi/aidl
. - HAL supplicant: una superficie HAL per wpa_supplicant. I file AIDL si trovano in
hardware/interfaces/wifi/supplicant/aidl
. - Hostapd HAL: una superficie HAL per hostapd. I file AIDL si trovano in
hardware/interfaces/wifi/hostapd/aidl
.
Vendor HAL
L'HAL del fornitore fornisce comandi specifici per Android. È facoltativo (non obbligatorio) per il funzionamento delle modalità Station (STA) e Soft AP (SAP) dell'infrastruttura. Tuttavia, è obbligatorio per i servizi Wi-Fi Aware e Wi-Fi RTT.
In Android 14 e versioni successive, l'interfaccia HAL del fornitore è definita utilizzando AIDL. In Android 13 e versioni precedenti, l'interfaccia HAL del fornitore è definita utilizzando HIDL.
Android pre-HIDL (ovvero prima di Android 8.0) utilizzava un meccanismo HAL ora chiamato HAL legacy. Il codice sorgente Android attualmente fornisce un'implementazione predefinita di AIDL o HIDL utilizzando uno shim in esecuzione sopra l'HAL legacy.
Le intestazioni HAL precedenti si trovano in
hardware/libhardware_legacy/include/hardware_legacy/
. L'implementazione legacy basata su HAL si trova in hardware/interfaces/wifi/aidl/default
per AIDL e hardware/interfaces/wifi/1.x/default
per HIDL.
Supplicant HAL
L'HAL Supplicant fornisce un'interfaccia per il daemon wpa_supplicant. A partire da Android 13, l'interfaccia utilizza AIDL per la definizione HAL. Per le release precedenti ad Android 13, le interfacce e le partizioni fornitore utilizzano HIDL.
Il codice sorgente di wpa_supplicant si trova in
external/wpa_supplicant_8/wpa_supplicant
. L'implementazione di riferimento
fornisce un'interfaccia AIDL, implementata nella sottodirectory aidl
.
Hostapd HAL
L'HAL Hostapd fornisce un'interfaccia per il daemon hostapd. A partire da Android 13, l'interfaccia utilizza AIDL per la definizione HAL. Per le release precedenti ad Android 13, le interfacce e le partizioni fornitore utilizzano HIDL.
Il codice sorgente di hostapd si trova in external/wpa_supplicant_8/hostapd
.
L'implementazione di riferimento fornisce
un'interfaccia AIDL, implementata nella sottodirectory aidl
.
Concorrenza multi-interfaccia Wi-Fi
Dispositivi Android diversi possono supportare contemporaneamente combinazioni diverse di interfacce Wi-Fi. Le combinazioni supportate sono definite nell'HAL e sono esposte
al framework. Il formato della specifica è definito in
hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl
per l'HAL Wi-Fi AIDL,
android/hardware/interfaces/wifi/1.6/IWifiChip.hal
per l'HAL Wi-Fi 1.6 e
android/hardware/interfaces/wifi/1.0/IWifiChip.hal
per l'HAL Wi-Fi 1.5 e
versioni precedenti.
L'HAL AIDL, disponibile per Android 14 e versioni successive, e l'HAL Wi-Fi versione 1.6, disponibile in Android 13, aggiungono la possibilità di specificare un'interfaccia AP bridged (simultanea dual band) come elemento di combinazione esplicito.
Il formato della specifica di concorrenza è flessibile e generico. Può esprimere
combinazioni non ancora supportate dal framework. Per configurare una
combinazione specifica, utilizza il flag di build WIFI_HAL_INTERFACE_COMBINATIONS
che si trova in device/<oem>/<device>/BoardConfig-common.mk
.
Ad esempio, un dispositivo può supportare due STA e un'interfaccia di tipo NAN
(Wi-Fi Aware)
o P2P
(Wi-Fi Direct)
(ma non entrambi). Questo valore viene espresso in
device/<oem>/<device>/BoardConfig-common.mk
come:
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}
Un altro esempio è un dispositivo che supporta una STA con un singolo AP o un AP bridged (dual band simultaneous) senza altre interfacce. che viene rappresentato come:
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}
In alternativa, l'HAL di riferimento ha configurazioni per diverse combinazioni che possono essere attivate con i flag di build (legacy). Per le istruzioni di configurazione, vedi: