Równoczesność Wi-Fi STA/STA

Android 12 wprowadza równoczesność Wi-Fi STA/STA, która umożliwia urządzeniom łączenie się z 2 sieciami Wi-Fi jednocześnie. Ta opcjonalna funkcja włącza poniższe funkcje.

  • Zrób przed przerwą: urządzenie nawiązuje połączenie z nową siecią Wi-Fi przed zerwaniem dotychczasowego połączenia. Dzięki temu przejścia między sieciami Wi-Fi są płynniejsze
  • Jednoczesne połączenie tylko lokalne i połączenie z internetem: urządzenie łączy się z siecią lokalną bez zakłócania głównego połączenia z internetem na urządzeniu.
  • Jednoczesne, ograniczone połączenie i połączenie z internetem: urządzenie łączy się z siecią z ograniczeniami (dostępną tylko w przypadku niektórych aplikacji z takimi uprawnieniami) bez zakłócania jej głównego połączenia z internetem.
  • (Android 13 lub nowszy) Jednoczesne połączenie z wieloma sieciami: urządzenie łączy się z 2 sieciami, z których obie są nieograniczone i dostępne dla wszystkich aplikacji oraz zapewniają połączenie z internetem.

Na tej stronie znajdziesz opis działania urządzeń po włączeniu tej funkcji oraz szczegóły implementacji dla producentów i dostawców urządzeń.

Implementacja

Aby można było zaimplementować równoczesność Wi-Fi STA/STA, urządzenia muszą obsługiwać te elementy:

  • Układ Wi-Fi lub oprogramowanie układowe Wi-Fi musi obsługiwać 2 równoczesne połączenia STA. Oprogramowanie układowe musi obsługiwać wszystkie kombinacje kanałów i pasm dla obu połączeń. Aby uniknąć problemów z wydajnością, zalecamy układ Wi-Fi 2 x 2 + 2 x 2 DBS.

  • Urządzenie musi obsługiwać poniższe interfejsy API w implementacji AIDL lub HIDL w IWifiChip.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Kombinacja interfejsu Wi-Fi HAL musi mieć 2 równoczesne interfejsy STA udostępnione przy użyciu formatu specyfikacji, takiego jak [{STA} <= 2, ...]. Więcej informacji znajdziesz w artykule o współbieżności wielu interfejsów Wi-Fi.

Jeśli te warunki wstępne są spełnione, zaimplementuj równoczesność Wi-Fi STA/STA w sieci. Aby to zrobić:

  1. Włącz pojedynczo co najmniej 1 funkcję za pomocą nakładek zasobów środowiska wykonawczego (domyślnie wyłączone).

    • Zrób przed przerwą: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Jednoczesne połączenie lokalne i połączenie z internetem: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Jednoczesne z ograniczonym dostępem i połączenie z internetem: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Wiele sieci równoczesnych z połączeniem internetowym: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Sprawdź każdą implementację w sposób opisany w odpowiednich sekcjach.

Aby lepiej obsługiwać równoczesność Wi-Fi STA/STA, zalecamy, aby ramki i aplikacje dostosowane do potrzeb OEM korzystały z metody NetworkCallback#onCapabilitiesChanged(), a nie metody WifiManager#getConnectionInfo(), która zwraca WifiInfo tylko w przypadku 1 sieci. Ta funkcja została wycofana w Androidzie 12. Więcej informacji znajdziesz w artykule o interfejsie Wi-Fi Network Request API do połączeń peer-to-peer.

Zrób przed przerwą

Funkcja make-przed-break pozwala urządzeniom połączyć się z nową siecią Wi-Fi, zachowując dotychczasowe połączenie z siecią Wi-Fi. Rozłączanie od starej sieci następuje tylko wtedy, gdy połączy się z nową siecią Wi-Fi i będzie mieć dostęp do internetu.

Ten przypadek użycia dotyczy poniższych problemów w Androidzie 11 i starszych, w których urządzenie musi odłączyć się od dotychczasowej sieci Wi-Fi, zanim połączy się z nową siecią (break-before-make).

  • Podczas łączenia się z nową siecią urządzenie może wykryć, że ma zapisane nieprawidłowe hasło do Wi-Fi lub że nowa sieć nie ma dostępu do internetu. Zmusza to urządzenie do przejścia z powrotem do starej sieci, przez co przez dłuższy czas bez połączenia z Wi-Fi nie będzie można połączyć się z siecią.

  • Stara sieć zostaje nagle odłączona, co oznacza, że wszystkie gniazdka są zamykane. Aplikacje często źle reagują na nagłą utratę połączenia, przez co użytkownik może przez kilka sekund nie mieć połączenia z internetem, dopóki nowe połączenie nie zostanie w pełni nawiązane.

  • Sieć domyślna zmienia się dwukrotnie: ze starej sieci Wi-Fi na komórkową, a następnie z sieci komórkowej na nową. Dzięki temu aplikacje dwukrotnie reagują na zmiany w sieci. Przez krótki czas urządzenie musi też korzystać z komórkowej transmisji danych.

Proces tworzenia przed przerwą jest używany tylko przy automatycznych przełącznikach sieci Wi-Fi zainicjowanych przez system operacyjny. Przełączniki sieci inicjowane przez użytkownika korzystają ze starszego procesu, w którym poprzednia sieć jest całkowicie odłączona przed połączeniem z nową siecią. W niektórych przypadkach procedura przerwa przed wykonaniem jest stosowana nawet w przypadku automatycznych przełączników inicjowanych przez system operacyjny, na przykład przy przełączaniu się między 2 sieciami, w których obie są skonfigurowane pod kątem używania fabrycznego adresu MAC.

Aplikacje mogą sprawdzić, czy ten przypadek użycia jest obsługiwany na urządzeniu za pomocą interfejsu API WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Zweryfikuj renderowanie przed przerwą

Aby sprawdzić poprawność implementacji, aktywuj automatyczny przełącznik sieci Wi-Fi (zapewniając dostępność sieci o silniejszej sieci) i sprawdź, czy urządzenie zachowuje bieżące połączenie podczas łączenia się z nową siecią. Aby wyświetlić stan obu interfejsów Wi-Fi i sprawdzić, czy oba są połączone, użyj poniższego polecenia.

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

Jeśli nowa sieć nie ma połączenia, urządzenie próbuje się z nią połączyć, utrzymując połączenie z dotychczasową siecią i anuluje próbę, gdy wykryje, że w nowej sieci nie ma internetu. Urządzenie będzie nadal korzystać z istniejącego połączenia jako głównej sieci Wi-Fi.

Równoczesne połączenie lokalne i połączenie z internetem

Funkcja jednoczesnego połączenia lokalnego i połączenia z internetem umożliwia urządzeniom łączenie się z połączeniami wyłącznie lokalnymi (np. z urządzeniem IoT) równocześnie z główną siecią udostępniającą internet. Ta funkcja zwiększa wygodę użytkowników podczas bezpośredniego łączenia się z urządzeniami IoT, takimi jak aparaty. Jest to możliwe dzięki interfejsowi API WifiNetworkSpecifier dodanemu w Androidzie 10.

W Androidzie 11 i starszych wersjach urządzenia podczas łączenia się z urządzeniem IoT rozłączają się z podstawową siecią Wi-Fi, co skutkuje utratą połączenia z internetem (chyba że urządzenie ma inny rodzaj transportu, np. komórkową transmisję danych).

Aplikacje mogą sprawdzać, czy ta funkcja jest obsługiwana na urządzeniu za pomocą interfejsu API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

Więcej informacji o zmianach w funkcji równoczesnego połączenia lokalnego i połączenia z internetem w Androidzie 12 znajdziesz w artykule o interfejsie Wi-Fi Network Request API na potrzeby połączeń peer-to-peer.

Sprawdź połączenie lokalne i połączenie z internetem

Aby sprawdzić tę funkcję, użyj testu CTS MultiStaConcurrencyWifiNetworkSpecifierTest.

Jednoczesne z ograniczeniami i połączenie z internetem

Funkcja równoczesnego ograniczonego i połączenia z internetem umożliwia urządzeniu jednoczesne łączenie się z główną siecią Wi-Fi użytkownika i siecią Wi-Fi z ograniczonym dostępem, która jest dostępna tylko dla wybranych aplikacji.

Aplikacje mogą sprawdzać, czy ta funkcja jest obsługiwana na urządzeniu za pomocą interfejsu API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

Aby umożliwić urządzeniu łączenie się z dodatkowymi sieciami Wi-Fi z ograniczonym dostępem, wykonaj te czynności:

  1. Dodaj Sugestie dotyczące sieci Wi-Fi z wartością setOemPaid lub setOemPrivate ustawioną na Prawda.

  2. W pliku ConnectivityManager uzupełnij pole NetworkRequest z odpowiednimi uprawnieniami:

Gdy urządzenie wykryje wyniki skanowania z siecią zgodną z płatną sugestią OEM lub prywatną sugestią OEM, automatycznie połączy się z siecią dodatkową.

Sprawdź, czy jednocześnie z ograniczonym dostępem i połączeniem internetowym

Aby sprawdzić tę funkcję, użyj testu CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

Wiele sieci równoczesnych z połączeniem internetowym

Funkcja równoczesnych sieci z połączeniem internetowym, dostępna na Androidzie 13 lub nowszym, umożliwia urządzeniu jednoczesne łączenie się z 2 sieciami. Każda z nich jest nieograniczona (wszystkie aplikacje mają dostęp) i zapewniają dostęp do internetu.

Aplikacje mogą sprawdzać, czy ta funkcja jest obsługiwana na urządzeniu za pomocą metody WifiManager#isStaConcurrencyForMultiInternetSupported().

Jeśli funkcja jest obsługiwana, aplikacje z podwyższonymi uprawnieniami mogą ją włączyć przy użyciu metody WifiManager#setStaConcurrencyForMultiInternetMode(int mode). Funkcja ta działa w tych trybach:

Aby wysłać zapytanie dotyczące obecnie aktywnego trybu funkcji, użyj metody WifiManager#getStaConcurrencyForMultiInternetMode().

Gdy ta funkcja jest włączona, wykonaj poniższe czynności, aby poprosić o dodatkową sieć Wi-Fi korzystającą z internetu.

  1. Utwórz specyfikator sieci Wi-Fi za pomocą narzędzia WifiNetworkSpecifier.Builder. Wybierz zakres dla specyfikatora za pomocą metody setBand(). Nie określaj identyfikatora SSID ani BSSID, jako dodatkowej sieci dla określonego pasma jest wybierana przez platformę Wi-Fi.

  2. Za pomocą polecenia ConnectivityManager utwórz NetworkRequest z możliwością NET_CAPABILITY_INTERNET.

  3. Dodaj specyfikator do żądania sieciowego wraz z instancją NetworkCallback, aby śledzić stan żądania, i wyślij żądanie do ConnectivityManager. Jeśli w wyniku skanowania dostępna jest zapisana sieć w żądanym paśmie, a połączenie z siecią jest udane, obiekt NetworkCallback.onAvailable() jest wywoływany z obiektu wywołania zwrotnego.

Zweryfikuj wiele równoczesnych sieci z połączeniem internetowym

Aby sprawdzić tę funkcję, użyj tego testu CTS:

  • punkt CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Wytyczne dotyczące układu Wi-Fi dostawcy

Dostawcy układów scalonych Wi-Fi powinni przestrzegać podanych niżej wytycznych dotyczących obsługi równoczesności Wi-Fi STA/STA.

Układ Wi-Fi musi obsługiwać podwójne równoczesne połączenia STA. Oznacza to, że obsługuje:

  • Każdy interfejs STA ma unikalny program MAC, który można zaprogramować przez tę platformę.
  • Dodatkowy interfejs STA można dynamicznie tworzyć i niszczyć.
  • Każdy punkt STA może być podłączony do innego identyfikatora SSID (w tym samym lub w innym paśmie).
  • Każdy punkt STA może być podłączony do tego samego identyfikatora SSID (w tym samym lub w innym paśmie). Oba identyfikatory STA nigdy nie mogą być połączone z tym samym identyfikatorem BSSID.

Kluczowe funkcje muszą działać według interfejsu i muszą być dostępne w interfejsie głównym. Oto lista najważniejszych funkcji:

  • Roaming musi być obsługiwany przez co najmniej główny interfejs (ustawiony za pomocą IWifiChip.setMultiStaPrimaryConnection()). Jeśli roaming jest obsługiwany w obu interfejsach, decyzje dotyczące jednego połączenia nie mogą kolidować z drugim równoczesnym połączeniem. Na przykład jeden interfejs nie może korzystać z identyfikatora BSSID drugiego.

  • APF (i inne odciążenia, takie jak ARP i NS) muszą być obsługiwane co najmniej w interfejsie głównym (ustawionym za pomocą funkcji IWifiChip.setMultiStaPrimaryConnection()).

  • Statystyki warstwy linków muszą działać dla poszczególnych interfejsów.

Poniżej znajdziesz zalecane implementacje układów Wi-Fi w różnych scenariuszach równoczesności:

  • Układ Wi-Fi musi umożliwiać platformie wywołanie IWifiChip.setMultiStaUseCase() z jedną z tych stałych w celu określenia bieżącej funkcji:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: określa funkcję Make-Przed-Przerwą. Jakość połączenia podstawowego musi mieć wyższy priorytet niż połączenie dodatkowe.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: określa jednoczesne połączenie lokalne i połączenie z internetem lub funkcję równoczesnego ograniczonego połączenia z internetem. Jakość obu połączeń musi mieć taki sam priorytet.
  • Ponieważ podwójne równoczesne funkcje STA mogą prowadzić do trybów działania MCK, SCC i DBS, implementacja dostawcy musi wybrać najlepszą konfigurację radiową, gdy platforma wywołuje IWifiChip.setMultiStaUseCase(), aby wskazać funkcję. Oto ogólne wskazówki dotyczące sposobu postępowania:

    • Preferowana jest baza danych DBS 2 x 2 + 2 x 2, jeśli jest dostępna.
    • W miarę możliwości unikaj DBS 1 x 1 + 1 z powodu nadmiernego wpływu na jakość połączenia. Zamiast tego wybierz MCK.
    • Sterownik lub oprogramowanie układowe MCK musi skonfigurować współczynnik wypełnienia MCK dla różnych funkcji. Struktura nie określa bezpośrednio współczynnika wypełnienia MCK, ale odpytuje o tę informację za pomocą funkcji StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Jeśli korzystasz z MCK, zalecamy stosowanie następujących współczynników wypełnienia między połączeniem głównym i wtórnym:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% podstawowy, 30% dodatkowy.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% podstawowy, 50% dodatkowy.