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: uma superfície HAL para comandos específicos do Android. Os arquivos AIDL estão
em
hardware/interfaces/wifi/aidl
. - HAL suplicante: uma superfície HAL para wpa_supplicant. Os arquivos AIDL estão em
hardware/interfaces/wifi/supplicant/aidl
. - Hostapd HAL: uma superfície HAL para hostapd. Os arquivos AIDL estão em
hardware/interfaces/wifi/hostapd/aidl
.
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: