Interfaz de la HAL de UWB

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.

Inicialización de pila de UWB

Figura 1: Flujo de llamadas de inicialización de la pila de UWB (activación de UWB)

Desinicialización de la pila de UWB

Figura 2: Flujo de llamada de desinicialización de la pila de UWB (desactivación de UWB)

Inicio y finalización de la sesión de 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.

  1. 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).
  2. 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.
  3. Código de país de Wi-Fi: Código de país recuperado a través de Wi-Fi (80211.ad).
  4. Ú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.
  5. Código de país de la ubicación: Código de país recuperado de LocationManager proveedor de ubicación combinada.
  6. 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:

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 00 se usa para indicar que el código de país se desconoce.

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 CORE_GET_CAPS_INFO_RSP muestra SUPPORTED_DIAGNOSTICS con un valor de 1, lo que indica que la función de informes de diagnóstico está no es compatible.

Valores:

  • 1: función habilitada
  • 0: función inhabilitada

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 CORE_GET_CAPS_INFO_RSP SUPPORTED_DIAGNOSTICS con un valor de 1 lo que indica que se admite la función de informes de diagnóstico.

Definiciones de bits:

  • b0 (0x01): Activa los campos de RSSI
  • b1 (0x02): Activa campos de AoA
  • b2 (0x04): Activa los campos de CIR

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:

  • 1: función compatible
  • 0: función no compatible
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

Valor de 1 byte que indica compatibilidad con la intercalación de antena .

Valores:

  • 1: función compatible
  • 0: función no compatible
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:

  • 1: función compatible
  • 0: función no compatible
SUPPORTED_DIAGNOSTICS 1 0xE7 2

El valor de 1 byte indica la compatibilidad con los informes de diagnóstico.

Valores:

  • 1: función compatible
  • 0: función no compatible
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 el número máximo admitido 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 1 en la máscara de bits corresponde a un canal de UWB específico.

Valores:

  • 0x01: Se admite el canal 5.
  • 0x02: compatible con el canal 6
  • 0x04: Se admite el canal 8.
  • 0x08: compatible con el canal 9
  • 0x10: Se admite el canal 10.
  • 0x20: compatible con el canal 12
  • 0x40: compatible con el canal 13
  • 0x80: Se admite el canal 14.

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.