Simultaneidade Wi-Fi STA/STA

O Android 12 introduz a simultaneidade Wi-Fi STA/STA, que permite que os dispositivos se conectem a duas redes Wi-Fi simultaneamente. Este recurso opcional permite as seguintes funções.

  • Make-before-break : O dispositivo estabelece uma conexão com uma nova rede Wi-Fi antes de interromper a conexão existente. Isso resulta em transições mais suaves ao alternar entre redes Wi-Fi
  • Conexão simultânea somente local e de Internet : o dispositivo se conecta a uma rede somente local sem interromper a conexão principal de fornecimento de Internet do dispositivo.
  • Conexão simultânea restrita e de Internet : o dispositivo se conecta a uma rede restrita (disponível apenas para determinados aplicativos privilegiados) sem interromper a conexão principal de fornecimento de Internet do dispositivo.
  • (Android 13 ou superior) Várias redes simultâneas com conexão à Internet : o dispositivo se conecta a duas redes, ambas irrestritas e disponíveis para todos os aplicativos, e fornecem conectividade à Internet.

Esta página descreve o comportamento do dispositivo quando esse recurso está habilitado e os detalhes de implementação para fabricantes e fornecedores de dispositivos.

Implementação

Os dispositivos devem oferecer suporte ao seguinte para implementar a simultaneidade Wi-Fi STA/STA:

  • O chip ou firmware Wi-Fi deve suportar duas conexões STA simultâneas. O firmware deve suportar todas as combinações de canais e bandas para ambas as conexões. Para evitar problemas de desempenho, recomendamos o uso de um chip Wi-Fi compatível com 2x2+2x2 DBS.

  • O dispositivo deve suportar as seguintes APIs na implementação AIDL ou HIDL do IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • A combinação de interface HAL Wi-Fi deve ter duas interfaces STA simultâneas expostas usando um formato de especificação como [{STA} <= 2, ...] . Para obter mais informações, consulte Simultaneidade de múltiplas interfaces Wi-Fi .

Se esses pré-requisitos forem atendidos, implemente a simultaneidade Wi-Fi STA/STA fazendo o seguinte:

  1. Habilite uma ou mais funções individualmente usando sobreposições de recursos de tempo de execução (desabilitadas por padrão).

    • Make-before-break : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Conexão simultânea somente local e de internet : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Conexão simultânea restrita e com a Internet : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Várias redes simultâneas com conexão à Internet : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Valide cada implementação conforme descrito nas respectivas seções abaixo.

Para oferecer melhor suporte à simultaneidade Wi-Fi STA/STA, recomendamos que estruturas e aplicativos personalizados por OEM usem o método NetworkCallback#onCapabilitiesChanged() em vez de WifiManager#getConnectionInfo() , que retorna WifiInfo apenas para uma única rede e foi descontinuado no Android 12 . Para obter mais informações, consulte API de solicitação de rede Wi-Fi para conectividade ponto a ponto .

Faça antes do intervalo

A função make-before-break permite que os dispositivos se conectem a uma nova rede Wi-Fi enquanto mantêm a conexão de rede Wi-Fi existente, desconectando-se da rede antiga apenas quando se conectarem com sucesso à nova rede Wi-Fi e tiverem acesso à Internet.

O caso de uso make-before-break aborda os seguintes problemas no Android 11 ou versões anteriores, em que o dispositivo deve se desconectar da rede Wi-Fi existente antes de se conectar a uma nova rede (break-before-make).

  • Ao se conectar a uma nova rede, o dispositivo pode descobrir que possui uma senha de Wi-Fi incorreta salva ou que a nova rede não tem acesso à Internet. Isso força o dispositivo a voltar para a rede antiga, levando a um período significativo de tempo sem conectividade Wi-Fi.

  • A rede antiga é desconectada abruptamente, o que significa que todos os soquetes são fechados. Muitas vezes, os aplicativos não reagem bem a uma perda repentina de conectividade e isso pode fazer com que o usuário fique alguns segundos sem conectividade com a Internet até que a nova conexão seja totalmente estabelecida.

  • A rede padrão muda duas vezes, da rede Wi-Fi antiga para a rede celular e, em seguida, da rede celular para a nova rede Wi-Fi. Isso faz com que os aplicativos reajam duas vezes às alterações da rede. O dispositivo também deve passar um curto período de tempo usando dados de celular.

O fluxo make-before-break é usado apenas para trocas automáticas de rede Wi-Fi iniciadas pelo sistema operacional. Os switches de rede iniciados pelo usuário usam o fluxo break-before-make herdado, em que a rede anterior é totalmente desconectada antes que a nova rede seja conectada. Em certos casos, o fluxo break-before-make é usado mesmo em switches automáticos iniciados pelo SO, por exemplo, ao alternar entre duas redes ambas configuradas para usar o endereço MAC de fábrica.

Os aplicativos podem verificar se esse caso de uso é compatível com o dispositivo usando a API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Validando o make-before-break

Para validar sua implementação, acione uma troca automática de rede Wi-Fi (garantindo que uma rede com uma intensidade de sinal mais forte do que a rede atualmente conectada esteja disponível) e verifique se o dispositivo mantém a conexão existente enquanto se conecta à nova rede. Para visualizar o status de ambas as interfaces Wi-Fi e verificar se ambas estão conectadas, use o comando a seguir.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Caso a nova rede não tenha conectividade, o dispositivo tenta se conectar à rede, mantendo a conexão com a rede existente, e aborta a tentativa ao detectar que a nova rede não tem internet. O dispositivo continua usando a conexão existente como rede Wi-Fi principal.

Conexão simultânea apenas local e com a Internet

A função de conexão simultânea apenas local e de Internet permite que os dispositivos se conectem a uma conexão apenas local, como uma conexão a um dispositivo IoT, simultaneamente com a rede primária de fornecimento de Internet. Esta função melhora a experiência do usuário ao se conectar diretamente a dispositivos IoT, como câmeras, o que é possível por meio da API WifiNetworkSpecifier adicionada no Android 10.

No Android 11 e versões anteriores, os dispositivos se desconectam da rede Wi-Fi principal ao se conectarem a um dispositivo IoT, resultando em perda de conectividade com a Internet (a menos que o dispositivo tenha outro tipo de transporte disponível, como dados de celular).

Os aplicativos podem verificar se esta função é compatível com o dispositivo usando a API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Para obter mais informações sobre alterações na função de conexão local simultânea e de conexão com a Internet no Android 12, consulte API de solicitação de rede Wi-Fi para conectividade ponto a ponto .

Validando conexão apenas local e com a Internet

Para validar esta função, utilize os seguintes testes CTS e ACTS:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ATOS: WifiStaConcurrencyNetworkRequestTest

Conexão simultânea restrita e de internet

A função de conexão simultânea restrita e à Internet permite que o dispositivo se conecte simultaneamente a uma rede Wi-Fi primária para o usuário e a uma rede Wi-Fi restrita que está disponível apenas para aplicativos selecionados.

Os aplicativos podem verificar se esta função é compatível com o dispositivo usando a API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Para permitir que um dispositivo se conecte a redes Wi-Fi secundárias restritas, siga estas etapas:

  1. Adicione sugestões de rede Wi-Fi com setOemPaid ou setOemPrivate definido como verdadeiro.

  2. Em ConnectivityManager , registre um NetworkRequest com os recursos correspondentes:

Quando o dispositivo detecta resultados de verificação com uma rede que corresponde à sugestão OEM paga ou OEM privada, ele se conecta automaticamente a ela como uma rede secundária.

Validando conexão simultânea restrita e de internet

Para validar esta função, utilize os seguintes testes CTS e ACTS:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ATOS: WifiStaConcurrencyNetworkRequestTest

Várias redes simultâneas com conexão à Internet

Disponível para Android 13 ou superior, o recurso de múltiplas redes simultâneas com conexão à Internet permite que o dispositivo se conecte simultaneamente a duas redes (APs), ambas irrestritas (todos os aplicativos têm acesso) e fornecem acesso à Internet.

Os aplicativos podem verificar se esse recurso é compatível com o dispositivo usando o método WifiManager#isStaConcurrencyForMultiInternetSupported() .

Se o recurso for compatível, aplicativos privilegiados poderão habilitá-lo usando o método WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . O recurso possui os seguintes modos:

Para consultar o modo de recurso atualmente ativo, use o método WifiManager#getStaConcurrencyForMultiInternetMode() .

Quando o recurso estiver ativado, siga as etapas a seguir para solicitar uma rede Wi-Fi adicional de fornecimento de Internet.

  1. Crie um especificador de rede Wi-Fi usando WifiNetworkSpecifier.Builder . Escolha uma banda para o especificador usando o método setBand() . Não especifique o SSID ou BSSID, pois a rede adicional para a banda especificada é selecionada pela estrutura Wi-Fi.

  2. Usando ConnectivityManager , crie um NetworkRequest com o recurso NET_CAPABILITY_INTERNET .

  3. Adicione o especificador à solicitação de rede junto com uma instância NetworkCallback para rastrear o status da solicitação e emita a solicitação para ConnectivityManager . Se uma rede salva com a banda solicitada estiver disponível no resultado da varredura e a conexão com a rede for bem-sucedida, NetworkCallback.onAvailable() será invocado no objeto de retorno de chamada.

Validando múltiplas redes simultâneas com conexão à Internet

Para validar esta função, use o seguinte teste CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Diretrizes do chip Wi-Fi do fornecedor

Para fornecedores de chips Wi-Fi, use as diretrizes a seguir para oferecer suporte à simultaneidade Wi-Fi STA/STA.

O chip Wi-Fi deve suportar conexões STA duplas simultâneas. Isso significa que ele suporta o seguinte:

  • Cada interface STA possui um MAC exclusivo programável pelo framework.
  • A interface STA secundária pode ser criada e destruída dinamicamente.
  • Cada STA pode ser conectada a um SSID diferente (dentro da mesma banda ou de uma banda diferente).
  • Cada STA pode ser conectada ao mesmo SSID (dentro da mesma banda ou em uma banda diferente). As duas STAs nunca devem estar conectadas ao mesmo BSSID.

Os recursos críticos devem operar por interface e devem estar disponíveis na interface primária. A seguir está uma lista desses recursos críticos:

  • O roaming deve ser suportado pelo menos na interface primária (definida usando IWifiChip.setMultiStaPrimaryConnection() ). Se o roaming for suportado em ambas as interfaces, as decisões sobre uma conexão não deverão entrar em conflito com a segunda conexão simultânea. Por exemplo, uma interface não deve fazer roaming para o BSSID da outra conexão.

  • APF (e outros offloads, como ARP e NS) devem ser suportados pelo menos na interface primária (definida usando IWifiChip.setMultiStaPrimaryConnection() ).

  • As estatísticas da camada de link devem operar por interface.

A seguir estão implementações de chips Wi-Fi recomendadas para diferentes cenários de simultaneidade:

  • O chip Wi-Fi deve permitir que a estrutura chame IWifiChip.setMultiStaUseCase() com uma das seguintes constantes para especificar a função atual:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : Especifica a função Make-Before-Break. A qualidade da conexão primária deve ser priorizada em relação à conexão secundária.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Especifica a conexão simultânea somente local e de Internet ou a função de conexão simultânea restrita e de Internet . A qualidade de ambas as conexões deve ser priorizada igualmente.
  • Como STAs simultâneas duplas podem levar aos modos de operação MCC, SCC e DBS, a implementação do fornecedor deve escolher a melhor configuração de rádio quando a estrutura chama IWifiChip.setMultiStaUseCase() para indicar a função. A seguir estão as diretrizes gerais:

    • 2x2+2x2 DBS é preferido se disponível.
    • Evite DBS 1x1+1x1, se possível, devido ao impacto excessivo na qualidade da conexão. Em vez disso, prefira MCC.
    • O ciclo de trabalho do CCM deve ser configurável pelo driver ou firmware para as diversas funções. A estrutura não define o ciclo de trabalho do MCC diretamente, mas consulta essas informações usando StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • Se estiver usando CCM, recomendamos os seguintes ciclos de trabalho entre as conexões primária e secundária:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% primário, 30% secundário.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% primário, 50% secundário.