HAL de Wi-Fi

El framework de Wi-Fi tiene tres HAL de Wi-Fi representados por tres interfaces diferentes. En dispositivos que ejecutan Android 14 o versiones posteriores, las tres interfaces están disponibles como paquetes AIDL estables. Anteriormente, estas interfaces se definían con HIDL.

HAL del proveedor

La HAL del proveedor proporciona comandos específicos de Android. Es opcional (no obligatorio) para que funcionen los modos de estación (STA) de infraestructura y de AP (SAP) de software. Sin embargo, es obligatorio para los servicios de Wi-Fi Aware y Wi-Fi RTT.

En Android 14 y versiones posteriores, la interfaz de la HAL del proveedor se define con AIDL. En Android 13 y versiones anteriores, la interfaz de la HAL del proveedor se define con HIDL.

En Android anterior a HIDL (es decir, antes de Android 8.0), se usaba un mecanismo de HAL que ahora se denomina HAL heredada. Actualmente, el código fuente de Android proporciona una implementación predeterminada de AIDL o HIDL que usa una capa de compatibilidad que se ejecuta sobre el HAL heredado.

Los encabezados de HAL heredados se encuentran en hardware/libhardware_legacy/include/hardware_legacy/. La implementación heredada basada en HAL se encuentra en hardware/interfaces/wifi/aidl/default para AIDL y hardware/interfaces/wifi/1.x/default para HIDL.

HAL de Supplicant

El HAL de Supplicant proporciona una interfaz para el daemon wpa_supplicant. A partir de Android 13, la interfaz usa AIDL para la definición de la HAL. En las versiones anteriores a Android 13, las interfaces y las particiones del proveedor usan HIDL.

El código fuente de wpa_supplicant se encuentra en external/wpa_supplicant_8/wpa_supplicant. La implementación de referencia proporciona una interfaz de AIDL, que se implementa en el subdirectorio aidl.

HAL de Hostapd

El HAL de Hostapd proporciona una interfaz para el daemon hostapd. A partir de Android 13, la interfaz usa AIDL para la definición de la HAL. En las versiones anteriores a Android 13, las interfaces y las particiones del proveedor usan HIDL.

El código fuente de hostapd se encuentra en external/wpa_supplicant_8/hostapd. La implementación de referencia proporciona una interfaz de AIDL, que se implementa en el subdirectorio aidl.

Simultaneidad de Wi-Fi en varias interfaces

Los diferentes dispositivos Android pueden admitir diferentes combinaciones de interfaces Wi-Fi de forma simultánea. Las combinaciones admitidas se definen en el HAL y se exponen al framework. El formato de especificación se define en hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl para la HAL de Wi-Fi de AIDL, android/hardware/interfaces/wifi/1.6/IWifiChip.hal para la HAL de Wi-Fi 1.6 y android/hardware/interfaces/wifi/1.0/IWifiChip.hal para la HAL de Wi-Fi 1.5 y versiones anteriores.

La HAL de AIDL, disponible para Android 14 y versiones posteriores, y la versión 1.6 de la HAL de Wi-Fi, disponible en Android 13, agregan la capacidad de especificar una interfaz AP de puente (banda dual simultánea) como un elemento de combinación explícito.

El formato de especificación de simultaneidad es flexible y genérico. Puede expresar combinaciones que aún no son compatibles con el framework. Para configurar una combinación en particular, usa la marca de compilación WIFI_HAL_INTERFACE_COMBINATIONS ubicada en device/<oem>/<device>/BoardConfig-common.mk.

Por ejemplo, un dispositivo puede admitir dos STA y una interfaz de tipo NAN (Wi-Fi Aware) o P2P (Wi-Fi Direct), pero no ambos. Esto se expresa en device/<oem>/<device>/BoardConfig-common.mk de la siguiente manera:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}

Otro ejemplo es un dispositivo que admite una STA con un solo AP o un AP puenteado (simultáneo de doble banda) sin otras interfaces. Esto se representa de la siguiente manera:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}

Como alternativa, el HAL de referencia tiene configuraciones para varias combinaciones que se pueden activar con marcas de compilación (heredadas). Para obtener instrucciones de configuración, consulta los siguientes vínculos: