Simultaneidade de Wi-Fi STA/STA

O Android 12 introduz a simultaneidade de Wi-Fi STA/STA, que permite que os dispositivos se conectem a duas redes Wi-Fi ao mesmo tempo. Esse recurso opcional ativa as funções a seguir.

  • Fazer antes do intervalo: 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 conecta-se a uma rede somente local sem interromper o conexão principal que fornece Internet.
  • Conexão restrita e simultânea de Internet: o dispositivo conecta-se a uma rede restrita (disponível apenas para alguns aplicativos privilegiados) sem interromper a conexão principal de Internet do dispositivo.
  • (Android 13 ou mais recente) Vários tipos simultâneos Redes com conexão de Internet: o dispositivo se conecta a duas redes, ambas irrestritas e disponíveis para todos os aplicativos, e fornecem conectividade com a Internet.

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

Implementação

Os dispositivos precisam ser compatíveis com o seguinte para implementar o Wi-Fi STA/STA simultaneidade:

  • O chip ou firmware Wi-Fi precisa ser compatível com dois STA simultâneos conexões de rede. O firmware deve oferecer suporte a todas as combinações de canais e bandas para as duas conexões. Para evitar problemas de desempenho, recomendamos o uso Um chip Wi-Fi 2x2+2x2 com DBS.

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

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • A combinação de interface Wi-Fi 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. Ativar uma ou mais funções individualmente usando sobreposições de recursos no ambiente de execução (desativadas pelo padrão).

    • Fazer antes do intervalo: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Conexão local e de Internet simultâneas: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Conexão restrita e simultânea de Internet: 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 você frameworks e apps usam o método NetworkCallback#onCapabilitiesChanged() em vez de WifiManager#getConnectionInfo(), que só retorna WifiInfo para uma única rede e foi descontinuada 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 um novo Wi-Fi rede, mantendo a conexão de rede Wi-Fi existente, apenas desconectando-se da rede antiga quando se conecta à nova com uma rede Wi-Fi e acesso à Internet.

O caso de uso "make-before-break" aborda os seguintes problemas em Android 11 ou versão anterior, 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 ou que a nova rede não têm acesso à Internet. Isso força o dispositivo a voltar para o antigo o que leva muito tempo sem conexão Wi-Fi.

  • A rede antiga é desconectada abruptamente, o que significa que todas Soquetes são fechados. Os aplicativos geralmente não reagem bem a uma perda repentina de e a conectividade, e isso pode levar usuário passando alguns segundos sem conexão com a Internet até que o novo esteja totalmente estabelecida.

  • A rede padrão muda duas vezes, da rede Wi-Fi antiga para a rede celular, e depois da rede celular para a nova rede Wi-Fi. Isso faz com que os apps reajam muda duas vezes. O dispositivo também precisa gastar uma pequena quantidade tempo usando dados móveis.

O fluxo fazer antes da quebra só é usado para rede Wi-Fi automática chaves iniciadas pelo SO. As trocas de rede iniciadas pelo usuário usam a fluxo break-before-make, em que a rede anterior está totalmente desconectada antes de a nova rede ser conectada. Em certos casos, o fluxo break-before-make é usado mesmo em trocas automáticas iniciadas pelo OS, 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 o API WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Validar antes do intervalo

Para validar sua implementação, acione uma troca automática de rede Wi-Fi (garantindo uma rede com uma intensidade de sinal mais forte se a rede estiver disponível) e verifique se o dispositivo mantém conexão existente ao se conectar à nova rede. Para ver o status das duas 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

Se a nova rede não tiver conectividade, o dispositivo que tenta se conectar à rede, mantendo a conexão com a rede existente e cancela a tentativa quando detecta a nova rede não tiver Internet. Em seguida, o dispositivo continua usando o como a rede Wi-Fi principal.

Conexão local e com a Internet simultâneas

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

No Android 11 e versões anteriores, os dispositivos se desconectam da ao se conectar a um dispositivo IoT, resultando na 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 é compatível com o dispositivo usando o API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

Para mais informações sobre as mudanças no tráfego simultâneo local e na Internet função de conexão 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 Restrição simultânea e conexão de Internet permite que o dispositivo conecte-se simultaneamente a uma rede Wi-Fi principal para o usuário e 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 o API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

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

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

  2. Em ConnectivityManager, arquive um NetworkRequest com o recursos:

Quando o dispositivo detectar resultados da verificação com uma rede correspondente ao OEM pago ou sugestão privada do OEM, ela 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 Android 13 ou versões mais recentes, os recursos O recurso de várias redes com conexão de Internet permite que o dispositivo se conectam simultaneamente a duas redes (APs), sendo que ambas não têm restrições (todos os apps têm acesso) e oferecem acesso à Internet.

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

Se o recurso for compatível, os aplicativos privilegiados poderão ativá-lo usando a WifiManager#setStaConcurrencyForMultiInternetMode(int mode). A tem os seguintes modos:

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

Quando o recurso estiver ativado, siga as etapas abaixo para solicitar com uma rede Wi-Fi que fornece Internet.

  1. Criar 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 como rede adicional da banda especificada é selecionada pelo framework Wi-Fi.

  2. Usando ConnectivityManager, crie um NetworkRequest com o NET_CAPABILITY_INTERNET capacidade de processamento.

  3. Adicione o especificador à solicitação de rede NetworkCallback para acompanhar o status da solicitação e emiti-la para ConnectivityManager. Se uma rede salva com a banda solicitada for no resultado da verificação, e a conexão com a rede está bem-sucedido, NetworkCallback.onAvailable() é invocada 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 de Wi-Fi, use as seguintes diretrizes para oferecer suporte Simultaneidade de Wi-Fi STA/STA.

O chip Wi-Fi precisa ser compatível com conexões STA simultâneas. Ou seja, suporta o 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 do mesmo diferente ou outra).
  • Cada STA pode ser conectado ao mesmo SSID (Identificador do conjunto de serviços) diferente ou outra). Os dois STAs nunca devem ser ao mesmo BSSID.

Os recursos essenciais devem operar por interface e ser disponíveis na interface principal. Confira a seguir uma lista desses recursos:

  • O roaming deve ser suportado pelo menos na interface principal (definida com o uso IWifiChip.setMultiStaPrimaryConnection()). Se houver suporte para roaming ambas as interfaces, as decisões em uma conexão não devem entrar em conflito com o segunda conexão simultânea. Por exemplo, não é permitido que uma interface ao BSSID da outra conexão.

  • O APF (e outros descarregamentos, como ARP e NS) precisa ser suportado, no mínimo, da interface principal (definida com o uso IWifiChip.setMultiStaPrimaryConnection()).

  • As estatísticas da camada de enlace 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() por uma das seguintes constantes para especifique a função atual:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: especifica o Função Make-Before-Break. A qualidade da conexão principal precisam ser priorizadas em relação à conexão secundária.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: especifica o conexão simultânea somente local e de Internet ou a conexão simultânea função restrita e conexão de Internet. A qualidade precisam ser priorizadas igualmente.
  • Como os STAs simultâneos duplos podem levar aos modos MCC, SCC e DBS de operacional, a implementação do fornecedor deve escolher a melhor opção 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 a qualidade da conexão. Em vez disso, prefira a MCC.
    • O ciclo de trabalho do MCC deve ser configurável pelo driver ou firmware para várias funções. A estrutura não define o ciclo de trabalho da MCC diretamente, mas consulta essas informações usando StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent:
    • Se você estiver usando a MCC, recomendamos os seguintes ciclos de trabalho entre as principais e conexões secundárias:

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