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

Android 12'de kablosuz ağ STA/STA eşzamanlılığı özelliği bulunur. Bu özellik, cihazların iki kablosuz ağa aynı anda bağlanmasına olanak tanır. İsteğe bağlı bu özellik, aşağıdaki işlevleri etkinleştirir.

  • Aradan önce yap: Cihaz, mevcut bağlantıyı kesmeden önce yeni bir kablosuz ağa bağlantı kurar. Bu şekilde, kablosuz ağlar arasında geçiş yaparken daha yumuşak geçişler 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.
  • Eş zamanlı kısıtlanmış ve internet bağlantısı: Cihaz, cihazın internet sağlayan birincil bağlantısını kesintiye uğratmadan kısıtlanmış bir ağa (yalnızca belirli ayrıcalıklı uygulamalarda kullanılabilir) bağlanır.
  • (Android 13 veya sonraki sürümler) İnternet bağlantısıyla eşzamanlı olarak birden fazla ağ: Cihaz, her ikisi de kısıtlanmamış ve tüm uygulamaların kullanabileceği iki ağa bağlanır ve internet bağlantısı sağlar.

Bu sayfada, bu özellik etkinleştirildiğinde cihaz davranışı ve cihaz üreticileri ile tedarikçi firmalar 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 çipi 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 ağ ç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 ağ arayüzü kombinasyonunda, [{STA} <= 2, ...] gibi bir spesifikasyon biçimi kullanılarak gösterilen iki eşzamanlı STA arayüzü bulunmalıdır. Daha fazla bilgi için Kablosuz çoklu arayüz eşzamanlılığı konusuna bakın.

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ışı) kullanarak bir veya daha fazla işlevi tek tek etkinleştirin.

    • Aradan önce başlatma: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Eşzamanlı yalnızca yerel ve internet bağlantısı: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Eşzamanlı kısıtlı ve internet bağlantısı: config_wifiMultiStaRestrictedConcurrencyEnabled
    • İnternet bağlantısıyla eşzamanlı olarak birden fazla ağ: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Her uygulamayı ilgili bölümlerde açıklandığı şekilde doğrulayın.

Kablosuz ağ STA/STA eşzamanlılığını daha iyi desteklemek için OEM tarafından özelleştirilmiş çerçevelerin ve uygulamaların, WifiManager#getConnectionInfo() yerine NetworkCallback#onCapabilitiesChanged() yöntemini kullanmasını öneririz. Bu yöntem, tek bir ağ için yalnızca WifiInfo değerini döndürür ve Android 12'de kullanımdan kaldırılmıştır. Daha fazla bilgi için Eşler arası bağlantı için Wi-Fi Network Request API bölümüne bakın.

Aradan öncesini hazırlama

Aradan önce yap işlevi, cihazların mevcut kablosuz ağ bağlantısını korurken yeni bir kablosuz ağa bağlanmasına olanak tanır. Eski ağ bağlantısı yalnızca yeni kablosuz ağa başarıyla bağlanıp internet erişimi olduğunda eski ağ bağlantısını keser.

Aradan önce başlatma kullanım alanı, Android 11 veya önceki sürümlerde cihazın yeni bir ağa bağlanmadan önce mevcut kablosuz ağ ile bağlantısının kesilmesi (yapmadan önce kırma) gereken aşağıdaki sorunları ele alır.

  • Cihaz, yeni bir ağa bağlanırken yanlış bir kablosuz bağlantı şifresinin kaydedilmiş olduğunu veya yeni ağın internet erişiminin olmadığını belirleyebilir. 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 ve bu durum, kullanıcının yeni bağlantı tamamen kurulana kadar internet bağlantısı olmadan birkaç saniye yaşamasına yol açabilir.

  • Varsayılan ağ, eski kablosuz ağdan hücresel ağa, ardından hücreselden yeni kablosuz ağa olmak üzere iki kez değişir. Bu durum, uygulamaların ağ değişikliklerine iki kez tepki vermesine neden olur. Ayrıca cihazın hücresel veri kullanarak kısa bir süre geçirmesi gerekir.

Aradan önce başlatma 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ğ anahtarları, yeni ağ bağlanmadan önce önceki ağın tamamen bağlantısının kesildiği, eski yapılmadan önce ara akışını kullanır. Bazı durumlarda, hazırlamadan önce ara akışı, işletim sistemi tarafından başlatılan otomatik anahtarlarda bile 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'yi kullanarak bu kullanım alanının desteklenip desteklenmediğini kontrol edebilir.

Aradan önce oluşturmayı doğrulama

Uygulamanızı doğrulamak için otomatik bir kablosuz ağ anahtarını tetikleyin (bağlı ağın mevcut olduğundan daha güçlü bir sinyal gücüne sahip bir ağ sağlayarak) ve cihazın yeni ağa bağlanırken mevcut bağlantıyı koruduğunu doğrulayın. Her iki kablosuz ağ arayüzünü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ğın bağlantısı yoksa cihaz, mevcut ağ bağlantısını korurken ağa bağlanmaya çalışır ve yeni ağın internet bağlantısı olmadığını algıladığında işlemi iptal eder. Daha sonra cihaz, mevcut bağlantıyı birincil kablosuz ağ olarak kullanmaya devam eder.

Eşzamanlı 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 ile kameralar gibi IoT cihazlarına doğrudan bağlanırken kullanıcı deneyimini iyileştirir.

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

Uygulamalar, WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API'yi 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 edinmek için Eşler arası bağlantı için Wi-Fi Network Request API'ye bakın.

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

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

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

Eşzamanlı kısıtlı ve internet bağlantısı işlevi, cihazın kullanıcı için birincil kablosuz ağa ve yalnızca belirli uygulamaların kullanabildiği kısıtlı 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ı sağlamak için aşağıdaki adımları uygulayın:

  1. setOemPaid veya setOemPrivate değerini true olarak ayarlayarak kablosuz ağ önerileri ekleyin.

  2. ConnectivityManager ürününde, ilgili özellikleri içeren bir NetworkRequest dosyası oluşturun:

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

Eşzamanlı kısıtlanmış ve internet bağlantısını doğrulayın

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

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

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, bu özelliğin cihazda desteklenip desteklenmediğini WifiManager#isStaConcurrencyForMultiInternetSupported() yöntemini kullanarak kontrol edebilir.

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

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

Özellik etkinleştirildiğinde internet sağlayan ek bir 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 tanımlayıcı 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 tanımlayıcıyı bir NetworkCallback örneğiyle birlikte ağ isteğine ekleyin ve isteği ConnectivityManager adresine gönderin. Tarama sonucunda, istenen banda sahip kayıtlı bir ağ varsa ve ağ bağlantısı 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 ağ ç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 çipin çift eşzamanlı STA bağlantısını desteklemesi gerekir. Bu, aşağıdakini 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şturulup kaldırılabilir.
  • Her STA farklı bir SSID'ye (aynı bant içinde veya farklı bir bantta) bağlanabilir.
  • Her STA aynı SSID'ye bağlanabilir (aynı bant içinde veya farklı bir bantta). İki STA hiçbir zaman aynı BSSID'ye bağlanmamalıdır.

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

  • Dolaşım, en azından birincil arayüzde (IWifiChip.setMultiStaPrimaryConnection() kullanılarak ayarlanır) desteklenmelidir. 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 geçiş yapmamalıdır.

  • APF (ve ARP ve NS gibi diğer yüklemeler) en azından birincil arayüzde (IWifiChip.setMultiStaPrimaryConnection() ile ayarlayın) desteklenmelidir.

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

Aşağıda, farklı eşzamanlılık senaryoları için önerilen Wi-Fi çipi uygulamaları verilmiştir:

  • Kablosuz çipi, mevcut işlevi belirtmek için çerçevenin aşağıdaki sabit değerlerden 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 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.
  • İki eşzamanlı STA'lar MM, 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 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 kullanmaktan kaçının. Bunun yerine MM hesabını 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ılmalıdır. Çerçeve, MM görev döngüsünü doğrudan ayarlamaz ancak bu bilgiyi StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent kullanarak sorgular.
    • MM 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.