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 dla głównych wersji standardów FiRa. Wdrożone projekty CR mogą ulec zmianie.

Definicja interfejsu

Interfejs HAL UWB jest zdefiniowany przy użyciu stabilnego 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 platformy 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 wywołania dezaktywacji stosu UWB (wyłączenie przełącznika UWB)

Rozpoczynanie i zatrzymywanie sesji UWB

Rysunek 3. Przebieg rozpoczęcia i zakoń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 na podstawie 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 (Kod kraju w telefonii): kod 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 uśrednionej lokalizacji.
  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 technologia UWB nie może być używana z powodu lokalnych przepisów w danym kraju, 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ą polecenia ANDROID_SET_COUNTRY_CODE 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.

Wersjonowanie interfejsu

Specyfikacja UCI umożliwia dostawcom UWB udostępnianie wersji stosu UCI zaimplementowanego przez urządzenie za pomocą poleceń UCI_GET_DEVICE_INFO_RSPUCI_GET_CAPS_INFO_RSP. Framework 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 UCI Androida (część dostawcy FiRa)

Specyfikacja UCI definiuje zestaw identyfikatorów grup (GID) i identyfikatorów kodów operacji (OID) dla wszystkich zdefiniowanych w specyfikacji 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 dostawcy 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 na Androidzie

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 zasada UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY ma wartość 1.
ANDROID_SET_COUNTRY_CODE = 0x1

Służy do ustawiania bieżącego kodu kraju (określanego na podstawie karty SIM lub Wi-Fi albo zakodowanego 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 pomiaru odległości za pomocą technologii UWB. Obsługiwane tylko wtedy, gdy zasada UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS ma wartość 1.
OEM = 0xE,0xF 0x00 - 0x3F Zarezerwowany do użytku przez producentów OEM.

Rozszerzenia dostawców do 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 o 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): Aktywowanie pól RSSI
  • b1 (0x02): aktywowanie pól AoA
  • b2 (0x04): Aktywowanie pól 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 czasowego w jednostkach 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: obsługiwany kanał 13
  • 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 powodów regulacyjnych związanych z UWB.

Kod przyczyny zmiany stanu w ramach 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 zmienia 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 uległ zmianie z powodu konfliktu z innymi sesjami pomiaru odległości CCC lub FiRa.

REASON_REGULATION_UWB_OFF 0x82

Stan sesji został zmieniony, ponieważ technologia UWB musi zostać wyłączona z powodu wymagań prawnych.