Wi-Fi Aware

O recurso Wi-Fi Aware adicionado no Android 8.0 permite que dispositivos compatíveis detectem, se conectem e tenham alcance (adicionado no Android 9) uns aos outros diretamente usando o protocolo Wi-Fi Aware sem acesso à Internet ou à rede celular. Esse recurso, criado com base na Wi-Fi Alliance (WFA, na sigla em inglês) especificação Wi-Fi Aware (versões 2.0, 3.0, 3.1 e 4.0), permite o compartilhamento fácil de dados de alta capacidade entre dispositivos e apps confiáveis que estão fora da rede.

Exemplos e origem

Para usar esse recurso, os fabricantes de dispositivos precisam implementar o HAL do fornecedor de Wi-Fi. No Android 14 e versões mais recentes, a interface da HAL do fornecedor é definida usando a AIDL. No Android 13 e versões anteriores, a interface da HAL do fornecedor é definida usando o HIDL.

Siga a interface do Wi-Fi para utilizar o recurso Wi-Fi Aware. Dependendo da interface implementada, isso pode ser:

  • AIDL: hardware/interfaces/wifi/aidl
  • HIDL: hardware/interfaces/wifi/1.2 ou mais recente

Consulte o HAL do Wi-Fi legado para saber como ele se correlaciona com as interfaces AIDL e HIDL: hardware/libhardware_legacy/+/main/include/hardware_legacy/wifi_nan.h.

Implementação

Os fabricantes de dispositivos precisam oferecer suporte a framework e HAL/firmware:

  • Estrutura:
    • Código do AOSP
    • Ativar o Aware: requer uma sinalização de recurso e uma sinalização de build
  • Suporte a HAL do Wi-Fi Aware (NAN), o que implica suporte a firmware

Para implementar esse recurso, os fabricantes de dispositivos implementam a interface Wi-Fi e ativam duas flags de recurso:

  • Em BoardConfig.mk ou BoardConfig-common.mk localizado em device/<oem>/<device>, adicione a seguinte flag:

    WIFI_HIDL_FEATURE_AWARE := true
    
  • Em device.mk, localizado em device/<oem>/<device>, modifique a variável de ambiente PRODUCT_COPY_FILES para incluir suporte ao recurso Wi-Fi Aware:

    PRODUCT_COPY_FILES +=
    frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
    

O Wi-Fi Aware inclui o alcance de dispositivos peer usando o protocolo IEEE 802.11mc, também conhecido como tempo de ida e volta (RTT). Esse subrecurso do Wi-Fi Aware é condicionado ao suporte do dispositivo ao recurso RTT do Wi-Fi, ou seja, ele exige que o dispositivo ofereça suporte ao Wi-Fi Aware e ao RTT do Wi-Fi. Para mais detalhes, consulte RTT do Wi-Fi.

Caso contrário, tudo o que for necessário para esse recurso será incluído no AOSP.

A sinalização WIFI_HIDL_FEATURE_AWARE será ignorada se WIFI_HAL_INTERFACE_COMBINATIONS for especificada. Para mais informações, consulte Simultaneidade de várias interfaces de Wi-Fi.

Ordem aleatória de MAC

O Android exige que o endereço MAC da descoberta Wi-Fi Aware (NMI) e as interfaces de dados (NDPs) sejam aleatórios e não sejam idênticos ao endereço MAC verdadeiro do dispositivo. Os endereços MAC precisam ser:

  • Aleatório sempre que o Wi-Fi Aware é ativado ou reativado.
  • Quando o Wi-Fi Aware está ativado, o endereço MAC precisa ser randomizado em um intervalo regular configurado pelo parâmetro NanConfigRequest.macAddressRandomizationIntervalSec. Por padrão, o framework configura esse valor como 30 minutos.

Suspender e retomar

No Android 14 e versões mais recentes, o Wi-Fi Aware oferece suporte à capacidade de apps restritos suspenderem e retomarem sessões ativas de descoberta, incluindo todos os caminhos de dados associados a essas sessões. O suporte a essa capacidade permite que os dispositivos retomem as sessões de descoberta mais rapidamente e usem menos energia, porque elas podem ser suspensas.

Se um dispositivo oferecer suporte a essa capacidade de suspensão e retomada, o firmware vai suspender a sessão de Wi-Fi Aware quando um app privilegiado suspender a sessão de descoberta. Quando uma sessão de descoberta está em estado suspenso, o dispositivo não transmite nem recebe frames para essa sessão, incluindo NDPs ativos nela. Se todas as sessões de descoberta forem suspensas, o dispositivo não vai transmitir nem receber frames Wi-Fi Aware.

Quando um app privilegiado retoma uma sessão de descoberta suspensa, o framework retorna a sessão ao estado anterior, incluindo todas as sessões de NDP associadas. Retomar uma sessão de descoberta suspensa é mais rápido do que ativar o Wi-Fi Aware e criar uma nova sessão de descoberta.

Para oferecer suporte à capacidade de suspender e retomar sessões de descoberta, os fabricantes de dispositivos precisam oferecer suporte a HAL e firmware. Para mais detalhes, consulte IWifiNanIface.java.

Os fabricantes de dispositivos podem usar comunicações fora da banda (por exemplo, BLE) para sincronizar a suspensão e a retomada em vários dispositivos.

Validação

O Android oferece um conjunto de testes de unidade, testes do conjunto de teste de compatibilidade (CTS, na sigla em inglês) e testes do CTS Verifier para validar o recurso Wi-Fi Aware. O Wi-Fi Aware também pode ser testado usando o pacote de teste de fornecedor (VTS, na sigla em inglês).

Testes de unidade

Os testes do pacote do Wi-Fi Aware são executados usando:

Testes de serviço:

atest com.android.server.wifi.aware

Testes do administrador:

atest android.net.wifi.aware

Testes do conjunto de teste de compatibilidade (CTS)

Use testes do CTS para validar o recurso Wi-Fi Aware. O CTS detecta quando o recurso está ativado e inclui automaticamente os testes associados.

Os testes CTS podem ser acionados usando:

atest SingleDeviceTest

Testes do CTS Verifier

Os testes do verificador do CTS validam o comportamento do Wi-Fi Aware usando dois dispositivos: um dispositivo de teste e um dispositivo conhecido como bom. Para executar os testes, abra o CTS Verifier e navegue até a seção "Wi-Fi Aware Tests".