HAL Wi-Fi

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.

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: