Simultaneidade Wi-Fi STA/STA

O Android 12 apresenta a simultaneidade Wi-Fi STA/STA, que permite que os dispositivos se conectem a duas redes Wi-Fi simultaneamente. Este recurso opcional habilita 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 com a Internet : o dispositivo se conecta a uma rede somente local sem interromper a conexão primária de fornecimento de Internet do dispositivo.
  • Restrição simultânea e conexão com a Internet : o dispositivo se conecta a uma rede restrita (disponível apenas para determinados aplicativos privilegiados) sem interromper a conexão primária de fornecimento de Internet do dispositivo.

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

Implementação

Os dispositivos devem suportar o 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 DBS 2x2+2x2.

  • O dispositivo deve suportar as seguintes APIs no fornecedor HAL versão 1.5

    • IWifiChip.setMultiStaPrimaryConnection()
    • IWifiChip.setMultiStaUseCase()
  • A combinação de interface Wi-Fi HAL 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 várias interfaces Wi-Fi .

Se esses pré-requisitos forem atendidos, implemente a simultaneidade de 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
    • Restrição simultânea e conexão com a Internet : config_wifiMultiStaRestrictedConcurrencyEnabled
  2. Valide cada implementação conforme descrito em suas respectivas seções abaixo.

Para oferecer melhor suporte à simultaneidade Wi-Fi STA/STA, recomendamos que as estruturas e aplicativos personalizados para OEM usem o método NetworkCallback#onCapabilitiesChanged() em vez de WifiManager#getConnectionInfo() , que retorna apenas WifiInfo para uma única rede e foi preterido 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 mantendo a conexão de rede Wi-Fi existente, desconectando-se apenas da rede antiga quando se conecta com sucesso à nova rede Wi-Fi e tem acesso à Internet.

O caso de uso make-before-break aborda os seguintes problemas no Android 11 ou inferior, 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 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 uma quantidade significativa de tempo sem conectividade Wi-Fi.

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

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

O fluxo make-before-break é usado apenas para comutadores de rede Wi-Fi automáticos iniciados pelo sistema operacional. Os switches de rede iniciados pelo usuário usam o fluxo de interrupção antes de criar, 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 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 aplicativos podem verificar se esse caso de uso é compatível com o dispositivo usando a WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Validando o make-before-break

Para validar sua implementação, acione um switch de rede Wi-Fi automático (garantindo que uma rede com uma intensidade de sinal mais forte do que a rede conectada atualmente 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

Se a nova rede não tiver conectividade, o dispositivo tenta se conectar à rede, mantendo a conexão com a rede existente, e aborta a tentativa quando detecta que a nova rede não tem internet. O dispositivo continua usando a conexão existente como rede Wi-Fi primária.

Conexão simultânea apenas local e de internet

A função de conexão simultânea somente local e à Internet permite que os dispositivos se conectem a uma conexão somente local, como uma conexão a um dispositivo IoT, simultaneamente com a rede primária de fornecimento de 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 por meio da API WifiNetworkSpecifier adicionada no Android 10.

No Android 11 e inferior, os dispositivos se desconectam da rede Wi-Fi primária 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 essa função é compatível com o dispositivo usando a WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

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

Validando somente conexão local e de internet

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

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ATOS: WifiStaConcurrencyNetworkRequestTest

Restrição simultânea e conexão com a internet

A função de conexão restrita e à Internet simultânea 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 essa função é compatível com o dispositivo usando a 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. No ConnectivityManager , arquive um NetworkRequest com os recursos correspondentes:

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

Validando a conexão restrita e a internet simultânea

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

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ATOS: WifiStaConcurrencyNetworkRequestTest

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 simultâneas duplas. Isso significa que ele suporta o seguinte:

  • Cada interface STA possui um MAC exclusivo programável pela estrutura.
  • 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 (na mesma banda ou em uma banda diferente). As duas STAs nunca devem ser conectadas ao mesmo BSSID.

Os recursos críticos devem operar em uma base 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 em uma conexão não devem 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 descarregamentos 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 as implementações de chip 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 sobre a conexão secundária.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Especifica a conexão simultânea somente local e com a Internet ou a função de conexão simultânea restrita e com a Internet . A qualidade de ambas as conexões deve 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 deve escolher a melhor configuração de rádio quando a estrutura chamar IWifiChip.setMultiStaUseCase() para indicar a função. Seguem as orientações gerais:

    • DBS 2x2+2x2 é preferível, se disponível.
    • Evite 1x1+1x1 DBS se possível devido ao impacto excessivo na qualidade da conexão. Em vez disso, prefira MCC.
    • O ciclo de trabalho do MCC deve ser configurável pelo driver ou firmware para as diversas funções. A estrutura não define o ciclo de trabalho da MCC diretamente, mas consulta essas informações usando StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • Se estiver usando o 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.