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 Android Interface Definition Language (AIDL) stabili. Queste interfacce erano precedentemente definite utilizzando Hardware Interface Definition Language (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.

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 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. 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 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 flag di build (legacy). Per le istruzioni di configurazione, vedi: