Simultaneidade de Wi-Fi STA/STA

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

  • Make-before-break: o dispositivo se conecta a uma nova rede Wi-Fi antes de interromper a conexão atual. Isso resulta em transições mais suaves ao alternar entre redes Wi-Fi.
  • Conexão local e de Internet simultâneas: o dispositivo se conecta a uma rede somente local sem interromper a conexão principal de Internet do dispositivo.
  • Conexão restrita e de Internet simultâneas: o dispositivo se conecta a uma rede restrita (disponível apenas para alguns apps privilegiados) sem interromper a conexão principal do dispositivo que fornece Internet.
  • (Android 13 ou mais recente) Várias redes simultâneas com conexão de Internet: o dispositivo se conecta a duas redes sem restrições e disponíveis para todos os apps, além de fornecer conectividade de Internet.

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

Implementação

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

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

  • O dispositivo precisa ser compatível com as seguintes APIs na implementação AIDL ou HIDL de IWifiChip.

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

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

  1. Ative uma ou mais funções individualmente usando substituições de recursos de tempo de execução (desativadas por padrão).

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

Para oferecer melhor suporte à simultaneidade de STA/STA do Wi-Fi, recomendamos que frameworks e apps personalizados por OEMs usem o método NetworkCallback#onCapabilitiesChanged() em vez de WifiManager#getConnectionInfo(), que só retorna WifiInfo para uma única rede e foi descontinuado no Android 12. Para mais informações, consulte API Wi-Fi Network Request para conectividade ponto a ponto.

Make-before-break

A função make-before-break permite que os dispositivos se conectem a uma nova rede Wi-Fi mantendo a conexão da rede Wi-Fi atual. A desconexão da rede antiga só acontece quando o dispositivo se conecta à nova rede Wi-Fi e tem acesso à Internet.

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

  • Ao se conectar a uma nova rede, o dispositivo pode descobrir que tem 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, resultando em um período significativo sem conectividade Wi-Fi.

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

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

O fluxo de make-before-break é usado apenas para trocas automáticas de rede Wi-Fi iniciadas pelo SO. As mudanças de rede iniciadas pelo usuário usam o fluxo break-before-make legado, em que a rede anterior é totalmente desconectada antes da conexão da nova rede. Em alguns casos, o fluxo break-before-make é usado mesmo em switches automáticos iniciados pelo SO, por exemplo, ao alternar entre duas redes configuradas para usar o endereço MAC de fábrica.

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

Validar o make-before-break

Para validar sua implementação, acione uma troca automática de rede Wi-Fi (garantindo que uma rede com intensidade de sinal mais forte do que a conectada esteja disponível) e verifique se o dispositivo mantém a conexão atual ao se conectar à nova rede. Para conferir o status das duas interfaces Wi-Fi e verificar se ambas estão conectadas, use o seguinte comando.

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

Se a nova rede não tiver conectividade, o dispositivo tentará se conectar a ela, mantendo a conexão com a rede atual, e vai interromper a tentativa quando detectar que a nova rede não tem Internet. O dispositivo continua usando a conexão existente como a rede Wi-Fi principal.

Conexão local e de Internet simultâneas

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

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

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

Para mais informações sobre as mudanças na função de conexão simultânea somente local e com a Internet no Android 12, consulte API Wi-Fi Network Request para conectividade ponto a ponto.

Validar a conexão somente local e de Internet

Para validar essa função, use o teste do CTS MultiStaConcurrencyWifiNetworkSpecifierTest.

Conexão restrita e de Internet simultâneas

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

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

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

  1. Adicione Sugestões de rede Wi-Fi com setOemPaid ou setOemPrivate definido como "true".

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

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

Validar a conexão simultânea restrita e de Internet

Para validar essa função, use o teste do CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

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

Disponível para Android 13 ou versões mais recentes, o recurso várias redes simultâneas com conexão de Internet permite que o dispositivo se conecte simultaneamente a duas redes (APs), desde que ambas não tenham restrições (todos os apps têm acesso) e forneçam acesso à Internet.

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

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

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

Quando o recurso estiver ativado, siga estas etapas para solicitar uma rede Wi-Fi adicional que forneça Internet.

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

  2. Usando ConnectivityManager, crie um NetworkRequest com a capacidade NET_CAPABILITY_INTERNET.

  3. Adicione o especificador à solicitação de rede, assim como uma instância NetworkCallback para acompanhar 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 verificação e a conexão com a rede for bem-sucedida, NetworkCallback.onAvailable() será invocado no objeto de callback.

Validar várias redes simultâneas com conexão de Internet

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

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Diretrizes para chips de Wi-Fi de fornecedores

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

O chip Wi-Fi precisa ser compatível com conexões STA simultâneas duplas. Isso significa que ele é compatível com o seguinte:

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

Os recursos críticos precisam operar por interface e estar disponíveis na interface principal. Confira abaixo uma lista desses recursos críticos:

  • O roaming precisa ser compatível com pelo menos a interface principal (definida usando IWifiChip.setMultiStaPrimaryConnection()). Se o roaming for compatível com as duas interfaces, as decisões em uma conexão não poderão entrar em conflito com a segunda conexão simultânea. Por exemplo, uma interface não pode fazer roaming para o BSSID da outra conexão.

  • O APF (e outros descarregamentos, como ARP e NS) precisa ser compatível com pelo menos a interface principal (definida usando IWifiChip.setMultiStaPrimaryConnection()).

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

Confira a seguir as implementações recomendadas de chips Wi-Fi para diferentes cenários de simultaneidade:

  • O chip Wi-Fi precisa permitir que o framework 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 principal precisa ser priorizada em relação à secundária.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: especifica a função de conexão simultânea somente local e com a Internet ou conexão simultânea restrita e com a Internet. A qualidade das duas conexões precisa ser priorizada igualmente.
  • Como as STAs simultâneas duplas podem levar aos modos de operação MCC, SCC e DBS, a implementação do fornecedor precisa escolher a melhor configuração de rádio quando o framework chama IWifiChip.setMultiStaUseCase() para indicar a função. Estas são as orientações gerais:

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

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