UWB-HAL-Schnittstelle

Der AOSP Ultra-Wideband (UWB)-Stack verwendet die von FiRa definierte UCI-Schnittstelle als HAL-Oberfläche. Die HAL-Schnittstelle verwendet eine undurchsichtige Pipe ( IUwbChip::sendUciMessage() und IUwbClientCallback::onUciMessage() ), um Befehle, Antworten und Benachrichtigungen der UWB-Befehlsschnittstelle (UCI) zu senden und zu empfangen. Alle Android-UWB-Anbieter müssen alle in der FiRa-Spezifikation definierten Nachrichten unterstützen. Das UWB-Framework ist abwärtskompatibel und funktioniert mit jeder vom UWB-Anbieter auf dem Gerät implementierten UCI-Version. Da es sich beim AOSP-UWB-Framework um ein Modul handelt, kann es auch selektiv Unterstützung für genehmigte Änderungsanfragen (CRs) aus UCI-Spezifikationsentwürfen hinzufügen, die für wichtige FiRa-Standardversionen vorgesehen sind. Alle derart umgesetzten CR-Entwürfe können sich ändern.

Schnittstellendefinition

Die UWB-HAL-Schnittstelle wird mit stabilem AIDL definiert. Die Hauptschnittstelle verwendet das Paket android.hardware.uwb .

Im Folgenden sind die beiden Hauptschnittstellen im Paket android.hardware.uwb aufgeführt.

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);

}

HAL-Anruffluss vom UWB-Framework

Die folgenden Bilder veranschaulichen den Aufrufablauf vom UWB-Framework für die Initialisierung des UWB-Stacks, die Deinitialisierung des UWB-Stacks sowie die Start- und Stoppprozesse der UWB-Sitzung.

Initialisierung des UWB-Stacks

Abbildung 1. Aufrufablauf für die UWB-Stack-Initialisierung (UWB einschalten)

Deinitialisierung des UWB-Stacks

Abbildung 2. Aufrufablauf für die Deinitialisierung des UWB-Stacks (UWB ausschalten)

Starten und Stoppen der UWB-Sitzung

Abbildung 3. Start-/Stopp-Ablauf der UWB-Sitzung

Konfiguration des UWB-Ländercodes

Wie in Abbildung 1 dargestellt, konfiguriert das UWB-Framework den UWB-Ländercode während der UWB-Stack-Initialisierung mithilfe des Hersteller-Space-UCI-Befehls ANDROID_SET_COUNTRY_CODE (GID= 0xC , OID= 0x1 ). Das UWB-Framework versucht, den UWB-Ländercode anhand der folgenden Quellen zu ermitteln (in der Reihenfolge der Priorität aufgeführt). Das UWB-Framework stoppt bei der ersten Quelle, in der der Ländercode ermittelt wird.

  1. Ländercode überschreiben: Ländercode, der durch einen ADB-Shell-Befehl erzwungen wird (lokaler oder automatisierter Test).
  2. Telefon-Ländercode: Ländercode, der über das Mobilfunknetz abgerufen wird. Wenn es mehrere SIMs gibt, die unterschiedliche Codes zurückgeben, ist der gewählte Ländercode nicht deterministisch.
  3. Wi-Fi-Ländercode: Über Wi-Fi abgerufener Ländercode (80211.ad).
  4. Letzter bekannter Telefon-Ländercode: Letzter bekannter Ländercode, der über das Mobilfunknetz abgerufen wurde. Wenn es mehrere SIMs gibt, die unterschiedliche Codes zurückgeben, ist der gewählte Ländercode nicht deterministisch.
  5. Standort-Ländercode: Ländercode, der vom LocationManager Anbieter für zusammengeführte Standorte abgerufen wird.
  6. OEM-Standard-Ländercode: Vom Gerätehersteller festgelegter Ländercode.

Wenn das UWB-Framework keinen UWB-Ländercode ermitteln kann, ruft es den UCI-Befehl ANDROID_SET_COUNTRY_CODE mit dem Wert DEFAULT_COUNTRY_CODE ("00") auf und benachrichtigt UWB-Apps, dass der UWB-Stack-Status DISABLED ist. Wenn das UWB-Framework später einen gültigen Ländercode ermitteln kann, konfiguriert es den neuen Ländercode mit dem Befehl ANDROID_SET_COUNTRY_CODE und benachrichtigt UWB-Apps, dass der UWB-Stack READY ist.

Wenn UWB aufgrund lokaler Vorschriften in einem Land nicht verwendet werden kann, gibt der UWB-Controller den Statuscode STATUS_CODE_ANDROID_REGULATION_UWB_OFF zurück. Das UWB-Framework benachrichtigt dann UWB-Apps, dass der UWB-Stack-Status DISABLED ist.

Wenn ein Benutzer in ein anderes Land reist, konfiguriert das UWB-Framework mithilfe des UCI-Befehls ANDROID_SET_COUNTRY_CODE einen neuen Ländercode. Abhängig vom vom UWB-Controller zurückgegebenen Statuscode (basierend auf den UWB-Vorschriften im neuen Land) kann dies zu einer Änderung des UWB-Stack-Status führen.

Durch die FIRA UCI-Spezifikation definiertes Befehlsformat

Informationen zum Format von UCI-Kontrollpaketen finden Sie in Abschnitt 4.4.2 der UCI-Spezifikation .

Schnittstellenversionierung

Mit der UCI-Spezifikation können UWB-Anbieter die vom Gerät implementierte Version des UCI-Stacks mithilfe der Befehle UCI_GET_DEVICE_INFO_RSP und UCI_GET_CAPS_INFO_RSP offenlegen. Das Framework verwendet diese Befehle, um die UCI-Version des Geräts abzurufen und sein Verhalten entsprechend zu ändern.

Liste der vom UWB-Modul unterstützten CR-Entwürfe

Die folgenden CR-Entwürfe für FiRa 2.0 werden von der UWB- Modulversion Nr. 330810000 unterstützt:

Android UCI-Schnittstelle (FiRa-Anbieterteil)

Die UCI-Spezifikation definiert eine Reihe von Gruppenkennungen (GIDs) und Opcode-Kennungen (OIDs) für alle in der Spezifikation definierten Nachrichten. Die Spezifikation reserviert außerdem eine Reihe von GIDs, die ausschließlich der Verwendung durch Anbieter vorbehalten sind. Der AOSP-UWB-Stack verwendet einige dieser Hersteller-GIDs und OIDs für Android-spezifische Befehle, die nicht in der Spezifikation definiert sind. Einzelheiten finden Sie in Abschnitt 8.4 der UCI-Spezifikation .

Diese von Android verwendeten Herstellermeldungen sind im HAL-Paket android.hardware.uwb.fira_android definiert.

Versionierung der Anbieterschnittstelle

UWB-Anbieter müssen die Version des auf dem Gerät unterstützten HAL-Pakets android.hardware.uwb.fira_android über IUwbChip.getSupportedAndroidUciVersion() offenlegen. Das Framework verwendet diese Versionsinformationen, um die Abwärtskompatibilität zu handhaben.

Liste der Android-GIDs und OIDs

In der folgenden Tabelle sind die GIDs und OIDs für Android aufgeführt. Die GIDs 0xE und 0xF sind für die Verwendung durch Android-OEMs reserviert.

GID OID Definition
ANDROID = 0xC ANDROID_GET_POWER_STATS = 0x0 Wird vom Befehl und der Antwort verwendet, um Statistiken zur UWB-Leistung abzurufen. Wird nur unterstützt, wenn UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY auf 1 gesetzt ist.
ANDROID_SET_COUNTRY_CODE = 0x1

Wird verwendet, um den aktuellen gesetzlichen Ländercode festzulegen (ermittelt über SIM oder Wi-Fi oder vom OEM fest codiert). Der Ländercode wird als 2-Byte-Wert gesendet, der dem ISO-3166-Ländercode entspricht. Der Wert 00 gibt an, dass der Ländercode unbekannt ist.

ANDROID_RANGE_DIAGNOSTICS = 0x2 Wird von der Benachrichtigung verwendet, um UWB-Bereichsdiagnosestatistiken abzurufen. Wird nur unterstützt, wenn UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS auf 1 festgelegt ist.
OEM = 0xE,0xF 0x00 - 0x3F Reserviert für OEM-Nutzung.

Herstellererweiterungen für in der UCI-Spezifikation definierte Nachrichten

In diesem Abschnitt werden Einzelheiten zu Herstellererweiterungen für in der UCI-Spezifikation definierte Nachrichten beschrieben.

SESSION_SET_APP_CONFIG_[CMD|RSP] und SESSION_GET_APP_CONFIG_[CMD|RSP]

Im Folgenden sind die Typlängenwerte (TLVs) aufgeführt, die vom AOSP-Stack im vom Anbieter reservierten Teil der TLVs in APP_CONFIG definiert werden:

  • GID: 0001b (UWB-Sitzungskonfigurationsgruppe)
  • OID: 000011b ( SESSION_SET_APP_CONFIG_CMD )
  • OID: 000100b ( SESSION_GET_APP_CONFIG_CMD )

In der folgenden Tabelle sind die Parameter für UWB-Sitzungskonfigurationsnachrichten aufgeführt.

Parametername Länge
(Oktette)
Etikett
(IDs)
Version der Herstellerschnittstelle Beschreibung
NB_OF_RANGE_MEASUREMENTS 1 0xE3 1 Verschachtelungsverhältnis, wenn AOA_RESULT_REQ auf 0xF0 gesetzt ist. Wird nur unterstützt, wenn UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING auf 1 gesetzt ist.
NB_OF_AZIMUTH_MEASUREMENTS 1 0xE4 1
NB_OF_ELEVATION_MEASUREMENTS 1 0xE5 1
ENABLE_DIAGNOSTICS 1 0xE8 2

1-Byte-Wert zum Aktivieren oder Deaktivieren der Diagnoseberichterstattung. Konfigurieren Sie diesen Parameter nur, wenn CORE_GET_CAPS_INFO_RSP SUPPORTED_DIAGNOSTICS mit dem Wert 1 zurückgibt, was angibt, dass die Diagnoseberichtsfunktion unterstützt wird.

Werte:

  • 1 : Funktion aktiviert
  • 0 : Funktion deaktiviert

DIAGRAMS_FRAME_REPORTS_FIELDS 1 oder 4 0xE9 2

1-Byte- oder 4-Byte-Bitmaske zum Konfigurieren der Diagnoseberichte. Diese Bitmaske ist 1 Byte in Android 14 oder höher und 4 Bytes in Android 13 oder niedriger.

Konfigurieren Sie diesen Parameter nur, wenn CORE_GET_CAPS_INFO_RSP SUPPORTED_DIAGNOSTICS mit dem Wert 1 zurückgibt, was angibt, dass die Diagnoseberichtsfunktion unterstützt wird.

Bitdefinitionen:

  • b0 (0x01) : RSSI-Felder aktivieren
  • b1 (0x02) : AoA-Felder aktivieren
  • b2 (0x04) : CIR-Felder aktivieren

CORE_GET_CAPS_INFO_RSP

Im Folgenden sind die TLVs aufgeführt, die vom AOSP-Stack im vom Anbieter reservierten Teil der TLVs in CAPS_INFO definiert werden:

  • GID: 0000b (UWB-Kerngruppe)
  • OID: 000011b ( CORE_GET_CAPS_INFO_RSP )

In der folgenden Tabelle sind die Parameter für UWB-Fähigkeitsmeldungen aufgeführt.

Parametername Länge
(Oktette)
Etikett
(IDs)
Version der Herstellerschnittstelle Beschreibung
SUPPORTED_POWER_STATS_QUERY 1 0xC0 1

1-Byte-Wert, der die Unterstützung für die Abfrage von Leistungsstatistiken angibt.

Werte:

  • 1 : Funktion unterstützt
  • 0 : Funktion nicht unterstützt
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

1-Byte-Wert, der die Unterstützung für die Antennen-Interleaving-Funktion angibt.

Werte:

  • 1 : Funktion unterstützt
  • 0 : Funktion nicht unterstützt
SUPPORTED_MIN_RANGING_INTERVAL_MS 4 0xE4 2 4-Byte-Wert, der das unterstützte Mindestbereichsintervall in Millisekunden angibt.
SUPPORTED_RANGE_DATA_NTF_CONFIG 4 0xE5 2 4-Byte-Bitmaske, die die unterstützten RANGE_DATA_NTF_CONFIG Werte angibt. Bitmaske, wobei jedes Bit den in RANGE_DATA_NTF_CONFIG in SET_APP_CFG_CMD verwendeten Werten entspricht.
SUPPORTED_RSSI_REPORTING 1 0xE6 2

1-Byte-Wert, der die Unterstützung der RSSI-Berichterstellung angibt.

Werte:

  • 1 : Funktion unterstützt
  • 0 : Funktion nicht unterstützt
SUPPORTED_DIAGNOSTICS 1 0xE7 2

1-Byte-Wert, der die Unterstützung der Diagnoseberichterstattung angibt.

Werte:

  • 1 : Funktion unterstützt
  • 0 : Funktion nicht unterstützt
SUPPORTED_MIN_SLOT_DURATION_RSTU 4 0xE8 2 4-Byte-Wert, der die unterstützte minimale Slotdauer in RSTU angibt.
SUPPORTED_MAX_RANGING_SESSION_NUMBER 4 0xE9 2 4-Byte-Wert, der die unterstützte maximale Anzahl von FiRa-Ranging-Sitzungen angibt.
SUPPORTED_CHANNELS_AOA 2 0xEA 2

2-Byte-Bitmaske zur Angabe der Kanäle, die AoA unterstützen. Jede 1 in der Bitmaske entspricht einem bestimmten UWB-Kanal.

Werte:

  • 0x01 : Kanal 5 unterstützt
  • 0x02 : Kanal 6 wird unterstützt
  • 0x04 : Kanal 8 unterstützt
  • 0x08 : Kanal 9 wird unterstützt
  • 0x10 : Kanal 10 unterstützt
  • 0x20 : Kanal 12 unterstützt
  • 0x40 : Kanal 13 unterstützt
  • 0x80 : Kanal 14 unterstützt

Statuscodes

Im Folgenden sind die Statuscodes im Anbieterbereich aufgeführt. Diese werden in UCI-Antworten (z. B. SESSION_START_RSP ) vom UWB-Subsystem (UWBS) zurückgegeben.

Statuscode Wert Beschreibung
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x52

Der Statuscode wird zurückgegeben, wenn die aktuelle Ranging-Sitzung aufgrund eines Konflikts mit anderen CCC- oder FiRa-Ranging-Sitzungen nicht gestartet werden kann.

STATUS_REGULATION_UWB_OFF 0x53

Der Statuscode wird zurückgegeben, wenn die aktuelle Ranging-Sitzung aus regulatorischen Gründen für UWB nicht gestartet werden kann.

Code für den Statusänderungsgrund in SESSION_STATUS_NTF

Im Folgenden sind die Statusänderungs-Ursachencodes aufgeführt, die im Anbieterbereich für das von einem UWBS in SESSION_STATUS_NTF zurückgegebene Statusfeld definiert sind. Diese Benachrichtigung wird vom UWBS gesendet, wenn sich der Status einer Ranging-Sitzung ändert (z. B. von ACTIVE zu IDLE ).

Code für den Grund der Statusänderung Wert Beschreibung
REASON_ERROR_INVALID_CHANNEL_WITH_AOA 0x80

Der Sitzungsstatus hat sich geändert, da der konfigurierte Kanal das AoA-Ranging nicht unterstützt.

REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x81

Der Sitzungsstatus hat sich aufgrund eines Konflikts mit anderen CCC- oder FiRa-Ranging-Sitzungen geändert.

REASON_REGULATION_UWB_OFF 0x82

Der Sitzungsstatus hat sich geändert, da die UWB aus regulatorischen Gründen deaktiviert werden muss.