Wi-Fi HAL

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