Wi-Fi HAL

O framework Wi-Fi tem três interfaces HAL 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 Android Interface Definition Language (AIDL) estáveis. Antes, essas interfaces eram definidas usando a linguagem de definição de interface de hardware (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 em versões anteriores, a interface HAL do fornecedor é definida usando HIDL.

Antes do HIDL (ou seja, antes do Android 8.0), o Android usava um mecanismo HAL chamado HAL legada. O código-fonte do Android fornece uma implementação padrão de AIDL ou HIDL. Essa implementação usa 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 Wi-Fi versão 1.6, disponível no Android 13, adicionam a capacidade de especificar uma interface de AP em ponte (simultânea de banda dupla) 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 ainda não compatíveis com o framework. Para configurar uma combinação específica, use a flag de build WIFI_HAL_INTERFACE_COMBINATIONS. Essa flag está 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: