Interfaccia UWB HAL

L'AOSP Stack a banda ultralarga (UWB) utilizza Interfaccia UCI definita dalla FireEye della superficie HAL. L'interfaccia HAL utilizza un tubo opaco (IUwbChip::sendUciMessage() e IUwbClientCallback::onUciMessage()) per inviare e ricevere comandi, risposte e notifiche dell'interfaccia di comando UWB. Tutti i fornitori Android UWB devono supportare tutte le specifiche FiRa definite messaggi. Il framework UWB è compatibile con le versioni precedenti ed è compatibile con qualsiasi UCI implementata dal fornitore della tecnologia UWB sul dispositivo. Poiché la tecnologia AOSP UWB è un modulo, può anche aggiungere selettivamente il supporto per le richieste di modifica approvate (RP) da bozza di specifiche UCI destinate alle release degli standard FiRa principali. Tali le bozze di RP implementate sono soggette a modifiche.

Definizione dell'interfaccia

L'interfaccia UWB HAL viene definita utilizzando AIDL stabile. L'interfaccia principale utilizza il pacchetto android.hardware.uwb.

Di seguito sono riportate le due interfacce principali di android.hardware.uwb pacchetto.

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

}

Flusso di chiamate HAL dal framework UWB

Le seguenti immagini illustrano il flusso di chiamata dal framework UWB per Inizializzazione dello stack UWB, deinizializzazione dello stack UWB e avvio e avvio della sessione UWB di interruzione dei processi.

Inizializzazione dello stack UWB

Figura 1. Flusso di chiamata di inizializzazione dello stack UWB (opzione di attivazione/disattivazione UWB attivata)

Deinizializzazione dello stack UWB

Figura 2. Flusso di chiamata di deinizializzazione dello stack UWB (opzione di attivazione/disattivazione UWB disattivata)

Avvio e interruzione della sessione UWB

Figura 3. Flusso di avvio/interruzione della sessione UWB

Configurazione del codice paese UWB

Come mostrato nella Figura 1, il framework UWB configura il codice paese UWB durante l'inizializzazione dello stack UWB utilizzando il comando UCI Vendor-space ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1). Il framework UWB tenta di determinare il codice paese UWB utilizzando le fonti riportate di seguito (elencate con priorità dell'ordine). Il framework UWB si ferma alla prima sorgente, in cui il codice paese è determinato.

  1. Codice paese di override: codice paese forzato tramite un comando shell adb (test locali o automatici).
  2. Codice paese telefonia: codice paese recuperato tramite rete dati. Se sono presenti più SIM che restituiscono codici diversi, il codice paese non è deterministica.
  3. Codice paese Wi-Fi: il codice paese recuperato tramite Wi-Fi (80211.ad).
  4. Ultimo codice paese noto per la telefonia: ultimo codice paese noto recuperato tramite la rete cellulare. Se ci sono più SIM che restituiscono diversi codici paese, il codice paese scelto non è deterministico.
  5. Codice paese della località: il codice paese recuperato da LocationManager fusibile di provider di localizzazione.
  6. Codice paese predefinito OEM: il codice paese impostato dal produttore del dispositivo.

Se il framework UWB non è in grado di determinare un codice paese UWB, chiama la Comando UCI ANDROID_SET_COUNTRY_CODE con valore DEFAULT_COUNTRY_CODE ("00") e invia una notifica alle app UWB che lo stato dello stack UWB è DISABLED. In seguito, quando il framework UWB sarà in grado determinare un un codice paese valido, configura il nuovo codice paese utilizzando ANDROID_SET_COUNTRY_CODE esegue il comando e comunica alle app UWB che lo stack UWB è READY.

Se non è possibile usare la tecnologia UWB a causa delle normative locali di un paese, il controller UWB restituisce Codice di stato STATUS_CODE_ANDROID_REGULATION_UWB_OFF. Il framework UWB quindi comunica alle app UWB che lo stato dello stack UWB è DISABLED.

Quando un utente va in un altro paese, il framework UWB configura una nuova il codice paese utilizzando il comando UCI ANDROID_SET_COUNTRY_CODE. In base restituito dal controller UWB (in base alle normative UWB del nuovo paese), questo potrebbe comportare una modifica dello stato dello stack UWB.

Formato del comando definito dalla specifica FIRA UCI

Per il formato dei pacchetti di controllo UCI: sezione 4.4.2 dell'UCI la specifica del prodotto.

Controllo delle versioni dell'interfaccia

La specifica UCI consente ai fornitori UWB di esporre la versione dello stack UCI implementato dal dispositivo utilizzando UCI_GET_DEVICE_INFO_RSP Comandi UCI_GET_CAPS_INFO_RSP. Il framework utilizza questi comandi per recuperare Versione UCI del dispositivo e modificane il comportamento di conseguenza.

Elenco di bozze di RP supportate dal modulo UWB

Le seguenti bozze di RP per FiRa 2.0 sono supportate Modulo UWB versione n. 330810000:

Interfaccia UCI Android (parte del fornitore FireEye)

La specifica UCI definisce un insieme di identificatori di gruppo (GID) e codici operativi per tutti i messaggi definiti dalla specifica. Le specifiche riserva inoltre un insieme di GID riservati esclusivamente all'utilizzo da parte del fornitore. AOSP UWB utilizza alcuni di questi GID e OID dei fornitori per i comandi specifici di Android che non sono definiti nella specifica. Per maggiori dettagli, vedi sezione 8.4 dell'UCI la specifica del prodotto.

Questi messaggi dei fornitori utilizzati da Android sono definiti nei android.hardware.uwb.fira_android pacchetto HAL.

Controllo delle versioni dell'interfaccia del fornitore

I fornitori di UWB devono esporre la versione dell'android.hardware.uwb.fira_android Pacchetto HAL supportato sul dispositivo tramite IUwbChip.getSupportedAndroidUciVersion(). Il framework utilizza questo le informazioni sul controllo delle versioni per gestire la compatibilità con le versioni precedenti.

Elenco di GID e OID di Android

Nella tabella seguente sono elencati i GID e gli OID per Android. GID 0xE e 0xF sono riservati agli OEM Android.

GID OID (OID) Definizione
ANDROID = 0xC ANDROID_GET_POWER_STATS = 0x0 Utilizzato dal comando e dalla risposta per ottenere statistiche relative alla potenza UWB. Supportato solo se UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY è impostato su 1.
ANDROID_SET_COUNTRY_CODE = 0x1

Utilizzato per impostare l'attuale codice paese di regolamentazione (determinato utilizzando SIM o Wi-Fi oppure hardcoded dall'OEM). Il codice paese viene inviato come un valore di 2 byte corrispondente al codice paese ISO-3166. R Il valore 00 viene utilizzato per indicare che il codice paese è sconosciuto.

ANDROID_RANGE_DIAGNOSTICS = 0x2 Utilizzato nella notifica per ricevere statistiche di diagnostica relative alla tecnologia UWB. Supportato solo se Impostazione UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS impostata a 1.
OEM = 0xE,0xF 0x00 - 0x3F Riservato per l'uso OEM.

Messaggi definiti nelle specifiche UCI delle estensioni del fornitore

Questa sezione descrive i dettagli delle estensioni dei fornitori a UCI specifici dei messaggi.

SESSION_SET_APP_CONFIG_[CMD|RSP] e SESSION_GET_APP_CONFIG_[CMD|RSP]

Di seguito sono riportati i valori di lunghezza del tipo (TLV) definiti dallo stack AOSP nella parte dei TLV riservata al fornitore in APP_CONFIG:

  • GID: 0001b (gruppo di configurazione della sessione UWB)
  • OID: 000011b (SESSION_SET_APP_CONFIG_CMD)
  • OID: 000100b (SESSION_GET_APP_CONFIG_CMD)

Nella tabella seguente sono elencati i parametri per i messaggi di configurazione della sessione UWB.

Nome parametro Lunghezza
(ottetti)
Tag
(ID)
Versione dell'interfaccia del fornitore Descrizione
NB_OF_RANGE_MEASUREMENTS 1 0xE3 1 Rapporto di interfoliazione se è impostato AOA_RESULT_REQ a 0xF0. Supportato solo se UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING impostato su 1.
NB_OF_AZIMUTH_MEASUREMENTS 1 0xE4 1
NB_OF_ELEVATION_MEASUREMENTS 1 0xE5 1
ENABLE_DIAGNOSTICS 1 0xE8 2

Valore a 1 byte per attivare o disattivare i report di diagnostica. Configura questo parametro solo quando CORE_GET_CAPS_INFO_RSP restituisce SUPPORTED_DIAGNOSTICS con il valore 1 che indica che la funzionalità di generazione di report di diagnostica è supportati.

Valori:

  • 1: funzionalità attivata
  • 0: funzionalità disattivata

DIAGRAMS_FRAME_REPORTS_FIELDS 1 o 4 0xE9 2

Maschera di bit da 1 o 4 byte per configurare il reporting di diagnostica. Questo la maschera di bit è di 1 byte in Android 14 o versioni successive e 4 byte in Android 13 o versioni precedenti.

Configura questo parametro solo quando Resi a CORE_GET_CAPS_INFO_RSP SUPPORTED_DIAGNOSTICS con un valore di 1 che indica che la funzionalità di generazione di report di diagnostica è supportata.

Definizioni dei bit:

  • b0 (0x01): attiva i campi RSSI
  • b1 (0x02): attiva campi AoA
  • b2 (0x04): attiva campi CIR

CORE_GET_CAPS_INFO_RSP

Di seguito sono riportati i TLV definiti dallo stack AOSP nella zona riservata al fornitore parte dei TLV in CAPS_INFO:

  • GID: 0000b (gruppo di core UWB)
  • OID: 000011b (CORE_GET_CAPS_INFO_RSP)

Nella tabella seguente sono elencati i parametri per i messaggi della funzionalità UWB.

Nome parametro Lunghezza
(ottetti)
Tag
(ID)
Versione dell'interfaccia del fornitore Descrizione
SUPPORTED_POWER_STATS_QUERY 1 0xC0 1

Valore di 1 byte che indica il supporto per la query sulle statistiche sull'alimentazione.

Valori:

  • 1: funzionalità supportata
  • 0: funzionalità non supportata
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

Valore di 1 byte che indica il supporto per l'interlacciamento dell'antenna funzionalità.

Valori:

  • 1: funzionalità supportata
  • 0: funzionalità non supportata
SUPPORTED_MIN_RANGING_INTERVAL_MS 4 0xE4 2 Valore di 4 byte che indica l'intervallo di intervallo minimo supportato in millisecondi.
SUPPORTED_RANGE_DATA_NTF_CONFIG 4 0xE5 2 Maschera di bit da 4 byte che indica il livello di sicurezza RANGE_DATA_NTF_CONFIG valori. Maschera di bit in cui ogni bit corrisponde ai valori utilizzati in RANGE_DATA_NTF_CONFIG a SET_APP_CFG_CMD.
SUPPORTED_RSSI_REPORTING 1 0xE6 2

Valore di 1 byte che indica il supporto dei report RSSI.

Valori:

  • 1: funzionalità supportata
  • 0: funzionalità non supportata
SUPPORTED_DIAGNOSTICS 1 0xE7 2

Valore di 1 byte che indica il supporto dei report di diagnostica.

Valori:

  • 1: funzionalità supportata
  • 0: funzionalità non supportata
SUPPORTED_MIN_SLOT_DURATION_RSTU 4 0xE8 2 Valore di 4 byte che indica la durata minima dello slot supportata in RSTU.
SUPPORTED_MAX_RANGING_SESSION_NUMBER 4 0xE9 2 Valore di 4 byte che indica il numero massimo supportato di FiRa sessioni.
SUPPORTED_CHANNELS_AOA 2 0xEA 2

Maschera di bit da 2 byte per indicare i canali che supportano AoA. Ciascuna 1 nella maschera di bit corrisponde a un canale UWB specifico.

Valori:

  • 0x01: canale 5 supportato
  • 0x02: canale 6 supportato
  • 0x04: canale 8 supportato
  • 0x08: canale 9 supportato
  • 0x10: canale 10 supportato
  • 0x20: canale 12 supportato
  • 0x40: canale 13 supportato
  • 0x80: canale 14 supportato

Codici di stato

Di seguito sono riportati i codici di stato nello spazio del fornitore. Vengono restituiti in Risposte UCI (ad esempio SESSION_START_RSP) del sottosistema UWB (UWBS).

Codice di stato Valore Descrizione
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x52

Codice di stato restituito quando la sessione attuale non può essere è stata avviata a causa di un conflitto con altre sessioni CCC o FiRa che vanno.

STATUS_REGULATION_UWB_OFF 0x53

Codice di stato restituito quando la sessione attuale non può essere per motivi normativi UWB.

Codice del motivo della modifica dello stato in SESSION_STATUS_NTF

Di seguito sono riportati i codici dei motivi del cambiamento di stato definiti nello spazio del fornitore per il campo di stato restituito da UWBS in SESSION_STATUS_NTF. Questa notifica viene inviato dall'UWBS quando cambia lo stato di una sessione con intervallo (ad esempio, dalle ore ACTIVE alle ore IDLE).

Codice del motivo del cambiamento di stato Valore Descrizione
REASON_ERROR_INVALID_CHANNEL_WITH_AOA 0x80

Lo stato della sessione è cambiato perché il canale configurato non supportano il raggio AoA.

REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x81

Lo stato della sessione è cambiato a causa di un conflitto con un altro CCC o FiRa sessioni di machine learning.

REASON_REGULATION_UWB_OFF 0x82

Lo stato della sessione è cambiato perché la tecnologia UWB deve essere disabilitata a causa di un per motivi legati alle normative.