Wi-Fi STA/STA eşzamanlılığı

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

  • Bağlantı kesmeden önce bağlantı oluşturma: Cihaz, mevcut bağlantıyı kesmeden önce yeni bir kablosuz ağa bağlanır. Bu sayede, kablosuz ağlar arasında geçiş yaparken daha sorunsuz bir deneyim elde edersiniz.
  • Eşzamanlı yalnızca yerel ve internet bağlantısı: Cihaz, internet sağlayan birincil bağlantısını kesintiye uğratmadan yalnızca yerel bir ağa bağlanır.
  • Aynı anda kısıtlanmış ve internet bağlantısı: Cihaz, birincil internet bağlantısını kesintiye uğratmadan kısıtlanmış 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ğda eşzamanlı olarak: Cihaz, her ikisi de internet bağlantısı sağlayan, sınırsız ve tüm uygulamalar tarafından kullanılabilen iki ağa bağlanır.

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

Uygulama

Kablosuz ağ STA/STA eşzamanlılığını uygulamak için cihazlar aşağıdakileri desteklemelidir:

  • Kablosuz yonga 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 çipi kullanmanızı öneririz.

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

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • HAL kablosuz arayüz kombinasyonunda, [{STA} <= 2, ...] gibi bir spesifikasyon biçimi kullanılarak iki eşzamanlı STA arayüzü gösterilmelidir. Daha fazla bilgi için Kablosuz çoklu arayüz eşzamanlılığı başlıklı makaleyi inceleyin.

Bu ön koşullar karşılanırsa aşağıdakileri yaparak kablosuz ağ STA/STA eşzamanlılığını uygulayın:

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

    • Dinlenmeden önce oluştur: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Eşzamanlı 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ğda aynı anda: 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ştirilen ç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ğ istek API'si başlıklı makaleyi inceleyin.

Make-before-break

Bağlantıyı kesmeden önce yeni bağlantı oluşturma işlevi, cihazların mevcut kablosuz ağ bağlantısını korurken yeni bir kablosuz ağa bağlanmasına olanak tanır. Cihaz, yalnızca yeni kablosuz ağa başarıyla bağlanıp internet erişimi elde ettiğinde eski ağ bağlantısını keser.

Bağlantıyı kesmeden önce bağlantı oluşturma kullanım alanı, Android 11 veya önceki sürümlerde cihazın yeni bir ağa bağlanmadan önce mevcut kablosuz ağ bağlantısını kesmesi gereken (bağlantıyı kesmeden önce bağlantı oluşturma) aşağıdaki sorunları giderir.

  • Cihaz, yeni bir ağa bağlanırken yanlış bir kablosuz ağ şifresi kaydettiğini veya yeni ağda internet erişimi olmadığını tespit edebilir. Bu işlem cihazı eski ağa geri dönmeye zorlar. Bu da kablosuz bağlantının çok uzun süre kullanılmasına yol açar.

  • Eski ağ aniden kesilir. Bu nedenle tüm yuvalar kapanır. Uygulamalar genellikle ani bağlantı kaybına 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 geçer. Bu durum, uygulamaların ağ değişikliklerine iki kez tepki vermesine neden olur. Cihazın, hücresel veri kullanarak kısa bir süre geçirmesi de gerekir.

Önce oluşturma, sonra kaldırma 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şleri, yeni ağ bağlanmadan önce önceki ağın tamamen bağlantısının kesildiği eski bağlantıyı kesme ve yeni bağlantıyı kurma akışını kullanır. Belirli durumlarda, işletim sistemi tarafından başlatılan otomatik geçişlerde bile bağlantıyı kesme ve yeniden bağlama 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.

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

"Daha önce yapma"yı doğrulama

Uygulamanızı doğrulamak için otomatik kablosuz ağ geçişini tetikleyin (bağlı ağdan daha güçlü sinyal gücüne sahip bir ağ bulunduğundan emin olun) 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ı korurken ağa bağlanmaya çalışır 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.

Aynı anda yalnızca yerel ve internet bağlantısı

Eşzamanlı 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ğla eşzamanlı olarak bağlanmasına olanak tanır. Bu işlev, Android 10'a eklenen WifiNetworkSpecifier API aracılığıyla kamera 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ğ bağlantısını keser. Bu da internet bağlantısının kesilmesine neden olur (cihazda hücresel veri gibi başka bir aktarım türü yoksa).

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

Android 12'deki 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 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ı olarak kısıtlanmış ve internet bağlantısı

Eşzamanlı olarak kısıtlanmış ve internet bağlantısı işlevi, cihazın kullanıcı için birincil bir kablosuz ağa ve yalnızca belirli uygulamaların kullanabileceği kısıtlanmış bir kablosuz ağa eşzamanlı olarak bağlanmasına olanak tanır.

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

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

  1. setOemPaid veya setOemPrivate doğru olarak ayarlanmışken kablosuz ağ önerileri ekleyin.

  2. ConnectivityManager'te, ilgili özelliklere sahip bir NetworkRequest dosyası gönderin:

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

Eşzamanlı kısıtlanmış 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 birden çok ağda eşzamanlı çalışma

Android 13 veya sonraki sürümlerde kullanılabilen internet bağlantılı eşzamanlı birden fazla ağ özelliği, cihazın aynı anda her ikisi de sınırsız olan (tüm uygulamaların erişimi vardır) iki ağa (AP'ler) bağlanmasına ve internet erişimi sağlamasına olanak tanır.

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

Özellik destekliyorsa ayrıcalıklı uygulamalar WifiManager#setStaConcurrencyForMultiInternetMode(int mode) yöntemini kullanarak özelliği etkinleştirebilir. Bu özellik aşağıdaki modlara sahiptir:

Şu anda etkin olan özellik modunu sorgulamak için WifiManager#getStaConcurrencyForMultiInternetMode() yöntemini kullanın.

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

  1. WifiNetworkSpecifier.Builder kullanarak bir kablosuz ağ belirteci oluşturun. setBand() yöntemini kullanarak belirteç için bir bant seçin. Belirtilen bant için ek ağ, kablosuz ağ çerçevesi tarafından seçildiğinden SSID veya BSSID'yi belirtmeyin.

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

  3. İsteğin durumunu izlemek için belirteci, NetworkCallback örneğiyle birlikte ağ isteğine ekleyin ve isteği ConnectivityManager'a gönderin. Tarama sonucunda istenen bantla kayıtlı 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ıyla eş zamanlı birden çok ağı doğrulayın

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

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Tedarikçi firma kablosuz çipi yönergeleri

Kablosuz çipi tedarikçilerinde kablosuz ağ STA/STA eşzamanlılığını desteklemek için aşağıdaki yönergeleri kullanın.

Kablosuz ağ çipi, eşzamanlı iki STA bağlantısını desteklemelidir. Bu, aşağıdakileri desteklediği anlamına gelir:

  • Her STA arayüzünde çerçeve tarafından programlanabilen benzersiz bir MAC bulunur.
  • İkincil STA arayüzü dinamik olarak oluşturulabilir ve kaldırılabilir.
  • Her STA farklı bir SSID'ye (aynı bant veya farklı bir bant) bağlanabilir.
  • Her STA aynı SSID'ye (aynı bantta veya farklı bir bantta) bağlanabilir. İki STA hiçbir zaman aynı BSSID'ye bağlanmamalıdır.

Kritik özellikler arayüz başına çalışmalıdır ve birincil arayüzde kullanılabilir olmalıdır. Bu önemli özelliklerin listesi aşağıda verilmiştir:

  • 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 ikinci eşzamanlı 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 ve NS gibi diğer yük aktarma işlemleri) en azından birincil arayüzde desteklenmelidir (IWifiChip.setMultiStaPrimaryConnection() kullanılarak ayarlanır).

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

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

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

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: Ara vermeden önce oluşturma işlevini belirtir. Birincil bağlantının kalitesi, ikincil bağlantıya göre önceliklendirilmelidir.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: Eşzamanlı yalnızca yerel ve internet bağlantısını veya eş zamanlı kısıtlı ve internet bağlantısı işlevini belirtir. Her iki bağlantının 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ında bulunduğunda tedarikçi uygulaması en iyi radyo yapılandırmasını seçmelidir. Genel kurallar şu şekildedir:

    • Varsa 2x2+2x2 DBS tercih edilir.
    • Bağlantı kalitesi üzerindeki aşırı etki nedeniyle mümkünse 1x1+1x1 DBS'den kaçının. Bunun yerine MCC'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, MM görev döngüsünü doğrudan ayarlamaz ancak bu bilgiyi StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent kullanarak sorgular.
    • MCC 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.