La interfaz de controlador de host (HCI) se utiliza para interactuar con un controlador Bluetooth.
Este documento proporciona una lista de los requisitos de HCI de Bluetooth (BT) y Bluetooth Low Energy (BLE). El objetivo es que los proveedores de pilas Host BT y los proveedores de controladores BT cumplan con estos requisitos de la plataforma para utilizar el conjunto de funciones que se describe a continuación.
Este documento se refiere a la especificación Bluetooth Core 5.2 como la "especificación". La especificación Bluetooth Core 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 lanzamientos de software, OEM, proveedores y capacidades de plataforma y chip.
Para administrar el panorama variable y administrar las migraciones, en este documento se describe una filosofía de diseño que permite que los controladores BT expongan sus capacidades (más allá de la especificación Bluetooth Core 5.2 estándar). La pila host BT puede usar estas capacidades para determinar qué características habilitar.
Soporte de 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 característica descrita a continuación está disponible en los métodos estándar de HCI en una futura especificación de Bluetooth, nos inclinaremos por hacer que ese enfoque sea el predeterminado.
Capacidades específicas del proveedor
Comando específico del proveedor: LE_Get_Vendor_Capabilities_Command
Campo de comando de código de operación (OCF): 0x153
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
N / A | Lista de parámetros de comando vacía |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
max_advt_instances (Obsoleto) | 1 octeto | Número de instancias de publicidad admitidas. Reservado después de v0.98. Este parámetro está obsoleto en la especificación de función de Google v0.98 y superior a favor de LE Extended Advertising disponible en la versión de especificación BT 5.0 y superior. |
offloaded_resolution_of_private-address (Obsoleto) | 1 octeto | Capacidad de chip BT de RPA. Si es compatible con un chip, necesita que el host lo habilite. 0 = No capaz 1 = Capaz Reservado después de v0.98. Este parámetro está obsoleto en la especificación de función de Google v0.98 y superior a favor de la función de privacidad disponible en la especificación de BT versión 4.2 y superior. |
total_scan_results_storage | 2 octetos | Almacenamiento de resultados de escaneo en bytes |
max_irk_list_sz | 1 octeto | Número de entradas IRK admitidas en el firmware |
filtering_support | 1 octeto | Soporte para filtrado en el controlador. 0 = No compatible 1 = Compatible |
max_filter | 1 octeto | Número de filtros admitidos |
activity_energy_info_support | 1 octeto | Admite informes de actividad e información energética. 0 = No capaz 1 = Capaz |
version_supported | 2 octetos | Especifica la versión de la especificación de funciones de Google admitida byte[0] = número mayor byte[1] = número menor v1.00 byte[0] = 0x01 byte[1] = 0x00 |
total_num_of_advt_tracked | 2 octetos | Número total de anunciantes rastreados con fines OnLost / OnFound |
extended_scan_support | 1 octeto | Admite ventana e intervalo de escaneo 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 v0.98. Este parámetro está obsoleto en la especificación de función de Google v0.98 y superior a favor de la función de privacidad disponible en la especificación de BT versión 4.2 y superior. |
A2DP_source_offload_capability_mask | 4 octetos | Máscaras de bits para tipos de códec compatibles Bit 0 - SBC Bit 1 - CAA Bit 2 - APTX Bit 3 - APTX HD Bit 4 - LDAC Los bits 5-31 están reservados |
bluetooth_quality_report_support | 1 octeto | Admite informes de eventos de calidad de Bluetooth 0 = No capaz 1 = Capaz |
soporte_buffer_audio_dinámico | 4 octetos | Admite búfer de audio dinámico en el controlador Bluetooth Máscaras de bits para tipos de códec compatibles Bit 0 - SBC Bit 1 - CAA Bit 2 - APTX Bit 3 - APTX HD Bit 4 - LDAC Los bits 5-31 están reservados |
Procesamiento por lotes de resultados de escaneo
Un objetivo de diseño es mejorar la forma en que las notificaciones de eventos de respuesta de escaneo de Bluetooth LE se entregan al host, para ahorrar energía en el host.
Al reducir la frecuencia con la que el controlador notifica al procesador de la aplicación host sobre los resultados del escaneo, el procesador de la aplicación host puede permanecer inactivo/suspendido por más tiempo. Esto reduce el consumo de energía en el host. El parámetro de retorno total_scan_results_storage
de LE_Get_Vendor_Capabilities_Command
indica la capacidad del chip para almacenar los resultados del escaneo.
Esta característica se enfoca en la administración y configuración de la instalación de almacenamiento de resultados de escaneo LE en el controlador Bluetooth. El almacenamiento se utiliza para almacenar temporalmente datos publicitarios por lotes y escanear datos y metadatos que recibe el controlador para su posterior envío al host.
El firmware admitirá dos tipos de procesamiento por lotes, que pueden activarse simultáneamente:
- Truncado. Contiene los siguientes elementos de información: {MAC, TX Power, RSSI, Timestamp}
- Completo. Contiene los siguientes elementos de información: {MAC, TX Power, RSSI, Timestamp, Adv Data, Scan Response}
LE_Batch_Scan_Command
OCF: 0x156
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
Batch_Scan_opcode | 1 octeto | 0x1: habilitar la característica específica del cliente 0x2 - Establecer parámetros de almacenamiento de escaneo por lotes 0x3 - Establecer parámetros de escaneo por lotes 0x4 - Leer parámetros de resultado de escaneo por lotes |
Se generará un evento de comando completo para este comando. Habilitar la característica específica del cliente no inicia el escaneo.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
Batch_Scan_opcode | 1 octeto | 0x1: habilitar la característica específica del cliente 0x2 - Establecer parámetros de almacenamiento de escaneo por lotes 0x3 - Establecer parámetros de escaneo por lotes 0x4 - Leer parámetros de resultado de escaneo por lotes |
LE_Batch_Scan_Command: habilitar la característica específica del cliente
OCF secundario: 0x01
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
enable_customer_specific_feature_set | 1 octeto | 0x01: habilitar la función de escaneo por lotes 0x00: deshabilitar la función de escaneo por lotes |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
Batch_Scan_opcode | 1 octeto | 0x1: habilitar la característica específica del cliente 0x2 - Establecer parámetros de almacenamiento de escaneo por lotes 0x3 - Establecer parámetros de escaneo por lotes 0x4 - Leer parámetros de resultado de escaneo por lotes |
LE_Batch_Scan_Command: subcomando Establecer parámetro de almacenamiento de escaneo por lotes
OCF secundario: 0x02
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
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 grupo de almacenamiento individual [Rango: 0-100] Si se establece en 0, se deshabilitará 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 comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
Batch_scan_opcode | 1 octeto | 0x02 [Establecer parámetros de escaneo por lotes] |
LE_Batch_Scan_Command: subcomando Establecer parámetro de escaneo por lotes
OCF secundario: 0x03
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
Batch_Scan_Mode | 1 octeto | 0x00: el escaneo por lotes está deshabilitado 0x01: el modo truncado está habilitado 0x02: el modo completo está habilitado 0x03: los modos truncado y completo están habilitados |
Duty_cycle_scan_window | 4 octetos | Escaneo por lotes tiempo de escaneo (# de ranura) |
Duty_cyle_scan_interval | 4 octetos | Período de intervalo de escaneo por lotes (# de ranura) |
own_address_type | 1 octeto | 0x00 - Dirección de dispositivo público 0x01 - Dirección de dispositivo aleatoria |
Batch_scan_Discard_Rule | 1 octeto | 0 - Descartar el anuncio más antiguo 1 - Descartar publicidad con RSSI más débil |
Este subcomando iniciará el escaneo por lotes, si está habilitado. En el escaneo Truncado, los resultados se almacenan en forma truncada donde la clave única para el estilo Truncado = { BD_ADDR,
scan_interval}. Esto significa que solo se registrará un BD_ADDR will
para cada intervalo de exploración. El registro a mantener para el modo truncado es el siguiente: { BD_ADDR
, Tx Power, RSSI, Timestamp}
Cuando el modo completo está habilitado, se utilizará el escaneo activo y se registrarán las respuestas de escaneo. La clave única de estilo completo = {MAC, paquete de anuncios}, independientemente del intervalo de exploración. El registro que se debe mantener para el modo completo es { BD_ADDR
, Tx Power, RSSI, Timestamp, Ad Package, Scan Response}. En el estilo completo, el mismo paquete AD, cuando se ve varias veces en diferentes intervalos de exploración, se registra solo una vez. Sin embargo, en el modo truncado, lo que interesa es la visibilidad de BA_ADDR
en diferentes intervalos de exploración (una vez por intervalo de exploración). El RSSI es el valor promedio de todos los duplicados de un anuncio único dentro de un intervalo de exploración.
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
Batch_scan_opcode | 1 octeto | 0x03 [Establecer parámetros de escaneo por lotes] |
LE_Batch_Scan_Command: subcomando Leer resultados de escaneo por lotes
OCF secundario: 0x04
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
Batch_Scan_Data_read | 1 octeto | 0x01 – Datos de modo truncado 0x02 – Datos de modo completo |
Se generará un evento de comando completo para este comando. Cuando el host emite este comando, es posible que todos los resultados del controlador no quepan en un evento de comando completo. El host repetirá 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 comunicarse con el host. Cada evento de comando completo podría contener varios registros de un solo tipo de datos (completo o truncado).
Las referencias de tiempo del controlador y del host no están sincronizadas. La unidad de la marca de tiempo es 50ms. El valor de la marca de tiempo se basa cuando el host proporciona Read_Batch_Scan_Results_Sub_cmd
. Si la hora de llegada de un comando es T_c
en el firmware, entonces la hora real en que se tomó la marca de tiempo en el firmware es T_fw
. El tiempo de reporte será: ( T_c
- T_fw
). T_c
y T_fw
están en el dominio de tiempo del firmware. Esto le permite al anfitrión calcular cuánto tiempo hace que ocurrió el evento.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
Batch_scan_opcode | 1 octeto | 0x03 [Establecer parámetros de escaneo por lotes] |
Batch_Scan_data_read | 1 octeto | Identifica el formato (Truncado o Completo) |
num_of_records | 1 octeto | Número de registros de Batch_Scan_data_read |
format_of_data | Variable | Modo truncado: Dirección[0]: 6 octetos Address_Type[0]: 1 octeto Tx_Pwr[0]: 1 octeto RSSI[0]: 1 octeto Marca de tiempo[0]: 2 octetos [registros múltiples ( num_of_records ) con el formato anterior]Modo completo: Dirección[0]: 6 octetos Address_Type[0]: 1 octeto Tx_Pwr[0]: 1 octeto RSSI[0]: 1 octeto Marca de tiempo[0]: 2 octetos Adv paquete_len[0]: 1 octeto Adv_packet[0]: Adv_packet_len octetos Scan_data_resp_len[0]: 1 octeto Scan_data_resp[0]: octetos Scan_data_resp [registros múltiples con el formato anterior ( num_of_records )] |
Filtro de contenido del paquete de publicidad
Use esto para habilitar/deshabilitar/configurar el filtro de contenido de paquetes de publicidad (APCF) en el controlador.
LE_APCF_Comando
OCF: 0x157
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
APCF_opcode | 1 octeto | 0x00 - Habilitar APCF 0x01 - APCF Establecer parámetros de filtrado 0x02 - Dirección de la emisora APCF 0x03 - UUID del servicio APCF 0x04 - UUID de solicitud de servicio APCF 0x05 - Nombre local APCF 0x06 - Datos del fabricante APCF 0x07 - Datos de servicio APCF |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Estado de devolución |
APCF_opcode | 1 octeto | 0x00 - Habilitar APCF 0x01 - APCF Establecer parámetros de filtrado 0x02 - Dirección de la emisora APCF 0x03 - UUID del servicio APCF 0x04 - UUID de solicitud de servicio APCF 0x05 - Nombre local APCF 0x06 - Datos del fabricante APCF 0x07 - Datos de servicio APCF |
Comando LE_APCF: Habilitar_sub_cmd
OCF secundario: 0x00
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_enable | 1 octeto | 0x01 - Habilitar función APCF 0x00: deshabilitar la función APCF |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x0 - Activar APCF |
APCF_Enable | 1 octeto | Habilitar/deshabilitar se establece a través APCF_enable |
LE_APCF_Command: set_filtering_parameters_sub_cmd
Este subcomando se utiliza para agregar o eliminar una especificación de filtro o borrar una lista de filtros para el filtrado en chip.
OCF secundario: 0x01
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Agregar 0x01 - Eliminar 0x02 - Claro Eliminar borrará el filtro específico junto con las entradas de características asociadas en otras tablas. Borrar 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 características seleccionadas: Bit 0: configurado para habilitar el filtro de dirección de transmisión Bit 1: configurado para habilitar el filtro de cambio de datos de servicio Bit 2: configurado para habilitar la comprobación de UUID de servicio Bit 3: configurado para habilitar la verificación de UUID de solicitud de servicio Bit 4: Establecido para habilitar la verificación de nombre local Bit 5: configurado para habilitar la verificación de datos del fabricante Bit 6: configurado para habilitar la verificación de datos de servicio |
APCF_List_Logic_Type | 2 octetos | Operación lógica para cada selección de características (posición por bit) especificada en APCF_Feature_Selection .Válido solo cuando una característica está habilitada. Valor de posición de bit: 0: O 1: Y Si se selecciona la lógica "Y", un paquete ADV pasará el filtro solo si contiene TODAS las entradas en la lista. Si se selecciona la lógica "O", un paquete ADV pasará el filtro si contiene alguna de las entradas de la lista. |
APCF_Filter_Logic_Type | 1 octeto | 0x00: O 0x01: Y Nota: El tipo de lógica es N/A para los tres primeros campos de APCF_Feature_Selection , que siempre es lógica "Y". Solo son aplicables para (Bit 3 - Bit 6) cuatro campos de APCF_Feature_Selection . |
rssi_high_thresh | 1 octeto | [en dBm] El anunciante se considera visto solo si la señal es más alta que el umbral alto de RSSI. De lo contrario, el firmware debe comportarse como si nunca lo hubiera visto. |
delivery_mode | 1 octeto | 0x00 - immediate 0x01 - on_found batched - por lotes |
onfound_timeout | 2 octetos | Válido solo si delivery_mode es on_found .[en milisegundos] Es hora de que el firmware permanezca y recopile anuncios adicionales antes de informar. |
onfound_timeout_cnt | 1 octeto | Válido solo si delivery_mode es on_found .[contar] Si un anuncio en onFound permanece en el firmware durante la duración de onfound_timeout , recopilará algunos anuncios y se verificará el conteo. Si el conteo excede onfound_timeout_cnt , se informa OnFound inmediatamente después. |
rssi_low_thresh | 1 octeto | Válido solo si delivery_mode es on_found .[en dBm] El paquete del anunciante se considera como no visto si el RSSI del paquete recibido no está por encima del umbral bajo de RSSI. |
onlost_timeout | 2 octetos | Válido solo si delivery_mode es on_found .[en milisegundos] Si un anuncio, después de ser encontrado, no se ve lost_timeout durante el período de tiempo de espera perdido, se informará inmediatamente como perdido. |
num_of_tracking_entries | 2 octetos | Válido solo si delivery_mode es on_found .[contar] Número total de anunciantes a rastrear por filtro. |
Los valores RSSI deben usar el complemento a 2 para representar valores negativos.
El anfitrión podrá configurar varios filtros con APCF_Application_Address_type
establecido en 0x02 (para todas las direcciones de emisoras) para administrar varias combinaciones de filtros.
El filtrado, el procesamiento por lotes y la generación de informes son conceptos interrelacionados. Cada anuncio y la respuesta de escaneo relacionada tendrán que pasar por todos los filtros, uno tras otro. Por lo tanto, las acciones resultantes ( delivery_mode
) están estrechamente ligadas al filtrado. Los modos de entrega son los siguientes: report_immediately
, batch
y onFound
. El valor OnLost
está relacionado con OnFound
en el sentido de que vendrá después de OnFound
cuando se pierda.
Este flujo de procesamiento representa el modelo conceptual:
Cuando se recibe un cuadro de anuncio (o respuesta de exploración), se aplica a todos los filtros en orden de serie. Es posible que un anuncio pueda generar informes inmediatos basados en 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) brindan la capacidad de controlar cuándo el marco está visible para el procesamiento del filtro, incluso cuando el controlador recibe un paquete válido. En caso de que el modo de entrega se configure como inmediato o por lotes, el RSSI de un marco se considera para el procesamiento posterior del controlador. Diferentes aplicaciones necesitan diferentes informes y comportamientos de procesamiento por lotes. Esto permite que varias aplicaciones tengan informes directos y/o lotes de resultados en el firmware, al mismo tiempo. Un ejemplo es un caso en el que un escaneo por lotes está activo desde una aplicación y luego otra aplicación emite un escaneo LE regular. Antes de que se emita un análisis por lotes, el marco o la aplicación establece los filtros apropiados. Más tarde, cuando la segunda aplicación emite un escaneo regular, continúa el procesamiento por lotes anterior. Sin embargo, debido al escaneo regular, es similar a agregar conceptualmente un filtro nulo (junto con todos los filtros existentes) junto con el comando de escaneo LE. Los parámetros del comando de escaneo LE tienen prioridad cuando están activos. Cuando el escaneo LE regular está deshabilitado, el controlador volverá a un escaneo por lotes anterior, si existió.
El modo de entrega OnFound
se basa en filtros configurados. Una combinación que activa la acción de un filtro para tener éxito se considera la entidad a rastrear para onLost
. El evento correspondiente es el subevento de seguimiento LE Advt.
La transición OnFound/OnLost
para un filtro (si está habilitado) tendrá el siguiente aspecto:
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x02 - APCF Establecer parámetros de filtrado |
APCF_Action | 1 octeto | Echo back command's APCF_Action |
APCF_AvailableSpaces | 1 octeto | Número de entradas disponibles en la tabla de filtros |
LE_APCF_Comando: dirección_difusión_sub_cmd
Este subcomando se usa para agregar o eliminar una dirección de anunciante o para borrar la lista de direcciones de anunciantes para el filtrado en el chip.
OCF secundario: 0x02
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Agregar 0x01 - Eliminar 0x02 - Claro Eliminar eliminará la dirección de la emisora especificada en el filtro especificado. Borrar borrará todas las direcciones de emisoras en el filtro especificado. |
APCF_Filter_Index | 1 octeto | Índice de filtro (0, max_filter-1 ) |
APCF_Broadcaster_Address | 6 octeto | Dirección de dispositivo de 6 bytes para agregar o eliminar de la lista de direcciones de emisoras |
APCF_Application_Address_type | 1 octeto | 0x00: Público 0x01: Aleatorio 0x02: NA (tipo de dirección no aplicable) |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x02 - Dirección de la emisora APCF |
APCF_Action | 1 octeto | Echo back command's APCF_Action |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas aún disponibles en la tabla de Direcciones de difusión |
Comando LE_APCF: servicio_uuid_sub_cmd
Este subcomando se usa para agregar o eliminar un UUID de servicio o para borrar una lista de UUID de servicio para el filtrado en el chip.
OCF secundario: 0x03
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Agregar 0x01 - Eliminar 0x02 - Claro Eliminar eliminará la dirección UUID del servicio especificado en el filtro especificado. Borrar borrará todos los UUID de servicio en el filtro especificado. |
APCF_Filter_Index | 1 octeto | Índice de filtro (0, max_filter -1) |
APCF_UUID | 2,4,16 octeto | El UUID del servicio (16 bits, 32 bits o 128 bits) para agregar o eliminar de la lista. |
APCF_UUID_MASK | 2,4,16 octeto | La máscara UUID del servicio (16 bits, 32 bits o 128 bits) para agregar a la lista. Debe tener la misma longitud que APCF_UUID. |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x03 - UUID del servicio APCF |
APCF_Action | 1 octeto | Echo back command's APCF_Action |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas aún disponibles en la tabla UUID del servicio |
Comando LE_APCF: solicitation_uuid_sub_cmd
Este subcomando se usa para agregar o eliminar un UUID de solicitud o para borrar una lista de UUID de solicitud para el filtrado en el chip.
OCF secundario: 0x04
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Añadir 0x01 - Eliminar 0x02 - Claro Eliminar eliminará la dirección UUID de la solicitud en el filtro especificado. Borrar 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,16 octeto | El UUID de solicitud (16 bits, 32 bits o 128 bits) para agregar o eliminar de la lista. |
APCF_UUID_MASK | 2,4,16 octeto | La máscara UUID de solicitud (16 bits, 32 bits o 128 bits) para agregar a la lista. Debe tener la misma longitud que APCF_UUID . |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x04 - UUID de solicitud de APCF |
APCF_Action | 1 octeto | Echo back command's APCF_Action |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas aún disponibles en la tabla de UUID de solicitud |
Comando_LE_APCF: nombre_local_sub_cmd
Este subcomando se utiliza para agregar o eliminar una cadena de nombres locales o para borrar la lista de cadenas de nombres locales para el filtrado en el chip.
OCF secundario: 0x05
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Añadir 0x01 - Eliminar 0x02 - Claro Eliminar eliminará la cadena de nombre local especificada en el filtro especificado. Borrar 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 | Una cadena de caracteres para el nombre local. Notas:
|
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x05 - Nombre local APCF |
APCF_Action | 1 octeto | Echo back command's APCF_Action |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas aún disponibles en la tabla de nombres locales |
Comando LE_APCF: manf_data_sub_cmd
Este subcomando se usa para agregar o eliminar una cadena de datos del fabricante o para borrar la lista de cadenas de datos del fabricante para el filtrado en el chip.
OCF secundario: 0x06
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Añadir 0x01 - Eliminar 0x02 - Claro Eliminar eliminará la cadena de datos del fabricante especificado en el filtro especificado. Borrar 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 | Una cadena de caracteres para los datos del fabricante. Notas:
|
APCF_ManData_Mask | Tamaño variable | La máscara de datos de fabricación para agregar a la lista. Debe tener la misma longitud que APCF_LocName_or_ManData_or_SerData . |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x06 - Datos del fabricante APCF |
APCF_Action | 1 octeto | Echo back command's APCF_Action |
APCF_AvailableSpaces | 1 octeto | Número de entradas libres aún disponibles en la tabla de datos del fabricante |
LE_APCF_Command: service_data_sub_cmd
Este subcomando se usa para agregar o eliminar una cadena de datos de servicio o para borrar la lista de cadenas de datos de servicio para el filtrado en el chip.
OCF secundario: 0x07
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Añadir 0x01 - Eliminar 0x02 - Claro Eliminar eliminará la cadena de datos de servicio especificada en el filtro especificado. Borrar 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 | Una cadena de caracteres para datos de servicio. Notas:
|
APCF_LocName_Mandata_or_SerData_Mask | Tamaño variable | La máscara de datos de servicio para agregar a la lista. Debe tener la misma longitud que APCF_LocName_or_ManData_or_SerData. |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
APCF_opcode | 1 octeto | 0x07 - Datos de servicio APCF |
APCF_Action | 1 octeto | Echo back command's APCF_Action |
APCF_AvailableSpaces | 1 octeto | Número de entradas libres aún disponibles para la tabla de datos de servicio |
Comando de información de energía y actividad del controlador
El objetivo de esta información es que las funciones superiores del sistema host analicen las actividades totales de todos los componentes, incluido el controlador BT y su estado macro, junto con lo que sucede en las aplicaciones y el marco. Para hacer esto, se requiere la siguiente información de la pila BT y el controlador:
- Pila BT: informe del estado operativo macro actual del controlador
- Firmware: informes de actividad agregada e información de energía
Estados de macro de pila de host BT, según lo determinado a nivel de usuario:
- Inactivo: [escaneo de página, LE advt, escaneo de consulta]
- Escanear: [localización/consulta/intentando conectarse]
- Activo: [Enlace ACL activado, enlace SCO en curso, modo sniff]
Las actividades de las que el controlador realiza un seguimiento durante su vida útil son el tiempo Tx, el tiempo Rx, el tiempo de inactividad y la energía total consumida. Se borran cuando se leen del host.
LE_Get_Controller_Activity_Energy_Info
Este es un comando específico del proveedor.
OCF: 0x159
Parámetro de subcomando | Tamaño | Objetivo |
---|---|---|
N / A | Parámetros de comando vacíos |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
total_tx_time_ms | 4 octetos | Tiempo total realizando Tx |
total_rx_time_ms | 4 octetos | Tiempo total realizando Rx |
total_idle_time_ms | 4 octetos | Tiempo total en inactividad (estados de bajo consumo que no son de suspensión) |
total_energy_used | 4 octetos | Energía total utilizada [producto de corriente (mA), voltaje (V) y tiempo (ms)] |
Comando LE Extended Set Scan Parameters
Este comando se puede utilizar para habilitar una ventana de exploración y un intervalo más grandes en el controlador. Según la especificación BT Core 5.2, una ventana de escaneo y un intervalo tienen un límite superior de 10,24 segundos, lo que dificulta los intervalos de escaneo más largos de las aplicaciones más allá de los 10,24 segundos.
Referencia básica: Especificación BT Core 5.2, página 2493 (comando LE Set Scan Parameters)
OCF: 0x15A
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
LE_Ex_Scan_Type | 1 octeto | 0x00 - Escaneo pasivo. No se enviarán paquetes SCAN_REQ (predeterminado).0x01 - Escaneo activo. Se pueden enviar paquetes SCAN_REQ . |
LE_Ex_Scan_Interval | 4 octetos | Se define como el intervalo de tiempo desde que el controlador inició su último escaneo LE hasta que comenzó el siguiente escaneo LE. Rango: 0x0004 a 0x00FFFFFF Predeterminado: 0x0010 (10 ms) Tiempo = N * 0,625 ms Rango de tiempo: 2,5 ms a 10442,25 segundos |
LE_Ex_Scan_Window | 4 octetos | La duración de la exploración LE. LE_Scan_Window será menor o igual que LE_Scan_Interval .Rango: 0x0004 a 0xFFFF Predeterminado: 0x0010 (10 ms) Tiempo = N * 0,625 ms Rango de tiempo: 2,5 ms a 40,95 segundos |
Own_Address_Type | 1 octeto | 0x00 - Dirección de dispositivo público (predeterminado) 0x01 - Dirección aleatoria del dispositivo |
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 dispositivos que no están en la lista Solo lista blanca. Se ignorarán los paquetes de publicidad dirigidos que no estén dirigidos a este dispositivo. |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Status | 1 octeto | Comando Estado completo |
Obtener comando de información de depuración del controlador
El objetivo de este elemento de información es adquirir información de depuración del controlador por parte de un host, en forma binaria, para el procesamiento posterior y el análisis. Esto ayuda a depurar problemas en el campo y proporciona a los ingenieros un conjunto de herramientas para registrar información para su análisis. Un controlador puede proporcionar la información cuando lo solicite un host a través del evento (subevento de información de depuración del controlador) o de forma autónoma cuando lo desee el controlador. Los usos de ejemplo podrían ser para reportar información de estado de firmware, información de volcado de fallas, información de registro, etc.
OCF: 0x15B
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
N / A | Lista de parámetros de comando vacía |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Estado | 1 octeto | Comando Estado completo |
Soporte de descarga de hardware A2DP
La función de descarga A2DP admite la descarga del proceso de codificación de audio A2DP a un procesador de audio conectado al controlador BT. El flujo de datos de audio codificado pasa directamente del procesador de audio al controlador BT sin la participación del anfitrión BT. El host BT sigue siendo responsable de la configuración y el control de la sesión A2DP.
OCF: 0x15D
Iniciar descarga A2DP
OCF secundario: 0x01
Utilice este comando para configurar el proceso de descarga de A2DP y para iniciar la transmisión de A2DP.
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
códec | 4 octetos | Especifica el tipo de códec 0x01 - SBC 0x02 - CAA 0x04 - APTX 0x08 - APTX HD 0x10 - LDAC |
Max_Latencia | 2 octetos | Latencia máxima permitida (en ms). Un valor de cero deshabilita la descarga. |
SCMS-T_habilitar | 2 octetos | Octeto 0: Indicador que permite agregar el encabezado SCMS-T.
Octeto 1: valor para el encabezado SCMS-T, cuando está habilitado. |
Frecuencia de muestreo | 4 octetos | 0x01 - 44100Hz 0x02 - 48000Hz 0x04 - 88200Hz 0x08 - 96000Hz |
Bits_por_muestra | 1 octeto | 0x01 - 16 bits por muestra 0x02 - 24 bits por muestra 0x04 - 32 bits por muestra |
Modo_canal | 1 octeto | 0x01 - Mono 0x02 - Estéreo |
Tasa de bits de audio codificado | 4 octetos | La tasa de bits de audio codificado en bits por segundo segundo. 0x00000000: la tasa de bits de audio no está especificada o no se usa. 0x00000001 - 0x00FFFFFF - Tasa de bits de audio codificado en bits por segundo. 0x01000000 - 0xFFFFFFFF - Reservado. |
Manejador_de_conexión | 2 octetos | Manejador de conexión de la conexión A2DP que se está configurando |
L2CAP_Channel_ID | 2 octetos | ID de canal L2CAP que se usará para esta conexión A2DP |
L2CAP_MTU_Tamaño | 2 octetos | Tamaño máximo de L2CAP MTU que contiene paquetes de audio codificados |
Información_códec | 32 octetos | Información específica del códec. Códec SBC: Consulte los elementos de información específicos del códec SBC en A2DP v1.3. Códec AAC: Consulte los elementos de información específicos del códec AAC en A2DP v1.3 Códec LDAC: Octeto 0-3: ID del proveedor Octeto 4-5: ID de códec Octeto 6: Índice de tasa de bits: Octeto 7: Modo de canal LDAC Octeto 8-31: reservado Todos los demás códecs: Octeto 0-31: reservado |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Estado | 1 octeto | Comando Estado completo |
Sub_Opcode | 1 octeto | 0x0- Iniciar descarga A2DP |
Detener descarga A2DP
OCF secundario: 0x02
Este comando se utiliza para detener el flujo de descarga de A2DP.
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
N / A | Lista de parámetros de comando vacía. |
No se definen parámetros para este comando.
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Estado | 1 octeto | Comando Estado completo |
Sub_Opcode | 1 octeto | 0x02 - Detener descarga A2DP |
Comando Informe de calidad de Bluetooth
La función de comando Informe de calidad de BT inicia el mecanismo en el controlador de Bluetooth para informar eventos de calidad de Bluetooth al host. Puede habilitar cuatro opciones:
- Modo de monitoreo de calidad: el controlador envía periódicamente un sub-evento BQR relacionado con la calidad del enlace al host.
- Acercándose a LSTO: si no se reciben paquetes del dispositivo BT conectado durante más de la mitad del valor del Tiempo de espera de supervisión del enlace (LSTO), el controlador informa un evento de Acercándose a LSTO al host.
- Audio entrecortado A2DP: cuando el controlador detecta factores que causan audio entrecortado, el controlador informa un evento de audio entrecortado A2DP al host.
- (e)SCO Voice Choppy: cuando el controlador detecta factores que causan la voz entrecortada, el controlador informa un evento de (e)SCO Voice Choppy al host.
- Inflamación de la raíz: el controlador envía este evento a la pila cuando la HAL o el controlador encuentra un error fatal y necesita reiniciar Bluetooth.
- Seguimiento del mensaje LMP/LL: el controlador envía el protocolo de enlace del mensaje LMP/LL con el dispositivo remoto al host.
- Rastreo de programación Bluetooth multiperfil/Coex: el controlador envía su información de programación sobre el manejo de múltiples perfiles Bluetooth y la coexistencia inalámbrica en la banda de 2,4 Ghz al host.
- 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 sub-evento de información de depuración del controlador al host.
OCF: 0x15E
Parámetro de comando | Tamaño | Objetivo |
---|---|---|
BQR_Informe_Acción | 1 octeto | Acción para agregar/eliminar informes de eventos de calidad establecidos en el parámetro BQR_Quality_Event_Mask, o borrar todo. 0x00 - Agregar Eliminar eliminará los informes de eventos de calidad específicos. |
BQR_Quality_Event_Mask | 4 octetos | Máscaras de bits para los informes de eventos de calidad seleccionados. Bit 0: Establecido para habilitar el modo de monitoreo de calidad. |
BQR_Minimum_Report_Interval | 2 octetos | Defina el intervalo de tiempo mínimo de notificación 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. La configuración del intervalo deberá ser respectiva y dedicada a los eventos de calidad que se agreguen. Unidad: ms |
Se generará un evento de comando completo para este comando.
Parámetro de retorno | Tamaño | Objetivo |
---|---|---|
Estado | 1 octeto | Comando Estado completo |
Máscara_de_evento_de_calidad_actual | 4 octetos | Indica la configuración actual de la máscara de bits. Bit 0: el modo de control de calidad está habilitado. Bit 1: el informe de eventos LSTO de aproximación está habilitado. Bit 2: el informe de eventos de audio entrecortado A2DP está habilitado. Bit 3: (e)SCO La notificación de eventos de voz entrecortada está habilitada. Bit 4: Root inflammation event reporting is enabled. Bit 5 ~ 15: Reserved. Bit 16: LMP/LL message trace is enabled. Bit 17: Bluetooth Multi-link/Coex scheduling trace is enabled. Bit 18: Controller Debug Information mechanism is enabled. Bit 19 ~ 31: Reserved. |
Dynamic Audio Buffer command
The Dynamic Audio Buffer reduces audio glitching by changing the audio buffer size in the Bluetooth controller based on various scenarios.
OCF: 0x15F
Get audio buffer time capability
Sub OCF: 0x01
Use this command to get the audio buffer time capability from the Bluetooth controller.
Command parameter | Size | Purpose |
---|---|---|
N / A | Empty Command parameter list |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Dynamic_Audio_Buffer_opcode | 1 octet | 0x01 - Get audio buffer time |
Audio_Codec_Type_Supported | 4 octets | Bit masks for the supported codec types Bit 0 - SBC Bit 1 - AAC Bit 2 - APTX Bit 3 - APTX HD Bit 4 - LDAC Bit 5-31 are reserved |
Audio_Codec_Buffer_Default_Time_For_Bit_0 | 2 octets | Default buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 0 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 | 2 octets | Maximum buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 0 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 | 2 octets | Minimum buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 0 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Default_Time_For_Bit_1 | 2 octets | Default buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 1 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 | 2 octets | Maximum buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 1 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 | 2 octets | Minimum buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 1 codec type is not supported. Unit: ms |
...... | ...... | ...... |
Audio_Codec_Buffer_Default_Time_For_Bit_31 | 2 octets | Default buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 31 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 | 2 octets | Maximum buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 31 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 | 2 octets | Minimum buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 31 codec type is not supported. Unit: ms |
Set audio buffer time
Sub OCF: 0x02
Use this command to set the audio buffer time to the Bluetooth controller.
Command parameter | Size | Purpose |
---|---|---|
Audio_Codec_Buffer_Time | 2 octets | Requested audio buffer time for the current used codec. Unit: ms |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Dynamic_Audio_Buffer_opcode | 1 octet | 0x02 - Set audio buffer time |
Audio_Codec_Buffer_Time | 2 octets | Current audio buffer time in the Bluetooth controller. Unit: ms |
HCI event (vendor-specific)
Vendor-specific HCI events are required in some cases. Refer to Figure 5.4 on page 1897 of the BT Core 5.2 Specification. Event parameter 0 will always contain the first sub-event code, based on which the rest of the HCI event is decoded.
Event Parameter | Size | Purpose |
---|---|---|
HCI_vendor_specific_event_code | 1 octet | 0xFF |
sub_event_code | 1 octet | A sub-event code will be 1 octet in size, the byte immediately following Parameter Length in the HCI event packet. |
Storage threshold breach sub-event
This event indicates that the storage threshold has been breached.
Sub-event code = 0x54
Sub-event Parameter | Size | Purpose |
---|---|---|
None |
LE multi-advertising state change sub-event
This event indicates that an advertising instance has changed its state. At this time, this event is only used to indicate which advertising instance was stopped as a result of a connection.
Sub-event code = 0x55
Sub-event parameter | Size | Purpose |
---|---|---|
Advertising_instance | 1 octet | Identifies the specific advertising instance Valid values are 0 through max_advt_instances -1 |
State_Change_Reason | 1 octet | 0x00: Connection received |
Connection_handle | 2 octets | Identifies the connection that caused the advt instance to be disabled (0xFFFF if invalid) |
LE advertisement tracking sub-event
This event indicates when an advertiser is found or lost.
Sub event code = 0x56
Sub-event Parameter | Size | Purpose |
---|---|---|
APCF_Filter_Index | 1 octet | Filter Index (0, max_filter -1) |
Advertiser_State | 1 octet | 0x00: Advertiser found 0x01: Advertiser lost |
Advt_Info_Present | 1 octet | 0x00: Advertiser information ( Advt_Info ) present0x01: Advertiser information ( Advt_Info ) not present |
Advertiser_Address | 6 octets | Public or random address |
Advertiser_Address_Type | 1 octet | 0x00: Public address 0x01: Random address |
Advt_Info | Tx_Pwr[0] : 1 octetRSSI[0] : 1 octetTimestamp[0] : 2 octetsAdv packet_len[0] : 1 octetAdv_packet[0] : Adv_packet_len octetsScan_data_resp_len[0] : 1 octetScan_data_resp[0] : Scan_data_resp octets |
Controller debug info sub-event
This event is used by a Controller to provide binary debug information to a host.
Sub-event code = 0x57
Sub-event Parameter | Size | Purpose |
---|---|---|
debug_block_byte_offset_start | 2 octets | Debug block byte offset from the start |
last_block | 1 octet | 0x00: More debug data present 0x01: Last binary block; no more debug data |
cur_pay_load_sz | 2 octets | Binary block size in a current event |
Debug_Data | Variable | Debug data of cur_payload_sz |
Bluetooth Quality Report sub-event
This event indicates one of the following: a Bluetooth quality event occurred, the controller uploaded the LMP/LL message trace and Bluetooth Multi-link/Coex scheduling trace, or the controller dumped debug information data.
Sub-event code = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, Link Quality related event]
Sub-event Parameter | Size | Purpose |
---|---|---|
Quality_Report_Id | 1 octet | 0x01: Quality reporting on the monitoring mode. 0x02: Approaching LSTO. 0x03: A2DP Audio Choppy. 0x04: (e)SCO Voice Choppy. 0x05 ~ 0xFF: Reserved. |
Packet_Types | 1 octet | 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 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 ~ 0xFF: Reserved. |
Connection_Handle | 2 octets | Connection Handle. |
Connection_Role | 1 octet | Performing Role for the connection. 0x00: Central 0x01: Peripheral 0x02 ~ 0xFF: Reserved. |
TX_Power_Level | 1 octet | Current transmit power level for the specified Connection_Handle. This value shall be the same as the controller's responding to the HCI_Read_Transmit_Power_Level HCI command. |
RSSI | 1 octet | [in dBm] Received Signal Strength Indication (RSSI) value for the specified Connection_Handle. |
SNR | 1 octet | [in dB] Signal-to-Noise Ratio (SNR) value for the specified Connection_Handle. |
Unused_AFH_Channel_Count | 1 octet | Indicates the number of unused channels in AFH_channel_map. 0x4F ~ 0xFF: Reserved. |
AFH_Select_Unideal_Channel_Count | 1 octet | Indicates the number of the channels which are interfered and have bad quality, but they are still selected for AFH. The minimum number of channels allowed by the Bluetooth specification is 20, so even if all 79 channels are interfered and have bad quality, the controller still needs to choose at least 20 channels for AFH. |
LSTO | 2 octets | Current Link Supervision Timeout Setting. Time = N * 0.625 ms Time Range: 0.625 ms to 40.9 s |
Connection_Piconet_Clock | 4 octets | Piconet Clock for the specified Connection_Handle. This value shall be the same as the controller's responding to HCI_Read_Clock HCI command with parameter "Which_Clock" of 0x01 (Piconet Clock). Unit: N * 0.3125 ms (1 Bluetooth Clock) |
Retransmission_Count | 4 octets | The number of retransmissions since the last event. This count shall be reset after reporting to the host. |
No_RX_Count | 4 octets | No RX count since the last event. The count increases when no packet is received at the scheduled time slot or the received packet is corrupted. This count shall be reset after reporting to the host. |
NAK_Count | 4 octets | NAK (Negative Acknowledge) count since the last event. This count shall be reset after reporting to the host. |
Last_TX_ACK_Timestamp | 4 octets | Timestamp of last TX ACK. It is based on the Bluetooth Clock of the piconet central (CLK). Unit: N * 0.3125 ms (1 Bluetooth Clock) |
Flow_Off_Count | 4 octets | The number of times the controller receives Flow-off (STOP) since the last event. This count shall be reset after reporting to the host. |
Last_Flow_On_Timestamp | 4 octets | Timestamp of last Flow-on (GO). It is based on the Bluetooth Clock of the piconet central (CLK). Unit: N * 0.3125 ms (1 Bluetooth Clock) |
Buffer_Overflow_Bytes | 4 octets | [in Byte] Buffer overflow count since the last event. |
Buffer_Underflow_Bytes | 4 octets | [in Byte] Buffer underflow count since the last event. |
Vendor Specific Parameter | (Parameter Total Length - 49) * octets | For the controller vendor to obtain more vendor specific parameters. |
Sub-event code = 0x58 [Quality_Report_Id = 0x05, Root Inflammation event]
This event indicates that Bluetooth HAL or the controller encountered a fatal error and needs Bluetooth stack to record this situation and restart. The controller must send a Root_Inflammation_Event to Bluetooth stack before sending the first fragment of the debug info events in any case.
The Error_Code parameter contains an error code reported from HAL/Controller, 0 if it is a chipset vendor specific error. The Vendor_Specific_Error_Code contains a chipset vendor specific error code from HAL/Controller. It should set as 0 if the parameter Error_Code is not 0. The parameters Error_Code and Vendor_Specific_Error_Code should not both be 0.
Sub-event Parameter | Size | Purpose |
---|---|---|
Quality_Report_Id | 1 octet | 0x00 ~ 0x04: Reserved. 0x05: Root inflammation. 0x06 ~ 0xFF: Reserved. |
Error_Code | 1 octet | 0x00: Chipset vendor specific error code is included. 0x01 ~ 0xFF: Controller failure occurred. See Bluetooth Spec [Vol 2] Part D, Error Codes for a list of error codes and descriptions. |
Vendor_Specific_Error_Code | 1 octet | 0x00: No chipset vendor specific error code is included. 0x01 ~ 0xFF: Chipset vendor specific error code. |
Vendor Specific Parameter | (Parameter Total Length - 4) * octets | For the controller vendor to obtain more vendor specific parameters. |
Sub-event code = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, Log Dump related event]
Sub-event Parameter | Size | Purpose |
---|---|---|
Quality_Report_Id | 1 octet | 0x00 ~ 0x10: Reserved. 0x11: LMP/LL message trace. 0x12: Bluetooth Multi-link/Coex scheduling trace. 0x13: Controller Debug Information data dump. 0x14 ~ 0xFF: Reserved. |
Connection_Handle | 2 octets | Connection Handle. |
Vendor Specific Parameter | (Parameter Total Length - 4) * octets | Vendor Specific format of LMP message trace, Bluetooth Multi-link/Coex scheduling trace and Controller Debug Information data dump. |
Multi-advertiser support
The objectives of multi-advertiser support are the following:
- Ability to support multiple advertisements (
max_advt_instances
) - Different transmit powers to allow for a varying range
- Different advertising content
- An individualized response for each advertiser
- Privacy (non-trackable) for each advertiser
- Connectable
To keep this specification close to existing standards, the following vendor-specific commands are provided. They are derived from the Bluetooth Core 4.1 Specification.
LE_Multi_Advt_Command
OCF: 0x154
Command parameter | Size | Purpose |
---|---|---|
Multi_advt_opcode | 1 octet | 0x01 - Set_Advt_Param_Multi_Sub_Cmd 0x02 - Set_Advt_Data_Multi_Sub_Cmd 0x03 - Set_Scan_Resp_Data_Multi_Sub_Cmd 0x04 - Set_Random_Addr_Multi_Sub_Cmd 0x05 - Set_Advt_Enable_Multi_Sub_Cmd |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x01 - Set_Advt_Param_Multi_Command 0x02 - Set_Advt_Data_Multi_Command 0x03 - Set_Scan_Resp_Data_Multi_Command 0x04 - Set_Random_Addr_Multi_Command 0x05 - Set_Advt_Enable_Multi_Command |
LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 964 (LE Set Advertising Parameter Command)
Sub OCF: 0x01
Sub-command parameter | Size | Purpose |
---|---|---|
Advertising_Interval_Min | Per spec | Per spec |
Advertising_Interval_Max | Per spec | Per spec |
Advertising_Type | Per spec | Per spec |
Own_Address_Type | Per spec | Per spec |
Own_Address | Per spec | Per spec |
Direct_Address_Type | Per spec | Per spec |
Direct_Address | Per spec | Per spec |
Advertising_Channel_Map | Per spec | Per spec |
Adverstising_Filter_Policy | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
Tx_power | 1 octet | Transmit_Power Unit - in dBm (signed integer) Range (-70 to +20) |
The Own_Address
parameter could be a host-configured address at the time of setting up this multi-advertisement instance. This provides the ability to have a resolvable private address at the time of the transmit of the first beacon. Advertisement on an instance will continue irrespective of the connection. The host BT stack could issue a command to start advertisement on an instance, post connection.
A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success (invalid parameter) code if the advertising instance or Tx_Power
parameters are invalid.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x01 [ Set_Advt_Param_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 969 (LE Set Advertising Data Command)
Sub OCF: 0x02
Sub-command parameter | Size | Purpose |
---|---|---|
Advertising_Data_Length | Per spec | Per spec |
Advertising_Data | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success code if the advertising instance or Tx_Power
parameters are invalid.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x02 [ Set_Advt_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 970 (LE Set Scan Response Data Command)
Sub OCF: 0x03
Sub-command parameter | Size | Purpose |
---|---|---|
Scan_Response_Data_Length | Per spec | Per spec |
Scan_Response_Data | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success code (invalid parameter) if the advertising instance or Tx_Power
parameters are invalid.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x03 [ Set_Scan_Resp_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 963 (LE Set Random Address Command)
Sub OCF: 0x04
Sub-command parameter | Size | Purpose |
---|---|---|
Random Address | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x04 [ Set_Random_Addr_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 971 (LE Set Advertise Enable Command in that core specification)
OCF: 0x05
Sub-command parameter | Size | Purpose |
---|---|---|
Advertising_Enable | 1 octet | A value of 1 means enable. Any other value means disable. |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance. Instance 0 means a standard HCI instance. |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x05 [ Set_Advt_Enable_Multi_Sub_Cmd] |
Offloaded resolution of private address
This feature resolves a private address in the controller firmware or hardware, which provides the following benefits:
- Latency involved with the host in resolving a private address
- Saving power by refraining from waking up the host
LE_Set_RPA_Timeout
OCF: 0x15C
Command parameter | Size | Purpose |
---|---|---|
LE_local_IRK | 16 octet | The local device IRK used to generate the random resolvable address(es). |
tRPA_min | 2 octets | The minimum RPA generation timeout in seconds. The controller must generate new resolvable addresses for any advertising/scanning/connection events on or after this timeout. Valid range: 300-1800 |
tRPA_max | 2 octets | The maximum RPA generation timeout in seconds. The controller must generate new resolvable addresses for any advertising/scanning/connection events on or before this timeout. Valid range: tRPA_min -1800 |
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | The status of the command. Suggested HCI status values: 0x00 Success 0x01 Unknown command (if not supported) 0x12 Invalid command parameters (if any parameters are outside the given range) |
LE_RPA_offload_Command
OCF: 0x155
Command parameter | Size | Purpose |
---|---|---|
RPA_offload_opcode | 1 octet | 0x1 - Enable customer specific feature 0x2 - Add IRK to the list 0x3 - Remove IRK from the list 0x4 - Clear IRK list 0x5 - Read IRK list entry |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_RPA_offload_opcode | 1 octet | 0x1 - Enable customer specific feature 0x2 - Add IRK to the list 0x3 - Remove IRK from the list 0x4 - Clear IRK list 0x5 - Read IRK list entry |
LE_RPA_offload: Enable_cust_specific_sub_Command
Sub OCF: 0x01
Sub-command parameter | Size | Purpose |
---|---|---|
enable_customer_specific_feature_set | 1 octet | 0x01 - Enable offloaded RPA feature 0x00 - Disable offloaded RPA feature |
RPA offload is required to be enabled by the host, based on the chip capability. Refer to the LE_Get_Vendor_Capabilities_Command
. Each chip can have a varying max_irk_list_sz
in the firmware.
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x01 [Enable customer-specific feature] |
LE_RPA_offload: Add_IRK_to_list_sub_Command
Sub OCF: 0x02
Sub-command parameter | Size | Purpose |
---|---|---|
LE_IRK | 16 octets | LE IRK (1st byte LSB) |
Address_Type | 1 octet | 0: Public address 1: Random address |
LE_Device_Address | 6 octets | Public or random address associated to the IRK (1st byte LSB) |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x02 [Add IRK to the list] |
LE_IrkList_AvailableSpaces | 1 octet | Available IRL list entries after current operation |
LE_RPA_offload: Remove_IRK_to_list_sub_Command
Sub OCF: 0x03
Sub-command parameter | Size | Purpose |
---|---|---|
Address_Type | 1 octet | 0: Public address 1: Random address |
LE_Device_Address | 6 octets | Public or random address that associates to the IRK |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x03 [Remove IRK from the list] |
LE_IrkList_AvailableSpaces | 1 octet | Available IRL list entries after current operation |
LE_RPA_offload: Clear_IRK_list_sub_Command
Sub OCF: 0x04
Sub-command parameter | Size | Purpose |
---|---|---|
None |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x04 [Clear IRK List] |
LE_IrkList_AvailableSpaces | 1 octet | Available IRL list entries after current operation [ max_irk_list_sz] |
LE_RPA_offload: Read_IRK_list_sub_Command
Sub OCF: 0x05
Sub-command parameter | Size | Purpose |
---|---|---|
LE_read_IRK_list_entry-index | 1 octet | Index of the IRK list [0, max_irk_list_sz-1] |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x05 [Read IRK List Entry] |
LE_Read_IRK_List_entry | 1 octet | Index of the IRK that the host wants to read back (maximum IRK list size is 32) |
LE_IRK | 16 octets | IRK value |
Address_Type | 1 octet | 0: Public address 1: Random address |
LE_Device_Address | 6 octets | Public or random address associated to the IRK |
LE_Resolved_Private_Address | 6 octets | Current resolved resolvable private address of this IRK |