UWB-HAL-Schnittstelle

Der AOSP Ultrabreitband-Stack (UWB) verwendet die Von FiRa definierte UCI-Schnittstelle wie die HAL-Oberfläche. Die HAL-Schnittstelle verwendet eine intransparente Pipe (IUwbChip::sendUciMessage() und IUwbClientCallback::onUciMessage()) zum Senden und UCI-Befehle, -Antworten und -Benachrichtigungen empfangen. Alle Android-UWB-Anbieter müssen alle definierten FiRa-Spezifikationen unterstützen. Nachrichten. Das UWB-Framework ist abwärtskompatibel und funktioniert mit jeder UCI Version, die vom UWB-Anbieter auf dem Gerät implementiert wurde. Da das AOSP UWB Framework ist ein Modul, kann auch selektiv Unterstützung für genehmigte Änderungsanfragen von UCI-Spezifikationen für wichtige FiRa-Standardveröffentlichungen entwerfen Jegliche Die implementierten Antwortvorlagen können jederzeit geändert werden.

Schnittstellendefinition

Die UWB-HAL-Schnittstelle wird mithilfe von stable AIDL. Auf der Hauptschnittstelle wird das Paket android.hardware.uwb verwendet.

Dies sind die beiden Hauptschnittstellen in android.hardware.uwb Paket.

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-Aufruffluss aus UWB-Framework

Die folgenden Bilder veranschaulichen den Aufruffluss aus dem UWB-Framework für die Die Initialisierung des UWB-Stacks, die Deinitialisierung des UWB-Stacks und der Start von UWB-Sitzungen Prozesse zu stoppen.

Initialisierung des UWB-Stacks

Abbildung 1: Aufruffluss der UWB-Stack-Initialisierung (UWB-Ein/Aus-Schaltfläche)

Deinitialisierung von UWB-Stacks

Abbildung 2: Aufruffluss der Deinitialisierung von UWB-Stacks (UWB-Ein/Aus-Schaltfläche deaktiviert)

UWB-Sitzung starten und beenden

Abbildung 3: Start-/Stopp-Fluss für UWB-Sitzung

UWB-Ländercodekonfiguration

Wie in Abbildung 1 dargestellt, konfiguriert das UWB-Framework den UWB-Ländercode. während der Initialisierung des UWB-Stacks mit dem UCI-Befehl "vendor-space" ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1). Das UWB-Framework versucht, den UWB-Ländercode anhand folgender, nach Priorität geordneter Quellen ermitteln: Reihenfolge). Das UWB-Framework stoppt an der ersten Quelle, in der sich der Ländercode befindet. bestimmt.

  1. Ländercode überschreiben: Ländercode, der durch einen ADB-Shell-Befehl erzwungen wird (lokaler oder automatischer Test).
  2. Ländercode für Telefonie: Der Ländercode wurde über das Mobilfunknetz abgerufen. Wenn Es gibt mehrere SIM-Karten, die verschiedene Codes zurückgeben, den Ländercode. ist nicht deterministisch.
  3. WLAN-Ländercode: Der über WLAN abgerufene Ländercode (80211.ad)
  4. Letzter bekannter Ländercode der Telefonie: Letzter bekannter Ländercode abgerufen über Mobilfunk. Wenn es mehrere SIM-Karten gibt, ist der gewählte Ländercode nicht deterministisch.
  5. Ländercode des Standorts: von LocationManager abgerufener Ländercode Anbieter für kombinierte Standortbestimmung.
  6. Standard-Ländercode des OEMs: Der vom Gerätehersteller festgelegte Ländercode.

Wenn das UWB-Framework keinen UWB-Ländercode ermitteln kann, wird die Methode UCI-Befehl ANDROID_SET_COUNTRY_CODE mit dem Wert von DEFAULT_COUNTRY_CODE ("00") und benachrichtigt UWB-Apps, die der UWB-Stackstatus ist DISABLED. Später, wenn das UWB-Framework bestimmen gültigen Ländercode haben, wird der neue Ländercode mithilfe der Funktion ANDROID_SET_COUNTRY_CODE führt einen Befehl aus und benachrichtigt UWB-Apps, dass der UWB-Stack ist READY.

UWB kann nicht verwendet werden aufgrund lokaler Vorschriften in einem Land, gibt der UWB-Controller den STATUS_CODE_ANDROID_REGULATION_UWB_OFF-Statuscode. Das UWB-Framework informiert UWB-Apps darüber, dass der UWB-Stack-Status DISABLED ist.

Wenn ein Nutzer in ein anderes Land reist, konfiguriert das UWB-Framework eine neue mit dem UCI-Befehl ANDROID_SET_COUNTRY_CODE. Je nach Statuscode, der vom UWB-Controller zurückgegeben wird (basierend auf den UWB-Bestimmungen im neues Land), könnte dies zu einer Änderung des UWB-Stackstatus führen.

Durch die FIRA UCI-Spezifikation definiertes Befehlsformat

Informationen zum Format von UCI-Kontrollpaketen findest du unter Abschnitt 4.4.2 der UCI Spezifikation.

Versionsverwaltung der Benutzeroberfläche

Mit der UCI-Spezifikation können UWB-Anbieter die Version des UCI-Stacks veröffentlichen vom Gerät mithilfe von UCI_GET_DEVICE_INFO_RSP und UCI_GET_CAPS_INFO_RSP-Befehle verwenden. Das Framework ruft mithilfe dieser Befehle UCI-Version des Geräts und passen Sie sein Verhalten entsprechend an.

Liste der vom UWB-Modul unterstützten Antwortvorlagenentwürfe

Die folgenden Antwortvorlagen für FiRa 2.0 werden von UWB-Modul Version 330810000:

Android UCI-Schnittstelle (FiRa-Anbieterteil)

Die UCI-Spezifikation definiert einen Satz von Gruppenkennungen (GIDs) und Opcode IDs (OIDs) für alle durch die Spezifikation definierten Nachrichten. Die Spezifikation Außerdem wird eine Reihe von GIDs reserviert, die ausschließlich für die Nutzung durch Anbieter vorgesehen sind. AOSP UWB einige dieser Anbieter-GIDs und OIDs für Android-spezifische Befehle, nicht in der Spezifikation definiert sind. Weitere Informationen finden Sie unter Abschnitt 8.4 der UCI Spezifikation.

Diese von Android verwendeten Anbietermitteilungen sind in den android.hardware.uwb.fira_android HAL-Paket.

Versionsverwaltung der Benutzeroberfläche für Anbieter

UWB-Anbieter müssen die Version der android.hardware.uwb.fira_android zur Verfügung stellen. HAL-Paket auf dem Gerät unterstützt durch IUwbChip.getSupportedAndroidUciVersion(). Das Framework nutzt diese für die Abwärtskompatibilität.

Liste der Android-GIDs und OIDs

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

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 ist auf 1 festgelegt.
ANDROID_SET_COUNTRY_CODE = 0x1

Wird verwendet, um den aktuellen Ländercode festzulegen (ermittelt anhand von SIM, WLAN oder vom OEM hartcodiert). Der Ländercode wurde gesendet als 2-Byte-Wert entsprechend dem ISO-3166-Ländercode. A 00 wird verwendet, um anzuzeigen, dass der Ländercode ist unbekannt.

ANDROID_RANGE_DIAGNOSTICS = 0x2 Wird von der Benachrichtigung verwendet, um Diagnosestatistiken zur UWB-Entfernung zu erhalten. Wird nur unterstützt, wenn UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS ist festgelegt an 1.
OEM = 0xE,0xF 0x00 - 0x3F Für die Verwendung durch den OEM reserviert.

Anbietererweiterungen zu definierten Nachrichten der UCI-Spezifikation

In diesem Abschnitt werden Details zu Anbietererweiterungen für UCI beschrieben. spezifikationsdefinierte Nachrichten.

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

Im Folgenden sind die vom AOSP-Stack definierten Typlängenwerte (Type Length-Werte, TLVs) im Der Anbieter hat einen Teil der TLVs in APP_CONFIG reserviert:

  • GID: 0001b (Konfigurationsgruppe für UWB-Sitzungen)
  • OID: 000011b (SESSION_SET_APP_CONFIG_CMD)
  • OID: 000100b (SESSION_GET_APP_CONFIG_CMD)

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

Parametername Länge
(Oktette)
Tag
(IDs)
Version der Benutzeroberfläche des Anbieters Beschreibung
NB_OF_RANGE_MEASUREMENTS 1 0xE3 1 Verschränkungsverhältnis, wenn AOA_RESULT_REQ festgelegt ist an 0xF0. Wird nur unterstützt, wenn der UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING auf 1 festgelegt.
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 von Diagnoseberichten. Konfigurieren Sie diesen Parameter nur, wenn CORE_GET_CAPS_INFO_RSP gibt SUPPORTED_DIAGNOSTICS mit dem Wert zurück 1 gibt an, dass die Funktion für Diagnoseberichte unterstützt.

Werte:

  • 1: Funktion aktiviert
  • 0: Funktion deaktiviert

DIAGRAMS_FRAME_REPORTS_FIELDS 1 oder 4 0xE9 2

1-Byte- oder 4-Byte-Bitmaske zum Konfigurieren von Diagnoseberichten. Dieses Bitmaske ist in Android 14 oder höher 1 Byte 4 Byte in Android 13 oder niedriger.

Konfigurieren Sie diesen Parameter nur, wenn das Ereignis CORE_GET_CAPS_INFO_RSP Rückgaberecht SUPPORTED_DIAGNOSTICS mit dem Wert 1 gibt an, dass die Funktion für Diagnoseberichte unterstützt wird.

Bitdefinitionen:

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

CORE_GET_CAPS_INFO_RSP

Im Folgenden sind die vom AOSP-Stack im reservierten Anbieter definierten TLVs angegeben. Teil der TLVs in CAPS_INFO:

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

In der folgenden Tabelle sind die Parameter für Meldungen zur UWB-Funktion aufgeführt.

Parametername Länge
(Oktette)
Tag
(IDs)
Version der Benutzeroberfläche des Anbieters Beschreibung
SUPPORTED_POWER_STATS_QUERY 1 0xC0 1

1-Byte-Wert, der angibt, dass die Abfrage für Leistungsstatistiken unterstützt wird.

Werte:

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

1 Byte-Wert, der die Unterstützung der Antennenverschränkung angibt .

Werte:

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

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

Werte:

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

1-Byte-Wert, der für die Unterstützung von Diagnoseberichten steht.

Werte:

  • 1: Unterstützte Funktion
  • 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-Bereichswerten angibt Sitzungen.
SUPPORTED_CHANNELS_AOA 2 0xEA 2

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

Werte:

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

Status codes

Im Folgenden finden Sie die Statuscodes im Anbieterbereich. Diese werden in UCI-Antworten (z. B. SESSION_START_RSP) vom UWB-Subsystem (UWBS).

Status code Wert Beschreibung
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x52

Statuscode, der zurückgegeben wird, wenn die aktuelle Auswahlsitzung nicht möglich ist die aufgrund eines Konflikts mit anderen CCC- oder FiRa-Ranging-Sitzungen gestartet wurden.

STATUS_REGULATION_UWB_OFF 0x53

Statuscode, der zurückgegeben wird, wenn die aktuelle Auswahlsitzung nicht möglich ist die aus regulatorischen Gründen für UWB gestartet wurden.

Code für den Grund für die Statusänderung in SESSION_STATUS_NTF

Im Folgenden finden Sie die Ursachencodes für Statusänderungen, die im Anbieterbereich für Das von einem UWBS in SESSION_STATUS_NTF zurückgegebene Statusfeld. Diese Benachrichtigung wird vom UPSP gesendet, wenn sich der Status einer Bereichssitzung ändert (zum Beispiel von ACTIVE bis IDLE).

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

Der Sitzungsstatus wurde geändert, da der konfigurierte Kanal unterstützen AoA-Reichweite.

REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x81

Der Sitzungsstatus wurde aufgrund eines Konflikts mit anderen CCC- oder FiRa-Elementen geändert zwischen verschiedenen Einheiten.

REASON_REGULATION_UWB_OFF 0x82

Der Sitzungsstatus wurde geändert, da UWB aufgrund eines aus regulatorischen Gründen.