Il framework Wi-Fi ha tre superfici HAL Wi-Fi rappresentate da tre diverse interfacce. Per i dispositivi con Android 14 o versioni successive, tutte e tre le interfacce sono disponibili come pacchetti AIDL stabili. Queste interfacce erano precedentemente definite utilizzando HIDL.
- HAL del fornitore: una piattaforma HAL per i comandi specifici di Android. I file AIDL si trovano in
hardware/interfaces/aidl
e i file HIDL inhardware/interfaces/wifi/1.x
. - HAL Supplicant: una superficie HAL per wpa_supplicant. I file AIDL si trovano in
hardware/interfaces/supplicant/aidl
e i file HIDL si trovano inhardware/interfaces/supplicant/1.x
. - HAL Hostapd: una superficie HAL per hostapd. I file AIDL si trovano in
hardware/interfaces/hostapd/aidl
e i file HIDL si trovano inhardware/interfaces/hostapd/1.x
.
HAL del fornitore
L'HAL del fornitore fornisce comandi specifici per Android. È facoltativo (non obbligatorio) per il funzionamento delle modalità di infrastruttura Station (STA) e Soft AP (SAP). Tuttavia, questa operazione è obbligatoria per i servizi Wi-Fi Aware e RTT Wi-Fi.
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 ora chiamato HAL legacy. Al momento, il codice sorgente di Android fornisce un'implementazione predefinita di AIDL o HIDL utilizzando uno shim in esecuzione sull'HAL precedente.
Le intestazioni HAL precedenti 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 supplicant
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 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, che viene implementata nella sottodirectory aidl
.
HAL Hostapd
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 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, che viene 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
inferiori.
L'HAL AIDL, disponibile per Android 14 e versioni successive, e la versione 1.6 dell'HAL Wi-Fi, disponibile in Android 13, consentono di specificare un'interfaccia AP con bridge (dual band simultanea) come elemento di combinazione esplicito.
Il formato della specifica della concorrenza è flessibile e generico. Può esprimere combinazioni non ancora supportate dal framework. Per configurare una combinazione specifica, utilizza il flag di compilazione WIFI_HAL_INTERFACE_COMBINATIONS
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). In device/<oem>/<device>/BoardConfig-common.mk
, questo valore è espresso 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 con bridge (dual band simultaneo) senza altre interfacce. Questo 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 flag di build (legacy). Per le istruzioni di configurazione, vedi: