Il framework Wi-Fi ha tre piattaforme 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 (Android Interface Definition Language) stabili. Queste interfacce erano state precedentemente definite utilizzando HIDL (Hardware Interface Definition Language).
- HAL del fornitore: una piattaforma HAL per i comandi specifici di Android. I file AIDL si trovano
in
hardware/interfaces/wifi/aidl. - HAL del supplicante: una piattaforma HAL per wpa_supplicant. I file AIDL si trovano in
hardware/interfaces/wifi/supplicant/aidl. - HAL di hostapd: una piattaforma HAL per hostapd. I file AIDL si trovano in
hardware/interfaces/wifi/hostapd/aidl.
HAL del fornitore
L'HAL del fornitore fornisce comandi specifici di Android. È facoltativo (non obbligatorio) per il funzionamento delle modalità STA (Station) dell'infrastruttura e SAP (Soft AP). 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.
Prima di HIDL (ovvero prima di Android 8.0), Android utilizzava un meccanismo HAL chiamato HAL legacy. Il codice sorgente di Android fornisce un'implementazione predefinita di AIDL o HIDL. Questa implementazione utilizza uno shim in esecuzione sopra l'HAL legacy.
Le intestazioni HAL legacy si trovano in hardware/libhardware_legacy/include/hardware_legacy/. L'implementazione basata su HAL legacy si trova in hardware/interfaces/wifi/aidl/default per AIDL e hardware/interfaces/wifi/1.x/default per HIDL.
HAL del supplicante
L'HAL del supplicante 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 del 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.
HAL di hostapd
L'HAL di 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 del 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
Diversi dispositivi Android possono supportare contemporaneamente combinazioni diverse di interfacce Wi-Fi. Le combinazioni supportate sono definite nell'HAL e vengono 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 a doppia banda) 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. Questo flag 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 entrambe). Questa opzione è espressa in
device/<oem>/<device>/BoardConfig-common.mk come segue:
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 (simultaneo a doppia banda) senza altre interfacce. Questa opzione è rappresentata come segue:
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}
In alternativa, l'HAL di riferimento include configurazioni per diverse combinazioni che possono essere attivate con i flag di build (legacy). Per istruzioni di configurazione, vedi: