Interfejs HAL UWB

Stos ultraszerokopasmowy (UWB) w AOSP korzysta z interfejsu UCI zdefiniowanego przez FiRa jako warstwy HAL. Interfejs HAL używa nieprzezroczystego potoku (IUwbChip::sendUciMessage()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.

Inicjowanie stosu UWB

Rysunek 1. Przebieg wywołania inicjowania stosu UWB (przełącznik UWB włączony)

Deinicjalizacja stosu UWB

Rysunek 2. Przebieg rozmowy dotyczący dezaktywacji stosu UWB (wyłączenie przełącznika UWB)

Rozpoczynanie i zatrzymywanie sesji 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.

  1. Zastąp kod kraju: kod kraju wymuszony za pomocą polecenia powłoki adb (testowanie lokalne lub zautomatyzowane).
  2. 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.
  3. Kod kraju Wi-Fi: kod kraju pobrany przez Wi-Fi (80211.ad).
  4. 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.
  5. Kod kraju lokalizacji: kod kraju pobrany z LocationManager dostawcy lokalizacji łączonej.
  6. 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_RSPUCI_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:

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_androidpakiecie 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 0xE0xF 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ść 00 oznacza, że kod kraju jest nieznany.

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 CORE_GET_CAPS_INFO_RSP zwraca SUPPORTED_DIAGNOSTICS z wartością 1, co oznacza, że funkcja raportowania diagnostyki jest obsługiwana.

Wartości:

  • 1: funkcja włączona
  • 0: funkcja wyłączona

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 CORE_GET_CAPS_INFO_RSP zwraca SUPPORTED_DIAGNOSTICS o wartości 1, co oznacza, że funkcja raportowania diagnostyki jest obsługiwana.

Definicje bitów:

  • b0 (0x01): Aktywuj pola RSSI
  • b1 (0x02): aktywowanie pól AoA
  • b2 (0x04): Aktywuj pola CIR

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:

  • 1: funkcja obsługiwana
  • 0: funkcja nie jest obsługiwana
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

1-bajtowa wartość wskazująca obsługę funkcji przeplatania anten.

Wartości:

  • 1: funkcja obsługiwana
  • 0: funkcja nie jest obsługiwana
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_CONFIGSET_APP_CFG_CMD.
SUPPORTED_RSSI_REPORTING 1 0xE6 2

1-bajtowa wartość wskazująca obsługę raportowania RSSI.

Wartości:

  • 1: funkcja obsługiwana
  • 0: funkcja nie jest obsługiwana
SUPPORTED_DIAGNOSTICS 1 0xE7 2

1-bajtowa wartość wskazująca obsługę raportowania diagnostycznego.

Wartości:

  • 1: funkcja obsługiwana
  • 0: funkcja nie jest obsługiwana
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 1 w masce bitowej odpowiada konkretnemu kanałowi UWB.

Wartości:

  • 0x01: obsługiwany jest kanał 5
  • 0x02: obsługiwany kanał 6
  • 0x04: obsługiwany kanał 8
  • 0x08: obsługiwany kanał 9
  • 0x10: obsługiwany kanał 10
  • 0x20: obsługiwany kanał 12
  • 0x40: kanał 13 jest obsługiwany
  • 0x80: obsługiwany kanał 14

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.