Stos ultraszerokopasmowy (UWB) w AOSP korzysta z interfejsu UCI zdefiniowanego przez FiRa jako warstwy HAL. Interfejs HAL używa nieprzezroczystego potoku (IUwbChip::sendUciMessage()
i IUwbClientCallback::onUciMessage()
) do wysyłania i odbierania poleceń, odpowiedzi i powiadomień interfejsu poleceń UWB (UCI).
Wszyscy dostawcy UWB na Androida muszą obsługiwać wszystkie wiadomości zdefiniowane w specyfikacji FiRa. Platforma UWB jest wstecznie kompatybilna i działa z każdą wersją UCI zaimplementowaną przez dostawcę UWB na urządzeniu. Ponieważ platforma AOSP UWB jest modułem, może też selektywnie dodawać obsługę zatwierdzonych próśb o zmiany (CR) z projektów specyfikacji UCI przeznaczonych do głównych wersji standardów FiRa. Wdrożone projekty CR mogą ulec zmianie.
Definicja interfejsu
Interfejs HAL UWB jest zdefiniowany przy użyciu stabilnego języka AIDL.
Główny interfejs korzysta z pakietu android.hardware.uwb
.
Oto 2 główne interfejsy w pakiecie android.hardware.uwb
:
IUwbChip.aidl
package android.hardware.uwb;
interface IUwbChip {
String getName();
void open(in android.hardware.uwb.IUwbClientCallback clientCallback);
void close();
void coreInit();
void sessionInit(int sessionId);
int getSupportedAndroidUciVersion();
int sendUciMessage(in byte[] data);
}
IUwbClientCallback.aidl
package android.hardware.uwb;
interface IUwbClientCallback {
oneway void onUciMessage(in byte[] data);
oneway void onHalEvent(in android.hardware.uwb.UwbEvent event, in android.hardware.uwb.UwbStatus status);
}
Przepływ wywołań HAL z platformy UWB
Poniższe ilustracje przedstawiają przepływ wywołań z ram UWB w przypadku inicjowania i deinicjowania stosu UWB oraz rozpoczynania i zatrzymywania sesji UWB.
Rysunek 1. Przebieg wywołania inicjowania stosu UWB (przełącznik UWB włączony)
Rysunek 2. Przebieg rozmowy dotyczący dezaktywacji stosu UWB (wyłączenie przełącznika UWB)
Rysunek 3. Proces rozpoczynania i kończenia sesji UWB
Konfiguracja kodu kraju UWB
Jak pokazano na rysunku 1, platforma UWB konfiguruje kod kraju UWB podczas inicjowania stosu UWB za pomocą polecenia UCI w przestrzeni dostawcy ANDROID_SET_COUNTRY_CODE
(GID=0xC
, OID=0x1
). Platforma UWB próbuje określić kod kraju UWB, korzystając z tych źródeł (wymienionych w kolejności priorytetu): Platforma UWB zatrzymuje się przy pierwszym źródle, w którym określono kod kraju.
- Zastąp kod kraju: kod kraju wymuszony za pomocą polecenia powłoki adb (testowanie lokalne lub zautomatyzowane).
- Telephony country code (Numer kierunkowy kraju): numer kierunkowy kraju pobrany z sieci komórkowej. Jeśli kilka kart SIM zwraca różne kody, wybrany kod kraju jest nieokreślony.
- Kod kraju Wi-Fi: kod kraju pobrany przez Wi-Fi (80211.ad).
- Ostatni znany kod kraju dla telefonii: ostatni znany kod kraju pobrany za pomocą sieci komórkowej. Jeśli kilka kart SIM zwraca różne kody, wybrany kod kraju jest niedeterministyczny.
- Kod kraju lokalizacji: kod kraju pobrany z
LocationManager
dostawcy lokalizacji łączonej. - Domyślny kod kraju OEM: kod kraju ustawiony przez producenta urządzenia.
Jeśli platforma UWB nie może określić kodu kraju UWB, wywołuje polecenie UCI ANDROID_SET_COUNTRY_CODE
z wartością DEFAULT_COUNTRY_CODE ("00")
i powiadamia aplikacje UWB, że stan stosu UWB to DISABLED
. Gdy platforma UWB będzie w stanie określić prawidłowy kod kraju, skonfiguruje nowy kod kraju za pomocą polecenia ANDROID_SET_COUNTRY_CODE
i powiadomi aplikacje UWB, że stos UWB jest READY
.
Jeśli w danym kraju nie można używać UWB ze względu na lokalne przepisy, kontroler UWB zwraca kod stanu STATUS_CODE_ANDROID_REGULATION_UWB_OFF
. Platforma UWB powiadamia następnie aplikacje UWB, że stan stosu UWB to DISABLED
.
Gdy użytkownik podróżuje do innego kraju, platforma UWB konfiguruje nowy kod kraju za pomocą ANDROID_SET_COUNTRY_CODE
polecenia UCI. W zależności od kodu stanu zwróconego przez kontroler UWB (na podstawie przepisów dotyczących UWB w nowym kraju) może to spowodować zmianę stanu stosu UWB.
Format poleceń zdefiniowany w specyfikacji FIRA UCI
Informacje o formacie pakietów sterujących UCI znajdziesz w sekcji 4.4.2 specyfikacji UCI.
Obsługa wersji interfejsu
Specyfikacja UCI umożliwia dostawcom UWB udostępnianie wersji stosu UCI zaimplementowanego na urządzeniu za pomocą poleceń UCI_GET_DEVICE_INFO_RSP
i UCI_GET_CAPS_INFO_RSP
. Platforma używa tych poleceń do pobierania wersji UCI urządzenia i odpowiedniego zmieniania jego działania.
Lista projektów CR obsługiwanych przez moduł UWB
Moduł UWB w wersji 330810000 obsługuje te wersje robocze CR dla FiRa 2.0:
- CR 287
- Wymagania dotyczące obsługi interfejsu kluczyka cyfrowego CCC w zakresie interfejsu SUS API i specyfikacji UCI
Interfejs Androida UCI (część dostawcy FiRa)
Specyfikacja UCI definiuje zestaw identyfikatorów grup (GID) i identyfikatorów kodów operacji (OID) dla wszystkich zdefiniowanych w niej wiadomości. Specyfikacja zawiera też zestaw identyfikatorów GID zarezerwowanych wyłącznie do użytku przez dostawców. Stos UWB AOSP używa niektórych z tych identyfikatorów GID i OID dostawców w przypadku poleceń specyficznych dla Androida, które nie są zdefiniowane w specyfikacji. Szczegółowe informacje znajdziesz w sekcji 8.4 specyfikacji UCI.
Te komunikaty dostawcy używane przez Androida są zdefiniowane w android.hardware.uwb.fira_android
pakiecie HAL.
Wersje interfejsu dostawcy
Dostawcy UWB muszą udostępniać wersję pakietu HAL android.hardware.uwb.fira_android
obsługiwanego na urządzeniu za pomocą IUwbChip.getSupportedAndroidUciVersion()
. Framework wykorzystuje te informacje o wersji do obsługi zgodności wstecznej.
Lista identyfikatorów GID i OID Androida
W tabeli poniżej znajdziesz identyfikatory GID i OID dla Androida. Identyfikatory GID 0xE
i 0xF
są zarezerwowane do użytku przez producentów OEM urządzeń z Androidem.
GID | OID | Definicja |
---|---|---|
ANDROID = 0xC |
ANDROID_GET_POWER_STATS = 0x0 |
Używane przez polecenie i odpowiedź do uzyskiwania statystyk związanych z zasilaniem UWB.
Obsługiwane tylko wtedy, gdy
UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY
ma wartość 1 . |
ANDROID_SET_COUNTRY_CODE = 0x1 |
Służy do ustawiania bieżącego kodu kraju, w którym obowiązują przepisy (określanego na podstawie karty SIM, Wi-Fi lub kodu zapisanego na stałe przez producenta OEM). Kod kraju jest wysyłany jako 2-bajtowa wartość odpowiadająca kodowi kraju w standardzie ISO-3166. Wartość |
|
ANDROID_RANGE_DIAGNOSTICS = 0x2 |
Używane przez powiadomienie do uzyskiwania statystyk diagnostycznych dotyczących pomiarów odległości UWB.
Obsługiwane tylko wtedy, gdy
UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS ma wartość
1 .
|
|
OEM = 0xE,0xF |
0x00 - 0x3F |
Zarezerwowany do użytku przez producenta OEM. |
Rozszerzenia dostawców w przypadku wiadomości zdefiniowanych w specyfikacji UCI
W tej sekcji opisano szczegóły rozszerzeń dostawców do wiadomości zdefiniowanych w specyfikacji UCI.
SESSION_SET_APP_CONFIG_[CMD|RSP] i SESSION_GET_APP_CONFIG_[CMD|RSP]
Oto wartości długości typu (TLV) zdefiniowane przez stos AOSP w części TLV zarezerwowanej dla dostawcy w APP_CONFIG
:
- GID: 0001b (grupa konfiguracji sesji UWB)
- OID: 000011b (
SESSION_SET_APP_CONFIG_CMD
) - OID: 000100b (
SESSION_GET_APP_CONFIG_CMD
)
W tabeli poniżej znajdziesz parametry wiadomości konfiguracyjnych sesji UWB.
Nazwa parametru | Długość (oktety) |
Tag (IDs) |
Wersja interfejsu dostawcy | Opis |
---|---|---|---|---|
NB_OF_RANGE_MEASUREMENTS |
1 | 0xE3 |
1 | Współczynnik przeplatania, jeśli parametr AOA_RESULT_REQ ma wartość 0xF0 . Obsługiwane tylko wtedy, gdy element UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING ma wartość 1 . |
NB_OF_AZIMUTH_MEASUREMENTS |
1 | 0xE4 |
1 | |
NB_OF_ELEVATION_MEASUREMENTS |
1 | 0xE5 |
1 | |
ENABLE_DIAGNOSTICS |
1 | 0xE8 |
2 | 1-bajtowa wartość umożliwiająca włączenie lub wyłączenie raportowania diagnostycznego.
Skonfiguruj ten parametr tylko wtedy, gdy Wartości:
|
DIAGRAMS_FRAME_REPORTS_FIELDS |
1 lub 4 | 0xE9 |
2 | 1-bajtowa lub 4-bajtowa maska bitowa do konfigurowania raportowania danych diagnostycznych. Ta maska bitowa ma 1 bajt w Androidzie 14 lub nowszym i 4 bajty w Androidzie 13 lub starszym. Skonfiguruj ten parametr tylko wtedy, gdy Definicje bitów:
|
CORE_GET_CAPS_INFO_RSP
Oto wartości TLV zdefiniowane przez stos AOSP w części TLV zarezerwowanej dla dostawcy w CAPS_INFO
:
- GID: 0000b (grupa podstawowa UWB)
- OID: 000011b (
CORE_GET_CAPS_INFO_RSP
)
W tabeli poniżej znajdziesz parametry wiadomości o możliwościach UWB.
Nazwa parametru | Długość (oktety) |
Tag (IDs) |
Wersja interfejsu dostawcy | Opis |
---|---|---|---|---|
SUPPORTED_POWER_STATS_QUERY |
1 | 0xC0 |
1 | 1-bajtowa wartość wskazująca obsługę zapytania o statystyki zasilania. Wartości:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | 1-bajtowa wartość wskazująca obsługę funkcji przeplatania anten. Wartości:
|
SUPPORTED_MIN_RANGING_INTERVAL_MS |
4 | 0xE4 |
2 | 4-bajtowa wartość wskazująca obsługiwany minimalny interwał pomiaru odległości w milisekundach. |
SUPPORTED_RANGE_DATA_NTF_CONFIG |
4 | 0xE5 |
2 | 4-bajtowa maska bitowa wskazująca obsługiwane wartości RANGE_DATA_NTF_CONFIG .
Bitmaska, w której każdy bit odpowiada wartościom używanym w RANGE_DATA_NTF_CONFIG w SET_APP_CFG_CMD . |
SUPPORTED_RSSI_REPORTING |
1 | 0xE6 |
2 | 1-bajtowa wartość wskazująca obsługę raportowania RSSI. Wartości:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | 1-bajtowa wartość wskazująca obsługę raportowania diagnostycznego. Wartości:
|
SUPPORTED_MIN_SLOT_DURATION_RSTU |
4 | 0xE8 |
2 | 4-bajtowa wartość wskazująca obsługiwany minimalny czas trwania przedziału w RSTU. |
SUPPORTED_MAX_RANGING_SESSION_NUMBER |
4 | 0xE9 |
2 | 4-bajtowa wartość wskazująca obsługiwaną maksymalną liczbę sesji pomiaru odległości FiRa. |
SUPPORTED_CHANNELS_AOA |
2 | 0xEA |
2 | 2-bajtowa maska bitowa wskazująca kanały obsługujące AoA. Każdy bit Wartości:
|
Kody stanu
Poniżej znajdziesz kody stanu w przestrzeni dostawcy. Są one zwracane w odpowiedziach UCI (np. SESSION_START_RSP
) przez podsystem UWB (UWBS).
Kod stanu | Wartość | Opis |
---|---|---|
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x52 |
Kod stanu zwracany, gdy bieżącej sesji pomiaru odległości nie można rozpocząć z powodu konfliktu z innymi sesjami pomiaru odległości CCC lub FiRa. |
STATUS_REGULATION_UWB_OFF |
0x53 |
Kod stanu zwracany, gdy bieżącej sesji pomiaru odległości nie można rozpocząć z powodu przepisów dotyczących technologii UWB. |
Kod przyczyny zmiany stanu w SESSION_STATUS_NTF
Poniżej znajdziesz kody przyczyn zmiany stanu zdefiniowane w przestrzeni dostawcy dla pola stanu zwracanego przez UWBS w SESSION_STATUS_NTF
. To powiadomienie jest wysyłane przez UWBS, gdy zmieni się stan sesji pomiaru odległości (np. z ACTIVE
na IDLE
).
Kod przyczyny zmiany stanu | Wartość | Opis |
---|---|---|
REASON_ERROR_INVALID_CHANNEL_WITH_AOA |
0x80 |
Stan sesji został zmieniony, ponieważ skonfigurowany kanał nie obsługuje pomiaru AoA. |
REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x81 |
Stan sesji został zmieniony z powodu konfliktu z innymi sesjami pomiarowymi CCC lub FiRa. |
REASON_REGULATION_UWB_OFF |
0x82 |
Stan sesji został zmieniony, ponieważ technologia UWB musi zostać wyłączona z powodu wymagań prawnych. |