HAL Wi-Fi

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

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: