Ultra geniş bant (UWB) iletişim

Ultra geniş bant iletişim, hassas kapsama alanına odaklanan bir radyo teknolojisidir. (konum 10 cm doğrulukta ölçülür). Bu radyo teknolojisi, kısa aralıklı ölçümler için düşük enerji yoğunluğu kullanabilir ve radyo spektrumunun büyük bir kısmında yüksek bant genişliğinde sinyal iletimi sağlar. Ultra Geniş Bant'ın bant genişliği 500 MHz'den fazlaysa (veya% 20'lik kesirden daha yüksek). bant genişliği).

Denetleyici/Başlatan ile Denetleyici/Katılımcı Karşılaştırması

Ultra Geniş Bant iletişimi biri Denetleyici olmak üzere iki cihaz arasında gerçekleşir diğeri ise Denetleyicidir. Denetleyici karmaşık kanalı belirler (UwbComplexChannel) iki cihaz paylaşır ve başlatan kişi olur. Denetleyici ise verebilirsiniz.

Bir Denetleyici birden fazla Denetleyici işleyebilir ancak Denetleyici yalnızca abone olabilir tek bir kumanda olarak değiştirebilirsiniz. Hem Denetleyici/Başlatan hem de Denetleyici/Yanıt veren desteklenir.

Aralık parametreleri

Denetleyici ve Denetleyici, birbirlerini tanımlamalı ve iletişim kurmalıdır. değer aralığı'nı seçin. Bu exchange, bağlı çalışanların Bluetooth Düşük Enerji (BDE).

Aralık parametreleri yerel adres, karmaşık kanal ve oturum anahtarı gibi bilgileri içerir. Not bu parametrelerin, aralık oturumundan sonra döndürülebileceğini veya başka bir şekilde değişebileceğini ve aralığın yeniden başlatılması için yeniden iletilmesi gerekir.

Arka plan aralığı

Arka planda çalışan bir uygulama, cihaz aşağıdaki koşulları karşılıyorsa ultra geniş bant aralığı oturumu başlatabilir destekler. Cihazınızın özelliklerini kontrol etmek için RangingCapabilities bölümüne bakın.

Uygulama arka planda çalışırken aralık raporları almıyor; uygulama Ön plana taşındığında çeşitli raporlar alır.

STS yapılandırmaları

Uygulama veya hizmet, Karmaşık bir sayı kullanarak her oturum için bir oturum anahtarı sağlar Zaman Damgası Dizisi (STS). Sağlanan STS, statik STS'den daha güvenlidir yapılandırma. Temel hazırlığı yapılmış STS, şu an çalışan, ultra geniş bant özellikli tüm cihazlarda desteklenir Android 14 veya sonraki sürümler

Tehdit kategorisi Statik STS Koşullu STS
Hava: Pasif gözlemci Azaltılmış Azaltılmış
Hava: Sinyal yükseltme Azaltılmış Azaltılmış
Hava: Tekrar/röle saldırısı Duyarlı Azaltılmış

Temel hazırlığı yapılan STS için:

  1. RangingParameters içinde, sağlanan STS'yi destekleyen uwbConfigType kullanın.

  2. sessionKeyInfo alanına 16 baytlık anahtarı girin.

Statik STS için:

  1. RangingParameters içinde statik STS'yi destekleyen uwbConfigType kullanın.

  2. sessionKeyInfo alanına 8 baytlık anahtarı girin.

Adımlar

Ultra Geniş Bant API'yi kullanmak için aşağıdaki adımları uygulayın:

  1. Android cihazların Android 12 veya sonraki bir sürüm yüklü olduğundan ve Ultra Geniş Bant'ı destekleyen PackageManager#hasSystemFeature("android.hardware.uwb")
  2. Çeşitli IoT cihazlarının kullanılması durumunda cihazların FiRa MAC 1.3 olduğundan emin olun. olması gerekir.
  3. İstediğiniz bir OOB mekanizmasını kullanarak ultra geniş bant özellikli benzer cihazları keşfedin örneğin: BluetoothLeScanner.
  4. Seçtiğiniz güvenli bir OOB mekanizmasını kullanarak aralık parametrelerini değiştirin (ör. BluetoothGatt).
  5. Kullanıcı oturumu durdurmak isterse oturumun kapsamını iptal edin.

Kullanım kısıtlamaları

UWB API'nin kullanımı için aşağıdaki kısıtlamalar geçerlidir:

  1. Yeni ultra geniş bant aralık oturumları başlatan uygulama ön plan olmalıdır gösterildiği gibi arka plan aralığı desteklenmiyorsa uygulama veya hizmet anlatacağım.
  2. Uygulama arka plana geçtiğinde (oturum devam ederken) artık aralık raporlarını alamayabilir. Ancak ultra geniş bant oturumu alttaki katmanlarda tutulmaya devam eder. Uygulama ön planda aralık raporları devam ettirilir.

Kod örnekleri

Örnek uygulama

UWB Jetpack kitaplığının nasıl kullanılacağıyla ilgili kapsamlı bir örnek için GitHub'daki örnek uygulamamıza göz atın. Bu örnek uygulama, Android cihazda ultra geniş bant uyumluluğunu doğrulama, OOB mekanizması kullanarak keşif sürecini etkinleştirme ve ultra geniş bant özellikli iki cihaz arasında geniş bant ayarlama konularını ele alır. Örnek, cihaz kontrolü ve medya paylaşımı kullanım alanlarını da kapsar.

Ultra Geniş Bant Aralığı

Bu kod örneği, bir Denetleyici için ultra geniş bant aralığını başlatır ve sonlandırır:

// The coroutineScope responsible for handling uwb ranging.
// This will be initialized when startRanging is called.
var job: Job?

// A code snippet that initiates uwb ranging for a Controlee.
suspend fun startRanging() {

    // Get the ranging parameter of a partnering Controller using an OOB mechanism of choice.
    val partnerAddress : Pair<UwbAddress, UwbComplexChannel> = listenForPartnersAddress()

    // Create the ranging parameters.
    val partnerParameters = RangingParameters(
        uwbConfigType = UwbRangingParameters.UWB_CONFIG_ID_1,
        // SessionKeyInfo is used to encrypt the ranging session.
        sessionKeyInfo = null,
        complexChannel = partnerAddress.second,
        peerDevices = listOf(UwbDevice.createForAddress(partnerAddress.first)),
        updateRateType = UwbRangingParameters.RANGING_UPDATE_RATE_AUTOMATIC
    )

    // Initiate a session that will be valid for a single ranging session.
    val clientSession = uwbManager.clientSessionScope()

    // Share the localAddress of the current session to the partner device.
    broadcastMyParameters(clientSession.localAddress)

    val sessionFlow = clientSession.prepareSession(partnerParameters)

    // Start a coroutine scope that initiates ranging.
    CoroutineScope(Dispatchers.Main.immediate).launch {
        sessionFlow.collect {
            when(it) {
                is RangingResultPosition -> doSomethingWithPosition(it.position)
                is RangingResultPeerDisconnected -> peerDisconnected(it)
            }
        }
    }
}

// A code snippet that cancels uwb ranging.
fun cancelRanging() {

    // Canceling the CoroutineScope will stop the ranging.
    job?.let {
        it.cancel()
    }
}

RxJava3 desteği

Java ile birlikte çalışabilirlik sağlamak için Rxjava3 desteği kullanıma sunuldu kullanabilirsiniz. Bu kitaplık, aralıklı sonuçları Gözlemlenebilir veya Akan akış ve UwbClientSessionScope öğesini Tek nesne olarak alma.

private final UwbManager uwbManager;

// Retrieve uwbManager.clientSessionScope as a Single object
Single<UwbClientSessionScope> clientSessionScopeSingle =
                UwbManagerRx.clientSessionScopeSingle(uwbManager);
UwbClientSessionScope uwbClientSessionScope = clientSessionScopeSingle.blockingGet();

// Retrieve uwbClientSessionScope.prepareSession Flow as an Observable object
Observable<RangingResult> rangingResultObservable =
                UwbClientSessionScopeRx.rangingResultsObservable(clientSessionScope,
                        rangingParameters);

// Consume ranging results from Observable
rangingResultObservable.subscribe(
   rangingResult -> doSomethingWithRangingResult(result), // onNext
   (error) -> doSomethingWithError(error), // onError
   () -> doSomethingOnResultEventsCompleted(), //onCompleted
);
// Unsubscribe
rangingResultObservable.unsubscribe();
   

// Retrieve uwbClientSessionScope.prepareSession Flow as a Flowable object
Flowable<RangingResult> rangingResultFlowable =
                UwbClientSessionScopeRx.rangingResultsFlowable(clientSessionScope,
                        rangingParameters);

// Consume ranging results from Flowable using Disposable
Disposable disposable = rangingResultFlowable
   .delay(1, TimeUnit.SECONDS)
   .subscribeWith(new DisposableSubscriber<RangingResult> () {
      @Override public void onStart() {
          request(1);
      }
      
      @Override public void onNext(RangingResult rangingResult) {
             doSomethingWithRangingResult(rangingResult);
             request(1);
      }


      @Override public void onError(Throwable t) {
             t.printStackTrace();
      }


         @Override public void onComplete() {
            doSomethingOnEventsCompleted();
         }
   });

// Stop subscription
disposable.dispose();

Ekosistem desteği

Desteklenen iş ortağı cihazları ve üçüncü taraf SDK'ları aşağıda verilmiştir.

Ultra Geniş Bant özellikli mobil cihazlar

Mart 2024 itibarıyla aşağıdaki cihazlar Android UWB Jetpack kitaplığını desteklemektedir:

Satıcı Cihaz Modeli
Google Pixel 6 Pro, 7 Pro, 8 Pro, Fold, Tablet
Samsung Galaxy Note 20, S21+, S22+, S23+, S24+ Z Fold 2, 3, 4, 5

Üçüncü taraf SDK'ları

Bu iş ortağı çözümleri Nisan 2023 itibarıyla geçerli Jetpack kitaplığını ziyaret edin.

Bilinen sorun: MAC adresi ve statik STS satıcı kimliği alanları için bayt sırası tersine çevrildi

Android 13 ve önceki sürümlerde Android ultra geniş bant yığını yanlış bir şekilde baytı ters çevirir şu alanlar için sipariş verin:

  • Cihaz MAC adresi
  • Hedef MAC adresi
  • Statik STS tedarikçi firma kimliği

Android yığınının bu alanları işlemesi nedeniyle bayt sırasının tersine çevrilmesi gerçekleşir. değerleri kullanın. UCI spesifikasyonunu güncellemek için FiRa ile birlikte çalışıyoruz (CR-1112) kullanın.

Bu sorun, 2320XXXX sürümündeki GMS Core güncellemesiyle düzeltilecektir. Bu noktadan itibaren Android cihazlarla uyumlu olmak için IoT tedarikçilerinin kullanmanızı öneririz.