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.
Abbildung 1: Aufruffluss der UWB-Stack-Initialisierung (UWB-Ein/Aus-Schaltfläche)
Abbildung 2: Aufruffluss der Deinitialisierung von UWB-Stacks (UWB-Ein/Aus-Schaltfläche deaktiviert)
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.
- Ländercode überschreiben: Ländercode, der durch einen ADB-Shell-Befehl erzwungen wird (lokaler oder automatischer Test).
- 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.
- WLAN-Ländercode: Der über WLAN abgerufene Ländercode (80211.ad)
- 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.
- Ländercode des Standorts: von
LocationManager
abgerufener Ländercode Anbieter für kombinierte Standortbestimmung. - 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
|
|
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 Werte:
|
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
Bitdefinitionen:
|
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:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | 1 Byte-Wert, der die Unterstützung der Antennenverschränkung angibt . Werte:
|
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:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | 1-Byte-Wert, der für die Unterstützung von Diagnoseberichten steht. Werte:
|
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
Werte:
|
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. |