Ultra geniş bant iletişimi, cihazlar arasındaki hassas mesafe ölçmeye (konumun 10 cm doğrulukla ölçülmesine) odaklanan bir radyo teknolojisidir. Bu radyo teknolojisi, kısa menzilli ölçümler için düşük enerji yoğunluğu kullanabilir ve radyo aralığının büyük bir kısmı üzerinden yüksek bant genişliğine sahip sinyal gönderebilir. Ultra geniş bantın bant genişliği 500 MHz'ten (veya% 20'lik kesirli bant genişliğini) fazladır.
Denetleyici/Başlatıcı ve Denetlenen/Yanıtlayan
Ultra geniş bant iletişimi, biri denetleyici, diğeri denetlenen iki cihaz arasında gerçekleşir. Denetleyici, iki cihazın paylaşacağı karmaşık kanalı (UwbComplexChannel
) belirler ve başlatıcı olur. Denetlenen ise yanıt verendir.
Denetleyici birden fazla Denetlenen'i yönetebilir ancak Denetlenen yalnızca tek bir Denetleyici'ye abone olabilir. Hem Denetleyici/Başlatıcı hem de Denetlenen/Yanıt veren yapılandırmaları desteklenir.
Aralık parametreleri
Aralık belirlemeye başlamak için Denetleyici ve Kontrol Edilen'in birbirlerini tanımlaması ve aralık parametrelerini paylaşması gerekir. Bu değişim, uygulamaların Bluetooth Düşük Enerji (BDE) gibi kendi seçtikleri güvenli bir bant dışı (OOB) mekanizmasını kullanarak uygulamalarına bırakılır.
Aralıklı parametreler arasında yerel adres, karmaşık kanal ve oturum anahtarı yer alır. Bu parametrelerin, menzil belirleme oturumu sona erdikten sonra değişebileceğini veya başka bir şekilde değişebileceğini ve menzil belirleme işlemini yeniden başlatmak için yeniden iletişim kurulması gerektiğini unutmayın.
Arka planda menzil belirleme
Arka planda çalışan bir uygulama, cihaz destekliyorsa ultra geniş bant mesafe ölçümü oturumu başlatabilir. Cihazınızın özelliklerini kontrol etmek için RangingCapabilities
bölümüne bakın.
Uygulama arka planda çalışırken menzil raporları almaz; ön plana geçtiğinde menzil 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. Hazır STS, statik STS yapılandırmasından daha güvenlidir. Hazır STS, Android 14 veya sonraki sürümleri çalıştıran tüm ultra geniş bant özellikli cihazlarda desteklenir.
Tehdit kategorisi | Statik STS | STS'nin ayrılması |
---|---|---|
Hava: Pasif gözlemci | Azaltılmış | Azaltılmış |
Hava: Sinyal güçlendirme | Azaltılmış | Azaltılmış |
Hava: Tekrarlama/yineleme saldırısı | Duyarlı | Azaltılmış |
Yapılandırılmış STS için:
RangingParameters
içinde, ayrılmış STS'yi destekleyenuwbConfigType
öğesini kullanın.16 baytlık anahtarı
sessionKeyInfo
alanına girin.
Statik STS için:
Statik STS'yi destekleyen
RangingParameters
içindekiuwbConfigType
öğesini kullanın.8 baytlık anahtarı
sessionKeyInfo
alanına girin.
Adımlar
Ultra geniş bant API'sini kullanmak için aşağıdaki adımları uygulayın:
- Android cihazların Android 12 veya sonraki bir sürümde çalıştığından ve
PackageManager#hasSystemFeature("android.hardware.uwb")
kullanarak ultra geniş bandı desteklediğinden emin olun. - IoT cihazlarına karşı menzil ölçümü yapıyorsanız bu cihazların FiRa MAC 1.3 uyumlu olduğundan emin olun.
BluetoothLeScanner
gibi bir harici cihaz mekanizması kullanarak ultra geniş bant özellikli eş cihazları keşfedin.BluetoothGatt
gibi seçtiğiniz güvenli bir OOB mekanizmasını kullanarak menzil parametrelerini değiştirin.- 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:
- Daha önce gösterildiği gibi arka planda menzil belirleme desteklenmediği sürece, yeni ultra geniş bant menzil belirleme oturumlarını başlatan uygulama bir ön plan uygulaması veya hizmeti olmalıdır.
- Uygulama arka plana geçtiğinde (oturum devam ederken) artık menzil raporları alamaz. Ancak UWB oturumu, alt katmanlarda sürdürülmeye devam eder. Uygulama ön plana geri döndüğünde menzil raporları devam eder.
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 uygulamada; Android cihazda ultra geniş bant uyumluluğunun doğrulanması, harici bir mekanizma kullanarak keşif sürecinin etkinleştirilmesi ve iki ultra geniş bant özellikli cihaz arasında ultra geniş bant aralığının ayarlanması ele alınmaktadır. Örnek, cihaz kontrolü ve medya paylaşımı kullanım alanlarını da kapsar.
Ultra geniş bant mesafe ölçme
Bu kod örneği, bir kontrol cihazı için ultra geniş bant menzillendirmeyi 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 elde etmenize yardımcı olmak için Rxjava3 desteği artık kullanılabilir. Bu kitaplık, menzil belirleme sonuçlarını Observable veya Flowable akış olarak alma ve UwbClientSessionScope'u tek bir nesne olarak alma yöntemi sağlar.
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
Ocak 2025'ten itibaren aşağıdaki cihazlar Android ultra geniş bant Jetpack kitaplığını destekler:
Satıcı | Cihaz Modeli |
---|---|
Pixel Pro (6 Pro ve sonraki modeller), Fold, Tablet | |
Motorola | Edge 50 Ultra |
Samsung | Galaxy Note 20, Galaxy Plus ve Ultra (S21 ve sonraki modeller), Galaxy Z Fold (Fold2 ve sonraki modeller) |
Not: Arka planda ultra geniş bant mesafe ölçme özelliği aşağıdakiler hariç tüm cihazlarda desteklenir:
- Pixel 6 Pro ve Pixel 7 Pro.
- Android 13 veya önceki sürümleri çalıştıran Samsung telefonlar
- Android 14 veya önceki sürümleri çalıştıran Çin'de satılan Samsung telefonlar
Üçüncü taraf SDK'ları
Bu iş ortağı çözümleri, Nisan 2023'ten itibaren mevcut Jetpack kitaplığı ile uyumludur.
- Estimote UWB Geliştirme Kiti.
- Mobile Knowledge MK UWB Kit Mobile Edition 2.0.
Bilinen sorun: MAC adresi ve statik STS tedarikçi kimliği alanları için bayt sırası tersine çevrildi
Android 13 ve önceki sürümlerde Android ultra geniş bant yığını, aşağıdaki alanların bayt sırasını yanlış bir şekilde tersine çevirir:
- Cihaz MAC adresi
- Hedef MAC adresi
- Statik STS tedarikçi firma kimliği
Android yığını bu alanları diziler olarak değil, değerler olarak ele aldığından bayt sırası tersine çevrilir. Bu alanların dizi olarak ele alınması gerektiğini açıkça belirtmek için UCI spesifikasyonunu (CR-1112) güncellemek üzere FiRa ile birlikte çalışıyoruz.
Bu sorun, 2320XXXX
sürümündeki GMS Core güncellemesiyle düzeltilecektir.
Bu tarihten itibaren Android cihazlarla uyumlu olmak için IOT tedarikçi firmalarının, bu alanların bayt sıralamasının tersine çevrilmesini önlemek amacıyla uygulamanızı değiştirmesi gerekir.