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 funções a seguir.

  • Fazer antes do intervalo: 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 local 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 restrita e de Internet simultânea: o dispositivo se conecta a uma rede restrita (disponível apenas para alguns apps com privilégios) sem interromper a conexão principal de Internet do dispositivo.
  • (Android 13 ou versões mais recentes) Várias redes simultâneas com conexão de Internet: o dispositivo se conecta a duas redes, ambas irrestritas e disponíveis para todos os apps, além de fornecer conectividade com a Internet.

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

Implementação

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

  • O chip ou firmware Wi-Fi precisa oferecer suporte a 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 2x2+2x2 compatível com DBS.

  • O dispositivo precisa oferecer suporte às seguintes APIs na implementação de IWifiChip ou HIDL na AIDL.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • A combinação de interface 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 sobreposições de recursos no ambiente de execução (desativadas por padrão).

    • Fazer antes do intervalo: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Conexão local e de Internet simultâneas: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Restrição e conexão 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 Wi-Fi, recomendamos que frameworks e apps personalizados por OEM 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.

Fazer antes do intervalo

A função make-before-break permite que os dispositivos se conectem a uma nova rede Wi-Fi mantendo a conexão atual, desconectando-se da rede antiga apenas quando eles se conectam à nova rede Wi-Fi e têm acesso à Internet.

O caso de uso fazer antes da pausa aborda os seguintes problemas no Android 11 ou versões anteriores, em que o dispositivo precisa 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 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, 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. Os apps geralmente não reagem bem a uma perda repentina de conectividade, e isso pode levar o usuário a enfrentar 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 da rede celular para a nova. Isso faz com que os apps reajam às mudanças de rede duas vezes. O dispositivo também precisa usar dados móveis por um curto período.

O fluxo fazer antes da interrupção é usado apenas para comutadores automáticos de rede Wi-Fi iniciados pelo SO. As comutações de rede iniciadas pelo usuário usam o fluxo legado de interrupção antes da criação, em que a rede anterior é totalmente desconectada antes da nova conexão. Em alguns casos, o fluxo de interrupção antes de criar é usado mesmo em comutações automáticas iniciadas 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 tem suporte no dispositivo por meio da API WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Validar antes do intervalo

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 rede conectada esteja disponível) e verifique se o dispositivo mantém a conexão existente enquanto se conecta à nova rede. Para conferir o status das duas interfaces Wi-Fi e verificar se elas estão conectadas, use o comando abaixo.

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 existente, e cancelará 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 com a Internet simultâneas

A função de conexão simultânea somente local e de Internet permite que os dispositivos se conectem a uma conexão somente local, como uma conexão com um dispositivo de 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 de IoT, como câmeras, o que é possível usando 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 conectarem a um dispositivo de IoT, resultando em uma perda de conexão 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 tem suporte no 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 de Internet no Android 12, consulte API Wi-Fi Network Request para conectividade ponto a ponto.

Validar apenas conexão local e de Internet

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

Conexão de Internet restrita e simultânea

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

Os apps podem verificar se essa função tem suporte no 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 verdadeiro.

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

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

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

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

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

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

Os apps podem verificar se esse recurso tem suporte no dispositivo usando o método WifiManager#isStaConcurrencyForMultiInternetSupported().

Se o recurso tiver suporte, 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 as etapas abaixo para solicitar uma rede Wi-Fi extra com acesso à 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 o BSSID, já que a rede extra para a banda especificada é selecionada pelo framework de Wi-Fi.

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

  3. Adicione o especificador à solicitação de rede 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 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 de CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Diretrizes para o chip de Wi-Fi do fornecedor

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

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

  • Cada interface STA tem um MAC único programável pela estrutura.
  • A interface secundária do STA pode ser criada e destruída dinamicamente.
  • Cada STA pode ser conectado a um SSID diferente (dentro da mesma banda ou em uma faixa diferente).
  • Cada STA pode ser conectado ao mesmo SSID (dentro da mesma banda ou em uma faixa diferente). Os dois STAs nunca podem estar conectados ao mesmo BSSID.

Os recursos essenciais precisam operar em uma base por interface e precisam estar disponíveis na interface principal. Confira a seguir uma lista desses recursos críticos:

  • O roaming precisa ter suporte pelo menos na 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 navegar até o BSSID da outra conexão.

  • O APF e outras descargas, como ARP e NS, precisam ser compatíveis pelo menos na interface principal (definida usando IWifiChip.setMultiStaPrimaryConnection()).

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

Confira abaixo as implementações recomendadas de chip Wi-Fi para diferentes cenários de simultaneidade:

  • O chip de Wi-Fi precisa permitir que o framework chame IWifiChip.setMultiStaUseCase() com uma das constantes abaixo 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 precisa ser priorizada em relação à conexão secundária.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: especifica a conexão de Internet e somente local ou a função de conexão de Internet restrita e simultânea. A qualidade de ambas as conexões precisa ser priorizada igualmente.
  • Como os STAs simultâneos duplos 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 chamar IWifiChip.setMultiStaUseCase() para indicar a função. Estas são as diretrizes gerais:

    • Se disponível, o DBS 2x2+2x2 tem preferência.
    • Evite DBS 1x1+1x1, 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 diversas 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 a MCC, 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.