El framework de Wi-Fi tiene tres plataformas de HAL de Wi-Fi representadas por tres interfaces diferentes. Para los dispositivos que ejecutan Android 14 o versiones posteriores, las tres interfaces están disponibles como paquetes AIDL estables. Estas interfaces se definían anteriormente con HIDL.
- HAL del proveedor: Es una plataforma de HAL para comandos específicos de Android. Los archivos AIDL están en
hardware/interfaces/aidl
y los archivos HIDL están enhardware/interfaces/wifi/1.x
. - HAL de solicitante: Es una plataforma de HAL para wpa_supplicant. Los archivos AIDL están en
hardware/interfaces/supplicant/aidl
y los archivos HIDL están enhardware/interfaces/supplicant/1.x
. - Hostapd HAL: Es una plataforma HAL para hostapd. Los archivos AIDL están en
hardware/interfaces/hostapd/aidl
y los archivos HIDL están enhardware/interfaces/hostapd/1.x
.
HAL del proveedor
La HAL del proveedor proporciona comandos específicos de Android. El funcionamiento es opcional (no obligatorio) para los modos de estación de infraestructura (STA) y AP secundario (SAP). 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 versiones previas a Android 8.0, antes de HIDL, Android usaba un mecanismo de HAL que ahora se llama HAL heredado. Actualmente, el código fuente de Android proporciona una implementación predeterminada de AIDL o HIDL con un shim que se ejecuta sobre el HAL heredado.
Los encabezados de HAL heredados se encuentran en hardware/libhardware_legacy/include/hardware_legacy/
. La implementación basada en HAL heredada se encuentra en hardware/interfaces/wifi/aidl/default
para AIDL y hardware/interfaces/wifi/1.x/default
para HIDL.
HAL de solicitante
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 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
La HAL de Hostapd proporciona una interfaz para el daemon hostapd. A partir de Android 13, la interfaz usa AIDL para la definición de 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 distintas combinaciones de interfaces Wi-Fi al mismo tiempo. Las combinaciones compatibles se definen en el sistema 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 de AP en 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 particular, usa la marca de compilación WIFI_HAL_INTERFACE_COMBINATIONS
que se encuentra 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 un STA con un solo AP o un AP en puente (doble banda simultánea) 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: