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ı kullanıma 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 birden fazla ağa aynı anda bağlanma: Cihaz, her ikisi de sınırsız ve tüm uygulamalarda kullanılabilen, internet bağlantısı sağlayan iki ağa bağlanır.

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

Uygulama

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

  • 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ğıdakileri yaparak 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).

    • Make-before-break: 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ğın eşzamanlı kullanımı: 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 Wi-Fi Ağı İsteği API'si başlıklı makaleyi inceleyin.

Önce yap sonra boz

Önce yap sonra boz işlevi, cihazların mevcut kablosuz ağ bağlantısını korurken 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.

Önce yap sonra boz 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 "önce bağlantıyı kes, sonra oluştur" 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.

Önce yap sonra boz özelliğini doğrulama

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ğundan emin olarak) 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ğlanmaya çalışır ve yeni ağda internet olmadığını algıladığında bu girişimi iptal eder. Cihaz, birincil kablosuz ağ olarak mevcut bağlantıyı kullanmaya devam eder.

Aynı anda 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 bir bağlantıya, internet sağlayan birincil ağ ile 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 cihazda hücresel veri gibi başka bir aktarım türü yoksa internet bağlantısının kaybolmasına neden olur.

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

Android 12'de eşzamanlı yalnızca yerel ve internet bağlantısı işlevinde yapılan değişiklikler hakkında daha fazla bilgi için Eşler arası bağlantı için Wi-Fi Ağı İsteğ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.

Aynı anda kısıtlanmış 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. setOemPaid veya setOemPrivate değeri doğru olarak ayarlanmış Kablosuz ağ önerileri ekleyin.

  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 sınırlı ve internet 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:

Şu anda etkin olan ö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

Tedarikçi kablosuz çip yönergeleri

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

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 bazında ç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 geçiş yapmamalıdır.

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

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

Farklı eşzamanlılık senaryoları için önerilen Wi-Fi çipi 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.
    • MM 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 StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent kullanarak bu bilgileri 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.