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:
|
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: immediate0x01: on_found0x02: 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:
|
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:
|
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:
|
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_LengthSe ignora cuando APCF_Action es 0x02 (Borrar) |
APCF_AD_DATA_MASK |
Tamaño variable |
Tamaño variable, según APCF_AD_DATA_LengthSe 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:
Valor del bit
|
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.
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. Códec AAC:
Consulta los elementos de información específicos del códec AAC en A2DP v1.3 Códec LDAC:
Octetos del 0 al 3: ID del proveedor
Octeto 4-5: ID de códec
Octeto 6: Índice de velocidad de bits:
Octeto 7: Modo de canal LDAC 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
Si borras los eventos, se quitará el registro de eventos de calidad específicos. |
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. |
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 |
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 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á presente0x01: 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 octetoRSSI[0]: 1 octetoTimestamp[0]: 2 octetosAdv packet_len[0]: 1 octetoAdv_packet[0]: Adv_packet_len octetosScan_data_resp_len[0]: 1 octetoScan_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.
Código de subevento = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, evento relacionado con la calidad del vínculo]
| 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. |
SNR |
1 octeto |
[en dB]
Valor de la relación señal/ruido (SNR) para el Connection_Handle especificado. |
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. |
Buffer_Underflow_Bytes |
4 octetos |
[en Byte]
Es el recuento de subejecuciones del búfer desde el último evento. |
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. |
Código de subevento = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, evento relacionado con el volcado de registros]
| 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. |
Evento secundario de comentarios sobre vínculos de ISO
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 proveedorData_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 deAnchor_Point_Delay.
Sincronización del control
Al comienzo de un intervalo de ISO, el controlador calcula StreamSN incrementando el valor actual en elISO_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 conIn_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_IntervalySNdiff <= 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 aMax_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_Cmd0x02: Set_Advt_Data_Multi_Sub_Cmd0x03: Set_Scan_Resp_Data_Multi_Sub_Cmd0x04: Set_Random_Addr_Multi_Sub_Cmd0x05: 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_Command0x02: Set_Advt_Data_Multi_Command0x03: Set_Scan_Resp_Data_Multi_Command0x04: Set_Random_Addr_Multi_Command0x05: 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. |