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:
RangingParameters
içinde, sağlanan STS'yi destekleyenuwbConfigType
kullanın.sessionKeyInfo
alanına 16 baytlık anahtarı girin.
Statik STS için:
RangingParameters
içinde statik STS'yi destekleyenuwbConfigType
kullanın.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:
- 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")
- Çeşitli IoT cihazlarının kullanılması durumunda cihazların FiRa MAC 1.3 olduğundan emin olun. olması gerekir.
- İstediğiniz bir OOB mekanizmasını kullanarak ultra geniş bant özellikli benzer cihazları keşfedin
örneğin:
BluetoothLeScanner
. - Seçtiğiniz güvenli bir OOB mekanizmasını kullanarak aralık parametrelerini değiştirin
(ör.
BluetoothGatt
). - 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:
- 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.
- 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 |
---|---|
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.
- Estimote UWB Geliştirme Kiti.
- Mobil Bilgi MK UWB Kit Mobile Edition 2.0.
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.