HAL de Wi-Fi

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 en hardware/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 en hardware/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 en hardware/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: