Kablosuz STA/STA eşzamanlılığı

Android 12, cihazların aynı anda iki kablosuz ağa bağlanmasına olanak tanıyan Wi-Fi STA/STA eşzamanlılığını sunar. Bu isteğe bağlı özellik aşağıdaki işlevleri etkinleştirir:

  • Önce yap sonra boz: Cihaz, mevcut bağlantıyı kesmeden önce yeni bir kablosuz ağa bağlanır. Bu, kablosuz ağlar arasında geçiş yaparken daha sorunsuz geçişler sağlar.
  • Aynı anda yalnızca yerel ve internet bağlantısı: Cihaz, birincil internet bağlantısını kesmeden yalnızca yerel bir ağa bağlanır.
  • Aynı anda kısıtlı ve internet bağlantısı: Cihaz, birincil internet bağlantısını kesmeden kısıtlı bir ağa (yalnızca belirli ayrıcalıklı uygulamalar tarafından kullanılabilir) bağlanır.
  • (Android 13 veya sonraki sürümler) İnternet bağlantısı olan eşzamanlı birden fazla ağ: Cihaz, her ikisi de sınırsız ve tüm uygulamalar tarafından kullanılabilen, internet bağlantısı sağlayan iki ağa bağlanır.

Bu sayfada, bu özellik etkinleştirildiğinde cihazın nasıl davrandığı ve cihaz üreticileri ile satıcıları için uygulama ayrıntıları açıklanmaktadır.

Uygulama

Cihazların Wi-Fi STA/STA eşzamanlılığını uygulamak için aşağıdakileri desteklemesi gerekir:

  • Kablosuz çip veya donanım yazılımı, iki eşzamanlı STA bağlantısını desteklemelidir. Donanım yazılımı, her iki bağlantı için de tüm kanal ve bant kombinasyonlarını desteklemelidir. Performans sorunlarını önlemek için 2x2+2x2 DBS özellikli bir kablosuz çip kullanmanızı öneririz.

  • Cihaz, IWifiChip'nın AIDL veya HIDL uygulamasında aşağıdaki API'leri desteklemelidir.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • HAL Wi-Fi arayüzü kombinasyonunda, [{STA} <= 2, ...] gibi bir spesifikasyon biçimi kullanılarak sunulan iki eşzamanlı STA arayüzü olmalıdır. Daha fazla bilgi için Wi-Fi çok arayüzlü eşzamanlılık başlıklı makaleyi inceleyin.

Bu ön koşullar karşılanıyorsa aşağıdaki adımları uygulayarak Wi-Fi STA/STA eşzamanlılığını uygulayın:

  1. Çalışma zamanı kaynak katmanlarını kullanarak bir veya daha fazla işlevi ayrı ayrı etkinleştirin (varsayılan olarak devre dışıdır).

    • Önce yap sonra boz: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Aynı anda yalnızca yerel ve internet bağlantısı: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Aynı anda kısıtlanmış ve internet bağlantısı: config_wifiMultiStaRestrictedConcurrencyEnabled
    • İnternet bağlantısı olan birden fazla ağa aynı anda bağlanma: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Her uygulamayı ilgili bölümlerde açıklandığı şekilde doğrulayın.

Wi-Fi STA/STA eşzamanlılığını daha iyi desteklemek için OEM tarafından özelleştirilmiş çerçevelerin ve uygulamaların, yalnızca tek bir ağ için WifiInfo döndüren ve Android 12'de desteği sonlandırılan WifiManager#getConnectionInfo() yerine NetworkCallback#onCapabilitiesChanged() yöntemini kullanmasını öneririz. Daha fazla bilgi için Eşler arası bağlantı için kablosuz ağ İsteği API'si başlıklı makaleyi inceleyin.

Önce yap sonra bırak

Önce yap sonra boz işlevi, cihazların mevcut kablosuz ağ bağlantısını koruyarak yeni bir kablosuz ağa bağlanmasına olanak tanır. Cihazlar, yeni kablosuz ağa başarıyla bağlanıp internet erişimi elde ettikten sonra eski ağın bağlantısını keser.

Önce yap sonra boz kullanım alanı, Android 11 veya önceki sürümlerdeki aşağıdaki sorunları ele alır. Bu sürümlerde cihazın yeni bir ağa bağlanmadan önce mevcut kablosuz ağın bağlantısını kesmesi gerekir (önce boz sonra yap).

  • Yeni bir ağa bağlanırken cihaz, yanlış bir kablosuz ağ şifresinin kaydedildiğini veya yeni ağın internet erişimi olmadığını algılayabilir. Bu durum, cihazın eski ağa geri dönmesine neden olur ve önemli bir süre boyunca kablosuz bağlantı olmaz.

  • Eski ağın bağlantısı aniden kesilir. Bu durumda tüm soketler kapatılır. Uygulamalar genellikle bağlantının aniden kesilmesine iyi tepki vermez. Bu durum, yeni bağlantı tamamen kurulana kadar kullanıcının birkaç saniye boyunca internet bağlantısı olmadan kalmasına neden olabilir.

  • Varsayılan ağ iki kez değişir: önce eski kablosuz ağdan hücresel ağa, ardından hücresel ağdan yeni kablosuz ağa. Bu durum, uygulamaların ağ değişikliklerine iki kez tepki vermesine neden olur. Cihazın kısa bir süre hücresel veri kullanması da gerekir.

Öncelikli akış yalnızca işletim sistemi tarafından başlatılan otomatik kablosuz ağ geçişleri için kullanılır. Kullanıcı tarafından başlatılan ağ geçişlerinde, yeni ağ bağlanmadan önce önceki ağın tamamen bağlantısının kesildiği eski break-before-make akışı kullanılır. Bazı durumlarda, işletim sistemi tarafından başlatılan otomatik geçişlerde bile break-before-make akışı kullanılır. Örneğin, her ikisi de fabrika MAC adresini kullanacak şekilde yapılandırılmış iki ağ arasında geçiş yaparken bu akış kullanılır.

Uygulamalar, WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API'sini kullanarak bu kullanım alanının cihazda desteklenip desteklenmediğini kontrol edebilir.

Validate make-before-break

Uygulamanızı doğrulamak için otomatik bir kablosuz ağ geçişini tetikleyin (bağlı ağdan daha güçlü sinyal gücüne sahip bir ağın kullanılabilir olduğunu doğrulayarak) ve cihazın yeni ağa bağlanırken mevcut bağlantıyı koruduğunu doğrulayın. Her iki kablosuz arayüzün durumunu görüntülemek ve her ikisinin de bağlı olduğunu doğrulamak için aşağıdaki komutu kullanın:

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

Yeni ağda bağlantı yoksa cihaz, mevcut ağla bağlantıyı koruyarak ağa bağlanmayı dener ve yeni ağda internet olmadığını algıladığında denemeyi iptal eder. Cihaz, birincil kablosuz ağ olarak mevcut bağlantıyı kullanmaya devam eder.

Eşzamanlı olarak yalnızca yerel ve internet bağlantısı

Aynı anda yalnızca yerel ve internet bağlantısı işlevi, cihazların bir IoT cihazına bağlantı gibi yalnızca yerel bağlantıya, internet sağlayan birincil ağla aynı anda bağlanmasına olanak tanır. Bu işlev, Android 10'da eklenen WifiNetworkSpecifier API'si aracılığıyla mümkün olan, kameralar gibi IoT cihazlarına doğrudan bağlanırken kullanıcı deneyimini iyileştirir.

Android 11 ve önceki sürümlerde, cihazlar bir IoT cihazına bağlanırken birincil kablosuz ağın bağlantısını keser. Bu da internet bağlantısının kaybolmasına neden olur (cihazda hücresel veri gibi başka bir aktarım türü yoksa).

Uygulamalar, WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API'sini kullanarak bu işlevin cihazda desteklenip desteklenmediğini kontrol edebilir.

Android 12'de yalnızca yerel ve internet bağlantısı işlevinde yapılan eşzamanlı değişiklikler hakkında daha fazla bilgi için Eşler arası bağlantı için kablosuz ağ isteği API'si başlıklı makaleyi inceleyin.

Yalnızca yerel ve internet bağlantısını doğrulama

Bu işlevi doğrulamak için MultiStaConcurrencyWifiNetworkSpecifierTest CTS testini kullanın.

Eşzamanlı kısıtlı ve internet bağlantısı

Aynı anda hem kısıtlı hem de internet bağlantısı işlevi, cihazın aynı anda hem kullanıcı için birincil kablosuz ağa hem de yalnızca belirli uygulamaların kullanabildiği kısıtlı bir kablosuz ağa bağlanmasına olanak tanır.

Uygulamalar, WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API'sini kullanarak bu işlevin cihazda desteklenip desteklenmediğini kontrol edebilir.

Bir cihazın ikincil kısıtlanmış kablosuz ağlara bağlanmasını sağlamak için aşağıdaki adımları uygulayın:

  1. Kablosuz ağ önerileri ekleyin. setOemPaid veya setOemPrivate doğru olarak ayarlanmalıdır.

  2. ConnectivityManager'da, ilgili özelliklere sahip bir NetworkRequest oluşturun:

Cihaz, OEM'in ücretli veya özel önerisiyle eşleşen bir ağın tarama sonuçlarını algıladığında ikincil ağ olarak otomatik olarak bu ağa bağlanır.

Aynı anda kısıtlanmış ve İnternet bağlantısını doğrulama

Bu işlevi doğrulamak için MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest CTS testini kullanın.

İnternet bağlantısı olan eşzamanlı birden fazla ağ

Android 13 veya sonraki sürümlerde kullanılabilen internet bağlantısı olan eşzamanlı çoklu ağlar özelliği, cihazın aynı anda iki ağa (AP) bağlanmasına olanak tanır. Bu ağların her ikisi de sınırsızdır (tüm uygulamalar erişebilir) ve internet erişimi sağlar.

Uygulamalar, WifiManager#isStaConcurrencyForMultiInternetSupported() yöntemini kullanarak bu özelliğin cihazda desteklenip desteklenmediğini kontrol edebilir.

Özellik destekleniyorsa ayrıcalıklı uygulamalar WifiManager#setStaConcurrencyForMultiInternetMode(int mode) yöntemini kullanarak özelliği etkinleştirebilir. Bu özelliğin aşağıdaki modları vardır:

Etkin özellik modunu sorgulamak için WifiManager#getStaConcurrencyForMultiInternetMode() yöntemini kullanın.

Özellik etkinleştirildiğinde ek internet sağlayan kablosuz ağ istemek için aşağıdaki adımları uygulayın.

  1. WifiNetworkSpecifier.Builder kullanarak kablosuz ağ tanımlayıcısı oluşturun. setBand() yöntemini kullanarak belirleyici için bir bant seçin. Belirtilen bant için ek ağ olarak SSID veya BSSID'yi belirtmeyin. Bu ağ, kablosuz ağ çerçevesi tarafından seçilir.

  2. ConnectivityManager kullanarak NET_CAPABILITY_INTERNET özelliğine sahip bir NetworkRequest oluşturun.

  3. İsteğin durumunu izlemek için belirleyiciyi ağ isteğine bir NetworkCallback örneğiyle birlikte ekleyin ve isteği ConnectivityManager'ye gönderin. Tarama sonucunda istenen bantla kaydedilmiş bir ağ varsa ve ağa bağlantı başarılıysa geri çağırma nesnesinde NetworkCallback.onAvailable() çağrılır.

İnternet bağlantısı olan birden fazla eşzamanlı ağı doğrulama

Bu işlevi doğrulamak için aşağıdaki CTS testini kullanın:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Satıcı Wi-Fi çipi yönergeleri

Kablosuz çip satıcıları, Wi-Fi STA/STA eşzamanlılığını desteklemek için aşağıdaki yönergeleri kullanabilir.

Kablosuz çip, eşzamanlı çift STA bağlantısını desteklemelidir. Bu, aşağıdaki özellikleri desteklediği anlamına gelir:

  • Her STA arayüzünün, çerçeve tarafından programlanabilen benzersiz bir MAC'si vardır.
  • İkincil STA arayüzü dinamik olarak oluşturulabilir ve yok edilebilir.
  • Her STA farklı bir SSID'ye (aynı bant içinde veya farklı bir bantta) bağlanabilir.
  • Her STA aynı SSID'ye (aynı bant içinde veya farklı bir bantta) bağlanabilir. İki STA hiçbir zaman aynı BSSID'ye bağlı olmamalıdır.

Kritik özellikler, arayüz başına çalışmalı ve birincil arayüzde kullanılabilir olmalıdır. Bu kritik özelliklerin listesini aşağıda bulabilirsiniz:

  • Dolaşım en azından birincil arayüzde desteklenmelidir (IWifiChip.setMultiStaPrimaryConnection() kullanılarak ayarlanır). Dolaşım her iki arayüzde de destekleniyorsa bir bağlantıyla ilgili kararlar, eşzamanlı ikinci bağlantıyla çakışmamalıdır. Örneğin, bir arayüz diğer bağlantının BSSID'sine dolaşmamalıdır.

  • APF (ve ARP ile NS gibi diğer boşaltmalar) en az birincil arayüzde (IWifiChip.setMultiStaPrimaryConnection() kullanılarak ayarlanır) desteklenmelidir.

  • Bağlantı katmanı istatistikleri, arayüz bazında çalışmalıdır.

Farklı eşzamanlılık senaryoları için önerilen kablosuz çip uygulamaları aşağıda verilmiştir:

  • Kablosuz çip, mevcut işlevi belirtmek için çerçevenin aşağıdaki sabitlerden biriyle IWifiChip.setMultiStaUseCase() işlevini çağırmasına izin vermelidir:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: Make-Before-Break işlevini belirtir. Birincil bağlantının kalitesine ikincil bağlantıdan daha fazla öncelik verilmelidir.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: Aynı anda yalnızca yerel ve internet bağlantısı veya aynı anda kısıtlı ve internet bağlantısı işlevini belirtir. Her iki bağlantının da kalitesine eşit öncelik verilmelidir.
  • Çift eşzamanlı STA'lar MCC, SCC ve DBS çalışma modlarına yol açabileceğinden, çerçeve işlevi belirtmek için IWifiChip.setMultiStaUseCase() çağrısı yaptığında satıcı uygulaması en iyi radyo yapılandırmasını seçmelidir. Genel kurallar şu şekildedir:

    • Mümkünse 2x2+2x2 DBS tercih edilir.
    • Bağlantı kalitesi üzerindeki aşırı etkisi nedeniyle mümkünse 1x1+1x1 DBS'den kaçının. Bunun yerine MM'yi tercih edin.
    • MCC görev döngüsü, çeşitli işlevler için sürücü veya donanım yazılımı tarafından yapılandırılabilir olmalıdır. Çerçeve, MCC görev döngüsünü doğrudan ayarlamaz ancak bu bilgileri StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent kullanarak sorgular.
    • MM'yi kullanıyorsanız birincil ve ikincil bağlantılar arasında aşağıdaki görev döngülerini kullanmanızı öneririz:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: %70 birincil, %30 ikincil.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: %50 birincil, %50 ikincil.