Параллелизм Wi-Fi STA/STA

В Android 12 реализована параллельная работа Wi-Fi STA/STA, которая позволяет устройствам одновременно подключаться к двум сетям Wi-Fi. Эта дополнительная функция включает следующие функции.

  • Make-before-break : устройство устанавливает соединение с новой сетью Wi-Fi, прежде чем разрывать существующее соединение. Это приводит к более плавным переходам при переключении между сетями Wi-Fi.
  • Одновременное локальное подключение и подключение к Интернету : устройство подключается к локальной сети, не нарушая основное подключение устройства к Интернету.
  • Одновременное ограниченное подключение и подключение к Интернету : устройство подключается к сети с ограниченным доступом (доступной только для определенных привилегированных приложений) без нарушения основного подключения устройства к Интернету.
  • (Android 13 или более поздней версии) Одновременная работа в нескольких сетях с подключением к Интернету : устройство подключается к двум сетям, обе из которых являются неограниченными и доступны для всех приложений, а также обеспечивают подключение к Интернету.

На этой странице описано поведение устройства, когда эта функция включена, а также подробности реализации для производителей и поставщиков устройств.

Выполнение

Для реализации параллелизма Wi-Fi STA/STA устройства должны поддерживать следующее:

  • Чип или прошивка Wi-Fi должны поддерживать два одновременных соединения STA. Прошивка должна поддерживать все комбинации каналов и диапазонов для обоих соединений. Чтобы избежать проблем с производительностью, мы рекомендуем использовать чип Wi-Fi с поддержкой 2x2+2x2 DBS.

  • Устройство должно поддерживать следующие API в реализации AIDL или HIDL IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Комбинация интерфейсов HAL Wi-Fi должна иметь два одновременных интерфейса STA, представленных с использованием формата спецификации, такого как [{STA} <= 2, ...] . Дополнительные сведения см. в разделе Параллелизм нескольких интерфейсов Wi-Fi .

Если эти предварительные условия соблюдены, реализуйте параллелизм Wi-Fi STA/STA, выполнив следующие действия:

  1. Включите одну или несколько функций по отдельности, используя наложения ресурсов среды выполнения (по умолчанию отключено).

    • Сделать перед разрывом : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Одновременное локальное подключение и подключение к Интернету : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Одновременное ограничение и подключение к Интернету : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Одновременная работа в нескольких сетях с подключением к Интернету : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Проверьте каждую реализацию, как описано в соответствующих разделах ниже.

Чтобы лучше поддерживать параллелизм Wi-Fi STA/STA, мы рекомендуем, чтобы платформы и приложения, настроенные OEM, использовали метод NetworkCallback#onCapabilitiesChanged() вместо WifiManager#getConnectionInfo() , который возвращает WifiInfo только для одной сети и устарел в Android 12. Дополнительную информацию см. в разделе API запроса сети Wi-Fi для однорангового подключения .

Сделать перед разрушением

Функция make-before-break позволяет устройствам подключаться к новой сети Wi-Fi, сохраняя при этом существующее сетевое соединение Wi-Fi, отключаясь от старой сети только тогда, когда оно успешно подключается к новой сети Wi-Fi и имеет доступ к Интернету.

Вариант использования «сделать перед отключением» решает следующие проблемы в Android 11 или более ранней версии, когда устройство должно отключиться от существующей сети Wi-Fi перед подключением к новой сети (сделать перед подключением).

  • При подключении к новой сети устройство может обнаружить, что на нем сохранен неверный пароль Wi-Fi или что в новой сети нет доступа к Интернету. Это вынуждает устройство переключиться обратно на старую сеть, что приводит к значительному промежутку времени без подключения к Wi-Fi.

  • Старая сеть резко отключается, а это значит, что закрываются все розетки. Приложения часто плохо реагируют на внезапную потерю соединения, и это может привести к тому, что пользователь будет несколько секунд без подключения к Интернету, пока новое соединение не будет полностью установлено.

  • Сеть по умолчанию меняется дважды: со старой сети Wi-Fi на сотовую, затем с сотовой сети на новую сеть Wi-Fi. Это приводит к тому, что приложения дважды реагируют на изменения в сети. Устройство также должно потратить небольшое количество времени на передачу данных по сотовой сети.

Поток «сделать перед разрывом» используется только для автоматического переключения сети Wi-Fi, инициируемого ОС. Сетевые коммутаторы, инициируемые пользователем, используют устаревший поток «разъединить перед подключением», при котором предыдущая сеть полностью отключается перед подключением новой сети. В некоторых случаях поток прерывания перед замыканием используется даже при автоматических переключениях, инициируемых ОС, например, при переключении между двумя сетями, обе из которых настроены на использование заводского MAC-адреса.

Приложения могут проверить, поддерживается ли этот вариант использования на устройстве, с помощью API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Проверка совместимости перед разрывом

Чтобы проверить вашу реализацию, запустите автоматическое переключение сети Wi-Fi (обеспечив доступность сети с более сильным сигналом, чем текущая подключенная сеть) и убедитесь, что устройство поддерживает существующее соединение при подключении к новой сети. Чтобы просмотреть состояние обоих интерфейсов Wi-Fi и убедиться, что оба подключены, используйте следующую команду.

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

Если в новой сети нет подключения, устройство пытается подключиться к сети, сохраняя соединение с существующей сетью, и прерывает попытку, когда обнаруживает, что в новой сети нет Интернета. Затем устройство продолжает использовать существующее соединение в качестве основной сети Wi-Fi.

Одновременное локальное подключение и подключение к Интернету

Функция одновременного локального подключения и подключения к Интернету позволяет устройствам подключаться к локальному соединению, например к устройству IoT, одновременно с основной сетью, предоставляющей Интернет. Эта функция улучшает взаимодействие с пользователем при прямом подключении к устройствам IoT, например камерам, что возможно с помощью API WifiNetworkSpecifier , добавленного в Android 10.

В Android 11 и более ранних версиях устройства отключаются от основной сети Wi-Fi при подключении к устройству IoT, что приводит к потере подключения к Интернету (если только на устройстве не доступен другой тип транспорта, например сотовые данные).

Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Дополнительную информацию об изменениях в функции одновременного локального подключения и подключения к Интернету в Android 12 см. в разделе API запроса сети Wi-Fi для однорангового подключения .

Проверка локального подключения и подключения к Интернету

Для проверки этой функции используйте следующие тесты CTS и ACTS:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ДЕЙСТВИЯ: WifiStaConcurrencyNetworkRequestTest

Одновременное ограничение и подключение к Интернету

Функция одновременного ограниченного подключения и подключения к Интернету позволяет устройству одновременно подключаться к основной сети Wi-Fi для пользователя и к ограниченной сети Wi-Fi, которая доступна только для некоторых приложений.

Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Чтобы разрешить устройству подключаться к дополнительным ограниченным сетям Wi-Fi, выполните следующие действия:

  1. Добавьте предложения сетей Wi-Fi , установив для setOemPaid или setOemPrivate значение true.

  2. В ConnectivityManager отправьте NetworkRequest с соответствующими возможностями:

Когда устройство обнаруживает результаты сканирования в сети, соответствующей платной OEM-сети или частному предложению OEM-производителя, оно автоматически подключается к ней как к вторичной сети.

Проверка одновременного ограниченного подключения и подключения к Интернету

Для проверки этой функции используйте следующие тесты CTS и ACTS:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ДЕЙСТВИЯ: WifiStaConcurrencyNetworkRequestTest

Одновременная работа в нескольких сетях с подключением к Интернету

Доступная для Android 13 или более поздней версии функция одновременного использования нескольких сетей с подключением к Интернету позволяет устройству одновременно подключаться к двум сетям (AP), обе из которых являются неограниченными (все приложения имеют доступ) и обеспечивают доступ в Интернет.

Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью метода WifiManager#isStaConcurrencyForMultiInternetSupported() .

Если эта функция поддерживается, привилегированные приложения могут включить ее с помощью метода WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . Функция имеет следующие режимы:

Чтобы запросить текущий активный режим функции, используйте метод WifiManager#getStaConcurrencyForMultiInternetMode() .

Когда эта функция включена, выполните следующие действия, чтобы запросить дополнительную сеть Wi-Fi с доступом в Интернет.

  1. Создайте спецификатор сети Wi-Fi с помощью WifiNetworkSpecifier.Builder . Выберите полосу для спецификатора с помощью метода setBand() . Не указывайте SSID или BSSID, поскольку дополнительная сеть для указанного диапазона выбирается платформой Wi-Fi.

  2. Используя ConnectivityManager , создайте NetworkRequest с возможностью NET_CAPABILITY_INTERNET .

  3. Добавьте спецификатор к сетевому запросу вместе с экземпляром NetworkCallback , чтобы отслеживать состояние запроса, и отправьте запрос в ConnectivityManager . Если сохраненная сеть с запрошенным диапазоном доступна в результате сканирования и подключение к сети успешное, для объекта обратного вызова вызывается NetworkCallback.onAvailable() .

Проверка одновременной работы нескольких сетей с подключением к Интернету

Чтобы проверить эту функцию, используйте следующий тест CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Рекомендации производителя по чипам Wi-Fi

Для поставщиков чипов Wi-Fi используйте следующие рекомендации для поддержки одновременного использования Wi-Fi STA/STA.

Чип Wi-Fi должен поддерживать двойные одновременные соединения STA. Это означает, что он поддерживает следующее:

  • Каждый интерфейс STA имеет уникальный MAC-адрес, программируемый платформой.
  • Вторичный интерфейс STA может создаваться и уничтожаться динамически.
  • Каждая STA может быть подключена к разному SSID (либо в том же диапазоне, либо в другом диапазоне).
  • Каждая STA может быть подключена к одному и тому же SSID (либо в том же диапазоне, либо в другом диапазоне). Две STA никогда не должны быть подключены к одному и тому же BSSID.

Критически важные функции должны работать отдельно для каждого интерфейса и быть доступны на основном интерфейсе. Ниже приводится список этих важных функций:

  • Роуминг должен поддерживаться как минимум на основном интерфейсе (устанавливается с помощью IWifiChip.setMultiStaPrimaryConnection() ). Если роуминг поддерживается на обоих интерфейсах, решения по одному соединению не должны противоречить второму параллельному соединению. Например, один интерфейс не должен перемещаться по BSSID другого соединения.

  • APF (и другие разгрузки, такие как ARP и NS) должны поддерживаться как минимум на основном интерфейсе (устанавливается с помощью IWifiChip.setMultiStaPrimaryConnection() ).

  • Статистика канального уровня должна работать для каждого интерфейса отдельно.

Ниже приведены рекомендуемые реализации чипа Wi-Fi для различных сценариев параллелизма:

  • Чип Wi-Fi должен позволять платформе вызывать IWifiChip.setMultiStaUseCase() с одной из следующих констант для указания текущей функции:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : определяет функцию Make-Before-Break. Качество первичного соединения должно иметь приоритет над вторичным соединением.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : определяет одновременное локальное подключение и подключение к Интернету или одновременную функцию ограниченного подключения и подключения к Интернету . Качество обоих соединений должно иметь одинаковый приоритет.
  • Поскольку двойные одновременные STA могут привести к режимам работы MCC, SCC и DBS, реализация поставщика должна выбрать лучшую конфигурацию радиосвязи, когда платформа вызывает IWifiChip.setMultiStaUseCase() для указания функции. Ниже приведены общие рекомендации:

    • 2x2+2x2 DBS предпочтительнее, если доступно.
    • По возможности избегайте 1x1+1x1 DBS из-за чрезмерного влияния на качество соединения. Вместо этого отдайте предпочтение MCC.
    • Рабочий цикл MCC должен настраиваться драйвером или микропрограммой для различных функций. Платформа не устанавливает рабочий цикл MCC напрямую, а запрашивает эту информацию с помощью StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • При использовании MCC мы рекомендуем следующие рабочие циклы между первичным и вторичным соединениями:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70 % основной, 30 % вторичный.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% первичный, 50% вторичный.