Ultra geniş bant iletişimi, cihazlar arasında tam aralık oluşturmaya (konumu 10 cm'lik doğrulukla ölçme) odaklanan bir radyo teknolojisidir. Bu radyo teknolojisi, kısa menzilli ölçümlerde düşük enerji yoğunluğunu kullanabilir ve radyo spektrumunun büyük bir bölümünde yüksek bant genişliğine sahip sinyaller gerçekleştirebilir. UWB'nin bant genişliği 500 MHz'den fazlaysa (veya% 20 kesirli bant genişliğini aşıyordur).
Denetleyici/Başlatan ile Denetleyici/Katılımcı Karşılaştırması
Ultra Geniş Bant iletişimi, biri Denetleyici, diğeri Denetleyici olmak üzere iki cihaz arasında gerçekleşir. Denetleyici, iki cihazın paylaşacağı karmaşık kanalı (UwbComplexChannel
) ve başlatan, Denetleyici ise yanıt veren kanalı belirler.
Bir Denetleyici, birden fazla Denetleyiciyi işleyebilir ancak bir Denetleyici yalnızca bir Denetleyici'ye abone olabilir. Denetleyici/Başlatıcı ve Denetleyici/Yanıtlayıcı yapılandırmaları desteklenir.
Aralık parametreleri
Denetleyici ve Denetleyici, aralığa başlamak için birbirini tanımlamalı ve aralık parametrelerini iletmelidir. Bu değişim, Bluetooth Düşük Enerji (BDE) gibi tercih ettikleri güvenli bant dışı (OOB) mekanizmasını kullanarak uygulanacak uygulamalara bırakılır.
Aralık parametreleri, diğer parametrelerin yanı sıra yerel adres, karmaşık kanal ve oturum anahtarını içerir. Bu parametrelerin, aralık oturumu sona erdikten sonra dönebileceğini veya başka bir şekilde değişebileceğini ve aralığı yeniden başlatmak için tekrar iletişim kurulması gerektiğini unutmayın.
Arka plan aralığı
Arka planda çalışan bir uygulama, cihaz destekliyorsa ultra geniş bant aralık oturumu başlatabilir. Cihazınızın özelliklerini kontrol etmek için RangingCapabilities
sayfasına bakın.
Uygulama, arka planda çalışırken aralıklı raporlar almaz. Uygulama, ön plana geçtiğinde aralık raporları alır.
STS yapılandırmaları
Uygulama veya hizmet, Karmaşık Zaman Damgası Sırası (STS) kullanarak her oturum için bir oturum anahtarı sağlar. Sağlanan STS, statik STS yapılandırmasından daha güvenlidir. Temel hazırlığı yapılmış STS, Android 14 veya sonraki sürümleri çalıştıran ultra geniş bant özellikli tüm cihazlarda desteklenir.
Tehdit kategorisi | Statik STS | Öngörülen STS |
---|---|---|
Hava: Pasif gözlemci | Azaltılmış | Azaltılmış |
Hava: Sinyal yükseltme | Azaltılmış | Azaltılmış |
Air: Tekrar oynatma/rötarlı saldırı | Duyarlı | Azaltılmış |
Temel hazırlığı yapılan STS için:
RangingParameters
ürününde temel hazırlığı yapılmış STS'yi destekleyenuwbConfigType
kullanın.16 baytlık anahtarı
sessionKeyInfo
alanına girin.
Statik STS için:
RangingParameters
içinde statik STS'yi destekleyenuwbConfigType
kullanın.8 baytlık anahtarı
sessionKeyInfo
alanına girin.
Adımlar
UWB API'yi kullanmak için şu adımları uygulayın:
- Android cihazların Android 12 veya sonraki bir sürümü çalıştırdığından ve
PackageManager#hasSystemFeature("android.hardware.uwb")
kullanarak ultra geniş bant desteği olduğundan emin olun. - IoT cihazları için farklı aralıklar sunuyorsanız cihazların FiRa MAC 1.3 ile uyumlu olduğundan emin olun.
BluetoothLeScanner
gibi seçtiğiniz bir OOB mekanizmasını kullanarak ultra geniş bant özellikli eş cihazları keşfedin.BluetoothGatt
gibi güvenli bir OOB mekanizması kullanarak aralık parametrelerini değiştirme.- Kullanıcı oturumu durdurmak isterse oturumun kapsamını iptal edin.
Kullanım kısıtlamaları
UWB API'nin kullanımıyla ilgili aşağıdaki kısıtlamalar geçerlidir:
- Arka plan aralığı daha önce gösterildiği gibi desteklenmediği sürece yeni ultra geniş bant aralığı oturumları başlatan uygulama ön plan uygulama veya hizmet olmalıdır.
- Uygulama arka plana geçtiğinde (oturum devam ederken) uygulama artık aralık raporları almayabilir. Ancak ultra geniş bant oturumu alt katmanlarda korunmaya devam eder. Uygulama tekrar ön plana alındığında, aralık raporları devam ettirilir.
Kod örnekleri
Örnek uygulama
UWB Jetpack kitaplığının nasıl kullanılacağına dair uçtan uca bir örnek için GitHub'daki örnek uygulamamıza göz atın. Bu örnek uygulama; Android cihazlarda ultra geniş bant uyumluluğunu doğrulama, OOB mekanizması kullanarak keşif sürecini etkinleştirme ve ultra geniş bant uyumlu iki cihaz arasında ultra geniş bant ayarlama konularını kapsar. Örnekte, cihaz kontrolü ve medya paylaşımı kullanım alanları da ele alınmaktadır.
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 istemcileriyle birlikte çalışabilirlik sağlamak için artık Rxjava3 desteği kullanıma sunulmuştur. Bu kitaplık, gözlemlenebilir veya akış olarak akış şeklinde değişen sonuçlar almak ve UwbClientSessionScope öğesini Tek bir nesne olarak almak için bir yol sunar.
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 şu 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
Nisan 2023 itibarıyla bu iş ortağı çözümleri mevcut Jetpack kitaplığıyla uyumludur.
- UWB Geliştirme Kiti'ni hesapla
- Mobil Bilgi MK UWB Kiti Mobil Sürüm 2.0.
Bilinen sorun: MAC adresi ve statik STS tedarikçi firma kimliği alanları için bayt sırası tersine döndürüldü
Android 13 ve önceki sürümlerde Android ultra geniş bant yığını, aşağıdaki alanlarda bayt sırasını yanlış bir şekilde tersine çevirir:
- Cihaz MAC adresi
- Hedef MAC adresi
- Statik STS tedarikçi firma kimliği
Bayt sırasının tersine, Android yığınının bu alanları dizi olarak değil, değer olarak değerlendirmesinden kaynaklanır. UCI spesifikasyonunu (CR-1112), bu alanların dizi olarak değerlendirilmesi gerektiğini açıkça belirtecek şekilde güncellemek için FiRa ile birlikte çalışıyoruz.
Bu sorun, 2320XXXX
sürümündeki GMS Core güncellemesiyle düzeltilecektir.
Bu noktadan itibaren Android cihazlarla uyumlu olması için IoT tedarikçi firmalarının, bu alanların bayt sıralamasını tersine çevirmeyecek şekilde uygulamanızı değiştirmeleri gerekir.