Requisitos de HCI

La interfaz de controlador de host (HCI) se usa para interactuar con un controlador de Bluetooth.

En este documento, se proporciona una lista de los requisitos de la HCI de Bluetooth (BT) y Bluetooth de bajo consumo (BLE). El objetivo es que los proveedores de la pila de BT del host y los proveedores del controlador de BT cumplan con estos requisitos de la plataforma para usar el conjunto de funciones que se describe a continuación.

En este documento, se hace referencia a la especificación principal de Bluetooth 5.2 como la "especificación". La especificación principal de Bluetooth 5.2 está disponible en el sitio web de Bluetooth SIG junto con otros documentos adoptados.

Descripción general del diseño

Capacidades y configuración del chip

Como plataforma abierta, Android tiene una matriz de versiones de software, OEM, proveedores y capacidades de la plataforma y los chips.

Para administrar el panorama cambiante y las migraciones, en este documento se describe una filosofía de diseño que permite que los controladores de BT expongan sus capacidades (más allá de la especificación estándar de Bluetooth Core 5.2). Luego, la pila de BT del host puede usar estas capacidades para determinar qué funciones habilitar.

Compatibilidad con estándares abiertos

Uno de los objetivos de Android es admitir estándares abiertos después de la ratificación en una especificación de Bluetooth. Si una función que se describe a continuación está disponible en los métodos de HCI estándar en una futura especificación de Bluetooth, nos inclinaremos por hacer que ese enfoque sea el predeterminado.

Funciones específicas del proveedor

Comando específico del proveedor: LE_Get_Vendor_Capabilities_Command

Campo de comando de OpCode (OCF): 0x153

Parámetro de comando Tamaño Propósito
NA Lista de parámetros de comando vacía

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
max_advt_instances
(Obsoleto)
1 octeto Es la cantidad de instancias de anuncios admitidas.

Reservado después de la versión 0.98.
Este parámetro está obsoleto en la especificación de funciones de Google v0.98 y versiones posteriores a favor de la publicidad extendida de LE disponible en la especificación de BT versión 5.0 y posteriores.
offloaded_resolution_of_private-address
(Obsoleto)
1 octeto Capacidad del chip BT del RPA.
Si un chip lo admite, el host debe habilitarlo.
0 = No es capaz
1 = Es capaz

Reservado después de la versión 0.98.
Este parámetro dejó de estar disponible en la especificación de funciones de Google v0.98 y versiones posteriores en favor de la función de privacidad disponible en la especificación de BT versión 4.2 y versiones posteriores.
total_scan_results_storage 2 octetos Almacenamiento para los resultados del análisis en bytes
max_irk_list_sz 1 octeto Cantidad de entradas de IRK admitidas en el firmware
filtering_support 1 octeto Compatibilidad con el filtrado en el controlador
0 = No compatible
1 = Compatible
max_filter 1 octeto Cantidad de filtros admitidos
activity_energy_info_support 1 octeto Admite la generación de informes de información sobre actividad y energía.
0 = No es capaz
1 = Es capaz
version_supported 2 octetos Especifica la versión de la especificación de la función de Google que se admite.
byte[0] = Número principal
byte[1] = Número secundario

v1.05
byte[0] = 0x01
byte[1] = 0x05

Adiciones de funciones en las siguientes versiones:
v1.05:
  • iso_link_feedback_support
  • BQRv7
  • sniff_offload_support
V1.04:
  • BQRv6
total_num_of_advt_tracked 2 octetos Cantidad total de anunciantes a los que se realiza un seguimiento para fines de OnLost/OnFound
extended_scan_support 1 octeto Admite intervalos y ventanas de análisis extendidos
debug_logging_supported 1 octeto Admite el registro de información de depuración binaria del controlador
LE_address_generation_offloading_support
(Obsoleto)
1 octeto 0 = No compatible
1 = Compatible

Reservado después de la versión 0.98.
Este parámetro dejó de estar disponible en la especificación de funciones de Google v0.98 y versiones posteriores en favor de la función de privacidad disponible en la especificación de BT versión 4.2 y versiones posteriores.
A2DP_source_offload_capability_mask 4 octetos Máscaras de bits para los tipos de códec admitidos
Bit 0: SBC
Bit 1: AAC
Bit 2: APTX
Bit 3: APTX HD
Bit 4: LDAC
Los bits del 5 al 31 están reservados
bluetooth_quality_report_support 1 octeto Admite el registro de eventos de calidad de Bluetooth
0 = No es compatible
1 = Compatible
dynamic_audio_buffer_support 4 octetos Admite el búfer de audio dinámico en el controlador de Bluetooth
Máscaras de bits para los tipos de códec admitidos
Bit 0: SBC
Bit 1: AAC
Bit 2: APTX
Bit 3: APTX HD
Bit 4: LDAC
Los bits del 5 al 31 están reservados
a2dp_offload_v2_support 1 octeto Admite comandos de delegación de A2DP v2 en el controlador de Bluetooth (consulta Start A2DP offload y Stop A2DP offload).
0 = No compatible
1 = Compatible
iso_link_feedback_support 1 octeto Admite el evento ISO Link Feedback.
0 = No admitido
1 = Admitido
sniff_offload_support 1 octeto Admite comandos de descarga de detección en un controlador Bluetooth
0 = No admitido
1 = Admitido

Resultados del análisis por lotes

Un objetivo de diseño es mejorar la forma en que se envían las notificaciones de eventos de respuesta de exploración de Bluetooth LE al host para ahorrar energía en el host.

Al reducir la frecuencia con la que el controlador notifica al procesador de la app host los resultados del análisis, el procesador de la app host puede permanecer en estado de inactividad o suspensión durante más tiempo. Esto reduce el consumo de energía en el host. El parámetro de devolución total_scan_results_storage de LE_Get_Vendor_Capabilities_Command indica la capacidad del chip para almacenar los resultados del análisis.

Esta función se centra en la administración y configuración de la instalación de almacenamiento de resultados de la búsqueda de LE en el controlador de Bluetooth. El almacenamiento se usa para agrupar temporalmente los datos de anuncios y los datos y metadatos de análisis que recibe el controlador para su posterior entrega al host.

El firmware debe admitir dos tipos de procesamiento por lotes, que se pueden activar de forma simultánea:

  • Truncado. Contiene los siguientes elementos de información: {MAC, potencia de transmisión, RSSI, marca de tiempo}
  • Completa. Contiene los siguientes elementos de información: {MAC, potencia de transmisión, RSSI, marca de tiempo, datos de anuncio, respuesta de análisis}

LE_Batch_Scan_Command

OCF: 0x156

Parámetro de comando Tamaño Propósito
Batch_Scan_opcode 1 octeto 0x1: Habilita la función específica del cliente
0x2: Establece los parámetros de Batch Scan Storage
0x3: Establece los parámetros de Batch Scan
0x4: Lee los parámetros de Batch Scan Result

Se generará un evento de Command Complete para este comando. Habilitar la función específica para el cliente no inicia el análisis.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Batch_Scan_opcode 1 octeto 0x1: Habilita la función específica del cliente
0x2: Establece los parámetros de Batch Scan Storage
0x3: Establece los parámetros de Batch Scan
0x4: Lee los parámetros de Batch Scan Result

LE_Batch_Scan_Command: Habilita la función específica del cliente

Sub OCF: 0x01

Parámetro del subcomando Tamaño Propósito
enable_customer_specific_feature_set 1 octeto 0x01: Habilita la función de escaneo por lotes
0x00: Inhabilita la función de escaneo por lotes

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Batch_Scan_opcode 1 octeto 0x1: Habilita la función específica del cliente
0x2: Establece los parámetros de Batch Scan Storage
0x3: Establece los parámetros de Batch Scan
0x4: Lee los parámetros de Batch Scan Result

LE_Batch_Scan_Command: Establece el subcomando del parámetro de almacenamiento de análisis por lotes

Sub OCF: 0x02

Parámetro del subcomando Tamaño Propósito
Batch_Scan_Full_Max 1 octeto Espacio de almacenamiento máximo (en %) asignado al estilo completo
[Rango: 0-100]
Batch_Scan_Truncated_Max 1 octeto Espacio de almacenamiento máximo (en %) asignado al estilo truncado
[Rango: 0-100]
Batch_Scan_Notify_Threshold 1 octeto Nivel de notificación de configuración (en %) para el grupo de almacenamiento individual
[Rango: 0-100]
Si se establece en 0, se inhabilitará la notificación. Se genera un evento de HCI específico del proveedor (subevento de incumplimiento del umbral de almacenamiento).

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Batch_scan_opcode 1 octeto 0x02 [Establece parámetros de análisis por lotes]

LE_Batch_Scan_Command: Establece el subcomando del parámetro de análisis por lotes

Sub OCF: 0x03

Parámetro del subcomando Tamaño Propósito
Batch_Scan_Mode 1 octeto 0x00: El análisis por lotes está inhabilitado
0x01: El modo truncado está habilitado
0x02: El modo completo está habilitado
0x03: El modo truncado y el modo completo están habilitados
Duty_cycle_scan_window 4 octetos Tiempo de análisis de Batch Scan (cantidad de ranuras)
Duty_cyle_scan_interval 4 octetos Período del intervalo de análisis por lotes (cantidad de intervalos)
own_address_type 1 octeto 0x00: Dirección del dispositivo pública
0x01: Dirección del dispositivo aleatoria
Batch_scan_Discard_Rule 1 octeto 0: Descarta el anuncio más antiguo.
1: Descarta el anuncio con el RSSI más débil.

Este subcomando iniciará el análisis por lotes, si está habilitado. En el análisis truncado, los resultados se almacenan de forma truncada, en la que la clave única para el estilo truncado es {BD_ADDR, scan_interval}. Esto significa que solo se puede registrar un BD_ADDR will para cada intervalo de análisis. El registro que se debe conservar para el modo Truncado es el siguiente: {BD_ADDR, Potencia de transmisión, RSSI, Marca de tiempo}

Cuando se habilita el modo Full, se usará el análisis activo y se registrarán las respuestas de análisis. La clave única del estilo Full es = {MAC, paquete de anuncio}, independientemente del intervalo de análisis. El registro que se debe conservar para el modo Full es {BD_ADDR, Potencia de transmisión, RSSI, Marca de tiempo, Paquete de anuncio, Respuesta de análisis}. En el estilo Full, el mismo paquete de AD, cuando se ve varias veces en diferentes intervalos de análisis, se registra solo una vez. Sin embargo, en el modo Truncado, lo que interesa es la visibilidad de BA_ADDR en los diferentes intervalos de análisis (una vez por intervalo de análisis). El RSSI es el valor promedio de todos los duplicados de un anuncio único dentro de un intervalo de análisis.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Batch_scan_opcode 1 octeto 0x03 [Establecer parámetros de análisis por lotes]

LE_Batch_Scan_Command: Subcomando para leer los resultados del análisis por lotes

Sub OCF: 0x04

Parámetro del subcomando Tamaño Propósito
Batch_Scan_Data_read 1 octeto 0x01: Datos del modo truncado
0x02: Datos del modo completo

Se generará un evento de Command Complete para este comando. Cuando el host emite este comando, es posible que todos los resultados del controlador no quepan en un solo evento Command Complete. El host iterará la emisión de este comando hasta que los resultados correspondientes en el evento Command Complete indiquen 0 en la cantidad de registros, lo que indica que el controlador no tiene más registros para comunicar al host. Cada evento Command Complete puede contener varios registros de solo un tipo de datos (completos o truncados).

Las referencias de tiempo del controlador y del host no están sincronizadas. La unidad de la marca de tiempo es de 50 ms. El valor de la marca de tiempo se basa en el momento en que el anfitrión proporciona el valor de Read_Batch_Scan_Results_Sub_cmd. Si la hora de llegada de un comando es T_c en el firmware, la hora real en la que se tomó la marca de tiempo en el firmware es T_fw. El tiempo de informe será: (T_c - T_fw). T_c y T_fw están en el dominio de tiempo del firmware. Esto permite que el host calcule hace cuánto tiempo ocurrió el evento.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Batch_scan_opcode 1 octeto 0x03 [Establece parámetros de análisis por lotes]
Batch_Scan_data_read 1 octeto Identifica el formato (truncado o completo).
num_of_records 1 octeto Cantidad de registros de Batch_Scan_data_read
format_of_data Variable Modo truncado:
Address[0]: 6 octetos
Address_Type[0]: 1 octeto
Tx_Pwr[0]: 1 octeto
RSSI[0] : 1 octeto
Timestamp[0]: 2 octetos
[varios registros (num_of_records) con el formato anterior]

Modo completo:
Address[0]: 6 octetos
Address_Type[0]: 1 octeto
Tx_Pwr[0]: 1 octeto
RSSI[0]: 1 octeto
Timestamp[0]: 2 octetos
Adv packet_len[0]: 1 octeto
Adv_packet[0]: Adv_packet_len octetos
Scan_data_resp_len[0]: 1 octeto
Scan_data_resp[0]: Scan_data_resp octetos
[varios registros con el formato anterior (num_of_records)]

Filtro de contenido de paquetes publicitarios

Se usa para habilitar, inhabilitar o configurar el filtro de contenido de paquetes publicitarios (APCF) en el controlador. El APCF filtra los informes publicitarios en el controlador, pero no filtra la publicidad periódica.

LE_APCF_Command

OCF: 0x157

Parámetro de comando Tamaño Propósito
APCF_opcode 1 octeto 0x00: APCF Enable
0x01: APCF Set Filtering parameters
0x02: APCF Broadcaster Address
0x03: APCF Service UUID
0x04: APCF Service Solicitation UUID
0x05: APCF Local Name
0x06: APCF Manufacturer Data
0x07: APCF Service Data
0x08: APCF Transport Discovery Service
0x09: APCF AD Type Filter
0x10 a 0xAF: Reservado para uso futuro
0xB0 a 0xDF: Reservado para el proveedor
0xE0 a 0xFE: Reservado para uso futuro
0xFF: APCF Read extended Features

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de la devolución
APCF_opcode 1 octeto 0x00: APCF Enable
0x01: APCF Set Filtering parameters
0x02: APCF Broadcaster Address
0x03: APCF Service UUID
0x04: APCF Service Solicitation UUID
0x05: APCF Local Name
0x06: APCF Manufacturer Data
0x07: APCF Service Data
0x08: APCF Transport Discovery Service
0x09: APCF AD Type Filter
0x10 a 0xAF: Reservado para uso futuro
0xB0 a 0xDF: Reservado para el proveedor
0xE0 a 0xFE: Reservado para uso futuro
0xFF: APCF Read extended Features

LE_APCF_Command: Enable_sub_cmd

Sub OCF: 0x00

Parámetro del subcomando Tamaño Propósito
APCF_enable 1 octeto 0x01: Habilita la función de APCF
0x00: Inhabilita la función de APCF

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x0: APCF Enable
APCF_Enable 1 octeto La habilitación o inhabilitación se configura a través de APCF_enable.

LE_APCF_Command: set_filtering_parameters_sub_cmd

Este subcomando se usa para agregar o borrar una especificación de filtro, o bien borrar una lista de filtros para el filtrado en el chip.

Sub OCF: 0x01

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
La acción de borrar quitará el filtro específico junto con las entradas de funciones asociadas en otras tablas.
Borrará todos los filtros y las entradas asociadas en otras tablas.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_Feature_Selection 2 octetos Máscaras de bits para las funciones seleccionadas:
Bit 0: Se establece para habilitar el filtro de dirección de transmisión
Bit 1: Se establece para habilitar el filtro de cambio de datos de servicio
Bit 2: Se establece para habilitar la verificación del UUID de servicio
Bit 3: Se establece para habilitar la verificación del UUID de solicitud de servicio
Bit 4: Se establece para habilitar la verificación del nombre local
Bit 5: Se establece para habilitar la verificación de datos del fabricante
Bit 6: Se establece para habilitar la verificación de datos de servicio
Bit 7: Se establece para habilitar la verificación del servicio de detección de transporte
Bit 8: Se establece para habilitar la verificación del tipo de AD
APCF_List_Logic_Type 2 octetos Operación lógica para cada selección de atributos (por posición de bit) especificada en APCF_Feature_Selection.
Solo es válido cuando se habilita una función.
Valor de posición de bits:
0: OR
1: AND
Si se selecciona la lógica "AND", un paquete de ADV pasará el filtro solo si contiene TODAS las entradas de la lista.
Si se selecciona la lógica "OR", un paquete de ADV pasará el filtro si contiene cualquiera de las entradas de la lista.
APCF_Filter_Logic_Type 1 octeto 0x00: OR
0x01: AND
Nota: El tipo de lógica no está disponible para los primeros tres campos de APCF_Feature_Selection, que siempre es lógica "AND". Solo se aplican a los cuatro campos (bit 3 a bit 6) de APCF_Feature_Selection.
rssi_high_thresh 1 octeto [en dBm]
Se considera que se vio al anunciante solo si el indicador es superior al umbral alto del RSSI. De lo contrario, el firmware debe comportarse como si nunca lo hubiera visto.
delivery_mode 1 octeto 0x00: immediate
0x01: on_found
0x02: batched
onfound_timeout 2 octetos Solo es válido si delivery_mode es on_found.
[en milisegundos]
Tiempo que el firmware permanece y recopila anuncios adicionales antes de generar el informe.
onfound_timeout_cnt 1 octeto Solo es válido si delivery_mode es on_found.
[count]
Si un anuncio en onFound permanece en el firmware durante la duración de onfound_timeout, recopilará algunos anuncios y se verificará el recuento. Si el recuento supera onfound_timeout_cnt, se informa OnFound inmediatamente después.
rssi_low_thresh 1 octeto Solo es válido si delivery_mode es on_found.
[en dBm]
El paquete de anuncio se considera como no visto si el RSSI del paquete recibido no está por encima del umbral bajo de RSSI.
onlost_timeout 2 octetos Solo es válido si delivery_mode es on_found.
[en milisegundos]
Si un anuncio, después de encontrarse, no se ve de forma continua durante el período lost_timeout, se informará de inmediato que se perdió.
num_of_tracking_entries 2 octetos Solo es válido si delivery_mode es on_found.
[count]
Es la cantidad total de anunciantes a los que se debe hacer un seguimiento por filtro.

Los valores de RSSI deben usar el complemento a 2 para representar valores negativos.

El host debe poder configurar varios filtros con APCF_Application_Address_type establecido en 0x02 (para todas las direcciones de transmisión) para administrar varias combinaciones de filtros.

El filtrado, el procesamiento por lotes y la generación de informes son conceptos interrelacionados. Cada anuncio y respuesta de análisis relacionada deberán pasar por todos los filtros, uno tras otro. Por lo tanto, las acciones resultantes (delivery_mode) están estrechamente relacionadas con el filtrado. Los modos de entrega son los siguientes: report_immediately, batch y onFound. El valor de OnLost se relaciona con OnFound en el sentido de que aparecerá después de OnFound cuando se pierda.

Este flujo de procesamiento describe el modelo conceptual:

Cuando se recibe un fotograma de anuncio (o de respuesta de análisis), se aplica a todos los filtros en orden serial. Es posible que un anuncio pueda generar informes inmediatos según un filtro y el procesamiento por lotes del mismo debido a una acción de filtro diferente.

Los umbrales de nivel de RSSI (alto y bajo) permiten controlar cuándo el marco es visible para el procesamiento del filtro, incluso cuando el controlador recibe un paquete válido. En caso de que el modo de entrega se establezca como inmediato o por lotes, se considera el RSSI de un fotograma para el procesamiento posterior del controlador. Las diferentes apps necesitan un comportamiento de informes y procesamiento por lotes diferente. Esto permite que varias apps informen directamente o agrupen los resultados en el firmware de forma simultánea. Un ejemplo es el caso en que un análisis por lotes está activo desde una app y, más tarde, otra app emite un análisis de LE normal. Antes de que se emita un análisis por lotes, el framework o la app establecen los filtros adecuados. Más tarde, cuando la segunda app emite una exploración normal, continúa el procesamiento por lotes anterior. Sin embargo, debido al análisis periódico, es similar a agregar conceptualmente un filtro nulo (junto con todos los filtros existentes) junto con el comando de análisis de LE. Los parámetros del comando de análisis de LE tienen prioridad cuando están activos. Cuando se inhabilita la exploración LE normal, el controlador volverá a una exploración por lotes anterior, si existía.

El modo de entrega OnFound se basa en los filtros configurados. Una combinación que activa la acción de un filtro para que se complete correctamente se considera la entidad para hacer un seguimiento de onLost. El evento correspondiente es el subevento de seguimiento de anuncios de LE.

La transición OnFound/OnLost para un filtro (si está habilitado) se verá de la siguiente manera:

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x01: APCF Set Filtering Parameters
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas disponibles en la tabla de filtros

LE_APCF_Command: broadcast_address_sub_cmd

Este subcomando se usa para agregar o borrar una dirección del anunciante, o bien para borrar la lista de direcciones del anunciante para el filtrado en el chip.

Sub OCF: 0x02

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
Borrar borrará la dirección del emisor especificada en el filtro especificado.
Clear borrará todas las direcciones de transmisión en el filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_Broadcaster_Address 6 octetos Dirección del dispositivo de 6 bytes que se agregará a la lista de direcciones del emisor o se borrará de ella
APCF_Application_Address_type 1 octeto 0x00: Pública
0x01: Aleatoria
0x02: NA (ignorar el tipo de dirección)
Para filtrar los informes publicitarios con tipos de direcciones de identidad (0x02, 0x03). Para obtener informes publicitarios con los tipos de dirección 0x02 y 0x03, establece este campo en 0x02: NA (ignora el tipo de dirección).

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x02: Dirección de APCF Broadcaster
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas gratuitas que aún están disponibles en la tabla de direcciones de transmisión

LE_APCF_Command: service_uuid_sub_cmd

Este subcomando se usa para agregar o borrar un UUID de servicio, o bien para borrar una lista de UUID de servicio para el filtrado en el chip.

Sub OCF: 0x03

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
Borrar borrará la dirección UUID del servicio especificado en el filtro especificado.
Clear borrará todos los UUIDs de servicio en el filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_UUID 2, 4 y 16 octetos UUID del servicio (16, 32 o 128 bits) para agregar a la lista o borrar de ella.
APCF_UUID_MASK 2, 4 y 16 octetos Es la máscara de UUID del servicio (de 16, 32 o 128 bits) que se agregará a la lista. Debe tener la misma longitud que APCF_UUID..

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x03: UUID del servicio de APCF
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas gratuitas que aún están disponibles en la tabla de UUID de servicio

LE_APCF_Command: solicitation_uuid_sub_cmd

Este subcomando se usa para agregar o borrar un UUID de solicitud, o bien para borrar una lista de UUID de solicitud para el filtrado en el chip.

Sub OCF: 0x04

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
Borrar borrará la dirección UUID de la solicitud en el filtro especificado.
Clear borrará todos los UUID de solicitud en el filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_UUID 2, 4 y 16 octetos UUID de la solicitud (de 16, 32 o 128 bits) que se agregará a la lista o se borrará de ella.
APCF_UUID_MASK 2, 4 y 16 octetos Es la máscara del UUID de la solicitud (de 16, 32 o 128 bits) que se agregará a la lista. Debe tener la misma longitud que APCF_UUID.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x04, UUID de solicitud de APCF
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas gratuitas que aún están disponibles en la tabla de UUID de la solicitud

LE_APCF_Command: local_name_sub_cmd

Este subcomando se usa para agregar o borrar una cadena de nombre local, o bien para borrar la lista de cadenas de nombres locales para el filtrado en el chip.

Sub OCF: 0x05

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
Borrar borrará la cadena de nombre local especificada en el filtro especificado.
Clear borrará todas las cadenas de nombres locales en el filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_LocName_Mandata_or_SerData Tamaño variable Es una cadena de caracteres para el nombre local.

Notas:
  • Actualmente, la cantidad máxima de caracteres en una cadena de nombre local es de 29.
  • No se aplica cuando la acción es "Borrar" (0x2).

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x05: APCF Local Name
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas gratuitas que aún están disponibles en la tabla Nombre local

LE_APCF_Command: manf_data_sub_cmd

Este subcomando se usa para agregar o borrar una cadena de datos del fabricante, o bien para borrar la lista de cadenas de datos del fabricante para el filtrado en el chip.

Sub OCF: 0x06

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
La opción Borrar borrará la cadena de datos del fabricante especificada en el filtro especificado.
Clear borrará todas las cadenas de datos del fabricante en el filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_LocName_Mandata_or_SerData Tamaño variable Es una cadena de caracteres para los datos del fabricante.

Notas:
  • Actualmente, la cantidad máxima de caracteres en una cadena de nombre local es de 29.
  • No se aplica cuando la acción es "Borrar" (0x2).
APCF_ManData_Mask Tamaño variable Es la máscara de datos de fabricación que se agregará a la lista. Debe tener la misma longitud que APCF_LocName_or_ManData_or_SerData.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x06: Datos del fabricante de APCF
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas gratuitas que aún están disponibles en la tabla Datos del fabricante

LE_APCF_Command: service_data_sub_cmd

Este subcomando se usa para agregar o borrar una cadena de datos de servicio, o bien para borrar la lista de cadenas de datos de servicio para el filtrado en el chip.

Sub OCF: 0x07

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
Borrar borrará la cadena de datos de servicio especificada en el filtro especificado.
Clear borrará todas las cadenas de datos de servicio en el filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_LocName_Mandata_or_SerData Tamaño variable Es una cadena de caracteres para los datos de servicio.

Notas:
  • Actualmente, la cantidad máxima de caracteres en una cadena de nombre local es de 29.
  • No se aplica cuando la acción es "Borrar" (0x2).
APCF_LocName_Mandata_or_SerData_Mask Tamaño variable Es la máscara de datos del servicio que se agregará a la lista. Debe tener la misma longitud que APCF_LocName_or_ManData_or_SerData..

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x07: Datos de servicio de APCF
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas gratuitas que aún están disponibles para la tabla de datos del servicio

LE_APCF_Command: ad_type_sub_cmd

Este subcomando se usa para agregar o borrar un tipo de AD, o bien para borrar una lista de tipos de AD para el filtrado en el chip. Usa read_extended_features_sub_cmd para verificar si este comando es compatible.
Cuando APCF_AD_DATA_Length es 0, filtra APCF_AD_TYPE sin comparar los datos de AD y la máscara de datos de AD. Si la longitud de los datos del paquete ADV recibido supera AD_DATA_LENGTH, compara solo los primeros AD_DATA_LENGTH bytes de los datos del anuncio y descarta los datos restantes.

Sub OCF: 0x09

Parámetro del subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00: Agregar
0x01: Borrar
0x02: Borrar
La acción de borrar quitará el tipo de anuncio especificado en el filtro especificado.
Clear borrará todos los tipos de AD en el filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
APCF_AD_TYPE 1 octeto Es el tipo de anuncio que se agregará a la lista o se borrará de ella. Se ignora cuando APCF_Action es 0x02 (Borrar).
APCF_AD_DATA_Length 1 octeto 0x00: Significa que no se filtra el contenido de los datos.
Se ignora cuando APCF_Action es 0x02 (Borrar).
APCF_AD_DATA Tamaño variable Tamaño variable, según APCF_AD_DATA_Length
Se ignora cuando APCF_Action es 0x02 (Borrar)
APCF_AD_DATA_MASK Tamaño variable Tamaño variable, según APCF_AD_DATA_Length
Se ignora cuando APCF_Action es 0x02 (Borrar)
Debe tener la misma longitud que APCF_AD_DATA.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0x09: Tipo de anuncio de APCF
APCF_Action 1 octeto APCF_Action del comando de respuesta
APCF_AvailableSpaces 1 octeto Cantidad de entradas gratuitas que aún están disponibles en la tabla de tipos de anuncios

LE_APCF_Command: read_extended_features_sub_cmd

Este subcomando se usa para leer funciones de APCF extendidas.

Sub OCF: 0xFF

Parámetro del subcomando Tamaño Propósito
No aplicable El parámetro de comando está vacío.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
APCF_opcode 1 octeto 0xFF, APCF_Read_Extended_Features
APCF_extended_features 2 octetos

Máscaras de bits para las funciones extendidas admitidas:

  • Bit 0: Admite el filtro del servicio de detección de transporte
  • Bit 1: Admite el filtro de tipo de anuncio
  • Bits 2 a 15: Reservados para uso futuro

Valor del bit

  • 0 = No admitido
  • 1 = Compatible

Comando de información de energía y actividad del controlador

El objetivo de esta información es que las funciones del sistema host de nivel superior analicen las actividades totales de todos los componentes, incluido el controlador de BT y su estado macro, junto con lo que sucede en las apps y el framework. Para ello, se requiere la siguiente información de la pila y el controlador de BT:

  • Pila de BT: Informa el estado macrooperativo actual del controlador.
  • Firmware: Informes de información agregada sobre la actividad y la energía

Estados de la macro de la pila del host de BT, según se determinan a nivel del usuario:

  • Inactivo: [análisis de página, anuncio de LE, análisis de consulta, análisis de LE]
  • Escanear: [paging/inquiry/trying to connect]
  • Activo: [Vínculo de LCA activado, vínculo de SCO en curso, modo de detección]

Las actividades que el controlador registra durante su vida útil son el tiempo de transmisión, el tiempo de recepción, el tiempo de inactividad y la energía total consumida. Se borran cuando se leen desde el host.

LE_Get_Controller_Activity_Energy_Info

Este es un comando específico del proveedor.

OCF: 0x159

Parámetro del subcomando Tamaño Propósito
NA Parámetros de comando vacíos

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
total_tx_time_ms 4 octetos Tiempo total de realización de la transacción
total_rx_time_ms 4 octetos Tiempo total dedicado a realizar Rx
total_idle_time_ms 4 octetos Tiempo total en inactividad (estados de bajo consumo que no son de sueño)
total_energy_used 4 octetos Energía total utilizada [producto de la corriente (mA), el voltaje (V) y el tiempo (ms)]

Comando de parámetros de análisis de conjunto extendido de LE

Este comando se puede usar para habilitar un intervalo y una ventana de análisis más grandes en el controlador. Según la especificación principal de BT 5.2, un intervalo y una ventana de análisis tienen un límite superior de 10.24 segundos, lo que dificulta los intervalos de análisis superiores a 10.24 segundos para las apps.

Referencia base: Especificación de BT Core 5.2, página 2493 (comando LE Set Scan Parameters)

OCF: 0x15A

Parámetro de comando Tamaño Propósito
LE_Ex_Scan_Type 1 octeto 0x00: Análisis pasivo. No se deben enviar paquetes SCAN_REQ (opción predeterminada).
0x01: Análisis activo. Se pueden enviar paquetes de SCAN_REQ.
LE_Ex_Scan_Interval 4 octetos Se define como el intervalo de tiempo desde que el controlador inició su último análisis de LE hasta que comenzó el siguiente análisis de LE.
Rango: 0x0004 a 0x00FFFFFF
Valor predeterminado: 0x0010 (10 ms)
Tiempo = N * 0.625 ms
Intervalo de tiempo: 2.5 ms a 10,442.25 segundos
LE_Ex_Scan_Window 4 octetos Es la duración del análisis de LE. LE_Scan_Window debe ser menor o igual que LE_Scan_Interval.
Rango: 0x0004 a 0xFFFF
Valor predeterminado: 0x0010 (10 ms)
Tiempo = N * 0.625 ms
Rango de tiempo: 2.5 ms a 40.95 s
Own_Address_Type 1 octeto 0x00: Dirección del dispositivo pública (predeterminada)
0x01: Dirección del dispositivo aleatoria
LE_Ex_Scan_Filter_Policy 0x00: Acepta todos los paquetes de anuncios (predeterminado). Se ignorarán los paquetes de publicidad dirigidos que no estén dirigidos a este dispositivo.
0x01: Ignora los paquetes de anuncios de los dispositivos que no están en la lista blanca. Solo lista. Se ignorarán los paquetes de publicidad dirigida que no estén dirigidos a este dispositivo.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete

Comando para obtener información de depuración del controlador

El objetivo de este elemento de información es que un host adquiera información de depuración del controlador, en formato binario, para su posterior procesamiento y análisis. Esto ayuda a depurar problemas en el campo y proporciona a los ingenieros un kit de herramientas para registrar información para el análisis. Un controlador puede proporcionar la información cuando un host la solicita a través del evento (subevento de información de depuración del controlador) o de forma autónoma cuando el controlador lo desee. Algunos ejemplos de uso podrían ser informar información sobre el estado del firmware, información sobre volcados de memoria ante fallas, información de registro, etcétera.

OCF: 0x15B

Parámetro de comando Tamaño Propósito
N/A Lista de parámetros de comando vacía

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete

Compatibilidad con la delegación de hardware de A2DP

La función de descarga de A2DP admite la descarga del proceso de codificación de audio A2DP en un procesador de audio conectado al controlador de BT. El flujo de datos de audio codificados pasa directamente del procesador de audio al controlador de BT sin la participación del host de BT. El host de BT sigue siendo responsable de la configuración y el control de la sesión de A2DP. Hay dos versiones de los comandos disponibles. Los comandos heredados con Sub OCF 0x01-0x02 solo admiten códecs de código abierto. Las versiones con Sub-OCF 0x03-0x04 son independientes del códec configurado.

OCF: 0x15D

Comienza la transferencia A2DP (heredada)

Sub OCF: 0x01

Usa este comando para configurar el proceso de descarga de A2DP y para iniciar el flujo de A2DP.

Parámetro de comando Tamaño Propósito
Codec 4 octetos Especifica el tipo de códec.
0x01: SBC
0x02: AAC
0x04: APTX
0x08: APTX HD
0x10: LDAC
Max_Latency 2 octetos Es la latencia máxima permitida (en ms). Un valor de cero inhabilita el vaciado.
SCMS-T_Enable 2 octetos Octeto 0: Es una marca que habilita la adición del encabezado SCMS-T.
  • 0x00: No se incluye el encabezado SCMS-T.
  • 0x01: Se incluye el encabezado de SCMS-T.

Octeto 1: Valor del encabezado SCMS-T cuando está habilitado.

Sampling_Frequency 4 octetos 0x01: 44,100 Hz
0x02: 48,000 Hz
0x04: 88,200 Hz
0x08: 96,000 Hz
Bits_Per_Sample 1 octeto 0x01: 16 bits por muestra
0x02: 24 bits por muestra
0x04: 32 bits por muestra
Channel_Mode 1 octeto 0x01: Mono
0x02: Estéreo
Encoded_Audio_Bitrate 4 octetos Es la tasa de bits de audio codificada en bits por segundo.
0x00000000: La tasa de bits de audio no se especificó o no se usa.
0x00000001 - 0x00FFFFFF: Tasa de bits de audio codificada en bits por segundo.
0x01000000 - 0xFFFFFFFF: Reservado.
Connection_Handle 2 octetos Identificador de conexión de la conexión A2DP que se está configurando
L2CAP_Channel_ID 2 octetos ID de canal de L2CAP que se usará para esta conexión A2DP
L2CAP_MTU_Size 2 octetos Tamaño máximo de la MTU de L2CAP que contiene paquetes de audio codificados
Codec_Information 32 octetos Información específica del códec

Códec SBC:

Consulta los elementos de información específicos del códec SBC en A2DP v1.3.
Octeto 0: Longitud del bloque | Subbandas | Método de asignación
Octeto 1: Valor mínimo del bitpool
Octeto 2: Valor máximo del bitpool
Octeto 3: Frecuencia de muestreo | Modo de canal
Octetos del 4 al 31: Reservados

Códec AAC:

Consulta los elementos de información específicos del códec AAC en A2DP v1.3
Octeto 0: Tipo de objeto
Octeto 1; b7: VBR
Octetos del 2 al 31: reservados

Códec LDAC:

Octetos del 0 al 3: ID del proveedor
0x0000012D

Octeto 4-5: ID de códec
0x00AA: LDAC
Todos los demás valores están reservados

Octeto 6: Índice de velocidad de bits:
0x00: Alta
0x01: Media
0x02: Baja
0x03 a 0x7E: Reservado
0x7F: ABR (velocidad de bits adaptable)
0x80 a 0xFF: Reservado

Octeto 7: Modo de canal LDAC
0x01: Estéreo
0x02: Dual
0x04: Mono
Otros valores están reservados

Octetos del 8 al 31: Reservados

Todos los demás códecs:

Octetos del 0 al 31: Reservados

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Sub_Opcode 1 octeto 0x01: Iniciar descarga de A2DP

Iniciar la delegación de A2DP

Sub OCF: 0x03

Usa este comando para configurar el proceso de descarga de A2DP y para iniciar el flujo de A2DP.

Parámetro de comando Tamaño Propósito
Connection Handle 2 octetos Identificador de la conexión HCI activa
L2CAP_Channel_ID 2 octetos Identificador del canal L2CAP abierto para la transmisión de A2DP
Data_Path_Direction 1 octeto 0x00: Salida (fuente/combinación de AVDTP)
0x01: Entrada (receptor/división de AVDTP)
Peer_MTU 2 octetos Tamaño máximo de los paquetes L2CAP, negociado con el dispositivo par.
CP_Enable_SCMS_T 1 octeto 0x00: Inhabilita el encabezado de protección de contenido SCMS-T.
0x01: Habilita el encabezado de protección de contenido SCMS-T.
CP_Header_SCMS_T 1 octeto Cuando el encabezado de protección de contenido SCMS-T está habilitado (CP_SCMS_T_Enable establecido en 0x01), define el valor del encabezado que precede al contenido de audio (consulta A2DP, sección 3.2.1-2) según lo define la sección 6.3.2 de Números Asignados de Bluetooth.
Se ignora cuando no está habilitada la protección de contenido de SCMS-T.
Vendor_Specific_Parameters_Length 1 octeto Es la longitud de los parámetros específicos del proveedor, en el rango de 0 a 128.
Se usa el valor 0 cuando no se proporcionan parámetros adicionales.
Vendor_Specific_Parameters De 0 a 128 octetos Son los parámetros específicos del proveedor que proporciona el HAL de audio Bluetooth, CodecParameters.vendorSpecificParameters[].

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Sub_Opcode 1 octeto 0x03: Iniciar descarga de A2DP

Detener la transferencia A2DP (heredado)

Sub OCF: 0x02

Este comando se usa para detener la transmisión de descarga de A2DP.

Parámetro de comando Tamaño Propósito
N/A Lista de parámetros de comando vacía.

No se definieron parámetros para este comando.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Sub_Opcode 1 octeto 0x02: Detener la descarga de A2DP

Detener la transferencia A2DP

Sub OCF: 0x04

Este comando se usa para detener la transmisión de descarga de A2DP.

Parámetro de comando Tamaño Propósito
Connection Handle 2 octetos Identificador de la conexión HCI activa
L2CAP_Channel_ID 2 octetos Identificador del canal L2CAP abierto para la transmisión de A2DP
Data_Path_Direction 1 octeto 0x00: Salida (fuente/combinación de AVDTP)
0x01: Entrada (receptor/división de AVDTP)

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Sub_Opcode 1 octeto 0x04: Detener la delegación de A2DP

Comando Bluetooth Quality Report

La función del comando BT Quality Report inicia el mecanismo en el controlador de Bluetooth para informar los eventos de calidad de Bluetooth al host. Puedes habilitar cuatro opciones:

  • Modo de supervisión de la calidad: El controlador envía periódicamente un subevento de BQR relacionado con la calidad del vínculo al host.
  • Acercamiento al LSTO: Si no se reciben paquetes del dispositivo BT conectado durante más de la mitad del valor de tiempo de espera de supervisión de vínculo (LSTO), el controlador informa un evento de acercamiento al LSTO al host.
  • Audio A2DP entrecortado: Cuando el controlador detecta factores que provocan audio entrecortado, informa un evento de audio A2DP entrecortado al host.
  • (e)SCO Voice Choppy: Cuando el controlador detecta factores que provocan una voz entrecortada, informa un evento (e)SCO Voice Choppy al host.
  • Inflamación de raíz: El controlador envía este evento a la pila cuando el HAL o el controlador detectan un error irrecuperable y necesitan reiniciar Bluetooth.
  • Registro de mensajes de LMP/LL: El controlador envía al host el protocolo de enlace del mensaje de LMP/LL con el dispositivo remoto.
  • Registro de programación de coexistencia o de varios perfiles de Bluetooth: El controlador envía al host su información de programación sobre el manejo de varios perfiles de Bluetooth y la coexistencia inalámbrica en la banda de 2.4 GHz.
  • Mecanismo de información de depuración del controlador: Cuando está habilitado, el controlador puede informar de forma autónoma la información de registro de depuración a través del subevento de información de depuración del controlador al host.
  • LE Audio Choppy: Cuando el controlador detecta factores que provocan audio entrecortado, informa un evento LE Audio Choppy al host.
  • Modo Advance RF Stats: El controlador informa su información relacionada con las estadísticas de RF al host, lo que admite dos casos de uso de informes:
    • Informes periódicos
    • Activadores de eventos (activador de eventos de inicio o detención de la transmisión y de calidad del vínculo)
  • El mecanismo de supervisión del estado del controlador proporciona al host información relacionada con el estado a través de dos tipos de eventos: informes periódicos y activados por eventos.
  • BQR_Report_Action del comando Bluetooth Quality Report: El host puede usar este comando HCI para obtener una consulta única para el modo de supervisión de calidad, el modo de supervisión de energía o un modo de estadísticas de RF avanzadas.

OCF: 0x15E

Parámetro de comando Tamaño Propósito
BQR_Report_Action 1 octeto Es la acción para agregar o borrar la generación de informes de los eventos de calidad establecidos en el parámetro BQR_Quality_Event_Mask, o bien borrar todos los eventos.

0x00: Agregar
0x01: Borrar
0x02: Borrar
0x03: Consulta única

Si borras los eventos, se quitará el registro de eventos de calidad específicos.
Clear borrará todos los informes de eventos de calidad (se puede ignorar el parámetro BQR_Quality_Event_Mask).

BQR_Quality_Event_Mask 4 octetos Son máscaras de bits para los informes de eventos de calidad seleccionados.

Bit 0: Se configura para habilitar el modo de supervisión de calidad.
Bit 1: Se establece para habilitar el evento de LSTO de acercamiento (para ACL/(e)SCO/ISO).
Bit 2: Se establece para habilitar el evento de audio entrecortado de A2DP.
Bit 3: Se configura para habilitar el evento de voz entrecortada de eSCO.
Bit 4: Se establece para habilitar el evento de inflamación de la raíz.
Bit 5: Se configura para habilitar el modo de supervisión de energía.
Bit 6: Se configura para habilitar el evento de audio LE entrecortado.
Bit 7: Se establece para habilitar el evento de falla de conexión.
Bit 8: Se establece para habilitar el activador de eventos del modo Advance RF Stats.
Bit 9: Se establece para habilitar el informe periódico de estadísticas de RF avanzadas.
Bit 10: Se configura para habilitar el activador de eventos del mecanismo de supervisión del estado del controlador. (Se agregó en BQRv7)
Bit 11: Se configura para habilitar el mecanismo de informes periódicos de supervisión del estado del controlador. (se agregó en la versión 7 de BQR)
Bits 12 a 14: Reservados.
Bit 15: Se configura para habilitar eventos de calidad específicos del proveedor.
Bit 16: Se establece para habilitar el registro de mensajes de LMP/LL.
Bit 17: Se establece para habilitar el registro de programación de Multi-link/Coex de Bluetooth.
Bit 18: Se configura para habilitar el mecanismo de información de depuración del controlador.
Bit 19: Se reserva para la información de depuración de descarga.
Bit 20: Activador de eventos de volcado del historial de UART. (se agregó en la versión 7 de BQR)
Bits del 21 al 30: Reservados.
Bit 31: Se establece para habilitar el registro específico del proveedor.

BQR_Minimum_Report_Interval 2 octetos Define el intervalo de tiempo mínimo de los informes de eventos de calidad para los eventos de calidad seleccionados. El firmware del controlador no debe informar el próximo evento dentro del intervalo de tiempo definido. El parámetro de configuración del intervalo debe ser respectivo y exclusivo para los eventos de calidad que se agregan.

Unidad: ms
Valor predeterminado: 0 (sin limitación para el intervalo)
Rango: 0 a 65535 ms

BQR_Vendor_Specific_Quality_Event_Mask 4 octetos Son máscaras de bits para los informes de eventos de calidad específicos del proveedor seleccionados.
Este parámetro solo es válido cuando se establece el bit 15 de BQR_Quality_Event_Mask.

Bits del 0 al 31: Reservados.

BQR_Vendor_Specific_Trace_Mask 4 octetos Son máscaras de bits para los informes de seguimiento específicos del proveedor seleccionados.
Este parámetro solo es válido cuando se establece el bit 31 de BQR_Quality_Event_Mask.

Bits del 0 al 31: Reservados.

Report_interval_multiple 4 octetos Es el multiplicador de BQR_Minimum_Report_Interval. Cuando este valor es >= 1, el intervalo del informe de BQR sigue el formato
. Intervalo del informe de BQR = Intervalo_mínimo_del_informe_de_BQR x Múltiplo_del_intervalo_del_informe.
El firmware del controlador no debe registrar el siguiente evento dentro del intervalo de tiempo definido. El parámetro de configuración de intervalo está dedicado específicamente a los eventos de calidad agregados.

Unidad: ms
Valor predeterminado: 1
Rango: 0 a 4294967295 (0: es igual a 1)

Nota: Si el parámetro de configuración de BQR_Report_Interval es mayor que la capacidad del controlador, este debe devolver el tiempo máximo de BQR_Report_Interval cuando se complete el comando.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Current_Quality_Event_Mask 4 octetos Indica el parámetro de configuración de la máscara de bits actual.
Bit 0: El modo de supervisión de calidad está habilitado.
Bit 1: Se habilitaron los informes de eventos de aproximación a la LSTO.
Bit 2: Se habilitaron los informes de eventos de audio A2DP entrecortado.
Bit 3: Se habilitó el informe de eventos de voz entrecortada de (e)SCO.
Bit 4: Se habilitó el informe de eventos de inflamación de la raíz.
Bit 5: Se habilitó el modo de supervisión de energía.
Bit 6: Se habilitaron los informes de eventos de audio LE entrecortado.
Bit 7: Evento de falla de conexión.
Bit 8: Se establece para habilitar el activador de eventos del modo Advance RF Stats.
Bit 9: Se configura para habilitar el informe periódico de estadísticas avanzadas de RF.
Bit 10: Se establece en el activador de eventos del mecanismo de supervisión del estado del controlador habilitado.
Bit 11: Se establece para que el mecanismo de supervisión del estado del controlador habilitado informe periódicamente.
Bits 12 a 14: Reservados.
Bit 15: Se habilitó el registro de eventos de calidad específicos del proveedor.
Bit 16: Se habilitó el registro de mensajes de LMP/LL.
Bit 17: Se habilitó el registro de programación de Multi-link/Coex de Bluetooth.
Bit 18: El mecanismo de información de depuración del controlador está habilitado.
Bit 19: Reservado para la información de depuración de descarga
Bit 20: Activador de eventos de volcado del historial de UART
Bits del 21 al 30: Reservados.
Bit 31: El registro de seguimiento específico del proveedor está habilitado.
Current_Vendor_Specific_Quality_Event_Mask 4 octetos Indica el parámetro de configuración de la máscara de bits actual.
Current_Vendor_Specific_Trace_Mask 4 octetos Indica el parámetro de configuración de la máscara de bits actual.
BQR_Report_interval 4 octetos Indica el parámetro de configuración de la máscara de bits actual.
Current_Vendor_Specific_Trace_Mask 4 octetos Es el parámetro de configuración de BQR_Report_interval. Debe ser el valor mínimo entre BQR_Minimum_Report_Interval * Report_interval_multiple o el intervalo de asistencia máximo del controlador.

Comando de búfer de audio dinámico

El búfer de audio dinámico reduce las fallas de audio, ya que cambia el tamaño del búfer de audio en el controlador de Bluetooth según diferentes situaciones.

OCF: 0x15F

Obtener la capacidad de tiempo de búfer de audio

Sub OCF: 0x01

Usa este comando para obtener la capacidad de tiempo de búfer de audio del controlador Bluetooth.

Parámetro de comando Tamaño Propósito
N/A Lista de parámetros de comando vacía

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Dynamic_Audio_Buffer_opcode 1 octeto 0x01: Obtén el tiempo de búfer de audio
Audio_Codec_Type_Supported 4 octetos Máscaras de bits para los tipos de códecs admitidos
Bit 0: SBC
Bit 1: AAC
Bit 2: APTX
Bit 3: APTX HD
Bit 4: LDAC
Los bits del 5 al 31 están reservados
Audio_Codec_Buffer_Default_Time_For_Bit_0 2 octetos Tiempo de búfer predeterminado del tipo de códec Bit 0 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec del bit 0.
Unidad: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 2 octetos Tiempo de búfer máximo del tipo de códec Bit 0 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec del bit 0.
Unidad: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 2 octetos Tiempo de búfer mínimo del tipo de códec Bit 0 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec del bit 0.
Unidad: ms
Audio_Codec_Buffer_Default_Time_For_Bit_1 2 octetos Tiempo de búfer predeterminado del tipo de códec de Bit 1 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec de bit 1.
Unidad: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 2 octetos Tiempo de búfer máximo del tipo de códec de bit 1 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec de bit 1.
Unidad: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 2 octetos Tiempo de búfer mínimo del tipo de códec Bit 1 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec de bit 1.
Unidad: ms
...... ...... ......
Audio_Codec_Buffer_Default_Time_For_Bit_31 2 octetos Tiempo de búfer predeterminado del tipo de códec de bit 31 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec del bit 31.
Unidad: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 2 octetos Tiempo de búfer máximo del tipo de códec Bit 31 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec del bit 31.
Unidad: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 2 octetos Tiempo de búfer mínimo del tipo de códec Bit 31 especificado en Audio_Codec_Type_Supported.
Este valor debe ser 0 si no se admite el tipo de códec de bit 31.
Unidad: ms

Cómo establecer el tiempo de búfer de audio

Sub OCF: 0x02

Usa este comando para establecer el tiempo de búfer de audio en el controlador de Bluetooth.

Parámetro de comando Tamaño Propósito
Audio_Codec_Buffer_Time 2 octetos Tiempo de búfer de audio solicitado para el códec que se usa actualmente.
Unidad: ms

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Dynamic_Audio_Buffer_opcode 1 octeto 0x02: Establece el tiempo de búfer de audio
Audio_Codec_Buffer_Time 2 octetos Es el tiempo actual del búfer de audio en el controlador Bluetooth.
Unidad: ms

Evento de HCI (específico del proveedor)

En algunos casos, se requieren eventos de HCI específicos del proveedor. Consulta la figura 5.4 en la página 1897 de la especificación de BT Core 5.2. El parámetro de evento 0 siempre contendrá el primer código de subevento, según el cual se decodifica el resto del evento de HCI.

Parámetro del evento Tamaño Propósito
HCI_vendor_specific_event_code 1 octeto 0xFF
sub_event_code 1 octeto Un código de subevento tendrá un tamaño de 1 octeto, el byte que sigue inmediatamente a la longitud del parámetro en el paquete de eventos de HCI.

Evento secundario de incumplimiento del umbral de almacenamiento

Este evento indica que se superó el umbral de almacenamiento.

Código de subevento = 0x54

Parámetro de subevento Tamaño Propósito
Ninguno

Evento secundario de cambio de estado de varios anuncios de LE

Este evento indica que una instancia de publicidad cambió su estado. En este momento, este evento solo se usa para indicar qué instancia de publicidad se detuvo como resultado de una conexión.

Código de subevento = 0x55

Parámetro de subevento Tamaño Propósito
Advertising_instance 1 octeto Identifica la instancia de publicidad específica.
Los valores válidos son del 0 al max_advt_instances-1.
State_Change_Reason 1 octeto 0x00: Se recibió la conexión
Connection_handle 2 octetos Identifica la conexión que provocó que se inhabilitara la instancia de advt (0xFFFF si no es válida).

Evento secundario de seguimiento de anuncios de LE

Este evento indica cuándo se encuentra o se pierde un anunciante.

Código de subevento = 0x56

Parámetro de subevento Tamaño Propósito
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
Advertiser_State 1 octeto 0x00: Se encontró al anunciante
0x01: Se perdió al anunciante
Advt_Info_Present 1 octeto 0x00: La información del anunciante (Advt_Info) está presente
0x01: La información del anunciante (Advt_Info) no está presente
Advertiser_Address 6 octetos Dirección pública o aleatoria
Advertiser_Address_Type 1 octeto 0x00: Dirección pública
0x01: Dirección aleatoria
Advt_Info Tx_Pwr[0]: 1 octeto
RSSI[0]: 1 octeto
Timestamp[0]: 2 octetos
Adv packet_len[0]: 1 octeto
Adv_packet[0]: Adv_packet_len octetos
Scan_data_resp_len[0]: 1 octeto
Scan_data_resp[0]: Scan_data_resp octetos

Evento secundario de información de depuración del controlador

Un controlador usa este evento para proporcionar información de depuración binaria a un host.

Código de subevento = 0x57

Parámetro de subevento Tamaño Propósito
debug_block_byte_offset_start 2 octetos Desplazamiento de bytes del bloque de depuración desde el inicio
last_block 1 octeto 0x00: Hay más datos de depuración
0x01: Último bloque binario; no hay más datos de depuración
cur_pay_load_sz 2 octetos Tamaño del bloque binario en un evento actual
Debug_Data Variable Datos de depuración de cur_payload_sz

Evento secundario de Informe de calidad de Bluetooth

Este evento indica una de las siguientes situaciones: Se produjo un evento de calidad de Bluetooth, el controlador subió el registro de mensajes de LMP/LL y el registro de programación de Bluetooth Multi-link/Coex, o el controlador volcó datos de información de depuración.

Parámetro de subevento Tamaño Propósito
Quality_Report_Id 1 octeto 0x01: Informes de calidad en el modo de supervisión.
0x02: Se acerca el LSTO.
0x03: A2DP Audio Choppy.
0x04: (e)SCO Voice Choppy.
0x05 a 0x06: Reservado.
0x07: El audio LE se entrecorta.
0x08: Error de conexión.
0x09 a 0xFF: Reservado.
Packet_Types 1 octeto 0x01: ID
0x02: NULL
0x03: POLL
0x04: FHS
0x05: HV1
0x06: HV2
0x07: HV3
0x08: DV
0x09: EV3
0x0A: EV4
0x0B: EV5
0x0C: 2-EV3
0x0D: 2-EV5
0x0E: 3-EV3
0x0F: 3-EV5
0x10: DM1
0x11: DH1
0x12: DM3
0x13: DH3
0x14: DM5
0x15: DH5
0x16: AUX1
0x17: 2-DH1
0x18: 2-DH3
0x19: 2-DH5
0x1A: 3-DH1
0x1B: 3-DH3
0x1C: 3-DH5
0x1D ~ 0x50: Reserved
0x51: ISO packet
0x52: 1M PHY
0x53: 2M PHY
0x54: Codec PHY S=2
0x55: Codec PHY S=8
0x56 ~ 0xFF: Reserved
Connection_Handle 2 octetos Es el identificador de conexión de ACL, (e)SCO o ISO.
Connection_Role 1 octeto Es el rol de ejecución de la conexión.
0x00: Central
0x01: Periférico
0x02 a 0xFF: Reservado.
TX_Power_Level 1 octeto Es el nivel de potencia de transmisión actual para el Connection_Handle especificado.

Este valor debe ser el mismo que el del controlador que responde al comando HCI_Read_Transmit_Power_Level de HCI.

RSSI 1 octeto [en dBm]

Valor del indicador de intensidad de señal recibida (RSSI) para el Connection_Handle especificado.
Este valor debe ser un valor absoluto de la intensidad de la señal del receptor.
Rango: De -127 a +20

SNR 1 octeto [en dB]

Valor de la relación señal/ruido (SNR) para el Connection_Handle especificado.
El controlador proporcionará el SNR promedio de todos los canales que utiliza la vinculación.

Unused_AFH_Channel_Count 1 octeto Indica la cantidad de canales sin usar en AFH_channel_map.
0x4F a 0xFF: Reservado.
AFH_Select_Unideal_Channel_Count 1 octeto Indica la cantidad de canales que tienen interferencias y mala calidad, pero que aún están seleccionados para AFH.
La especificación de Bluetooth permite un mínimo de 20 canales, por lo que, incluso si los 79 canales tienen interferencias y mala calidad, el controlador debe elegir al menos 20 canales para AFH.
LSTO 2 octetos Es el parámetro de configuración actual del tiempo de espera de la supervisión de vínculos.
Tiempo = N * 0.625 ms
Intervalo de tiempo: 0.625 ms a 40.9 s
Connection_Piconet_Clock 4 octetos Reloj de Piconet para el Connection_Handle especificado.
Este valor debe ser el mismo que el del controlador que responde al comando HCI_Read_Clock HCI con el parámetro "Which_Clock" de 0x01 (reloj de la piconet).
Unidad: N * 0.3125 ms (1 reloj Bluetooth)
Retransmission_Count 4 octetos Cantidad de retransmisiones desde el último evento.
Este recuento se restablecerá después de informar al host.
No_RX_Count 4 octetos No se registró ningún recuento de RX desde el último evento.
El recuento aumenta cuando no se recibe ningún paquete en el intervalo de tiempo programado o cuando el paquete recibido está dañado.
Este recuento se restablecerá después de informar al host.
NAK_Count 4 octetos Es el recuento de NAK (confirmación negativa) desde el último evento.
Este recuento se restablecerá después de informar al host.
Last_TX_ACK_Timestamp 4 octetos Es la marca de tiempo de la última confirmación de recibo de TX. Se basa en el reloj Bluetooth de la piconet central (CLK).
Unidad: N * 0.3125 ms (1 reloj Bluetooth)
Flow_Off_Count 4 octetos Cantidad de veces que el controlador recibe Flow-off (STOP) desde el último evento.
Este recuento se restablecerá después de informar al host.
Last_Flow_On_Timestamp 4 octetos Es la marca de tiempo de la última vez que se activó el flujo (GO). Se basa en el reloj Bluetooth de la unidad central de la piconet (CLK).
Unidad: N * 0.3125 ms (1 reloj Bluetooth)
Buffer_Overflow_Bytes 4 octetos [en Byte]

Es el recuento de desbordamientos del búfer desde el último evento.
El controlador cuenta cuántos bytes de datos se descartan.
Este recuento se restablecerá después de informar al host.

Buffer_Underflow_Bytes 4 octetos [en Byte]

Es el recuento de subejecuciones del búfer desde el último evento.
Este recuento se restablecerá después de informar al host.

bdaddr 6 octetos Dirección del dispositivo remoto
cal_failed_item_count 1 octeto Es el recuento de los elementos en los que falló la calibración.
TX_Total_Packets 4 octetos Es la cantidad de paquetes que se envían.
TX_UnAcked_Packets 4 octetos Es la cantidad de paquetes que no reciben una confirmación.
Este recuento se restablece después de informar al host.
TX_Flushed_Packets 4 octetos Es la cantidad de paquetes que no se envían desde su punto de vaciado.
Este recuento se restablece después de informar al host.
TX_Last_Subevent_Packets 4 octetos Es la cantidad de paquetes que la capa de vínculo transmite una PDU de datos de CIS en el último subevento de un evento de CIS.
Este recuento se restablece después de informar al host.
El valor es cero si no hay un valor válido para la vinculación.
CRC_Error_Packets 4 octetos Cantidad de paquetes recibidos con error de CRC desde el último evento.
Este recuento se restablece después de informar al host.
RX_Duplicate_Packets 4 octetos Es la cantidad de paquetes duplicados (retransmisiones) recibidos desde el último evento.
Este recuento se restablece después de informar al host.
RX_Unreceived_Packets 4 octetos La cantidad de paquetes no recibidos es la misma que el parámetro del comando LE READ ISO Link Quality (consulta la versión 5.4 de la especificación principal de Bluetooth). Las transmisiones asociadas son CIS y BIS.
Cuando se incrementa este valor, la capa de vínculo no recibe una carga útil específica en su punto de vaciado (en un CIS) o al final del evento con el que está asociado (en un BIS; consulte la sección 4.4.6.6 de la parte B del volumen 6 de la especificación principal de Bluetooth, versión 5.4).
Coex_Info_Mask 2 octetos Bit 0: CoexInvolvement: Se establece para indicar que se sospecha que hay actividades de coexistencia involucradas cuando se genera este informe (por ejemplo, cortes de A2DP y LSTO que se acerca).
Bit 1: Radio WL 2G activa: Se configura para indicar que la radio WLAN 2G está activa.
Bit 2: WL 2G Connected: Se configura para indicar que la radio WLAN 2G está activa y conectada.
Bit 3: WL 5G/6G Radio Active: Se configura para indicar que la radio WLAN 5G/6G está activa.
Bits 4 a 15: Reservados
Parámetro específico del proveedor (longitud total del parámetro - TBD) * octetos El proveedor del controlador puede obtener más parámetros específicos del proveedor.

Código de subevento = 0x58 [Quality_Report_Id = 0x05, evento de inflamación raíz]

Este evento indica que el HAL de Bluetooth o el controlador detectaron un error fatal y que se necesita la pila de Bluetooth para registrar esta situación y reiniciar. El controlador debe enviar un Root_Inflammation_Event a la pila de Bluetooth antes de enviar el primer fragmento de los eventos de información de depuración en cualquier caso.

El parámetro Error_Code contiene un código de error informado desde HAL/Controller, 0 si es un error específico del proveedor del chipset. Vendor_Specific_Error_Code contiene un código de error específico del proveedor del chipset del HAL o del controlador. Debe establecerse en 0 si el parámetro Error_Code no es 0. Los parámetros Error_Code y Vendor_Specific_Error_Code no deben ser 0 al mismo tiempo.

Parámetro de subevento Tamaño Propósito
Quality_Report_Id 1 octeto De 0x00 a 0x04: Reservado.
0x05: Inflamación de la raíz.
0x06 a 0xFF: Reservado.
Error_Code 1 octeto 0x00: Se incluye el código de error específico del proveedor del chipset.
0x01 a 0xFF: Se produjo una falla en el controlador. Consulta la especificación de Bluetooth [Vol 2], Parte D, Códigos de error para obtener una lista de códigos de error y descripciones.
Vendor_Specific_Error_Code 1 octeto 0x00: No se incluye ningún código de error específico del proveedor del chipset.
0x01 a 0xFF: Código de error específico del proveedor del chipset.
Parámetro específico del proveedor (Longitud total del parámetro - 4) * octetos El proveedor del controlador puede obtener más parámetros específicos del proveedor.

Código de subevento = 0x58 [Quality_Report_Id = 0x06, evento de supervisión de energía]

Este evento proporciona una instantánea del consumo de energía y los estados operativos del controlador Bluetooth durante un período específico. Este evento ayuda a los desarrolladores y los ingenieros a analizar cómo el controlador administra la energía, identificar qué actividades consumen más energía y solucionar problemas relacionados con la energía.

Los parámetros del informe hacen un seguimiento de las métricas clave, incluidas las siguientes:

  • Consumo actual promedio: Es el consumo general que usa el controlador.
  • Tiempo dedicado a diferentes estados: Es el tiempo total (en milisegundos) que el controlador dedica a un estado inactivo (suspensión/baja potencia) en comparación con un estado activo (conexión, transmisión o recepción de datos).
  • Recuentos de transición de estado: Es la cantidad de veces que el controlador cambia entre los estados inactivo y activo.
  • Tiempo dedicado a estados de radio específicos: Métricas separadas para el tiempo dedicado a la transmisión (Tx) y la recepción (Rx) para las vinculaciones BR/EDR (Bluetooth clásico) y LE (Bluetooth de bajo consumo).
  • Niveles de potencia de transmisión promedio: Es la potencia promedio (en dBm) que se usa para las transmisiones en vínculos BR/EDR y LE.
  • Actividad detallada de la cadena: Informa sobre el tiempo dedicado a las cadenas de transmisión o recepción activas, y distingue entre las operaciones de una cadena y las de dos, y entre los amplificadores de potencia internos (iPA) y externos (ePA).
  • Tiempo de actividad de la exploración: Es el tiempo que el controlador dedica a explorar activamente los dispositivos BR/EDR y LE.

Al examinar estos parámetros, los ingenieros pueden obtener información sobre la eficiencia energética del controlador y optimizar su rendimiento.

Parámetro de subevento Tamaño Propósito
Quality_Report_Id 1 octeto 0x06: Supervisión de energía
Average_Current_Consumption 2 octetos [en mA] Consumo de corriente promedio de todas las actividades que consume el controlador
Idle_Total_Time (suspensión) 4 octetos [en ms] Tiempo total en el estado de inactividad (estados de bajo consumo, suspensión).
Idle_Sate_Enter_Count 4 octetos Indica cuántas veces el controlador entra en estado de inactividad.
Active_Total_Time 4 octetos [en ms] Tiempo total en el estado activo (consultas, paginación, tráfico de ACL/SCO/eSCO/BIS/CIS, procesamiento de cualquier tarea).
Active_State_Enter_Count 4 octetos Indica cuántas veces el controlador ingresa a los estados activos.
BR_RDR_Tx_Total_Time 4 octetos [en ms] Tiempo total en el estado de Tx(transmisión para tráfico de ACL/SCO/eSCO) específico de BR/EDR.
BR_RDR_Tx_State_Enter_Count 4 octetos Indica cuántas veces el controlador ingresa al estado de transmisión específico de BR/EDR.
BR_RDR_Tx_Average_Power_Level 1 octeto [en dBm] Nivel de potencia de transmisión promedio de todas las vinculaciones BR/EDR
BR_RDR_Rx_Total_Time 4 octetos [en ms] Tiempo total en el estado de Rx específico de BR/EDR (recepción de tráfico de ACL/SCO/eSCO).
BR_RDR_Rx_State_Enter_Count 4 octetos [en ms] Indica cuántas veces el controlador ingresa en el estado de Rx específico de BR/EDR.
LE_Tx_Total_Time 4 octetos [en ms] Tiempo total en el estado de Tx específico de LE (transmisión para tráfico de publicidad de ACL/BIS/CIS o LE).
LE_Tx_State_Enter_Count 4 octetos Indica cuántas veces el controlador ingresa en el estado de Rx específico de BR/EDR.
LE_Tx_Average_Power_Level 1 octeto [en dBm] Nivel de potencia de transmisión promedio de todos los vínculos LE.
LE_Rx_Total_Time 4 octetos [en ms] Tiempo total en el estado de Rx específico de LE (recepción desde ACL/BIS/CIS o tráfico de exploración de LE).
LE_Rx_State_Enter_Count 4 octetos [en ms] Indica cuántas veces el controlador ingresa en el estado de Rx específico de LE.
Report_Time_Duration (Tiempo total) 4 octetos [en ms] Es la duración total para recopilar información relacionada con la energía.
RX_Active_One_Chain_Time 4 octetos [en ms] Es la duración de la actividad de RX en una cadena.
RX_Active_Two_Chain_Time 4 octetos [en ms] Es la duración del tiempo de RX activo en dos cadenas.
TX_iPA_Active_One_Chain_Time 4 octetos [en ms] Es la duración de la transmisión interna activa en una cadena.
TX_iPA_Active_Two_Chain_Time 4 octetos [en ms] Es la duración del TX interno activo en dos cadenas.
TX_ePA_Active_One_Chain_Time 4 octetos [en ms] Es la duración de la transmisión externa activa en una cadena.
TX_ePA_Active_Two_Chain_Time 4 octetos [en ms] Es la duración del tiempo de TX externo activo en dos cadenas.
BREDR_RX_Active_Scan_total_Time 4 octetos [en ms] Período (ms) en el tiempo activo de recepción de la exploración de BR/EDR
LE_RX_Active_Scan_total_Time 4 octetos [en ms] Período (ms) en el tiempo de actividad de recepción de la exploración de LE

Código de subevento = 0x58 [Quality_Report_Id = 0x09~0x0A, evento de estadísticas avanzadas de RF]

El evento Bluetooth Advanced RF (Radio Frequency) Stats proporciona métricas de rendimiento detalladas sobre el comportamiento de radio del controlador de Bluetooth. El evento se puede activar de dos maneras:

  • By Trigger (0x09): Se envía un informe único en respuesta a un comando específico.
  • Por Monitor (0x0A): El controlador envía informes periódicamente a un intervalo especificado.

Los parámetros del evento son, básicamente, contadores de paquetes que registran diversos comportamientos de la radio durante un período específico.

Métricas clave y su propósito
  • Estadísticas de potencia de transmisión: Estos contadores registran los paquetes enviados con diferentes configuraciones de potencia, y distinguen entre los amplificadores de potencia internos (iPA) y externos (ePA), y los diversos modos de diversidad de antenas (Div) o formación de haces (BF). Esto ayuda a determinar qué configuración de antena y energía se usa con más frecuencia.
  • Intervalos del indicador de intensidad de la señal recibida (RSSI): Estos parámetros categorizan los paquetes recibidos según la intensidad de la señal. Al proporcionar un recuento de paquetes dentro de rangos de RSSI específicos (p.ej., menos de -90 dBm, de -70 a -75 dBm), el informe ofrece una imagen clara de la calidad del vínculo. Una cantidad alta en los discretizaciones de "débil" (por ejemplo, < -90 dBm) indica una conexión deficiente.
  • Delta de RSSI: Esta métrica mide la diferencia en la intensidad de la señal entre las dos antenas receptoras (si corresponde). Los contadores registran cuántos paquetes tienen un delta de RSSI dentro de diferentes rangos. Una gran diferencia (p.ej., >11 dBm) puede sugerir interferencia o una obstrucción física, ya que una antena recibe una señal mucho más fuerte que la otra.
  • Cambio de antena y retransmisiones: El informe contabiliza la frecuencia con la que el controlador cambia de antena y hace un seguimiento de los paquetes retransmitidos (ReTX). Una gran cantidad de retransmisiones suele indicar una conexión débil o poco confiable, lo que requiere que se vuelvan a enviar los paquetes.
  • Calidad del canal: Estos parámetros proporcionan un resumen de alto nivel del estado de los diferentes canales de comunicación, y los clasifican como "Bueno", "Aceptable", "Malo" o "Muy malo" según su RSSI. Esto proporciona una descripción general inmediata del entorno de RF.
  • Cola de búfer de TX: En esta sección, se supervisa la cantidad de paquetes que esperan en el búfer de transmisión del controlador para diferentes tipos de vínculos, como ACL (vínculo lógico asíncrono orientado a la conexión), LECONN (conexión LE) y LEISOC (isócrono LE). Los conteos altos de búfer pueden indicar un cuello de botella o un problema con el flujo de datos del host al controlador.
Parámetro de subevento Tamaño Propósito
Quality_Report_Id 1 octeto 0x09: Advance RF Stats By Trigger
0x0A: Advance RF Stats By Monitor
Extension_info 1 octeto Es la información de la versión del BQR.
0x01 para BQRv6
0x02 para BQRv7
Report_Time_Period 4 octetos Es el período para recopilar información de rendimiento. Unidad: ms
TX_Power_iPA_BF 4 octetos Contador de paquetes de iPA BF
TX_Power_ePA_BF 4 octetos Contador de paquetes de BF de ePA
TX_Power_iPA_Div 4 octetos Contador de paquetes de la división de ePA
TX_Power_ePA_Div 4 octetos Contador de paquetes de la división de ePA
RSSI_chain_50 4 octetos El contador de paquetes de la cadena de RSSI es mayor que -50 dBm.
RSSI_chain_50_55 4 octetos Contador de paquetes de la cadena de RSSI entre -50 dBm y >-55 dBm
RSSI_chain_55_60 4 octetos Contador de paquetes de la cadena RSSI entre -55 dBm y -60 dBm
RSSI_chain_60_65 4 octetos Contador de paquetes de la cadena de RSSI entre -60 dBm y -65 dBm
RSSI_chain_65_70 4 octetos Contador de paquetes de la cadena de RSSI entre -65 dBm y -70 dBm
RSSI_chain_70_75 4 octetos Contador de paquetes de la cadena RSSI entre -70 dBm y >-75 dBm
RSSI_chain_75_80 4 octetos Contador de paquetes de la cadena RSSI entre -75 dBm y >-80 dBm
RSSI_chain_80_85 4 octetos Contador de paquetes de la cadena de RSSI entre -80 dBm y -85 dBm
RSSI_chain_85_90 4 octetos Contador de paquetes de la cadena de RSSI entre -85 dBm y -90 dBm
RSSI_chain_90 4 octetos Contador de paquetes de la cadena de RSSI < -90 dBm
RSSI_delta_2 4 octetos Contador de paquetes de delta de RSSI < 2 dBm
RSSI_delta_2_5 4 octetos Contador de paquetes del delta de RSSI entre 2 dBm y 5 dBm
RSSI_delta_5_8 4 octetos Contador de paquetes del delta de RSSI entre 5 dBm y 8 dBm
RSSI_delta_8_11 4 octetos Contador de paquetes del delta de RSSI entre 8 dBm y 11 dBm
RSSI_delta_11 4 octetos Contador de paquetes de delta de RSSI > 11 dBm
Antenna_Switch_Count 4 octetos Contador de paquetes del evento de cambio de antena
ReTX_iPA_BF 4 octetos Contador de paquetes de ReTX_iPA_BF en el período más reciente
ReTX_ePA_BF 4 octetos Contador de paquetes de ReTX_ePA_BF en el período más reciente
ReTX_iPA_Div 4 octetos Contador de paquetes de ReTX_iPA_Div en el período más reciente
ReTX_ePA_Div 4 octetos Contador de paquetes de ReTX_ePA_Div en el período más reciente
Channel_count_Good 1 octeto Cantidad de canales cuyo RSSI se encuentra dentro del intervalo 1 (menor que -90)
Channel_count_OK 1 octeto Cantidad de canales cuyo RSSI se encuentra dentro del intervalo 2 (de -90 a -76)
Channel_count_Bad 1 octeto Cantidad de canales cuyo RSSI se encuentra dentro del intervalo 3 (de -76 a -50)
Channel_count_VeryBad 1 octeto Cantidad de canales cuyo RSSI se encuentra dentro del intervalo 4 (mayor que -50)
TX_buffer_Queue_Count 4 octetos Contador del búfer de TX del controlador de estado de la cola de búfer en el período más reciente [0:3] ACL_1 [4:7] ACL_2 [8:11] LECONN_1 [12:15] LECONN_2 [16:19] LEISOC_1 [20:23] LEISOC_2 [24:27] LEBroadcast [28:31] rsvd

Código de subevento = 0x58 [Quality_Report_Id = 0x0B~0x0C, evento de supervisión del estado del controlador]

El evento de supervisión del estado del control Bluetooth proporciona un resumen del estado operativo del control. El evento se puede activar de dos maneras:

  • By Trigger (0x09): Se envía un informe único en respuesta a un comando específico.
  • Por Monitor (0x0A): El controlador envía informes periódicamente a un intervalo especificado.

El evento de supervisión del estado del controlador Bluetooth es una herramienta de diagnóstico que proporciona un resumen del estado operativo del controlador. Este evento forma parte del framework del Informe de calidad de Bluetooth (BQR) y se usa para depurar problemas de conectividad, administración de energía y sincronización. Se puede enviar como un informe único o periódicamente para proporcionar una supervisión continua.

Métricas clave y su propósito
  • Contadores de paquetes de HCI: El evento hace un seguimiento de la cantidad total de paquetes enviados desde el host al controlador y viceversa. Estos contadores son esenciales para depurar problemas con el transporte de la interfaz del controlador host (HCI), que es el canal de comunicación entre la pila de software y el chip del controlador Bluetooth.
  • Longitudes de paquetes: El evento informa la longitud del último paquete HCI enviado y recibido. Esto ayuda a verificar que los datos se transmitan correctamente y que no haya problemas de tamaño inesperados.
  • Recuento de señales de activación: El informe incluye la cantidad total de veces que se activaron los pines BT_Wake y HOST_Wake. Estas señales físicas son fundamentales para la administración de energía, ya que se usan para activar las entidades respectivas desde estados de bajo consumo. Supervisar estos recuentos ayuda a depurar problemas relacionados con la energía, como activaciones inesperadas o fallas para entrar en el modo de suspensión.
  • Marcas de tiempo: El evento proporciona varias marcas de tiempo, incluida la hora de la última señal de activación y el último restablecimiento de HCI. Estas marcas de tiempo ayudan a solucionar problemas relacionados con el tiempo y proporcionan un punto de referencia para saber cuándo ocurrieron ciertos eventos.
  • Temporizador de vigilancia: Una marca específica indica si el evento se generó como una advertencia anticipada de que el temporizador de vigilancia del controlador está a punto de vencer. Esta es una alerta crítica sobre posibles fallas o bloqueos del controlador.
  • Estado de la vinculación: En el informe, se resume el estado actual de las conexiones activas, incluida la cantidad total de vínculos BR/EDR, LE y CIS (Connected Isochronous Stream). También indica si hay vínculos SCO (síncronos y orientados a la conexión) activos. Esta información proporciona un resumen de la carga de conexión actual del controlador.
Parámetro de subevento Tamaño Propósito
Quality_Report_Id 1 octeto 0xB a 0xC
0x0B: Informes únicos o activados por eventos
0x0C: Informes periódicos.
Packet_Count_Host_to_Controller 4 octetos Recuento total de paquetes enviados desde el host al controlador a través del transporte HCI. Este campo se emplea para depurar problemas de HCI (por ejemplo, UART). Comportamiento: Los contadores se restablecen cuando el controlador recibe un restablecimiento de HCI.
Packet_Count_Controller_to_Host 4 octetos Es el recuento total de paquetes de eventos de HCI enviados al host. Este campo se utiliza para depurar la HCI (p.ej., UART). Comportamiento: Los contadores se restablecen cuando el controlador recibe un restablecimiento de HCI.
Last_Packet_Length_Host_to_Controller 2 octetos Longitud del último paquete HCI enviado a la UART del host. Nota: La longitud máxima del paquete HCI es de 2 octetos (incluye HCI, ACL, SCO, ISO).
Last_Packet_Length_Controller_To_host 2 octetos Longitud del último paquete HCI recibido de UART del host. Nota: La longitud máxima del paquete HCI es de 2 octetos (incluye HCI, ACL, SCO, ISO).
Total_BT_Wake_Count 4 octetos Es el recuento agregado de las aserciones de pines de BT_Wake por la entidad Host. Este campo sirve como herramienta de diagnóstico para depurar problemas relacionados con la energía. Comportamiento: Los contadores se restablecen cuando el controlador recibe un restablecimiento de HCI.
Total_HOST_Wake_Count 4 octetos Cálculo agregado de las aserciones del pin Host_Wake iniciadas por el controlador. Este campo sirve como herramienta de diagnóstico para depurar problemas relacionados con la energía. Comportamiento: Los contadores se restablecen cuando el controlador recibe un restablecimiento de HCI.
Last_BT_Wake_TimeStamp 4 octetos Es la marca de tiempo de la última vez que el host confirmó el pin BT_Wake.Este campo se implementó con el propósito de depurar problemas de energía.
Last_HOST_Wake_TimeStamp 4 octetos Es la marca de tiempo más reciente en la que el controlador activó el pin Host_Wake. Este campo se utiliza para depurar problemas de energía.
Reset_Timestamp 4 octetos Es la marca de tiempo que indica la finalización del restablecimiento de HCI más reciente. Este campo se utiliza con el único propósito de facilitar la resolución de problemas relacionados con la sincronización. Debe servir como punto de grabación inicial con respecto al cual se hace referencia a todos los demás elementos.
Current_Timestamp 4 octetos Es la hora actual en la que se genera este evento. Este campo se utiliza para solucionar discrepancias de tiempo. Debe servir como punto de grabación del activador al que hacen referencia todos los demás elementos.
Is_WatchDog_Timer_About_To_Expire 4 octetos Es una marca para indicar que el controlador generó este evento de estado de salud como una advertencia anticipada del vencimiento del perro guardián. La marca de tiempo actual sirve para indicar la hora de ocurrencia.
Coex_Status_Mask 2 octetos Bit 0: Reservado
Total_Links_BR_EDR_LE_Active 1 octeto Es el recuento total de vínculos de BR/EDR/LE en estado activo.
Total_Links_BR_EDR_Sniff 1 octeto Es el recuento total de vínculos de BR/EDR en estado de detección o inactivo.
Total_Links_CIS 1 octeto Es el recuento total de vínculos de la ISO.
Is_SCO_Active 1 octeto Indicador para verificar si la vinculación SCO está activada actualmente.
Parámetro de subevento Tamaño Propósito
Quality_Report_Id 1 octeto 0x00 a 0x10: Reservado.
0x11: Es el registro de mensajes de LMP/LL.
0x12: Registro de programación de Coex/Multi-link de Bluetooth.
0x13: Volcado de datos de información de depuración del controlador.
0x14 a 0xFF: Reservado.
Connection_Handle 2 octetos Es el identificador de conexión.
Parámetro específico del proveedor (Longitud total del parámetro - 4) * octetos Formato específico del proveedor del registro de mensajes LMP, registro de programación de Bluetooth Multi-link/Coex y volcado de datos de información de depuración del controlador.

Código de evento secundario = 0x5C

Cuando se activa, este evento debe generarse durante cada intervalo de ISO.

Activación
La activación se realiza seleccionando el código del proveedor Data_Path_ID 0x19 en el comando estándar HCI_LE_Setup_ISO_Data_Path. Se debe aceptar el comando HCI_Configure_Data_Path con el parámetro Data_Path_ID establecido en 0x19 y el parámetro Vendor_Specific_Config_Length establecido en 0, incluso si no se espera ninguna acción del controlador al recibir este comando.
Punto de tiempo de envío
El evento se emite desde el inicio de un intervalo ISO (punto de anclaje CIG o BIG) hasta el intervalo ISO siguiente. El controlador indica la demora con el inicio efectivo del intervalo ISO a través de Anchor_Point_Delay.
Sincronización del control
Al comienzo de un intervalo de ISO, el controlador calcula StreamSN incrementando el valor actual en el ISO_Interval ÷ SDU_Interval configurado. En el primer intervalo, se inicializa en 0.
Luego, para cada paquete en la FIFO de ISO, se aplica lo siguiente:
  • El controlador calcula la diferencia de ajuste SNdiff entre los dos números de secuencia:
    SNdiff = (SDUSN - StreamSN + 0x10000) mod 0x10000
  • Cuando (SNdiff + (FT-1) × ISO_Interval ÷ SDU_Interval) mod 0x10000 <= (FT-1) × ISO_Interval ÷ SDU_Interval:
    El paquete está en la ventana de retransmisión. Se debería haber programado para su transmisión en intervalos anteriores y ahora está disponible para su retransmisión. Si no es así (no se programó para su transmisión), se considera que se recibió tarde. Esto se debe indicar al host con In_Status. Estos paquetes se pueden descartar o programar para su transmisión. La elección se define en la implementación.
  • O bien, cuando SNdiff < ISO_Interval ÷ SDU_Interval:
    El paquete se programa para la transmisión desde este evento hasta que se agota el tiempo de espera de vaciado.
  • O bien, cuando SNdiff >= ISO_Interval ÷ SDU_Interval y SNdiff <= Max_Forward_Buffers:
    El paquete está en el futuro; se transmitirá con un evento posterior. Como los paquetes se envían en orden, esta condición finaliza la búsqueda de paquetes para este intervalo.
    Los búferes que usa el host no se comunican al controlador, pero se limitan a Max_Forward_Buffers = 16.
  • O bien cuando no se cumple ninguna de las condiciones anteriores:
    Se descarta el paquete, se alcanza el límite de tiempo de espera de vaciado o se recibe un paquete con formato incorrecto.

Parámetro de subevento Tamaño Propósito
Connection_Handle 2 octetos Identificador de conexión del CIS o BIS
Rango: de 0x0000 a 0x0EFF
Sequence_Number 2 octetos Número de secuencia de la transmisión, administrado por el controlador.

Se inicializa en 0 cuando se crea el CIS o el BIS, y se incrementa en la cantidad de SDU por intervalo isócrono de ISO, definido como ISO_interval ÷ SDU_Interval, en cada intervalo de ISO.
Anchor_Point_Delay 2 octetos Es la demora en microsegundos entre la generación del evento y el punto de anclaje BIG o CIG efectivo, o el inicio del intervalo ISO. La marca de tiempo del punto de anclaje efectivo se define de la siguiente manera:
Event generation time - Anchor_Point_Delay

Rango: De 0 al intervalo ISO en microsegundos
In_Status 2 octetos Estado del búfer ISO del controlador

Al comienzo de un intervalo ISO, cada bit bi se establece cuando la SDU (Sequence_Number + i) mod 0x10000 está disponible. Cuando no está disponible, la SDU se identifica como Not received from the host.

El valor i varía de 0 a ISO_Interval ÷ SDU_Interval - 1. Para otros valores de i, los bits se establecen en 0.
Tx_Status 2 octetos Estado de transmisión, en relación con las SDU con números de secuencia:
(Sequence_Number - Flush_Timeout × ISO_Interval ÷ SDU_Interval + i + 0x10000) mod 0x10000

Cada bit bi se establece cuando todas las PDU de la SDU identificada, por su número de secuencia, se transmitieron y se confirmaron correctamente.

El valor i varía de 0 a ISO_Interval ÷ SDU_Interval - 1. Para otros valores de i, los bits se establecen en 0.
En un grupo de transmisión, siempre se debe confirmar la transmisión.

Compatibilidad con varias cuentas de anunciantes

Los objetivos de la compatibilidad con varias cuentas de anunciantes son los siguientes:

  • Capacidad para admitir varios anuncios (max_advt_instances)
  • Diferentes potencias de transmisión para permitir un rango variable
  • Contenido publicitario diferente
  • Una respuesta individualizada para cada anunciante
  • Privacidad (no se puede hacer un seguimiento) para cada anunciante
  • Conectable

Para mantener esta especificación cerca de los estándares existentes, se proporcionan los siguientes comandos específicos del proveedor. Se derivan de la especificación principal de Bluetooth 4.1.

LE_Multi_Advt_Command

OCF: 0x154

Parámetro de comando Tamaño Propósito
Multi_advt_opcode 1 octeto 0x01: Set_Advt_Param_Multi_Sub_Cmd
0x02: Set_Advt_Data_Multi_Sub_Cmd
0x03: Set_Scan_Resp_Data_Multi_Sub_Cmd
0x04: Set_Random_Addr_Multi_Sub_Cmd
0x05: Set_Advt_Enable_Multi_Sub_Cmd

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Multi_advt_opcode 1 octeto 0x01: Set_Advt_Param_Multi_Command
0x02: Set_Advt_Data_Multi_Command
0x03: Set_Scan_Resp_Data_Multi_Command
0x04: Set_Random_Addr_Multi_Command
0x05: Set_Advt_Enable_Multi_Command

LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd

Referencia base: Especificación de Bluetooth Core 4.1, página 964 (comando LE Set Advertising Parameter)

Sub OCF: 0x01

Parámetro del subcomando Tamaño Propósito
Advertising_Interval_Min Por especificación Por especificación
Advertising_Interval_Max Por especificación Por especificación
Advertising_Type Por especificación Por especificación
Own_Address_Type Por especificación Por especificación
Own_Address Por especificación Por especificación
Direct_Address_Type Por especificación Por especificación
Direct_Address Por especificación Por especificación
Advertising_Channel_Map Por especificación Por especificación
Adverstising_Filter_Policy Por especificación Por especificación
Advertising_Instance 1 octeto Especifica la aplicabilidad de los parámetros anteriores a una instancia.
Tx_power 1 octeto Transmit_Power
Unidad: En dBm (número entero con signo)
Rango: De -70 a +20

El parámetro Own_Address podría ser una dirección configurada por el host en el momento de configurar esta instancia de varios anuncios. Esto permite tener una dirección privada resoluble en el momento de la transmisión de la primera baliza. La publicidad en una instancia continuará independientemente de la conexión. La pila de BT del host podría emitir un comando para iniciar la publicidad en una instancia después de la conexión.

Se generará un evento de Command Complete para este comando, como se especifica en la especificación de Bluetooth Core 4.1, según el comando anterior. El controlador responderá con un código de error (parámetro no válido) si la instancia de publicidad o los parámetros de Tx_Power no son válidos.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Multi_advt_opcode 1 octeto 0x01 [Set_Advt_Param_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd

Referencia base: Especificación de Bluetooth Core 4.1, página 969 (comando LE Set Advertising Data)

Sub OCF: 0x02

Parámetro del subcomando Tamaño Propósito
Advertising_Data_Length Por especificación Por especificación
Advertising_Data Por especificación Por especificación
Advertising_Instance 1 octeto Especifica la aplicabilidad de los parámetros anteriores a una instancia.

Se generará un evento de Command Complete para este comando, como se especifica en la especificación de Bluetooth Core 4.1, según el comando anterior. El controlador responderá con un código de error si la instancia de publicidad o los parámetros de Tx_Power no son válidos.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Multi_advt_opcode 1 octeto 0x02 [Set_Advt_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd

Referencia base: Especificación de Bluetooth Core 4.1, página 970 (comando de datos de respuesta de análisis de LE Set)

Sub OCF: 0x03

Parámetro del subcomando Tamaño Propósito
Scan_Response_Data_Length Por especificación Por especificación
Scan_Response_Data Por especificación Por especificación
Advertising_Instance 1 octeto Especifica la aplicabilidad de los parámetros anteriores a una instancia.

Se generará un evento de Command Complete para este comando, como se especifica en la especificación de Bluetooth Core 4.1, según el comando anterior. El controlador responderá con un código de no éxito (parámetro no válido) si la instancia de publicidad o los parámetros de Tx_Power no son válidos.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Multi_advt_opcode 1 octeto 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd

Referencia base: Especificación de Bluetooth Core 4.1, página 963 (comando LE Set Random Address)

Sub OCF: 0x04

Parámetro del subcomando Tamaño Propósito
Dirección aleatoria Por especificación Por especificación
Advertising_Instance 1 octeto Especifica la aplicabilidad de los parámetros anteriores a una instancia.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Multi_advt_opcode 1 octeto 0x04 [Set_Random_Addr_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd

Referencia base: Especificación de Bluetooth Core 4.1, página 971 (comando LE Set Advertise Enable en esa especificación de Core)

OCF: 0x05

Parámetro del subcomando Tamaño Propósito
Advertising_Enable 1 octeto Un valor de 1 significa habilitar. Cualquier otro valor significa inhabilitar.
Advertising_Instance 1 octeto Especifica la aplicabilidad de los parámetros anteriores a una instancia. La instancia 0 significa una instancia de HCI estándar.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Multi_advt_opcode 1 octeto 0x05 [Set_Advt_Enable_Multi_Sub_Cmd]

Resolución descargada de la dirección privada

Esta función resuelve una dirección privada en el firmware o el hardware del controlador, lo que proporciona los siguientes beneficios:

  • Latencia involucrada con el host en la resolución de una dirección privada
  • Ahorro de energía al evitar activar el host

LE_Set_RPA_Timeout

OCF: 0x15C

Parámetro de comando Tamaño Propósito
LE_local_IRK 16 octetos Es el IRK del dispositivo local que se usa para generar las direcciones aleatorias que se pueden resolver.
tRPA_min 2 octetos Es el tiempo de espera mínimo para la generación de RPA en segundos. El controlador debe generar nuevas direcciones que se puedan resolver para cualquier evento de publicidad, exploración o conexión en este tiempo de espera o después de él.
Rango válido: de 300 a 1,800
tRPA_max 2 octetos Es el tiempo de espera máximo para la generación de RPA en segundos. El controlador debe generar nuevas direcciones que se puedan resolver para cualquier evento de publicidad, exploración o conexión antes de este tiempo de espera o en ese momento.
Rango válido: tRPA_min a 1800
Parámetro de devolución Tamaño Propósito
Status 1 octeto Es el estado del comando.

Valores de estado de HCI sugeridos:
0x00 Success
0x01 Unknown command (si no se admite)
0x12 Invalid command parameters (si algún parámetro está fuera del rango determinado)

LE_RPA_offload_Command

OCF: 0x155

Parámetro de comando Tamaño Propósito
RPA_offload_opcode 1 octeto 0x1: Habilita la función específica del cliente
0x2: Agrega la clave de revocación de identidad a la lista
0x3: Quita la clave de revocación de identidad de la lista
0x4: Borra la lista de claves de revocación de identidad
0x5: Lee la entrada de la lista de claves de revocación de identidad

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Event_RPA_offload_opcode 1 octeto 0x1: Habilita la función específica del cliente
0x2: Agrega la clave de revocación de identidad a la lista
0x3: Quita la clave de revocación de identidad de la lista
0x4: Borra la lista de claves de revocación de identidad
0x5: Lee la entrada de la lista de claves de revocación de identidad

LE_RPA_offload: Enable_cust_specific_sub_Command

Sub OCF: 0x01

Parámetro del subcomando Tamaño Propósito
enable_customer_specific_feature_set 1 octeto 0x01: Habilita la función de RPA descargada.
0x00: Inhabilita la función de RPA descargada.

El host debe habilitar la descarga de RPA según la capacidad del chip. Consulta el LE_Get_Vendor_Capabilities_Command. Cada chip puede tener un max_irk_list_sz diferente en el firmware.

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Event_cust_specific_feature_opcode 1 octeto 0x01 [Habilita la función específica para el cliente]

LE_RPA_offload: Add_IRK_to_list_sub_Command

Sub OCF: 0x02

Parámetro del subcomando Tamaño Propósito
LE_IRK 16 octetos LE IRK (LSB del 1ᵉʳ byte)
Address_Type 1 octeto 0: Dirección pública
1: Dirección aleatoria
LE_Device_Address 6 octetos Dirección pública o aleatoria asociada al IRK (LSB del 1ᵉʳ byte)

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Event_cust_specific_feature_opcode 1 octeto 0x02 [Agrega el IRK a la lista]
LE_IrkList_AvailableSpaces 1 octeto Entradas de la lista de IRL disponibles después de la operación actual

LE_RPA_offload: Remove_IRK_to_list_sub_Command

Sub OCF: 0x03

Parámetro del subcomando Tamaño Propósito
Address_Type 1 octeto 0: Dirección pública
1: Dirección aleatoria
LE_Device_Address 6 octetos Dirección pública o aleatoria que se asocia con el IRK

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Event_cust_specific_feature_opcode 1 octeto 0x03 [Quitar IRK de la lista]
LE_IrkList_AvailableSpaces 1 octeto Entradas de la lista de IRL disponibles después de la operación actual

LE_RPA_offload: Clear_IRK_list_sub_Command

Sub OCF: 0x04

Parámetro del subcomando Tamaño Propósito
Ninguno

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Event_cust_specific_feature_opcode 1 octeto 0x04 [Borrar lista de IRK]
LE_IrkList_AvailableSpaces 1 octeto Entradas de la lista de IRL disponibles después de la operación actual [max_irk_list_sz]

LE_RPA_offload: Read_IRK_list_sub_Command

Sub OCF: 0x05

Parámetro del subcomando Tamaño Propósito
LE_read_IRK_list_entry-index 1 octeto Índice de la lista de IRK [0, max_irk_list_sz-1]

Se generará un evento de Command Complete para este comando.

Parámetro de devolución Tamaño Propósito
Status 1 octeto Estado de Command Complete
Event_cust_specific_feature_opcode 1 octeto 0x05 [Leer entrada de la lista de IRK]
LE_Read_IRK_List_entry 1 octeto Índice del IRK que el host desea leer (el tamaño máximo de la lista de IRK es 32)
LE_IRK 16 octetos Valor del IRK
Address_Type 1 octeto 0: Dirección pública
1: Dirección aleatoria
LE_Device_Address 6 octetos Dirección pública o aleatoria asociada al IRK
LE_Resolved_Private_Address 6 octetos Dirección privada actual resuelta y resoluble de esta clave IRK

Transferencia de detección

La función Sniff Offload descarga la administración del modo Sniff de la pila de host de Bluetooth al controlador de Bluetooth. Esto permite que el controlador administre el tiempo de entrada y salida del modo Sniff, y que aplique parámetros configurables de Sniff y de subclasificación de Sniff, mientras que el host conserva el control sobre la selección de parámetros en función de los cambios en la actividad del perfil de Bluetooth.

Estados de descarga de Sniff

En esta sección, se definen los estados dentro de un controlador Bluetooth con respecto a la función Sniff Offload. Se definieron dos estados globales para identificar el estado de un controlador Bluetooth con respecto a la habilitación de la descarga de Sniff. Se definieron dos estados específicos de la conexión para identificar el estado de una conexión BR/EDR cuando el controlador Bluetooth está en el estado Sniff Offload Enabled.

Estados globales

Se definieron dos estados globales para identificar el estado de un controlador Bluetooth con respecto a la habilitación de la descarga de Sniff.

Estado de desactivación de la descarga de detección

De forma predeterminada, se considera que un controlador Bluetooth está en el estado "Sniff Offload Disabled". Se espera que el controlador Bluetooth controle los comandos HCI_Sniff_Mode, HCI_Exit_Sniff_Mode y HCI_Sniff_Subrating que se emiten desde un host Bluetooth. El controlador de Bluetooth también debe reenviar los eventos HCI_Mode_Change y HCI_Sniff_Subrating a un host de Bluetooth según la máscara de eventos establecida por el host de Bluetooth.

Estado de habilitación de la descarga de detección

Se considera que un controlador Bluetooth está en estado "Descarga de detección habilitada" después de que haya controlado correctamente un "WriteSniffOffloadEnable" para habilitar la descarga de detección. En este estado, se espera que el controlador de Bluetooth reenvíe los eventos HCI_Mode_Change y HCI_Sniff_Subrating a un host de Bluetooth según lo decida una función AND lógica de la máscara de eventos establecida por el host de Bluetooth y los indicadores de supresión de eventos.

Estados específicos de la conexión

Cuando un controlador Bluetooth está en estado "Descarga de detección habilitada", cada ACL activa puede estar en uno de los dos estados que se describen a continuación.

Estado de parámetro pendiente

Se considera que una ACL está en estado "Pending-Parameters" cuando el controlador de Bluetooth está en estado "Sniff Offload Enabled", pero el host de Bluetooth no emitió al menos una vez el comando específico del proveedor "WriteSniffOffloadParameters" para la ACL presente.

Estado de Control iniciado

Se considera que una ACL está en estado "Control-Started" cuando el controlador de Bluetooth está en estado "Sniff Offload Enabled" y el host de Bluetooth emitió al menos una vez el comando específico del proveedor "WriteSniffOffloadParameters" para la ACL actual.

WriteSniffOffloadEnable

OCF: 0x310

Parámetro de comando Tamaño Propósito
Enable_Sniff_Offload 1 octeto 0x00 : Inhabilitar
0x01 : Habilitar
Subrating_Max_Latency 2 octetos El parámetro de latencia máxima se usará para calcular la subvelocidad máxima de detección que puede usar el dispositivo remoto. Valor predeterminado: Latencia de T*sniff* = N × 0.625 ms (1 ranura de banda base) Rango: 0x0002 a 0xFFFE Rango de tiempo: 1.25 ms a 40.9 s
Subrating_Min_Remote_Timeout 2 octetos Tiempo de espera mínimo del modo de detección (T*sniff_mode_timeout*) que puede usar el dispositivo remoto Valor predeterminado: 0x0000 Tiempo de espera = N × 0.625 ms (1 ranura de banda base) Rango: 0x0000 a 0xFFFE Rango de tiempo Rango: 0 s a 40.9 s
Subrating_Min_Local_Timeout 2 octetos Es el tiempo de espera mínimo del modo de detección (T*sniff_mode_timeout*) que puede usar el dispositivo local. Valor predeterminado: 0x0000 Tiempo de espera = N × 0.625 ms (1 ranura de banda base) Rango: 0x0000 a 0xFFFE Rango de tiempo: 0 s a 40.9 s
Suppress_Mode_Change_Event 1 octeto 0x00 : El controlador de Bluetooth debe informar el evento HCI Mode_Change al host, sujeto a la configuración establecida en el comando HCI_Set_Event_Mask.
0x01 : El controlador de Bluetooth no debe informar el evento HCI Mode_Change al host.
Suppress_Sniff_Subrating_Event 1 octeto 0x00 : El controlador de Bluetooth debe informar el evento HCI Sniff_Subrating al host, sujeto a la configuración establecida en el comando HCI_Set_Event_Mask.
0x01 : El controlador de Bluetooth no debe informar el evento HCI Sniff_Subrating al host.

WriteSniffOffloadParameters

OCF: 0x311

Parámetro de comando Tamaño Propósito
Connection_Handle 2 octetos Identificador de conexión ACL de BR/EDR de 16 bits. Rango: De 0x0000 a 0x0EFF
Sniff_Max_Interval 2 octetos – Rango definido por Bluetooth SIG, que se usa normalmente para ingresar al modo de rastreo. Rango: De 0x0002 a 0xFFFE; solo son válidos los valores pares. Rango obligatorio: De 0x0006 a 0x0540. Tiempo = N × 0.625 ms. Rango de tiempo: De 1.25 ms a 40.9 s. Casos especiales: 0x0000: Se usa para seleccionar el modo de descarga de detección activa. 0x0001 : Se usa para seleccionar el modo de descarga de detección “Prefer-Active”.
Sniff_Min_Interval 2 octetos Rango: 0x0002 a 0xFFFE; solo los valores pares son válidos. Rango obligatorio: 0x0006 a 0x0540 Tiempo = N × 0.625 ms. Rango de tiempo: 1.25 ms a 40.9 s
Sniff_Attempts 2 octetos Es la cantidad de ranuras de recepción de banda base para el intento de captura. Longitud = N × 1.25 ms. Intervalo: 0x0001 a 0x7FFF. Intervalo de tiempo: 1.25 ms a 40.9 s. Intervalo obligatorio para el controlador: 1 a T*sniff* ÷ 2
Sniff_Timeout 2 octetos Cantidad de ranuras de recepción de banda base para el tiempo de espera de la captura. Longitud = N × 1.25 ms. Rango: de 0x0000 a 0x7FFF. Rango de tiempo: de 0 ms a 40.9 s. Rango obligatorio para el controlador: de 0 a 0x0028
Link_Inactivity_Timeout 2 octetos Valor de tiempo de espera en milisegundos. El temporizador de inactividad de la conexión se inicia o restablece en cada transacción HCI-ACL. Cuando venza este temporizador, el controlador iniciará la entrada al modo de rastreo.
Subrating_Max_Latency 2 octetos El parámetro de latencia máxima se usará para calcular la subvelocidad máxima de detección que puede usar el dispositivo remoto. Valor predeterminado: Latencia de T*sniff* = N × 0.625 ms (1 ranura de banda base) Rango: 0x0002 a 0xFFFE Rango de tiempo: 1.25 ms a 40.9 s
Subrating_Min_Remote_Timeout 2 octetos Tiempo de espera mínimo del modo de detección (T*sniff_mode_timeout*) que puede usar el dispositivo remoto Valor predeterminado: 0x0000 Tiempo de espera = N × 0.625 ms (1 ranura de banda base) Rango: 0x0000 a 0xFFFE Rango de tiempo Rango: 0 s a 40.9 s
Subrating_Min_Local_Timeout 2 octetos Es el tiempo de espera mínimo del modo de detección (T*sniff_mode_timeout*) que puede usar el dispositivo local. Valor predeterminado: 0x0000 Tiempo de espera = N × 0.625 ms (1 ranura de banda base) Rango: 0x0000 a 0xFFFE Rango de tiempo: 0 s a 40.9 s
Allow_Exit_Sniff_On_Rx 1 octeto Es una marca para controlar la salida del modo Sniff en la transacción HCI-ACL de dirección de recepción. 0x00 : No salir de la captura en Rx. 0x01: Salir de Sniff en Rx Receive: La dirección HCI-ACL se define como transmisión de paquetes ACL del controlador al host a través de HCI.
Allow_Exit_Sniff_On_Tx 1 octeto Es una marca para controlar la salida del modo Sniff en la transacción HCI-ACL de dirección de transmisión. 0x00 : No salir de la captura en Tx. 0x01 : Exit Sniff on Tx Transmit-direction HCI-ACL se define como la transmisión de paquetes ACL del host al controlador a través de HCI.