Concorrenza Wi-Fi STA/STA

Android 12 introduce la concorrenza Wi-Fi STA/STA, che consente ai dispositivi di connettersi a due reti Wi-Fi contemporaneamente. Questa funzione opzionale abilita le seguenti funzioni.

  • Make-before-break : il dispositivo effettua una connessione a una nuova rete Wi-Fi prima di interrompere la connessione esistente. Ciò si traduce in transizioni più fluide quando si passa da una rete Wi-Fi all'altra
  • Connessione simultanea solo locale e Internet : il dispositivo si connette a una rete solo locale senza interrompere la connessione Internet principale del dispositivo.
  • Connessione Internet e limitata simultanea : il dispositivo si connette a una rete limitata (disponibile solo per alcune app privilegiate) senza interrompere la connessione Internet primaria del dispositivo.
  • (Android 13 o versioni successive) Reti multiple simultanee con connessione Internet : il dispositivo si connette a due reti, entrambe illimitate e disponibili per tutte le app, e fornisce connettività Internet.

Questa pagina descrive il comportamento del dispositivo quando questa funzionalità è abilitata e i dettagli di implementazione per produttori e fornitori di dispositivi.

Implementazione

I dispositivi devono supportare quanto segue per implementare la concorrenza Wi-Fi STA/STA:

  • Il chip o firmware Wi-Fi deve supportare due connessioni STA simultanee. Il firmware deve supportare tutte le combinazioni di canali e bande per entrambe le connessioni. Per evitare problemi di prestazioni, ti consigliamo di utilizzare un chip Wi-Fi compatibile con 2x2+2x2 DBS.

  • Il dispositivo deve supportare le seguenti API nell'implementazione AIDL o HIDL di IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • La combinazione di interfacce Wi-Fi HAL deve avere due interfacce STA simultanee esposte utilizzando un formato di specifica come [{STA} <= 2, ...] . Per ulteriori informazioni, consulta Concorrenza multi-interfaccia Wi-Fi .

Se questi prerequisiti sono soddisfatti, implementare la concorrenza Wi-Fi STA/STA procedendo come segue:

  1. Abilita una o più funzioni individualmente utilizzando gli overlay delle risorse di runtime (disabilitati per impostazione predefinita).

    • Make-before-break : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Connessione simultanea solo locale e Internet : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Connessione Internet e limitata simultanea : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Reti multiple simultanee con connessione Internet : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Convalidare ciascuna implementazione come descritto nelle rispettive sezioni di seguito.

Per supportare meglio la concorrenza Wi-Fi STA/STA, consigliamo che i framework e le app personalizzati dall'OEM utilizzino il metodo NetworkCallback#onCapabilitiesChanged() invece di WifiManager#getConnectionInfo() , che restituisce WifiInfo solo per una singola rete ed era deprecato in Android 12 Per ulteriori informazioni, consulta API di richiesta di rete Wi-Fi per la connettività peer-to-peer .

Preparati prima della pausa

La funzione make-before-break consente ai dispositivi di connettersi a una nuova rete Wi-Fi mantenendo la connessione di rete Wi-Fi esistente, disconnettendosi dalla vecchia rete solo quando si connette correttamente alla nuova rete Wi-Fi e ha accesso a Internet.

Il caso d'uso make-before-break risolve i seguenti problemi in Android 11 o versioni precedenti, in cui il dispositivo deve disconnettersi dalla rete Wi-Fi esistente prima di connettersi a una nuova rete (break-before-make).

  • Quando si connette a una nuova rete, il dispositivo potrebbe scoprire che è stata salvata una password Wi-Fi errata o che la nuova rete non dispone dell'accesso a Internet. Ciò costringe il dispositivo a tornare alla vecchia rete, portando a una notevole quantità di tempo senza connettività Wi-Fi.

  • La vecchia rete viene interrotta bruscamente, il che significa che tutte le prese vengono chiuse. Le app spesso non reagiscono bene a un'improvvisa perdita di connettività e ciò potrebbe portare l'utente a rimanere alcuni secondi senza connettività Internet finché la nuova connessione non viene completamente stabilita.

  • La rete predefinita cambia due volte, dalla vecchia rete Wi-Fi al cellulare, quindi dal cellulare alla nuova rete Wi-Fi. Ciò fa sì che le app reagiscano due volte alle modifiche della rete. Il dispositivo deve inoltre trascorrere un breve periodo di tempo utilizzando i dati cellulari.

Il flusso make-before-break viene utilizzato solo per i cambi di rete Wi-Fi automatici avviati dal sistema operativo. Gli switch di rete avviati dall'utente utilizzano il flusso legacy break-before-make, in cui la rete precedente viene completamente disconnessa prima che la nuova rete venga connessa. In alcuni casi, il flusso break-before-make viene utilizzato anche nei passaggi automatici avviati dal sistema operativo, ad esempio, quando si passa tra due reti entrambe configurate per utilizzare l'indirizzo MAC di fabbrica.

Le app possono verificare se questo caso d'uso è supportato sul dispositivo utilizzando l'API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Convalida del make-before-break

Per convalidare l'implementazione, attiva un cambio di rete Wi-Fi automatico (garantindo che sia disponibile una rete con una potenza del segnale più forte di quella attualmente connessa) e verifica che il dispositivo mantenga la connessione esistente durante la connessione alla nuova rete. Per visualizzare lo stato di entrambe le interfacce Wi-Fi e verificare che entrambe siano connesse, utilizzare il comando seguente.

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

Se la nuova rete non dispone di connettività, il dispositivo tenta di connettersi alla rete, mantenendo la connessione con la rete esistente, e interrompe il tentativo quando rileva che la nuova rete non dispone di Internet. Il dispositivo continua quindi a utilizzare la connessione esistente come rete Wi-Fi primaria.

Connessione simultanea solo locale e Internet

La funzione di connessione simultanea solo locale e Internet consente ai dispositivi di connettersi a una connessione solo locale, ad esempio una connessione a un dispositivo IoT, contemporaneamente alla rete principale che fornisce Internet. Questa funzione migliora l'esperienza dell'utente durante la connessione diretta ai dispositivi IoT, come le fotocamere, cosa possibile tramite l'API WifiNetworkSpecifier aggiunta in Android 10.

In Android 11 e versioni precedenti, i dispositivi si disconnettono dalla rete Wi-Fi primaria quando si connettono a un dispositivo IoT, con conseguente perdita di connettività Internet (a meno che il dispositivo non abbia un altro tipo di trasporto disponibile, come i dati cellulari).

Le app possono verificare se questa funzione è supportata sul dispositivo utilizzando l'API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Per ulteriori informazioni sulle modifiche alla funzione di connessione Internet e solo locale simultanea in Android 12, consulta API di richiesta di rete Wi-Fi per la connettività peer-to-peer .

Convalida della connessione solo locale e Internet

Per convalidare questa funzione, utilizzare i seguenti test CTS e ACTS:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ATTI: WifiStaConcurrencyNetworkRequestTest

Connessione simultanea limitata e Internet

La funzione di connessione Internet e limitata simultanea consente al dispositivo di connettersi contemporaneamente a una rete Wi-Fi primaria per l'utente e a una rete Wi-Fi limitata disponibile solo per determinate app.

Le app possono verificare se questa funzione è supportata sul dispositivo utilizzando l'API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Per consentire a un dispositivo di connettersi a reti Wi-Fi limitate secondarie, attenersi alla seguente procedura:

  1. Aggiungi suggerimenti di rete Wi-Fi con setOemPaid o setOemPrivate impostato su true.

  2. In ConnectivityManager , invia una NetworkRequest con le funzionalità corrispondenti:

Quando il dispositivo rileva i risultati della scansione con una rete corrispondente al suggerimento a pagamento OEM o privato OEM, si connette automaticamente ad essa come rete secondaria.

Convalida della connessione Internet e limitata simultanea

Per convalidare questa funzione, utilizzare i seguenti test CTS e ACTS:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ATTI: WifiStaConcurrencyNetworkRequestTest

Reti multiple simultanee con connessione Internet

Disponibile per Android 13 o versioni successive, la funzionalità di reti multiple simultanee con connessione Internet consente al dispositivo di connettersi contemporaneamente a due reti (AP), entrambe illimitate (tutte le app hanno accesso) e fornire accesso a Internet.

Le app possono verificare se questa funzionalità è supportata nel dispositivo utilizzando il metodo WifiManager#isStaConcurrencyForMultiInternetSupported() .

Se la funzionalità è supportata, le app con privilegi possono abilitare la funzionalità utilizzando il metodo WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . La funzione prevede le seguenti modalità:

Per eseguire una query sulla modalità di funzionalità attualmente attiva, utilizzare il metodo WifiManager#getStaConcurrencyForMultiInternetMode() .

Quando la funzione è abilitata, utilizzare i seguenti passaggi per richiedere una rete Wi-Fi aggiuntiva che fornisca Internet.

  1. Crea uno specificatore di rete Wi-Fi utilizzando WifiNetworkSpecifier.Builder . Scegli una banda per lo specificatore utilizzando il metodo setBand() . Non specificare l'SSID o il BSSID poiché la rete aggiuntiva per la banda specificata viene selezionata dal framework Wi-Fi.

  2. Utilizzando ConnectivityManager , creare una NetworkRequest con la funzionalità NET_CAPABILITY_INTERNET .

  3. Aggiungi l'identificatore alla richiesta di rete insieme a un'istanza NetworkCallback per tenere traccia dello stato della richiesta ed invia la richiesta a ConnectivityManager . Se nel risultato della scansione è disponibile una rete salvata con la banda richiesta e la connessione alla rete ha esito positivo, viene richiamato NetworkCallback.onAvailable() sull'oggetto callback.

Convalida di più reti simultanee con connessione Internet

Per convalidare questa funzione, utilizzare il seguente test CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Linee guida sui chip Wi-Fi del fornitore

Per i fornitori di chip Wi-Fi, utilizzare le seguenti linee guida per supportare la concorrenza Wi-Fi STA/STA.

Il chip Wi-Fi deve supportare doppie connessioni STA simultanee. Ciò significa che supporta quanto segue:

  • Ogni interfaccia STA ha un MAC unico programmabile dal framework.
  • L'interfaccia STA secondaria può essere creata e distrutta dinamicamente.
  • Ciascuna STA può essere collegata a un SSID diverso (all'interno della stessa banda o di una banda diversa).
  • Ciascuna STA può essere collegata allo stesso SSID (all'interno della stessa banda o di una banda diversa). Le due STA non devono mai essere collegate allo stesso BSSID.

Le funzionalità critiche devono funzionare in base all'interfaccia e devono essere disponibili sull'interfaccia primaria. Di seguito è riportato un elenco di queste funzionalità critiche:

  • Il roaming deve essere supportato almeno sull'interfaccia primaria (impostata utilizzando IWifiChip.setMultiStaPrimaryConnection() ). Se il roaming è supportato su entrambe le interfacce, le decisioni su una connessione non devono entrare in conflitto con la seconda connessione simultanea. Ad esempio, un'interfaccia non deve effettuare il roaming sul BSSID dell'altra connessione.

  • APF (e altri offload come ARP e NS) devono essere supportati almeno sull'interfaccia primaria (impostata utilizzando IWifiChip.setMultiStaPrimaryConnection() ).

  • Le statistiche del livello di collegamento devono funzionare in base all'interfaccia.

Di seguito sono consigliate le implementazioni del chip Wi-Fi per diversi scenari di concorrenza:

  • Il chip Wi-Fi deve consentire al framework di chiamare IWifiChip.setMultiStaUseCase() con una delle seguenti costanti per specificare la funzione corrente:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : specifica la funzione Make-Before-Break. La qualità della connessione primaria deve avere la priorità rispetto alla connessione secondaria.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : specifica la connessione simultanea solo locale e Internet o la funzione di connessione simultanea limitata e Internet . La qualità di entrambi i collegamenti deve avere la stessa priorità.
  • Poiché le doppie STA simultanee possono portare a modalità operative MCC, SCC e DBS, l'implementazione del fornitore deve scegliere la migliore configurazione radio quando il framework chiama IWifiChip.setMultiStaUseCase() per indicare la funzione. Di seguito sono riportate le linee guida generali:

    • Se disponibile, è preferibile 2x2+2x2 DBS.
    • Se possibile, evitare 1x1+1x1 DBS a causa dell'impatto eccessivo sulla qualità della connessione. Preferisci invece MCC.
    • Il ciclo di lavoro MCC deve essere configurabile dal driver o dal firmware per le varie funzioni. Il framework non imposta direttamente il ciclo di lavoro MCC, ma interroga queste informazioni utilizzando StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • Se si utilizza MCC, si consigliano i seguenti cicli di lavoro tra le connessioni primarie e secondarie:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% primario, 30% secondario.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% primario, 50% secondario.