Współbieżność Wi-Fi STA/STA

W Androidzie 12 wprowadzono współbieżność Wi-Fi STA/STA, która pozwala urządzeniom łączyć się jednocześnie z dwiema sieciami Wi-Fi. Ta opcjonalna funkcja umożliwia korzystanie z następujących funkcji.

  • Make-before-break : urządzenie nawiązuje połączenie z nową siecią Wi-Fi przed zerwaniem istniejącego połączenia. Dzięki temu przejścia między sieciami Wi-Fi są płynniejsze
  • Jednoczesne połączenie lokalne i internetowe : urządzenie łączy się z siecią lokalną, nie zakłócając głównego połączenia internetowego urządzenia.
  • Jednoczesne połączenie z ograniczeniami i połączenie z Internetem : urządzenie łączy się z siecią z ograniczeniami (dostępną tylko dla niektórych uprzywilejowanych aplikacji) bez zakłócania głównego połączenia internetowego urządzenia.
  • (Android 13 lub nowszy) Jednoczesna praca z wieloma sieciami z połączeniem internetowym : urządzenie łączy się z dwiema sieciami, z których obie są nieograniczone i dostępne dla wszystkich aplikacji oraz zapewniają łączność z Internetem.

Na tej stronie opisano zachowanie urządzenia, gdy ta funkcja jest włączona, oraz szczegóły implementacji dla producentów i dostawców urządzeń.

Realizacja

Aby możliwe było wdrożenie współbieżności Wi-Fi STA/STA, urządzenia muszą obsługiwać następujące elementy:

  • Układ Wi-Fi lub oprogramowanie sprzętowe muszą obsługiwać dwa jednoczesne połączenia STA. Oprogramowanie sprzętowe musi obsługiwać wszystkie kombinacje kanałów i pasm dla obu połączeń. Aby uniknąć problemów z wydajnością, zalecamy użycie chipa Wi-Fi obsługującego 2x2+2x2 DBS.

  • Urządzenie musi obsługiwać następujące interfejsy API w implementacji AIDL lub HIDL IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Kombinacja interfejsów HAL Wi-Fi musi mieć dwa współbieżne interfejsy STA wyeksponowane przy użyciu formatu specyfikacji, takiego jak [{STA} <= 2, ...] . Aby uzyskać więcej informacji, zobacz temat Współbieżność wielu interfejsów Wi-Fi .

Jeśli te wymagania wstępne są spełnione, zaimplementuj współbieżność Wi-Fi STA/STA, wykonując następujące czynności:

  1. Włącz jedną lub więcej funkcji indywidualnie, korzystając z nakładek zasobów środowiska wykonawczego (domyślnie wyłączone).

    • Utwórz przed przerwaniem : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Jednoczesne połączenie lokalne i internetowe : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Jednoczesne połączenie ograniczone i internetowe : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Jednoczesne wiele sieci z połączeniem internetowym : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Zweryfikuj każdą implementację zgodnie z opisem w odpowiednich sekcjach poniżej.

Aby lepiej obsługiwać współbieżność Wi-Fi STA/STA, zalecamy, aby platformy i aplikacje dostosowane przez OEM korzystały z metody NetworkCallback#onCapabilitiesChanged() zamiast metody WifiManager#getConnectionInfo() , która zwraca WifiInfo tylko dla pojedynczej sieci i jest przestarzała w systemie Android 12 Aby uzyskać więcej informacji, zobacz Interfejs API żądań sieci Wi-Fi dla połączeń peer-to-peer .

Zrób przed przerwą

Funkcja make-before-break umożliwia urządzeniom połączenie się z nową siecią Wi-Fi przy zachowaniu istniejącego połączenia sieci Wi-Fi, rozłączenie się ze starą siecią dopiero wtedy, gdy pomyślnie połączy się z nową siecią Wi-Fi i będzie miało dostęp do Internetu.

Przypadek użycia funkcji „make-before-break” rozwiązuje następujące problemy w systemie Android 11 lub starszym, gdzie urządzenie musi odłączyć się od istniejącej sieci Wi-Fi przed połączeniem się z nową siecią (break-before-make).

  • Podczas łączenia się z nową siecią urządzenie może odkryć, że zapisane zostało nieprawidłowe hasło Wi-Fi lub że nowa sieć nie ma dostępu do Internetu. Zmusza to urządzenie do ponownego przełączenia się na starą sieć, co skutkuje znaczną ilością czasu bez łączności Wi-Fi.

  • Stara sieć zostaje nagle odłączona, co oznacza, że ​​wszystkie gniazda zostają zamknięte. Aplikacje często nie reagują dobrze na nagłą utratę połączenia, co może spowodować, że użytkownik przez kilka sekund nie będzie miał połączenia z Internetem, dopóki nowe połączenie nie zostanie w pełni nawiązane.

  • Domyślna sieć zmienia się dwukrotnie, ze starej sieci Wi-Fi na komórkową, a następnie z komórkowej na nową sieć Wi-Fi. Powoduje to, że aplikacje dwukrotnie reagują na zmiany w sieci. Urządzenie musi także spędzać krótką ilość czasu na korzystaniu z danych komórkowych.

Przepływ „make-before-break” jest używany tylko w przypadku automatycznych przełączników sieci Wi-Fi inicjowanych przez system operacyjny. Przełączniki sieciowe inicjowane przez użytkownika korzystają ze starszego przepływu przed uruchomieniem, w którym poprzednia sieć jest całkowicie odłączona przed podłączeniem nowej sieci. W niektórych przypadkach przepływ przed wykonaniem jest używany nawet w automatycznych przełącznikach inicjowanych przez system operacyjny, na przykład podczas przełączania między dwiema sieciami, obie skonfigurowane do korzystania z fabrycznego adresu MAC.

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

Sprawdzanie poprawności wykonania przed przerwą

Aby zweryfikować wdrożenie, uruchom automatyczne przełączanie sieci Wi-Fi (poprzez zapewnienie dostępności sieci o silniejszym sygnale niż aktualnie podłączona sieć) i sprawdź, czy urządzenie utrzymuje istnieją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 następującego polecenia.

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

Jeśli nowa sieć nie ma łączności, urządzenie próbuje połączyć się z siecią, utrzymując połączenie z istniejącą siecią, i przerywa tę próbę, gdy wykryje, że w nowej sieci nie ma Internetu. Urządzenie będzie następnie nadal korzystać z istniejącego połączenia jako podstawowej sieci Wi-Fi.

Jednoczesne połączenie lokalne i internetowe

Funkcja jednoczesnego połączenia lokalnego i połączenia internetowego umożliwia urządzeniom łączenie się z połączeniem lokalnym, takim jak połączenie z urządzeniem IoT, jednocześnie z podstawową siecią dostarczającą internet. Ta funkcja poprawia wygodę użytkownika podczas bezpośredniego łączenia się z urządzeniami IoT, takimi jak kamery, co jest możliwe dzięki API WifiNetworkSpecifier dodanemu w systemie Android 10.

W systemie Android 11 i starszym urządzenia rozłączają się z podstawową siecią Wi-Fi podczas łączenia się z urządzeniem IoT, co powoduje utratę połączenia z Internetem (chyba że urządzenie ma dostępny inny rodzaj transportu, na przykład komórkową transmisję danych).

Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, korzystając z interfejsu API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Aby uzyskać więcej informacji na temat zmian w funkcji jednoczesnego połączenia lokalnego i połączenia internetowego w systemie Android 12, zobacz interfejs API żądania sieci Wi-Fi dla połączeń peer-to-peer .

Sprawdzanie poprawności połączenia lokalnego i internetowego

Aby sprawdzić tę funkcję, użyj następujących testów CTS i ACTS:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • AKTY: WifiStaConcurrencyNetworkRequestTest

Jednoczesne ograniczone połączenie internetowe

Funkcja jednoczesnego ograniczonego połączenia i połączenia internetowego umożliwia jednoczesne połączenie urządzenia z podstawową siecią Wi-Fi użytkownika i siecią Wi-Fi z ograniczeniami, która jest dostępna tylko dla wybranych aplikacji.

Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, korzystając z interfejsu API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Aby umożliwić urządzeniu łączenie się z dodatkowymi sieciami Wi-Fi z ograniczeniami, wykonaj następujące kroki:

  1. Dodaj sugestie sieci Wi-Fi , ustawiając setOemPaid lub setOemPrivate na wartość true.

  2. W ConnectivityManager złóż NetworkRequest z odpowiednimi możliwościami:

Gdy urządzenie wykryje wyniki skanowania z siecią odpowiadającą płatnej lub prywatnej sugestii OEM, automatycznie połączy się z nią jako siecią dodatkową.

Sprawdzanie równoczesnego połączenia ograniczonego i połączenia internetowego

Aby sprawdzić tę funkcję, użyj następujących testów CTS i ACTS:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • AKTY: WifiStaConcurrencyNetworkRequestTest

Jednoczesne działanie wielu sieci z połączeniem internetowym

Dostępna dla systemu Android 13 lub nowszego, funkcja jednoczesnego korzystania z wielu sieci z funkcją połączenia z Internetem umożliwia urządzeniu jednoczesne łączenie się z dwiema sieciami (AP), z których obie są nieograniczone (wszystkie aplikacje mają dostęp) i zapewniają dostęp do Internetu.

Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, korzystając z metody WifiManager#isStaConcurrencyForMultiInternetSupported() .

Jeśli ta funkcja jest obsługiwana, aplikacje uprzywilejowane mogą ją włączyć przy użyciu metody WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . Funkcja ma następujące tryby:

Aby wysłać zapytanie do aktualnie aktywnego trybu funkcji, użyj metody WifiManager#getStaConcurrencyForMultiInternetMode() .

Gdy ta funkcja jest włączona, wykonaj poniższe kroki, aby poprosić o dodatkową sieć Wi-Fi zapewniającą dostęp do Internetu.

  1. Utwórz specyfikator sieci Wi-Fi przy użyciu WifiNetworkSpecifier.Builder . Wybierz pasmo dla specyfikatora za pomocą metody setBand() . Nie określaj identyfikatora SSID ani BSSID, ponieważ sieć dodatkowa dla określonego pasma jest wybierana przez strukturę Wi-Fi.

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

  3. Dodaj specyfikator do żądania sieciowego wraz z instancją NetworkCallback , aby śledzić status żądania i wyślij żądanie do ConnectivityManager . Jeśli w wyniku skanowania dostępna jest zapisana sieć o żądanym paśmie, a połączenie z siecią powiodło się, na obiekcie wywołania zwrotnego wywoływana jest funkcja NetworkCallback.onAvailable() .

Sprawdzanie jednoczesnych wielu sieci z połączeniem internetowym

Aby sprawdzić tę funkcję, użyj następującego testu CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Wytyczne dostawcy dotyczące chipów Wi-Fi

W przypadku dostawców chipów Wi-Fi postępuj zgodnie z poniższymi wytycznymi, aby obsługiwać współbieżność Wi-Fi STA/STA.

Układ Wi-Fi musi obsługiwać podwójne, jednoczesne połączenia STA. Oznacza to, że obsługuje następujące elementy:

  • Każdy interfejs STA ma unikalny adres MAC programowany przez platformę.
  • Dodatkowy interfejs STA można dynamicznie tworzyć i niszczyć.
  • Każda stacja STA może być podłączona do innego identyfikatora SSID (w tym samym paśmie lub w innym paśmie).
  • Każda stacja STA może być podłączona do tego samego SSID (w tym samym lub innym paśmie). Obie stacje STA nie mogą być nigdy połączone z tym samym BSSID.

Funkcje krytyczne muszą działać dla poszczególnych interfejsów i muszą być dostępne w interfejsie głównym. Poniżej znajduje się lista tych krytycznych funkcji:

  • Roaming musi być obsługiwany przynajmniej na głównym interfejsie (ustawionym za pomocą IWifiChip.setMultiStaPrimaryConnection() ). Jeżeli oba interfejsy obsługują roaming, decyzje dotyczące jednego połączenia nie mogą kolidować z drugim, równoczesnym połączeniem. Na przykład jeden interfejs nie może wędrować do identyfikatora BSSID drugiego połączenia.

  • APF (i inne odciążenia, takie jak ARP i NS) muszą być obsługiwane przynajmniej na podstawowym interfejsie (ustawionym za pomocą IWifiChip.setMultiStaPrimaryConnection() ).

  • Statystyki warstwy łącza muszą działać dla każdego interfejsu.

Poniżej przedstawiono zalecane implementacje chipów Wi-Fi dla różnych scenariuszy współbieżności:

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

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : Określa funkcję Make-Before-Break. Jakość połączenia głównego musi być traktowana priorytetowo w stosunku do połączenia wtórnego.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Określa równoczesne połączenie lokalne i internetowe lub funkcję jednoczesnego ograniczonego połączenia internetowego . Jakość obu połączeń musi być traktowana jednakowo.
  • Ponieważ dwie współbieżne stacje STA mogą prowadzić do trybów działania MCC, SCC i DBS, implementacja dostawcy musi wybrać najlepszą konfigurację radiową, gdy struktura wywołuje IWifiChip.setMultiStaUseCase() w celu wskazania funkcji. Poniżej znajdują się ogólne wytyczne:

    • Jeśli jest dostępny, preferowany jest 2x2+2x2 DBS.
    • Jeśli to możliwe, unikaj 1x1+1x1 DBS ze względu na nadmierny wpływ na jakość połączenia. Zamiast tego preferuj MCC.
    • Cykl pracy MCC musi być konfigurowalny przez sterownik lub oprogramowanie sprzętowe dla różnych funkcji. Struktura nie ustawia bezpośrednio cyklu pracy MCC, ale wysyła zapytania o te informacje za pomocą StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • W przypadku korzystania z MCC zalecamy następujące cykle pracy pomiędzy połączeniami pierwotnym i wtórnym:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% pierwotne, 30% wtórne.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% pierwotne, 50% wtórne.