Konkurensi Wi-Fi STA/STA

Android 12 memperkenalkan konkurensi Wi-Fi STA/STA yang memungkinkan perangkat terhubung ke dua jaringan Wi-Fi secara serentak. Fitur opsional ini mengaktifkan fungsi berikut.

  • Make-before-break: Perangkat membuat koneksi ke jaringan Wi-Fi baru sebelum memutuskan koneksi yang ada. Hal ini menghasilkan transisi yang lebih lancar saat beralih antar-jaringan Wi-Fi
  • Koneksi internet dan khusus lokal serentak: Perangkat terhubung ke jaringan khusus lokal tanpa mengganggu koneksi penyedia internet utama perangkat.
  • Koneksi internet dan dibatasi secara serentak: Perangkat terhubung ke jaringan yang dibatasi (hanya tersedia untuk aplikasi dengan hak istimewa tertentu) tanpa mengganggu koneksi penyedia internet utama perangkat.
  • (Android 13 atau yang lebih tinggi) Beberapa jaringan serentak dengan koneksi internet: Perangkat terhubung ke dua jaringan yang tidak dibatasi dan tersedia untuk semua aplikasi, dan menyediakan konektivitas internet.

Halaman ini menjelaskan perilaku perangkat saat fitur ini diaktifkan serta detail implementasi untuk produsen dan vendor perangkat.

Implementasi

Perangkat harus mendukung hal berikut untuk menerapkan serentak STA/STA Wi-Fi:

  • Chip atau firmware Wi-Fi harus mendukung dua koneksi STA secara serentak. Firmware harus mendukung semua kombinasi saluran dan band untuk kedua koneksi. Untuk menghindari masalah performa, sebaiknya gunakan chip Wi-Fi yang kompatibel dengan DBS 2x2+2x2.

  • Perangkat harus mendukung API berikut dalam implementasi AIDL atau HIDL IWifiChip.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Kombinasi antarmuka Wi-Fi HAL harus memiliki dua antarmuka STA serentak yang diekspos menggunakan format spesifikasi seperti [{STA} <= 2, ...]. Untuk mengetahui informasi selengkapnya, lihat Konkurensi multi-antarmuka Wi-Fi.

Jika prasyarat tersebut terpenuhi, terapkan konkurensi STA/STA Wi-Fi dengan melakukan hal berikut:

  1. Aktifkan satu atau beberapa fungsi satu per satu menggunakan overlay resource runtime (dinonaktifkan secara default).

    • Buat sebelum jeda: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Koneksi internet dan khusus lokal serentak: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Koneksi internet dan koneksi yang dibatasi secara serentak: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Beberapa jaringan serentak dengan koneksi internet: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Validasi setiap penerapan seperti yang dijelaskan di bagiannya masing-masing.

Untuk mendukung serentak STA/STA Wi-Fi dengan lebih baik, sebaiknya framework dan aplikasi yang disesuaikan OEM menggunakan metode NetworkCallback#onCapabilitiesChanged() bukan WifiManager#getConnectionInfo(), yang hanya menampilkan WifiInfo untuk jaringan tunggal dan tidak digunakan lagi di Android 12. Untuk mengetahui informasi selengkapnya, lihat Wi-Fi Network Request API untuk konektivitas peer-to-peer.

Membuat sebelum istirahat

Fungsi make-before-break memungkinkan perangkat terhubung ke jaringan Wi-Fi baru sekaligus mempertahankan koneksi jaringan Wi-Fi yang ada, hanya memutuskan koneksi dari jaringan lama saat berhasil terhubung ke jaringan Wi-Fi baru dan memiliki akses internet.

Kasus penggunaan make-before-break mengatasi masalah berikut di Android 11 atau yang lebih lama, dengan perangkat harus memutuskan koneksi dari jaringan Wi-Fi yang ada sebelum terhubung ke jaringan baru (break-before-make).

  • Saat terhubung ke jaringan baru, perangkat mungkin menyimpan sandi Wi-Fi yang salah atau jaringan baru tersebut tidak memiliki akses internet. Hal ini memaksa perangkat untuk beralih kembali ke jaringan lama, yang menyebabkan banyak waktu tanpa konektivitas Wi-Fi.

  • Jaringan lama terputus secara tiba-tiba, yang berarti semua soket ditutup. Aplikasi sering kali tidak bereaksi dengan baik terhadap hilangnya konektivitas secara tiba-tiba dan hal ini dapat menyebabkan pengguna mengalami beberapa detik tanpa konektivitas internet hingga koneksi baru sepenuhnya terbentuk.

  • Jaringan default berubah dua kali, dari jaringan Wi-Fi lama ke seluler, lalu dari seluler ke jaringan Wi-Fi baru. Hal ini menyebabkan aplikasi bereaksi terhadap perubahan jaringan dua kali. Perangkat juga harus menghabiskan waktu singkat menggunakan data seluler.

Alur make-before-break hanya digunakan untuk pengalihan jaringan Wi-Fi otomatis yang dimulai oleh OS. Tombol jaringan yang dimulai pengguna menggunakan alur break-before-make lama, dengan jaringan sebelumnya terputus sepenuhnya sebelum jaringan baru terhubung. Dalam kasus tertentu, alur break-before-make digunakan bahkan di tombol otomatis yang dimulai oleh OS, misalnya, saat beralih antara dua jaringan yang dikonfigurasi untuk menggunakan alamat MAC pabrik.

Aplikasi dapat memeriksa apakah kasus penggunaan ini didukung di perangkat menggunakan WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API.

Memvalidasi make-before-break

Untuk memvalidasi penerapan Anda, picu tombol jaringan Wi-Fi otomatis (dengan memastikan jaringan dengan kekuatan sinyal yang lebih kuat daripada jaringan yang terhubung tersedia) dan pastikan perangkat mempertahankan koneksi yang ada saat terhubung ke jaringan baru. Untuk melihat status kedua antarmuka Wi-Fi dan memverifikasi bahwa keduanya terhubung, gunakan perintah berikut.

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

Jika jaringan baru tidak memiliki konektivitas, perangkat akan mencoba terhubung ke jaringan, sekaligus mempertahankan koneksi dengan jaringan yang ada, dan membatalkan upaya saat mendeteksi jaringan baru tidak memiliki internet. Perangkat kemudian akan terus menggunakan koneksi yang ada sebagai jaringan Wi-Fi utama.

Koneksi khusus lokal dan internet serentak

Fungsi koneksi internet dan khusus lokal serentak memungkinkan perangkat terhubung ke koneksi khusus lokal, seperti koneksi ke perangkat IoT, secara serentak dengan jaringan penyedia internet utama. Fungsi ini meningkatkan pengalaman pengguna saat terhubung langsung ke perangkat IoT, seperti kamera, yang dapat dilakukan melalui WifiNetworkSpecifier API yang ditambahkan di Android 10.

Di Android 11 dan yang lebih lama, perangkat terputus dari jaringan Wi-Fi utama saat terhubung ke perangkat IoT, sehingga menyebabkan hilangnya konektivitas internet (kecuali jika perangkat memiliki jenis transpor lain yang tersedia, seperti data seluler).

Aplikasi dapat memeriksa apakah fungsi ini didukung di perangkat menggunakan WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API.

Untuk mengetahui informasi selengkapnya tentang perubahan pada fungsi koneksi internet dan khusus lokal serentak di Android 12, lihat Wi-Fi Network Request API untuk konektivitas peer-to-peer.

Validasi koneksi internet dan khusus lokal

Untuk memvalidasi fungsi ini, gunakan pengujian CTS MultiStaConcurrencyWifiNetworkSpecifierTest.

Koneksi internet dan koneksi terbatas serentak

Fungsi koneksi internet dan dibatasi serentak memungkinkan perangkat terhubung secara serentak ke jaringan Wi-Fi utama untuk pengguna dan jaringan Wi-Fi terbatas yang hanya tersedia untuk aplikasi tertentu.

Aplikasi dapat memeriksa apakah fungsi ini didukung di perangkat menggunakan WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API.

Agar perangkat dapat terhubung ke jaringan Wi-Fi sekunder yang dibatasi, ikuti langkah-langkah berikut:

  1. Tambahkan saran jaringan Wi-Fi dengan setOemPaid atau setOemPrivate ditetapkan ke benar.

  2. Di ConnectivityManager, ajukan NetworkRequest dengan kemampuan yang sesuai:

Saat mendeteksi hasil pemindaian dengan jaringan yang cocok dengan saran pribadi OEM atau OEM berbayar, perangkat akan otomatis terhubung ke jaringan tersebut sebagai jaringan sekunder.

Validasi koneksi internet dan koneksi terbatas serentak

Untuk memvalidasi fungsi ini, gunakan pengujian CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

Beberapa jaringan serentak dengan koneksi internet

Tersedia untuk Android 13 atau yang lebih baru, fitur beberapa jaringan serentak dengan koneksi internet memungkinkan perangkat terhubung secara serentak ke dua jaringan (AP) yang keduanya tidak dibatasi (semua aplikasi memiliki akses) dan menyediakan akses internet.

Aplikasi dapat memeriksa apakah fitur ini didukung di perangkat menggunakan metode WifiManager#isStaConcurrencyForMultiInternetSupported().

Jika fitur didukung, aplikasi dengan hak istimewa dapat mengaktifkan fitur menggunakan metode WifiManager#setStaConcurrencyForMultiInternetMode(int mode). Fitur ini memiliki mode berikut:

Untuk membuat kueri mode fitur yang saat ini aktif, gunakan metode WifiManager#getStaConcurrencyForMultiInternetMode().

Jika fitur diaktifkan, gunakan langkah-langkah berikut untuk meminta jaringan Wi-Fi tambahan yang menyediakan internet.

  1. Buat penentu jaringan Wi-Fi menggunakan WifiNetworkSpecifier.Builder. Pilih band untuk penentu menggunakan metode setBand(). Jangan tentukan SSID atau BSSID karena jaringan tambahan untuk band yang ditentukan dipilih oleh framework Wi-Fi.

  2. Dengan menggunakan ConnectivityManager, buat NetworkRequest dengan kemampuan NET_CAPABILITY_INTERNET.

  3. Tambahkan specifier ke permintaan jaringan bersama dengan instance NetworkCallback untuk melacak status permintaan, dan berikan permintaan ke ConnectivityManager. Jika jaringan tersimpan dengan band yang diminta tersedia dalam hasil pemindaian, dan koneksi ke jaringan berhasil, NetworkCallback.onAvailable() akan dipanggil pada objek callback.

Memvalidasi beberapa jaringan serentak dengan koneksi internet

Untuk memvalidasi fungsi ini, gunakan pengujian CTS berikut:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Panduan chip Wi-Fi vendor

Untuk vendor chip Wi-Fi, gunakan panduan berikut untuk mendukung serentak STA/STA Wi-Fi.

Chip Wi-Fi harus mendukung koneksi STA ganda serentak. Artinya, API ini mendukung hal berikut:

  • Setiap antarmuka STA memiliki MAC unik yang dapat diprogram oleh framework.
  • Antarmuka STA sekunder dapat dibuat dan dihancurkan secara dinamis.
  • Setiap STA dapat terhubung ke SSID yang berbeda (baik dalam band yang sama maupun band yang berbeda).
  • Setiap STA dapat terhubung ke SSID yang sama (baik dalam band yang sama maupun band yang berbeda). Kedua STA tidak boleh terhubung ke BSSID yang sama.

Fitur penting harus beroperasi berdasarkan per antarmuka dan harus tersedia di antarmuka utama. Berikut adalah daftar fitur kritis ini:

  • Roaming harus didukung setidaknya di antarmuka utama (ditetapkan menggunakan IWifiChip.setMultiStaPrimaryConnection()). Jika roaming didukung di kedua antarmuka, keputusan pada satu koneksi tidak boleh bertentangan dengan koneksi serentak kedua. Misalnya, satu antarmuka tidak boleh melakukan roaming ke BSSID koneksi lain.

  • APF (dan pengalihan lainnya seperti ARP dan NS) harus didukung setidaknya pada antarmuka utama (yang ditetapkan menggunakan IWifiChip.setMultiStaPrimaryConnection()).

  • Statistik lapisan link harus beroperasi berdasarkan per antarmuka.

Berikut adalah implementasi chip Wi-Fi yang direkomendasikan untuk berbagai skenario konkurensi:

  • Chip Wi-Fi harus mengizinkan framework memanggil IWifiChip.setMultiStaUseCase() dengan salah satu konstanta berikut untuk menentukan fungsi saat ini:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: Menentukan fungsi Make-Before-Break. Kualitas koneksi utama harus diprioritaskan daripada koneksi sekunder.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: Menentukan koneksi internet dan khusus lokal serentak atau fungsi koneksi internet dan terbatas serentak. Kualitas kedua koneksi harus diprioritaskan secara merata.
  • Karena STA serentak ganda dapat menyebabkan mode operasi MCC, SCC, dan DBS, implementasi vendor harus memilih konfigurasi radio terbaik saat framework memanggil IWifiChip.setMultiStaUseCase() untuk menunjukkan fungsi. Berikut adalah panduan umum:

    • DBS 2x2+2x2 lebih disukai jika tersedia.
    • Hindari DBS 1x1+1x1 jika memungkinkan karena dampaknya yang berlebihan terhadap kualitas koneksi. Sebagai gantinya, pilih MCC.
    • Siklus tugas MCC harus dapat dikonfigurasi oleh driver atau firmware untuk berbagai fungsi. Framework tidak menetapkan siklus tugas MCC secara langsung, tetapi mengkueri informasi ini menggunakan StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Jika menggunakan MCC, sebaiknya gunakan siklus tugas berikut antara koneksi primer dan sekunder:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% primer, 30% sekunder.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% utama, 50% sekunder.