Simultanéité STA/STA

Android 12 introduit la simultanéité STA/STA Wi-Fi, qui permet aux appareils de se connecter simultanément à deux réseaux Wi-Fi. Cette fonctionnalité facultative active les fonctions suivantes :

  • Effectuer une transition: l'appareil se connecte à un nouveau réseau Wi-Fi avant d'interrompre la connexion existante. Cela se traduit par des transitions plus fluides lors du basculement entre les réseaux Wi-Fi.
  • Connexion locale uniquement et connexion Internet simultanées: l'appareil se connecte à un réseau local uniquement sans perturber sa connexion Internet principale.
  • Connexion restreinte et Internet simultanée: l'appareil se connecte à un réseau restreint (disponible uniquement pour certaines applications privilégiées) sans perturber la connexion Internet principale de l'appareil.
  • (Android 13 ou version ultérieure) Plusieurs réseaux simultanés avec une connexion Internet: l'appareil se connecte à deux réseaux non restreints et disponibles pour toutes les applications, et fournit une connexion Internet.

Cette page décrit le comportement de l'appareil lorsque cette fonctionnalité est activée, ainsi que les détails de l'implémentation pour les fabricants et fournisseurs d'appareils.

Implémentation

Les appareils doivent être compatibles avec les éléments suivants pour implémenter la simultanéité STA/STA Wi-Fi:

  • La puce ou le micrologiciel Wi-Fi doit accepter deux connexions STA simultanées. Le micrologiciel doit accepter toutes les combinaisons de canaux et de bandes pour les deux connexions. Pour éviter les problèmes de performances, nous vous recommandons d'utiliser une puce Wi-Fi compatible DBS 2x2+2x2.

  • L'appareil doit être compatible avec les API suivantes dans l'implémentation AIDL ou HIDL de IWifiChip.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • La combinaison d'interfaces Wi-Fi HAL doit comporter deux interfaces STA simultanées exposées à l'aide d'un format de spécification tel que [{STA} <= 2, ...]. Pour en savoir plus, consultez la section Simultanéité multi-interface Wi-Fi.

Si ces conditions préalables sont remplies, mettez en œuvre la simultanéité STA/STA Wi-Fi en procédant comme suit:

  1. Activez une ou plusieurs fonctions individuellement à l'aide des superpositions de ressources d'exécution (désactivées par défaut).

    • Faire avant une pause : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Connexion locale uniquement et connexion Internet simultanées : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Connexion Internet limitée et connexion Internet simultanée : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Plusieurs réseaux simultanés avec une connexion Internet : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Validez chaque implémentation comme décrit dans les sections correspondantes.

Pour mieux prendre en charge la simultanéité STA/STA Wi-Fi, nous recommandons aux frameworks et applications personnalisés par l'OEM d'utiliser la méthode NetworkCallback#onCapabilitiesChanged() au lieu de WifiManager#getConnectionInfo(), qui ne renvoie WifiInfo que pour un seul réseau et qui a été abandonnée dans Android 12. Pour en savoir plus, consultez la section API Wi-Fi Network Request pour la connectivité peer-to-peer.

À faire avant de faire une pause

La fonction make-before-break permet aux appareils de se connecter à un nouveau réseau Wi-Fi tout en conservant la connexion Wi-Fi existante. Pour cela, ils ne se déconnectent de l'ancien réseau que s'ils se connectent au nouveau réseau Wi-Fi et disposent d'un accès à Internet.

Le cas d'utilisation "faire avant la coupure" résout les problèmes suivants dans Android 11 ou version antérieure, où l'appareil doit se déconnecter du réseau Wi-Fi existant avant de se connecter à un nouveau réseau (break-before-make).

  • Lors de la connexion à un nouveau réseau, l'appareil peut découvrir qu'il a enregistré un mot de passe Wi-Fi incorrect ou que le nouveau réseau ne dispose pas d'un accès à Internet. Cela oblige l'appareil à revenir à l'ancien réseau, ce qui entraîne un long délai sans connexion Wi-Fi.

  • L'ancien réseau est déconnecté brusquement, ce qui signifie que toutes les sockets se ferment. Souvent, les applications ne réagissent pas bien à une perte soudaine de connectivité, et l'utilisateur peut se retrouver sans connexion Internet quelques secondes jusqu'à ce que la nouvelle connexion soit complètement établie.

  • Le réseau par défaut change deux fois : de l'ancien réseau Wi-Fi au réseau mobile, puis du réseau mobile au nouveau réseau Wi-Fi. Cela amène les applications à réagir deux fois aux modifications du réseau. L'appareil doit également utiliser les données mobiles pendant un court laps de temps.

Le parcours de mise en service avant interruption n'est utilisé que pour les commutateurs réseau Wi-Fi automatiques lancés par le système d'exploitation. Les commutateurs réseau déclenchés par l'utilisateur utilisent l'ancien flux de transition avant lancement, dans lequel le réseau précédent est complètement déconnecté avant que le nouveau réseau ne soit connecté. Dans certains cas, ce flux est utilisé même dans les commutateurs automatiques initiés par le système d'exploitation, par exemple lors du basculement entre deux réseaux configurés tous deux pour utiliser l'adresse MAC d'usine.

Les applications peuvent vérifier si ce cas d'utilisation est compatible avec l'appareil à l'aide de l'API WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Valider le changement avant interruption

Pour valider votre implémentation, déclenchez un changement automatique de réseau Wi-Fi (en vous assurant qu'un réseau dont l'intensité du signal est plus forte que celle du réseau connecté est disponible) et vérifiez que l'appareil maintient la connexion existante lorsqu'il se connecte au nouveau réseau. Pour afficher l'état des deux interfaces Wi-Fi et vérifier qu'elles sont toutes les deux connectées, utilisez la commande suivante.

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

Si le nouveau réseau n'a pas de connectivité, l'appareil tente de se connecter au réseau tout en maintenant la connexion au réseau existant et abandonne la tentative lorsqu'il détecte que le nouveau réseau ne dispose pas d'Internet. L'appareil continue ensuite à utiliser la connexion existante comme réseau Wi-Fi principal.

Connexion locale uniquement et connexion Internet simultanée

La fonction Connexion locale uniquement et connexion Internet simultanée permet aux appareils de se connecter à une connexion uniquement locale, telle qu'une connexion à un appareil IoT, en même temps que le réseau Internet principal. Cette fonction améliore l'expérience utilisateur lors de la connexion directe à des appareils IoT, tels que des appareils photo, ce qui est possible via l'API WifiNetworkSpecifier ajoutée à Android 10.

Dans Android 11 et versions antérieures, les appareils se déconnectent du réseau Wi-Fi principal lorsqu'ils se connectent à un appareil IoT, ce qui entraîne une perte de connexion à Internet (sauf si un autre type de transport est disponible, tel que les données mobiles).

Les applications peuvent vérifier si cette fonction est compatible avec l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

Pour en savoir plus sur les modifications apportées à la fonction de connexion locale uniquement locale et Internet simultanée dans Android 12, consultez la section API Wi-Fi Network Request pour la connectivité peer-to-peer.

Valider la connexion locale uniquement et la connexion Internet

Pour valider cette fonction, utilisez le test CTS MultiStaConcurrencyWifiNetworkSpecifierTest.

Connexions limitées et Internet simultanées

La fonction Connexion limitée et Internet simultanée permet à l'appareil de se connecter simultanément à un réseau Wi-Fi principal pour l'utilisateur et à un réseau Wi-Fi restreint disponible uniquement pour certaines applications.

Les applications peuvent vérifier si cette fonction est compatible avec l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

Pour autoriser un appareil à se connecter à des réseaux Wi-Fi secondaires restreints, procédez comme suit:

  1. Ajoutez des suggestions de réseaux Wi-Fi avec setOemPaid ou setOemPrivate défini sur "true".

  2. Dans ConnectivityManager, envoyez une NetworkRequest avec les fonctionnalités correspondantes:

Lorsque l'appareil détecte des résultats d'analyse avec un réseau correspondant à la suggestion payante ou privée OEM, il s'y connecte automatiquement en tant que réseau secondaire.

Valider la connexion limitée et Internet simultanée

Pour valider cette fonction, utilisez le test CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

Utiliser plusieurs réseaux simultanément avec une connexion Internet

Disponible pour Android 13 ou version ultérieure, la fonctionnalité de connexion simultanée de plusieurs réseaux à une connexion Internet permet à l'appareil de se connecter simultanément à deux réseaux (PA) non restreints (toutes les applications ont accès) et de fournir un accès à Internet.

Les applications peuvent vérifier si cette fonctionnalité est compatible avec l'appareil à l'aide de la méthode WifiManager#isStaConcurrencyForMultiInternetSupported().

Si la fonctionnalité est compatible, les applications privilégiées peuvent l'activer à l'aide de la méthode WifiManager#setStaConcurrencyForMultiInternetMode(int mode). Cette fonctionnalité possède les modes suivants:

Pour interroger le mode de fonctionnalité actuellement actif, utilisez la méthode WifiManager#getStaConcurrencyForMultiInternetMode().

Lorsque cette fonctionnalité est activée, procédez comme suit pour demander un réseau Wi-Fi supplémentaire fournissant Internet.

  1. Créez un spécificateur de réseau Wi-Fi à l'aide de WifiNetworkSpecifier.Builder. Choisissez une bande pour le spécificateur à l'aide de la méthode setBand(). Ne spécifiez pas le SSID ni le BSSID, car le réseau supplémentaire pour la bande spécifiée est sélectionné par le framework Wi-Fi.

  2. À l'aide de ConnectivityManager, créez un NetworkRequest avec la fonctionnalité NET_CAPABILITY_INTERNET.

  3. Ajoutez le spécificateur à la requête réseau avec une instance NetworkCallback pour suivre l'état de la requête et envoyer la requête à ConnectivityManager. Si un réseau enregistré avec la bande demandée est disponible dans le résultat de l'analyse et que la connexion au réseau aboutit, NetworkCallback.onAvailable() est appelé sur l'objet de rappel.

Valider plusieurs réseaux simultanés avec une connexion Internet

Pour valider cette fonction, utilisez le test CTS suivant:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Consignes du fournisseur concernant les puces Wi-Fi

Les fournisseurs de puces Wi-Fi doivent respecter les consignes suivantes pour assurer la simultanéité des STA/STA Wi-Fi.

La puce Wi-Fi doit accepter les doubles connexions STA simultanées. Cela signifie qu'il est compatible avec les éléments suivants:

  • Chaque interface STA possède un MAC unique programmable par le framework.
  • L'interface STA secondaire peut être créée et détruite de manière dynamique.
  • Chaque STA peut être connectée à un SSID différent (au sein de la même bande ou dans une bande différente).
  • Chaque STA peut être connectée au même SSID (dans la même bande ou dans une bande différente). Les deux STA ne doivent jamais être connectées au même BSSID.

Les fonctionnalités critiques doivent fonctionner par interface et être disponibles sur l'interface principale. Voici la liste de ces fonctionnalités essentielles:

  • L'itinérance doit être compatible au moins sur l'interface principale (définie à l'aide de IWifiChip.setMultiStaPrimaryConnection()). Si l'itinérance est prise en charge sur les deux interfaces, les décisions sur une connexion ne doivent pas entrer en conflit avec la deuxième connexion simultanée. Par exemple, une interface ne doit pas se connecter en itinérance au BSSID de l'autre connexion.

  • APF (et d'autres décharges telles que ARP et NS) doivent être pris en charge au moins sur l'interface principale (définie à l'aide de IWifiChip.setMultiStaPrimaryConnection()).

  • Les statistiques de la couche de liaison doivent fonctionner pour chaque interface.

Voici les implémentations de puces Wi-Fi recommandées pour différents scénarios de simultanéité:

  • La puce Wi-Fi doit permettre au framework d'appeler IWifiChip.setMultiStaUseCase() avec l'une des constantes suivantes pour spécifier la fonction actuelle:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: spécifie la fonction de compensation. La qualité de la connexion principale doit être prioritaire par rapport à la connexion secondaire.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: spécifie la connexion locale uniquement locale et la connexion Internet simultanées ou la fonction connexion limitée et Internet simultanée. La qualité des deux connexions doit être prioritaire.
  • Étant donné que les deux STA simultanées peuvent conduire à des modes de fonctionnement MCC, SCC et DBS, la mise en œuvre du fournisseur doit choisir la meilleure configuration radio lorsque le framework appelle IWifiChip.setMultiStaUseCase() pour indiquer la fonction. Vous trouverez ci-dessous des consignes générales:

    • Il est préférable d'utiliser un DBS 2x2 + 2x2, si disponible.
    • Dans la mesure du possible, évitez les DBS 1x1+1x1 en raison de l'impact excessif sur la qualité de la connexion. Optez plutôt pour le CM.
    • Le cycle d'utilisation CM doit être configurable par le pilote ou le micrologiciel pour les différentes fonctions. Le framework ne définit pas directement le cycle d'utilisation CM, mais interroge ces informations à l'aide de StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Si vous utilisez le CM, nous vous recommandons les cycles d'utilisation suivants entre les connexions principale et secondaire:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% pour l'enseignement primaire et 30% pour l'enseignement secondaire.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% de primaire et 50% d'enseignement secondaire.