Wi-Fi STA / STA同時実行

Android 12では、Wi-Fi STA / STA同時実行機能が導入されています。これにより、デバイスは2つのWi-Fiネットワークに同時に接続できます。このオプション機能により、以下の機能が有効になります。

  • Make-before-break :デバイスは、既存の接続を切断する前に、新しいWi-Fiネットワークに接続します。これにより、Wi-Fiネットワークを切り替える際の移行がスムーズになります
  • ローカルのみとインターネットの同時接続:デバイスは、デバイスのプライマリインターネット提供接続を中断することなく、ローカルのみのネットワークに接続します。
  • 同時制限インターネット接続:デバイスは、デバイスのプライマリインターネット提供接続を中断することなく、制限付きネットワーク(特定の特権アプリでのみ使用可能)に接続します。

このページでは、この機能が有効になっている場合のデバイスの動作と、デバイスの製造元とベンダーの実装の詳細について説明します。

実装

Wi-Fi STA / STA同時実行を実装するには、デバイスが以下をサポートしている必要があります。

  • Wi-Fiチップまたはファームウェアは、2つの同時STA接続をサポートする必要があります。ファームウェアは、両方の接続ですべてのチャネルと帯域の組み合わせをサポートする必要があります。パフォーマンスの問題を回避するために、2x2 + 2x2DBS対応のWi-Fiチップを使用することをお勧めします。

  • デバイスは、ベンダーHALバージョン1.5で次のAPIをサポートする必要があります

    • IWifiChip.setMultiStaPrimaryConnection()
    • IWifiChip.setMultiStaUseCase()
  • HAL Wi-Fiインターフェースの組み合わせには、 [{STA} <= 2, ...]などの指定形式を使用して公開された2つの同時STAインターフェースが必要です。詳細については、「 Wi-Fiマルチインターフェイスの同時実行性」を参照してください。

これらの前提条件が満たされている場合は、次の手順を実行してWi-Fi STA / STAの同時実行性を実装します。

  1. ランタイムリソースオーバーレイを使用して、1つ以上の機能を個別に有効にします(デフォルトでは無効になっています)。

    • Make-before-breakconfig_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • ローカルのみの同時接続とインターネット接続config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • 同時制限およびインターネット接続config_wifiMultiStaRestrictedConcurrencyEnabled
  2. 以下のそれぞれのセクションで説明されているように、各実装を検証します。

Wi-Fi STA / STAの同時実行性をより適切にサポートするには、OEMでカスタマイズされたフレームワークとアプリで、 WifiInfo WifiManager#getConnectionInfo()ではなくNetworkCallback#onCapabilitiesChanged()メソッドを使用することをお勧めします。 。詳細については、ピアツーピア接続用のWi-FiネットワークリクエストAPIを参照してください。

休憩前に作る

make-before-break機能を使用すると、デバイスは既存のWi-Fiネットワーク接続を維持しながら新しいWi-Fiネットワークに接続でき、新しいWi-Fiネットワークに正常に接続してインターネットにアクセスできる場合にのみ、古いネットワークから切断されます。

make-before-breakのユースケースは、Android 11以下の次の問題に対処します。この問題では、デバイスは新しいネットワークに接続する前に既存のWi-Fiネットワークから切断する必要があります(break-before-make)。

  • 新しいネットワークに接続するときに、デバイスが誤ったWi-Fiパスワードが保存されていること、または新しいネットワークにインターネットアクセスがないことを検出する場合があります。これにより、デバイスは古いネットワークに強制的に戻され、Wi-Fi接続がない状態でかなりの時間がかかります。

  • 古いネットワークが突然切断されます。これは、すべてのソケットが閉じられることを意味します。多くの場合、アプリは突然の接続の喪失にうまく反応しません。これにより、新しい接続が完全に確立されるまで、インターネット接続がない状態が数秒間発生する可能性があります。

  • デフォルトネットワークは、古いWi-Fiネットワークからセルラーに2回変更され、次にセルラーから新しいWi-Fiネットワークに変更されます。これにより、アプリはネットワークの変更に2回反応します。また、デバイスはセルラーデータの使用に短時間を費やす必要があります。

make-before-breakフローは、OSによって開始された自動Wi-Fiネットワークスイッチにのみ使用されます。ユーザーが開始するネットワークスイッチは、新しいネットワークが接続される前に以前のネットワークが完全に切断される、従来のブレークビフォアメイクフローを使用します。場合によっては、OSによって開始された自動スイッチでも、ブレークビフォアメイクフローが使用されます。たとえば、両方ともファクトリMACアドレスを使用するように構成された2つのネットワークを切り替える場合です。

アプリは、 WifiManager#isMakeBeforeBreakWifiSwitchingSupported() APIを使用して、このユースケースがデバイスでサポートされているかどうかを確認できます。

make-before-breakの検証

実装を検証するには、自動Wi-Fiネットワークスイッチをトリガーし(現在接続されているネットワークよりも強い信号強度のネットワークが利用可能であることを確認します)、デバイスが新しいネットワークに接続している間、既存の接続を維持することを確認します。両方のWi-Fiインターフェイスのステータスを表示し、両方が接続されていることを確認するには、次のコマンドを使用します。

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

新しいネットワークに接続がない場合、デバイスは既存のネットワークとの接続を維持しながらネットワークへの接続を試み、新しいネットワークにインターネットがないことを検出すると試行を中止します。その後、デバイスは既存の接続をプライマリWi-Fiネットワークとして引き続き使用します。

ローカルのみの同時接続とインターネット接続

ローカル専用とインターネットの同時接続機能により、デバイスは、プライマリインターネット提供ネットワークと同時に、IoTデバイスへの接続などのローカル専用接続に接続できます。この機能により、カメラなどのIoTデバイスに直接接続する際のユーザーエクスペリエンスが向上します。これは、Android10で追加されたWifiNetworkSpecifierを介して可能です。

Android 11以前では、デバイスはIoTデバイスに接続するときにプライマリWi-Fiネットワークから切断され、インターネット接続が失われます(デバイスにセルラーデータなどの別のトランスポートタイプが使用可能な場合を除く)。

アプリは、 WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() APIを使用して、この関数がデバイスでサポートされているかどうかを確認できます。

Android 12でのローカルのみの同時接続機能とインターネット接続機能の変更の詳細については、ピアツーピア接続用のWi-FiネットワークリクエストAPIを参照してください。

ローカルのみのインターネット接続の検証

この機能を検証するには、次のCTSおよびACTSテストを使用します。

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

同時制限およびインターネット接続

制限付きインターネット接続機能を同時に使用すると、デバイスはユーザーのプライマリWi-Fiネットワークと、一部のアプリでのみ使用できる制限付きWi-Fiネットワークに同時に接続できます。

アプリは、 WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() APIを使用して、この関数がデバイスでサポートされているかどうかを確認できます。

デバイスがセカンダリ制限付きWi-Fiネットワークに接続できるようにするには、次の手順に従います。

  1. setOemPaidまたはsetOemPrivateをtrueに設定してWi-Fiネットワークの提案を追加します。

  2. ConnectivityManagerで、対応する機能を使用してNetworkRequestを提出します。

デバイスは、OEM有料またはOEMプライベート提案に一致するネットワークでスキャン結果を検出すると、セカンダリネットワークとして自動的に接続します。

制限付きインターネット接続の同時検証

この機能を検証するには、次のCTSおよびACTSテストを使用します。

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

ベンダーWi-Fiチップのガイドライン

Wi-Fiチップベンダーの場合、Wi-Fi STA / STAの同時実行をサポートするには、次のガイドラインを使用してください。

Wi-Fiチップは、デュアル同時STA接続をサポートする必要があります。これは、以下をサポートすることを意味します。

  • 各STAインターフェイスには、フレームワークによってプログラム可能な一意のMACがあります。
  • セカンダリSTAインターフェイスは、動的に作成および破棄できます。
  • 各STAは、異なるSSIDに接続できます(同じ帯域内または異なる帯域内のいずれか)。
  • 各STAは、同じSSIDに接続できます(同じ帯域内または異なる帯域内のいずれか)。 2つのSTAを同じBSSIDに接続しないでください。

重要な機能は、インターフェイスごとに動作する必要があり、プライマリインターフェイスで使用できる必要があります。以下は、これらの重要な機能のリストです。

  • ローミングは、少なくともプライマリインターフェイス( IWifiChip.setMultiStaPrimaryConnection()を使用して設定)でサポートされている必要があります。ローミングが両方のインターフェイスでサポートされている場合、1つの接続に関する決定が、2番目の同時接続と衝突してはなりません。たとえば、一方のインターフェイスがもう一方の接続の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 + 2x2DBSが推奨されます。
    • 接続品質に過度の影響を与えるため、可能であれば1x1 + 1x1DBSは避けてください。代わりに、MCCをお勧めします。
    • MCCのデューティサイクルは、さまざまな機能のためにドライバまたはファームウェアによって構成可能である必要があります。フレームワークはMCCのデューティサイクルを直接設定しませんが、 StaLinkLayerIfaceStats.timeSliceDutyCycleInPercentを使用してこの情報を照会します。
    • MCCを使用する場合は、プライマリ接続とセカンダリ接続の間に次のデューティサイクルを使用することをお勧めします。

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY :70%がプライマリ、30%がセカンダリ。
      • DUAL_STA_NON_TRANSIENT_UNBIASED :プライマリ50%、セカンダリ50%。