El framework de Wi-Fi tiene tres superficies de HAL de Wi-Fi representadas por tres interfaces diferentes. En dispositivos que ejecutan Android 14 o versiones posteriores, las tres interfaces están disponibles como paquetes estables del Lenguaje de Definición de la Interfaz de Android (AIDL). Estas interfaces se definieron anteriormente con el Lenguaje de Definición de la Interfaz de Hardware (HIDL).
- HAL del proveedor: Es una superficie de HAL para comandos específicos de Android. Los archivos AIDL se encuentran
en
hardware/interfaces/wifi/aidl. - HAL de Supplicant: Es una superficie de HAL para wpa_supplicant. Los archivos AIDL se encuentran en
hardware/interfaces/wifi/supplicant/aidl. - HAL de Hostapd: Es una superficie de HAL para hostapd. Los archivos AIDL se encuentran en
hardware/interfaces/wifi/hostapd/aidl.
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 de infraestructura (STA) y de AP suave (SAP). Sin embargo, es obligatorio para Wi-Fi Aware y para los servicios de Wi-Fi RTT.
En Android 14 y versiones posteriores, la interfaz de la HAL del proveedor se define con el AIDL. En Android 13 y versiones anteriores, la interfaz de la HAL del proveedor se define con el HIDL.
Antes del HIDL (es decir, antes de Android 8.0), Android usaba un mecanismo de HAL llamado HAL heredado. El código fuente de Android proporciona una implementación predeterminada de AIDL o HIDL. Esta implementación usa un shim que se ejecuta sobre la HAL heredada.
Los encabezados de la HAL heredada se encuentran en hardware/libhardware_legacy/include/hardware_legacy/. La implementación basada en la HAL heredada se encuentra en hardware/interfaces/wifi/aidl/default para AIDL y hardware/interfaces/wifi/1.x/default para HIDL.
HAL de Supplicant
La 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 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 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 de Wi-Fi de forma simultánea. Las combinaciones admitidas se definen en la 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 puenteada (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. Esta marca 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 ambas). 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 (banda dual 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, la 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 lo siguiente: