Wi-Fi HAL

O framework Wi-Fi tem três interfaces HAL Wi-Fi representadas por três interfaces diferentes. Para dispositivos com Android 14 ou mais recente, todas as três interfaces estão disponíveis como pacotes AIDL estáveis. Antes, essas interfaces eram definidas usando HIDL.

HAL do fornecedor

A HAL do fornecedor oferece comandos específicos do Android. É opcional (não obrigatório) para que os modos de estação (STA) e ponto de acesso (SAP) de infraestrutura funcionem. No entanto, é obrigatório para os serviços Wi-Fi Aware e Wi-Fi RTT.

No Android 14 e versões mais recentes, a interface HAL do fornecedor é definida usando AIDL. No Android 13 e versões anteriores, a interface HAL do fornecedor é definida usando HIDL.

O Android pré-HIDL (ou seja, antes do Android 8.0) usava um mecanismo HAL agora chamado de HAL legada. O código-fonte do Android atualmente oferece uma implementação padrão de AIDL ou HIDL usando um shim executado sobre a HAL legada.

Os cabeçalhos da HAL legada estão localizados em hardware/libhardware_legacy/include/hardware_legacy/. A implementação legada baseada em HAL está localizada em hardware/interfaces/wifi/aidl/default para AIDL e hardware/interfaces/wifi/1.x/default para HIDL.

HAL do suplicante

A HAL de supplicant fornece uma interface para o daemon wpa_supplicant. No Android 13 e versões mais recentes, a interface usa AIDL para a definição da HAL. Em versões anteriores ao Android 13, interfaces e partições do fornecedor usam HIDL.

O código-fonte do wpa_supplicant está localizado em external/wpa_supplicant_8/wpa_supplicant. A implementação de referência fornece uma interface AIDL, que é implementada no subdiretório aidl.

HAL do hostapd

O Hostapd HAL fornece uma interface para o daemon hostapd. No Android 13 e versões mais recentes, a interface usa AIDL para a definição da HAL. Em versões anteriores ao Android 13, interfaces e partições do fornecedor usam HIDL.

O código-fonte do hostapd está localizado em external/wpa_supplicant_8/hostapd. A implementação de referência fornece uma interface AIDL, que é implementada no subdiretório aidl.

Simultaneidade de várias interfaces Wi-Fi

Dispositivos Android diferentes podem oferecer suporte a diferentes combinações de interfaces Wi-Fi simultaneamente. As combinações compatíveis são definidas na HAL e expostas ao framework. O formato de especificação é definido em hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl para a HAL AIDL do Wi-Fi, android/hardware/interfaces/wifi/1.6/IWifiChip.hal para a HAL do Wi-Fi 1.6 e android/hardware/interfaces/wifi/1.0/IWifiChip.hal para a HAL do Wi-Fi 1.5 e versões anteriores.

A HAL AIDL, disponível para Android 14 e versões mais recentes, e a HAL de Wi-Fi versão 1.6, disponível no Android 13, adicionam a capacidade de especificar uma interface de AP em ponte (banda dupla simultânea) como um item de combinação explícito.

O formato da especificação de simultaneidade é flexível e genérico. Ele pode expressar combinações que ainda não são compatíveis com a estrutura. Para configurar uma combinação específica, use a flag de build WIFI_HAL_INTERFACE_COMBINATIONS localizada em device/<oem>/<device>/BoardConfig-common.mk.

Por exemplo, um dispositivo pode ser compatível com duas STAs e uma interface do tipo NAN (Wi-Fi Aware) ou P2P (Wi-Fi Direct) (mas não os dois). Isso é expresso em device/<oem>/<device>/BoardConfig-common.mk como:

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

Outro exemplo é um dispositivo que oferece suporte a uma STA com um único AP ou um AP em ponte (banda dupla simultânea) sem outras interfaces. Isso é representado como:

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

Como alternativa, o HAL de referência tem configurações para várias combinações que podem ser ativadas com flags de build (legadas). Para instruções de configuração, consulte: