AOSP
Pila de banda ultraancha (UWB)
usa el
Interfaz de UCI definida por FiRa
que la superficie de HAL. La interfaz de la HAL usa una canalización opaca
(IUwbChip::sendUciMessage()
y IUwbClientCallback::onUciMessage()
) para enviar
y recibir comandos, respuestas y notificaciones de la interfaz de comando de UWB (UCI).
Todos los proveedores de UWB de Android deben admitir todas las especificaciones de FiRa definidas
mensajes nuevos. El framework UWB es retrocompatible y funciona con cualquier UCI
que implementó el proveedor de UWB en el dispositivo. Debido a que la UWB del AOSP
framework es un módulo,
también puede agregar compatibilidad de forma selectiva para las solicitudes de cambio (CR) aprobadas desde
borradores de especificaciones de UCI orientadas a lanzamientos de los principales estándares de FiRa. Cualquiera
los borradores de CR que se implementen están sujetos a cambios.
Definición de interfaz
La interfaz de la HAL de UWB se define usando
AIDL estable.
La interfaz principal usa el paquete android.hardware.uwb
.
Las siguientes son las dos interfaces principales de android.hardware.uwb
.
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);
}
Flujo de llamadas de HAL desde el framework de UWB
Las siguientes imágenes ilustran el flujo de llamadas del marco de trabajo UWB para el Inicialización de la pila de UWB, inicialización de la pila de UWB e inicio y detener procesos.
Figura 1: Flujo de llamadas de inicialización de la pila de UWB (activación de UWB)
Figura 2: Flujo de llamada de desinicialización de la pila de UWB (desactivado por UWB)
Figura 3: Flujo de inicio/detención de la sesión de UWB
Configuración del código de país de la UWB
Como se muestra en la Figura 1, el framework de UWB configura el código de país de UWB.
durante la inicialización de la pila UWB con el comando UCI del espacio de proveedor
ANDROID_SET_COUNTRY_CODE
(GID=0xC
, OID=0x1
). El framework de UWB intenta
determina el código de país de la UWB usando las siguientes fuentes (enumeradas en la prioridad
por orden). El framework de UWB se detiene en la primera fuente en la que se encuentra el código de país.
determinado.
- Anular el código de país: Código de país forzado a través de un comando shell adb (pruebas locales o automatizadas).
- Código de país de telefonía: Es el código de país que se recupera con datos móviles. Si hay varias tarjetas SIM que muestran diferentes códigos, el código de país elegido no es determinista.
- Código de país de Wi-Fi: Código de país recuperado a través de Wi-Fi (80211.ad).
- Último código de país de telefonía conocido: Último código de país conocido recuperado a través de una red móvil. Si hay varias tarjetas SIM que muestran diferentes , el código de país elegido no es determinista.
- Código de país de la ubicación: Código de país recuperado de
LocationManager
proveedor de ubicación combinada. - Código de país predeterminado de OEM: Código de país que estableció el fabricante del dispositivo.
Si el framework de UWB no puede determinar un código de país de UWB, llama al
Comando de UCI ANDROID_SET_COUNTRY_CODE
con un valor de
DEFAULT_COUNTRY_CODE ("00")
y notifica a las apps de UWB que
el estado de la pila de UWB es DISABLED
. Más adelante, cuando el framework UWB pueda
determinar un
un código de país válido, configura el nuevo código de país con el
ANDROID_SET_COUNTRY_CODE
y notifica a las apps de UWB que la pila de UWB
es READY
.
Si no se puede usar UWB, haz lo siguiente:
debido a las reglamentaciones locales de un país, el controlador de UWB devuelve el
Código de estado STATUS_CODE_ANDROID_REGULATION_UWB_OFF
. El framework de UWB
notifica a las apps de UWB que el estado de la pila de UWB es DISABLED
.
Cuando un usuario viaja a otro país, el framework de UWB configura una nueva
código de país con el comando UCI ANDROID_SET_COUNTRY_CODE
Según el
código de estado devuelto por el controlador de UWB (según las reglamentaciones de UWB de la
un nuevo país), esto podría provocar un cambio en el estado de la pila de UWB.
Formato de comando definido por especificación FIRA UCI
Para conocer el formato de los paquetes de control de UCI, consulta artículo 4.4.2 de la UCI especificación.
Control de versiones de la interfaz
La especificación de UCI permite a los proveedores de UWB exponer la versión de la pila de UCI
implementado por el dispositivo con UCI_GET_DEVICE_INFO_RSP
y
Comandos UCI_GET_CAPS_INFO_RSP
. El framework usa estos comandos para recuperar
UCI del dispositivo y cambiar su comportamiento según corresponda
Lista de CR en borrador admitidas por el módulo de UWB
Los siguientes borradores de CR para FiRa 2.0 son compatibles con Módulo UWB versión #330810000:
- CR 287
- Compatibilidad con las especificaciones de la API de SUS y UCI para la interfaz de clave digital de CCC Requisitos
Interfaz de UCI de Android (parte del proveedor de FiRa)
La especificación de UCI define un conjunto de identificadores de grupo (GID) y código de operación identificadores (OID) para todos los mensajes definidos por la especificación. La especificación también reserva un conjunto de GID reservados exclusivamente para que lo utilice el proveedor. UWB del AOSP usa algunos de estos GID y OID de proveedores para comandos específicos de Android que no están definidos en la especificación. Para obtener más información, consulta artículo 8.4 de la UCI especificación.
Estos mensajes de proveedores que usa Android se definen en el
Paquete de HAL de android.hardware.uwb.fira_android
.
Control de versiones de la interfaz del proveedor
Los proveedores de UWB deben exponer la versión de android.hardware.uwb.fira_android
Se admite el paquete HAL del dispositivo mediante
IUwbChip.getSupportedAndroidUciVersion()
El framework usa este
la información sobre el control de versiones
para administrar la retrocompatibilidad.
Lista de GID y OID de Android
En la siguiente tabla, se indican los GID y OID de Android. GID 0xE
y 0xF
están reservados para que las usen los OEM de Android.
GID | OID | Definición |
---|---|---|
ANDROID = 0xC |
ANDROID_GET_POWER_STATS = 0x0 |
El comando y la respuesta lo usan para obtener estadísticas relacionadas con la energía de UWB.
Se admite solo si
UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY
se estableció en 1 . |
ANDROID_SET_COUNTRY_CODE = 0x1 |
Se usa para establecer el código regulatorio de país actual (se determina mediante
SIM o Wi-Fi, o codificadas por el OEM). Se envía el código de país
como un valor de 2 bytes correspondiente al código de país ISO-3166. R
de |
|
ANDROID_RANGE_DIAGNOSTICS = 0x2 |
Se usa en la notificación para obtener estadísticas de diagnóstico del rango de UWB.
Se admite solo si
Se estableció UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS
a 1 .
|
|
OEM = 0xE,0xF |
0x00 - 0x3F |
Reservado para uso del OEM. |
Extensiones del proveedor para mensajes definidos por la especificación de UCI
En esta sección, se describen los detalles de las extensiones de proveedores para UCI mensajes definidos por la especificación.
SESSION_SET_APP_CONFIG_[CMD|RSP] y SESSION_GET_APP_CONFIG_[CMD|RSP]
Los siguientes son los valores de longitud de tipo (TLV) definidos por la pila AOSP en la
el proveedor reservó parte de los TLV en APP_CONFIG
:
- GID: 0001b (grupo de configuración de la sesión de UWB)
- OID: 000011b (
SESSION_SET_APP_CONFIG_CMD
) - OID: 000100b (
SESSION_GET_APP_CONFIG_CMD
)
En la siguiente tabla, se indican los parámetros para los mensajes de configuración de la sesión de UWB.
Nombre del parámetro | Longitud (octetos) |
Etiqueta (IDs) |
Versión de la interfaz del proveedor | Descripción |
---|---|---|---|---|
NB_OF_RANGE_MEASUREMENTS |
1 | 0xE3 |
1 | Proporción de intercalación si se establece AOA_RESULT_REQ
a 0xF0 . Se admite solo si el
UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING
Se establece en 1 . |
NB_OF_AZIMUTH_MEASUREMENTS |
1 | 0xE4 |
1 | |
NB_OF_ELEVATION_MEASUREMENTS |
1 | 0xE5 |
1 | |
ENABLE_DIAGNOSTICS |
1 | 0xE8 |
2 | Valor de 1 byte para habilitar o inhabilitar los informes de diagnóstico.
Configura este parámetro solo cuando Valores:
|
DIAGRAMS_FRAME_REPORTS_FIELDS |
1 o 4 | 0xE9 |
2 | Máscara de bits de 1 byte o 4 bytes para configurar los informes de diagnóstico. Esta La máscara de bits es de 1 byte en Android 14 o versiones posteriores, y 4 bytes en Android 13 o versiones anteriores. Configura este parámetro solo cuando el elemento
Devoluciones por Definiciones de bits:
|
CORE_GET_CAPS_INFO_RSP
Los siguientes son los TLV definidos por la pila de AOSP en el proveedor reservado.
parte de los TLV en CAPS_INFO
:
- GID: 0000b (grupo principal de UWB)
- OID: 000011b (
CORE_GET_CAPS_INFO_RSP
)
En la siguiente tabla, se enumeran los parámetros para los mensajes de capacidad de UWB.
Nombre del parámetro | Longitud (octetos) |
Etiqueta (IDs) |
Versión de la interfaz del proveedor | Descripción |
---|---|---|---|---|
SUPPORTED_POWER_STATS_QUERY |
1 | 0xC0 |
1 | Valor de 1 byte que indica compatibilidad con la consulta de estadísticas de energía. Valores:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | Valor de 1 byte que indica compatibilidad con la intercalación de antena . Valores:
|
SUPPORTED_MIN_RANGING_INTERVAL_MS |
4 | 0xE4 |
2 | Valor de 4 bytes que indica el intervalo de rango mínimo admitido en milisegundos. |
SUPPORTED_RANGE_DATA_NTF_CONFIG |
4 | 0xE5 |
2 | Máscara de bits de 4 bytes que indica la capa
RANGE_DATA_NTF_CONFIG valores.
Máscara de bits en la que cada bit corresponde a valores usados en
RANGE_DATA_NTF_CONFIG en SET_APP_CFG_CMD . |
SUPPORTED_RSSI_REPORTING |
1 | 0xE6 |
2 | Valor de 1 byte que indica la compatibilidad con los informes RSSI. Valores:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | El valor de 1 byte indica la compatibilidad con los informes de diagnóstico. Valores:
|
SUPPORTED_MIN_SLOT_DURATION_RSTU |
4 | 0xE8 |
2 | Valor de 4 bytes que indica la duración mínima de ranura admitida en RSTU. |
SUPPORTED_MAX_RANGING_SESSION_NUMBER |
4 | 0xE9 |
2 | Valor de 4 bytes que indica la cantidad máxima admitida de rango de FiRa. sesiones. |
SUPPORTED_CHANNELS_AOA |
2 | 0xEA |
2 | Máscara de bits de 2 bytes para indicar los canales que admiten AoA. Cada
Valores:
|
Códigos de estado
Los siguientes son los códigos de estado en el espacio del proveedor. Se devuelven en
Respuestas de UCI (como SESSION_START_RSP
) por el subsistema de UWB (UWBS)
Código de error | Valor | Descripción |
---|---|---|
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x52 |
Código de estado que se muestra cuando la sesión de rango actual no se puede se inició debido a un conflicto con otras sesiones de CCC o de FiRa. |
STATUS_REGULATION_UWB_OFF |
0x53 |
Código de estado que se muestra cuando la sesión de rango actual no se puede comenzaron por motivos reglamentarios de UWB. |
Código de motivo de cambio de estado en SESSION_STATUS_NTF
A continuación, se muestran los códigos de motivos de cambio de estado definidos en el espacio de proveedores para
el campo de estado que muestra un UWBS en SESSION_STATUS_NTF
Esta notificación
la UWBS cuando cambia el estado de una sesión de rango (por ejemplo,
de ACTIVE
a IDLE
).
Código de motivo de cambio de estado | Valor | Descripción |
---|---|---|
REASON_ERROR_INVALID_CHANNEL_WITH_AOA |
0x80 |
El estado de la sesión cambió porque el canal configurado no admiten rangos de AoA. |
REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x81 |
El estado de la sesión cambió debido a un conflicto con otras CCC o FiRa sesiones. |
REASON_REGULATION_UWB_OFF |
0x82 |
El estado de la sesión cambió porque la UWB debe inhabilitarse debido a un un motivo reglamentario. |