Interfejs UWB HAL

AOSP stos ultraszerokopasmowy (UWB) korzysta z funkcji Interfejs UCI zdefiniowany w FiRa jak powierzchnia HAL. Interfejs HAL używa nieprzezroczystej kreski. (IUwbChip::sendUciMessage() i IUwbClientCallback::onUciMessage()) do wysłania oraz odbiór poleceń, odpowiedzi i powiadomień interfejsu UWB (UCI). Wszyscy dostawcy Androida UWB muszą obsługiwać wszystkie zdefiniowane specyfikacje FiRa wiadomości. Platforma UWB jest zgodna wstecznie i działa z każdym interfejsem UCI wersji zaimplementowanej na urządzeniu przez dostawcę UWB. Ponieważ AOSP UWB to moduł, ale może też dodawać do niej obsługę zatwierdzonych próśb o zmianę (CR) w wersji roboczej specyfikacji UCI kierowanych na główne wersje standardów FiRa. Dowolne takie wdrożone wersje robocze szablonów odpowiedzi mogą ulec zmianie.

Definicja interfejsu

Interfejs UWB HAL jest zdefiniowany za pomocą stabilnej wersji AIDL. Główny interfejs używa pakietu android.hardware.uwb.

Oto 2 główne interfejsy w android.hardware.uwb pakietu SDK.

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łania HAL z platformy UWB

Poniższe obrazy ilustrują przepływ wywołania z platformy UWB dla inicjowanie stosu UWB, deinicjowanie stosu UWB oraz rozpoczęcie sesji UWB i Zatrzymać procesy.

Inicjowanie stosu UWB

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

De inicjowanie stosu UWB

Rysunek 2. Przepływ wywołania deinicjowania stosu UWB (wyłączony przełącznik UWB)

Rozpoczęcie i zatrzymywanie sesji UWB

Rysunek 3. Proces uruchamiania/zatrzymywania sesji UWB

Konfiguracja kodu kraju UWB

Jak widać na ilustracji 1, platforma UWB konfiguruje kod kraju UWB. podczas inicjowania stosu UWB za pomocą polecenia UCI dostawcy ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1). Platforma UWB stara się Określ kod kraju UWB, korzystając z następujących źródeł (wymienionych w priorytecie) zamówienie). Struktura UWB kończy się na pierwszym źródle, w którym znajduje się kod kraju. określonych.

  1. Zastąp kod kraju: kod kraju wymuszony za pomocą polecenia powłoki adb (testy lokalne lub automatyczne).
  2. Kod kraju na potrzeby połączeń telefonicznych: kod kraju pobrany przez sieć komórkową. Jeśli Jest wiele kart SIM, które zwracają różne kody. Kod kraju jest wybrane niedeterministyczne.
  3. Kod kraju Wi-Fi: kod kraju pobrany przez Wi-Fi (80211.ad).
  4. Ostatni znany kod kraju usług telefonicznych: pobrano ostatni znany kod kraju przez sieć komórkową. Jeśli jest kilka kart SIM, które zwracają różne kod kraju jest niedeterministyczny.
  5. Kod kraju lokalizacji: kod kraju pobrany z LocationManager dostawca 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 metodę ANDROID_SET_COUNTRY_CODE polecenie UCI o wartości DEFAULT_COUNTRY_CODE ("00") i powiadamia aplikacje UWB, które stan stosu UWB to DISABLED. Później, gdy platforma UWB będzie w stanie określ prawidłowy kod kraju, konfiguruje on nowy kod kraju za pomocą funkcji ANDROID_SET_COUNTRY_CODE i powiadamia aplikacje UWB o stosie UWB jest READY.

Jeśli nie można użyć UWB ze względu na lokalne przepisy obowiązujące w danym kraju kontroler UWB zwraca STATUS_CODE_ANDROID_REGULATION_UWB_OFF kod stanu. Odpowiednia platforma UWB powiadamia aplikacje UWB, że stan stosu UWB to DISABLED.

Gdy użytkownik podróżuje do innego kraju, platforma UWB konfiguruje nowy kodu kraju za pomocą polecenia UCI ANDROID_SET_COUNTRY_CODE. W zależności od zwracany przez kontroler UWB (zgodnie z przepisami UWB w nowym kraju), może to spowodować zmianę stanu stosu UWB.

Zdefiniowany w specyfikacji FIRA UCI format polecenia

Format pakietów kontrolnych UCI: art. 4.4.2 ustawy UCI specyfikacji.

Obsługa wersji interfejsu

Specyfikacja UCI pozwala dostawcom UWB udostępniać wersję stosu UCI zaimplementowane przez urządzenie za pomocą interfejsów UCI_GET_DEVICE_INFO_RSP i Polecenia UCI_GET_CAPS_INFO_RSP. Platforma używa tych poleceń do pobierania wersję UCI urządzenia i odpowiednio zmień jej działanie.

Lista roboczych szablonów odpowiedzi obsługiwanych przez moduł UWB

Poniższe wersje robocze szablonów odpowiedzi dotyczących FiRa 2.0 są obsługiwane przez Moduł UWB w wersji 330810000:

Interfejs Androida UCI (część dostawcy FiRa)

Specyfikacja UCI definiuje zestaw identyfikatorów grup (GID) i kodu operacji (identyfikatory OID) wszystkich komunikatów zdefiniowanych w specyfikacji. Specyfikacja rezerwuje też zestaw identyfikatorów GID zarezerwowanych wyłącznie do użytku przez dostawcę. AOSP UWB korzysta z niektórych z tych identyfikatorów GID i OID dostawcy na potrzeby poleceń specyficznych dla Androida, nie są zdefiniowane w specyfikacji. Więcej informacji: art. 8.4 ustawy UCI specyfikacji.

Te komunikaty dostawców używane przez Androida są zdefiniowane w android.hardware.uwb.fira_android pakiet HAL.

Obsługa wersji interfejsu dostawcy

Dostawcy UWB muszą udostępniać wersję interfejsu android.hardware.uwb.fira_android pakiet HAL obsługiwany przez urządzenie przez IUwbChip.getSupportedAndroidUciVersion() Platforma używa tego informacje o obsłudze wersji, by zapewnić zgodność wsteczną.

Lista identyfikatorów GID i OID Androida

W tabeli poniżej znajdziesz identyfikatory GID i OID do Androida. Identyfikatory GID 0xE i 0xF są zarezerwowane dla OEM.

GID identyfikator OID Definicja
ANDROID = 0xC ANDROID_GET_POWER_STATS = 0x0 Używany przez polecenie i odpowiedź do uzyskiwania statystyk dotyczących zasilania UWB. Obsługiwane tylko wtedy, gdy UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY ma wartość 1.
ANDROID_SET_COUNTRY_CODE = 0x1

Służy do ustawiania aktualnego kodu kraju określonego w przepisach (określanego przy użyciu przez kartę SIM lub Wi-Fi albo zakodowaną na stałe przez producenta OEM). Zostanie wysłany kod kraju jako 2-bajtową wartość odpowiadającą kodowi kraju ISO-3166. O 00 jest używany do wskazania, że kod kraju jest nieznana.

ANDROID_RANGE_DIAGNOSTICS = 0x2 Używane przez powiadomienie do pobierania statystyk diagnostycznych zakresu UWB. Obsługiwane tylko wtedy, gdy Wartość UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS jest ustawiona do: 1.
OEM = 0xE,0xF 0x00 - 0x3F Zastrzeżone do użytku OEM.

Komunikaty dotyczące rozszerzeń dostawców do specyfikacji UCI

Ta sekcja zawiera szczegółowe informacje o rozszerzeniach dostawców w UCI komunikatów zdefiniowanych przez specyfikację.

SESSION_SET_APP_CONFIG_[CMD|RSP] i SESSION_GET_APP_CONFIG_[CMD|RSP]

Poniżej podano wartości typu długości (TLV) zdefiniowane przez stos AOSP w zarezerwowana przez dostawcę część TLV w regionie APP_CONFIG:

  • Identyfikator 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 komunikatów konfiguracji sesji UWB.

Nazwa parametru Długość
(oktety)
Tag
(identyfikatory)
Wersja interfejsu dostawcy Opis
NB_OF_RANGE_MEASUREMENTS 1 0xE3 1 Współczynnik przeplatania, jeśli ustawiono AOA_RESULT_REQ do: 0xF0. Obsługiwane tylko wtedy, gdy parametr UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING ustawiono na 1.
NB_OF_AZIMUTH_MEASUREMENTS 1 0xE4 1
NB_OF_ELEVATION_MEASUREMENTS 1 0xE5 1
ENABLE_DIAGNOSTICS 1 0xE8 2

Wartość 1-bajtowa umożliwiająca włączenie lub wyłączenie raportowania diagnostycznego. Konfiguruj ten parametr tylko wtedy, gdy CORE_GET_CAPS_INFO_RSP zwraca SUPPORTED_DIAGNOSTICS z wartością 1 oznacza, że funkcja raportowania diagnostyki to obsługiwane.

Wartości:

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

DIAGRAMS_FRAME_REPORTS_FIELDS 1 lub 4 0xE9 2

1- lub 4-bajtowa maska bitowa do konfigurowania raportów diagnostycznych. Ten w Androidzie 14 lub nowszym maska bitowa ma 1 bajt. 4 bajty w Androidzie 13 lub starszym.

Skonfiguruj ten parametr tylko wtedy, gdy CORE_GET_CAPS_INFO_RSP za możliwość zwrotu SUPPORTED_DIAGNOSTICS o wartości 1 oznacza, że funkcja raportowania diagnostyki jest obsługiwana.

Definicje bitowe:

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

CORE_GET_CAPS_INFO_RSP

Oto TLV zdefiniowane przez stos AOSP u dostawcy zarezerwowanego część TLV w CAPS_INFO:

  • GID: 0000b (grupa podstawowa UWB)
  • OID: 000011b (CORE_GET_CAPS_INFO_RSP)

W tabeli poniżej znajdziesz parametry komunikatów o możliwościach UWB.

Nazwa parametru Długość
(oktety)
Tag
(identyfikatory)
Wersja interfejsu dostawcy Opis
SUPPORTED_POWER_STATS_QUERY 1 0xC0 1

Wartość 1 bajtowa wskazująca obsługę zapytań o statystyki zasilania.

Wartości:

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

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

Wartości:

  • 1: obsługiwana funkcja
  • 0: funkcja nie jest obsługiwana
SUPPORTED_MIN_RANGING_INTERVAL_MS 4 0xE4 2 Wartość 4-bajtowa wskazująca obsługiwany minimalny odstęp zakresu w milisekund.
SUPPORTED_RANGE_DATA_NTF_CONFIG 4 0xE5 2 4-bajtowa maska bitowa wskazująca RANGE_DATA_NTF_CONFIG wartości. Maska bitowa, 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 na obsługę raportowania RSSI.

Wartości:

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

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

Wartości:

  • 1: obsługiwana funkcja
  • 0: funkcja nie jest obsługiwana
SUPPORTED_MIN_SLOT_DURATION_RSTU 4 0xE8 2 Wartość 4-bajtowa wskazująca obsługiwany minimalny czas trwania przedziału w RSTU.
SUPPORTED_MAX_RANGING_SESSION_NUMBER 4 0xE9 2 Wartość 4-bajtowa wskazująca maksymalną obsługiwaną maksymalną liczbę zakresów FiRa sesji.
SUPPORTED_CHANNELS_AOA 2 0xEA 2

2-bajtowa maska bitowa do wskazania kanałów, które obsługują AoA. Każdy 1 w masce bitowej odpowiada konkretnemu kanałowi UWB.

Wartości:

  • 0x01: obsługiwany 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 podano kody stanu w przestrzeni dostawców. Są one zwracane w Odpowiedzi UCI (np. SESSION_START_RSP) przez podsystem UWB (UWBS).

Kod stanu Wartość Opis
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x52

Kod stanu zwrócony, gdy nie można usunąć bieżącej sesji z zakresem rozpoczęto z powodu konfliktu z innymi sesjami CCC lub FiRa.

STATUS_REGULATION_UWB_OFF 0x53

Kod stanu zwrócony, gdy nie można usunąć bieżącej sesji z zakresem z powodu przepisów UWB.

Kod przyczyny zmiany stanu w: SESSION_STATUS_NTF

Poniżej podano kody przyczyn zmiany stanu zdefiniowane w obszarze dostawców dla w polu stanu zwróconym przez UWBS w SESSION_STATUS_NTF. To powiadomienie jest wysyłana przez UWBS, gdy zmieni się stan sesji z określeniem zakresu (na przykład od ACTIVE do IDLE).

Kod przyczyny zmiany stanu Wartość Opis
REASON_ERROR_INVALID_CHANNEL_WITH_AOA 0x80

Stan sesji zmienił się, ponieważ skonfigurowany kanał nie obsługują zakres AoA.

REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x81

Stan sesji zmienił się z powodu konfliktu z innymi komponentami CCC lub FiRa przez długi czas.

REASON_REGULATION_UWB_OFF 0x82

Stan sesji został zmieniony, ponieważ należy wyłączyć UWB z powodu z przyczyn prawnych.