O framework de Wi-Fi tem três superfícies de HAL de Wi-Fi representadas por três interfaces diferentes. Para dispositivos com o Android 14 ou mais recente, as três interfaces estão disponíveis como pacotes AIDL estáveis. Essas interfaces foram definidas anteriormente usando HIDL.
- HAL do fornecedor: uma plataforma HAL para comandos específicos do Android. Os arquivos AIDL estão
em
hardware/interfaces/aidl
, e os arquivos HIDL estão emhardware/interfaces/wifi/1.x
. - HAL suplicante: uma superfície HAL para wpa_supplicant. Os arquivos AIDL estão em
hardware/interfaces/supplicant/aidl
, e os arquivos HIDL estão emhardware/interfaces/supplicant/1.x
. - HAL do hostapd: uma superfície HAL para hostapd. Os arquivos AIDL estão em
hardware/interfaces/hostapd/aidl
, e os arquivos HIDL estão emhardware/interfaces/hostapd/1.x
.
HAL do fornecedor
A HAL do fornecedor fornece comandos específicos do Android. É opcional (não obrigatório) que os modos de estação (STA) e ponto de acesso (SAP) da infraestrutura funcionem. No entanto, ele é obrigatório para os serviços de Wi-Fi Aware e de Wi-Fi RTT.
No Android 14 e versões mais recentes, a interface da HAL de fornecedor é definida usando AIDL. No Android 13 e versões anteriores, a interface da HAL do fornecedor é definida usando a HIDL.
Antes do HIDL (ou seja, antes do Android 8.0), o Android usava um mecanismo HAL chamado HAL legado. O código-fonte do Android atualmente fornece uma implementação padrão de AIDL ou HIDL usando um shim executado sobre o HAL legado.
Os cabeçalhos da HAL legados 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 solicitante
O Supplicant HAL fornece uma interface para o daemon wpa_supplicant. No Android 13 e versões mais recentes, a interface usa a AIDL para a definição da HAL. Para versões anteriores ao Android 13, as 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
oferece uma interface AIDL, que é implementada no subdiretório aidl
.
HAL do Hostapd
O HAL do Hostapd fornece uma interface para o daemon hostapd. No Android 13 e versões mais recentes, a interface usa a AIDL para a definição da HAL. Para versões anteriores ao Android 13, as 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
Diferentes dispositivos Android podem oferecer suporte a diferentes combinações de interfaces Wi-Fi
simultaneamente. As combinações compatíveis são definidas no HAL e expostas
ao framework. O formato da especificação é definido em
hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl
para a HAL do Wi-Fi AIDL,
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 o Android 14 e versões mais recentes, e a HAL 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 de especificação de simultaneidade é flexível e genérico. Ele pode expressar
combinações que ainda não têm suporte do framework. 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 oferecer suporte a duas STAs e uma interface do tipo NAN
(Wi-Fi Aware)
ou P2P
(Wi-Fi Direct). 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 um STA com um único AP ou um AP ponteado (dupla banda 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 (legado). Para instruções de configuração, consulte: