Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Requisitos de HCI

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 de baja energía (BLE). El objetivo es que los proveedores de pilas de Host BT y los proveedores de controladores BT cumplan con estos requisitos de plataforma para poder 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 versiones de software, OEM, proveedores y capacidades de plataforma y chip.

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

Apoyando 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 se vuelve disponible en los métodos HCI estándar en una futura especificación de Bluetooth, nos inclinaremos hacia que ese enfoque sea el predeterminado.

Capacidades específicas del proveedor

Comando específico del proveedor: LE_Get_Vendor_Capabilities_Command

Campo de comando OpCode (OCF): 0x153

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

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando 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 funciones de Google v0.98 y superior a favor de LE Extended Advertising disponible en la especificación BT versión 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 funciones 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 los resultados del análisis en bytes
max_irk_list_sz 1 octeto Número de entradas de IRK admitidas en el firmware
filtering_support 1 octeto Soporte para filtrado en el controlador.
0 = no admitido
1 = compatible
max_filter 1 octeto Número de filtros admitidos
activity_energy_info_support 1 octeto Soporta 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 principal
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 de los que se realiza un seguimiento con fines OnLost / OnFound
extended_scan_support 1 octeto Admite intervalo y ventana de escaneo extendidos
debug_logging_supported 1 octeto Admite el registro de información binaria de depuración del controlador
LE_address_generation_offloading_support
(Obsoleto)
1 octeto 0 = no admitido
1 = compatible

Reservado después de v0.98.
Este parámetro está obsoleto en la especificación de funciones 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 Se admiten máscaras de bits para tipos de códec
Bit 0 - SBC
Bit 1 - AAC
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 Bluetooth
0 = No capaz
1 = Capaz
dynamic_audio_buffer_support 4 octetos Admite búfer de audio dinámico en el controlador Bluetooth
Se admiten máscaras de bits para tipos de códec
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Los bits 5-31 están reservados

Agrupación de resultados de escaneo

Un objetivo del diseño es mejorar la forma en que las notificaciones de eventos de respuesta de exploración de Bluetooth LE se envían 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 del host que escanee los resultados, el procesador de la aplicación del host puede permanecer inactivo / inactivo 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 función se centra en la gestión y configuración de la función de almacenamiento LE Scan Results en el controlador Bluetooth. El almacenamiento se utiliza para procesar por lotes temporalmente datos de publicidad y escanear datos y metadatos que son recibidos por el controlador para su posterior entrega 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 Propósito
Batch_Scan_opcode 1 octeto 0x1: habilita la función específica del cliente
0x2 - Establecer parámetros de almacenamiento de escaneo por lotes
0x3 - Establecer parámetros de escaneo por lotes
0x4 - Parámetros de lectura de resultados de escaneo por lotes

Se generará un evento Command Complete para este comando. La activación de la función específica del cliente no inicia el escaneo.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
Batch_Scan_opcode 1 octeto 0x1: habilita la función específica del cliente
0x2 - Establecer parámetros de almacenamiento de escaneo por lotes
0x3 - Establecer parámetros de escaneo por lotes
0x4 - Parámetros de lectura de resultados de escaneo por lotes

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

Sub OCF: 0x01

Parámetro de subcomando Tamaño Propósito
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 Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
Batch_Scan_opcode 1 octeto 0x1: habilita la función específica del cliente
0x2 - Establecer parámetros de almacenamiento de escaneo por lotes
0x3 - Establecer parámetros de escaneo por lotes
0x4 - Parámetros de lectura de resultados de escaneo por lotes

LE_Batch_Scan_Command: establecer el subcomando Batch Scan Storage Param

Sub OCF: 0x02

Parámetro de 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 Configurar el nivel de notificación (en%) para el grupo de almacenamiento individual
[Rango: 0-100]
Si se establece en 0, se desactivará la notificación. Se genera un evento de HCI específico del proveedor (subevento de incumplimiento del umbral de almacenamiento)

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
Batch_scan_opcode 1 octeto 0x02 [Establecer parámetros de escaneo por lotes]

LE_Batch_Scan_Command: establecer el subcomando Batch Scan Param

Sub OCF: 0x03

Parámetro de subcomando Tamaño Propósito
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 Tiempo de escaneo de escaneo por lotes (# 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 pública del dispositivo
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 BD_ADDR will un BD_ADDR will para cada intervalo de exploración. El registro que se debe 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 al 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, Marca de tiempo, Paquete de anuncios, Respuesta de escaneo}. En estilo completo, el mismo paquete de AD, cuando se ve varias veces en diferentes intervalos de escaneo, 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 Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando 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

Sub OCF: 0x04

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

Se generará un evento Command Complete 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 el número 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 hora del controlador y del host no están sincronizadas. La unidad de la marca de tiempo es 50 ms. El valor de la marca de tiempo se basa en cuando el Read_Batch_Scan_Results_Sub_cmd 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 la presentación de informes será: ( T_c - T_fw ). T_c y T_fw están en el dominio del tiempo de firmware. Esto le permite al anfitrión calcular cuánto tiempo hace que ocurrió el evento.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando 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
[varios registros ( 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 packet_len [0]: 1 octeto
Adv_packet [0]: Adv_packet_len octetos
Scan_data_resp_len [0]: 1 octeto
Scan_data_resp [0]: octetos de Scan_data_resp
[varios registros con el formato anterior ( num_of_records )]

Filtro de contenido de paquetes publicitarios

Use esto para habilitar / deshabilitar / configurar el filtro de contenido de paquetes publicitarios (APCF) en el controlador.

LE_APCF_Command

OCF: 0x157

Parámetro de comando Tamaño Propósito
APCF_opcode 1 octeto 0x00 - APCF habilitado
0x01 - APCF Establecer parámetros de filtrado
0x02 - Dirección de emisora ​​APCF
0x03 - UUID del servicio APCF
0x04 - UUID de solicitud de servicio de APCF
0x05 - Nombre local APCF
0x06 - Datos del fabricante de APCF
0x07 - Datos de servicio APCF

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de devolución
APCF_opcode 1 octeto 0x00 - APCF habilitado
0x01 - APCF Establecer parámetros de filtrado
0x02 - Dirección de emisora ​​APCF
0x03 - UUID del servicio APCF
0x04 - UUID de solicitud de servicio de APCF
0x05 - Nombre local APCF
0x06 - Datos del fabricante de APCF
0x07 - Datos de servicio APCF

LE_APCF_Command: Enable_sub_cmd

Sub OCF: 0x00

Parámetro de subcomando Tamaño Propósito
APCF_enable 1 octeto 0x01 - Habilitar la función APCF
0x00 - Deshabilitar la función APCF

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x0 - Habilitar APCF
APCF_Enable 1 octeto Habilitar / deshabilitar se establece a través de 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.

Sub OCF: 0x01

Parámetro de subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00 - Agregar
0x01 - Eliminar
0x02 - Borrar
Eliminar borrará el filtro específico junto con las entradas de características asociadas en otras tablas.
Clear 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: configurado para habilitar el filtro de dirección de transmisión
Bit 1: Establecer para habilitar el filtro de cambio de datos de servicio
Bit 2: Establecer para habilitar la verificación de UUID del servicio
Bit 3: configurado para habilitar la verificación de UUID de solicitud de servicio
Bit 4: Establecer para habilitar la verificación del nombre local
Bit 5: Establecer para habilitar la verificación de datos del fabricante
Bit 6: Establecer 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ística (posición por bit) especificada en APCF_Feature_Selection .
Válido solo cuando una función 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 de 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 primeros tres 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 superior al 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
0x02 - batched
onfound_timeout 2 octetos Válido solo si delivery_mode es on_found .
[en milisegundos]
Es hora de que el firmware se demore 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 el tiempo de onfound_timeout , recopilará algunos anuncios y se verificará el recuento. Si el recuento 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 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 de forma contigua durante el período de tiempo de lost_timeout , 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 de los que se va a realizar un seguimiento por filtro.

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

El host 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 respuesta de escaneo relacionada tendrá que 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 está relacionado con OnFound en el sentido de que vendrá después de OnFound cuando se pierda.

Este flujo de procesamiento describe el modelo conceptual:

Cuando se recibe una trama de publicidad (o respuesta de escaneo), 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 RSSI (alto y bajo) brindan la capacidad de controlar cuándo la trama 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 en inmediato o por lotes, el RSSI de una trama se considera para el procesamiento posterior del controlador. Las diferentes aplicaciones necesitan un comportamiento diferente de generación de informes y procesamiento por lotes. Esto permite que múltiples aplicaciones tengan informes directos y / o lotes de resultados en 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 escaneo por lotes, el marco / 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á desactivado, el controlador volverá a un escaneo por lotes anterior, si existía.

El modo de entrega de OnFound se basa en filtros configurados. Una combinación que activa la acción de un filtro para que tenga éxito se considera la entidad a la que se debe realizar un seguimiento de onLost . El evento correspondiente es el subevento de seguimiento de LE Advt.

La transición OnFound/OnLost para un filtro (si está habilitado) tendrá el siguiente aspecto:

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x02 - Parámetros de filtrado de conjuntos de APCF
APCF_Action 1 octeto APCF_Action del comando Echo APCF_Action
APCF_AvailableSpaces 1 octeto Número de entradas disponibles en la tabla de filtros

LE_APCF_Command: broadcast_address_sub_cmd

Este subcomando se utiliza para agregar o eliminar la dirección de un anunciante o para borrar la lista de direcciones del anunciante para el filtrado en chip.

Sub OCF: 0x02

Parámetro de subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00 - Agregar
0x01 - Eliminar
0x02 - Borrar
Eliminar eliminará la dirección de la emisora ​​especificada en el filtro especificado.
Clear 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 octetos Dirección de dispositivo de 6 bytes para agregar o eliminar de la lista de direcciones de la emisora
APCF_Application_Address_type 1 octeto 0x00: público
0x01: Aleatorio
0x02: NA (tipo de direcciones no aplicable)

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x02 - Dirección de emisora ​​APCF
APCF_Action 1 octeto APCF_Action del comando Echo APCF_Action
APCF_AvailableSpaces 1 octeto Número de entradas libres todavía disponibles en la tabla de direcciones de transmisión

LE_APCF_Command: service_uuid_sub_cmd

Este subcomando se utiliza para agregar o eliminar un UUID de servicio o para borrar una lista de UUID de servicio para el filtrado en chip.

Sub OCF: 0x03

Parámetro de subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00 - Agregar
0x01 - Eliminar
0x02 - Borrar
Delete eliminará la dirección UUID del servicio especificado en el filtro especificado.
Clear 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 de UUID de 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 Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x03 - UUID del servicio APCF
APCF_Action 1 octeto APCF_Action del comando Echo APCF_Action
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas aún disponibles en la tabla de UUID de servicio

LE_APCF_Command: solicitation_uuid_sub_cmd

Este subcomando se utiliza para agregar o eliminar un UUID de solicitud o para borrar una lista de UUID de solicitud para el filtrado en chip.

Sub OCF: 0x04

Parámetro de subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00 - Agregar
0x01 - Eliminar
0x02 - Borrar
Eliminar eliminará la dirección UUID de 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,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 Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x04 - UUID de solicitud de APCF
APCF_Action 1 octeto APCF_Action del comando Echo APCF_Action
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas todavía disponibles en la tabla de UUID de solicitud

LE_APCF_Command: nombre_local_sub_cmd

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

Sub OCF: 0x05

Parámetro de subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00 - Agregar
0x01 - Eliminar
0x02 - Borrar
Delete eliminará 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 Una cadena de caracteres para el nombre local.

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

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x05 - Nombre local APCF
APCF_Action 1 octeto APCF_Action del comando Echo APCF_Action
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas todavía disponibles en la tabla de nombres locales

LE_APCF_Command: manf_data_sub_cmd

Este subcomando se utiliza 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.

Sub OCF: 0x06

Parámetro de subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00 - Agregar
0x01 - Eliminar
0x02 - Borrar
Delete eliminará 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 Una cadena de caracteres para los datos del fabricante.

Notas:
  • Actualmente, el número máximo de caracteres en una cadena de nombre local es 29
  • No se aplica cuando la acción es "Borrar" (0x2)
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 Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x06 - Datos del fabricante de APCF
APCF_Action 1 octeto APCF_Action del comando Echo APCF_Action
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas todavía disponibles en la tabla de datos del fabricante

LE_APCF_Command: service_data_sub_cmd

Este subcomando se utiliza 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 chip.

Sub OCF: 0x07

Parámetro de subcomando Tamaño Propósito
APCF_Action 1 octeto 0x00 - Agregar
0x01 - Eliminar
0x02 - Borrar
Delete eliminará 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 Una cadena de caracteres para datos de servicio.

Notas:
  • Actualmente, el número máximo de caracteres en una cadena de nombre local es 29
  • No se aplica cuando la acción es "Borrar" (0x2)
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 Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo
APCF_opcode 1 octeto 0x07 - Datos de servicio APCF
APCF_Action 1 octeto APCF_Action del comando Echo APCF_Action
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas 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 del sistema host superior analicen las actividades totales de todos los componentes, incluido el controlador BT y su estado macro, junto con lo que está sucediendo 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 macrooperativo actual del controlador
  • Firmware: Reportando información agregada de actividad y energía

Estados de macro de la pila de host de BT, según lo determinado a nivel de usuario:

  • Inactivo: [escaneo de página, LE advt, escaneo de consulta]
  • Escanear: [paginación / consulta / intentando conectarse]
  • Activo: [enlace ACL activado, enlace SCO en curso, modo de rastreo]

Las actividades de las que el controlador realiza un seguimiento durante su vida son el tiempo de Tx, el tiempo de 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 Propósito
N / A Parámetros de comando vacíos

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando 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 inactivo (estados de bajo consumo sin reposo)
total_energy_used 4 octetos Energía total utilizada [producto de corriente (mA), voltaje (V) y tiempo (ms)]

Comando de parámetros de escaneo de conjunto extendido LE

Este comando se puede utilizar para habilitar una ventana e intervalo de exploración más grandes en el controlador. Según la especificación BT Core 5.2, una ventana y un intervalo de escaneo 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 Propósito
LE_Ex_Scan_Type 1 octeto 0x00: escaneo pasivo. No se SCAN_REQ paquetes SCAN_REQ (predeterminado).
0x01 - Escaneo activo. SCAN_REQ pueden SCAN_REQ paquetes SCAN_REQ .
LE_Ex_Scan_Interval 4 octetos Definido como el intervalo de tiempo desde que el controlador comenzó su último escaneo LE hasta que comenzó el escaneo LE subsiguiente.
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 del escaneo LE. LE_Scan_Window debe 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 de dispositivo aleatoria
LE_Ex_Scan_Filter_Policy 0x00: acepta todos los paquetes de publicidad (predeterminado). Se ignorarán los paquetes publicitarios dirigidos que no estén dirigidos a este dispositivo.
0x01: ignora los paquetes de publicidad de los dispositivos que no están en la lista Solo lista blanca. Se ignorarán los paquetes publicitarios dirigidos que no estén dirigidos a este dispositivo.

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Status 1 octeto Estado de comando completo

Obtener el 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 un host, en forma binaria, para su posterior procesamiento y 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 informar información sobre el estado del firmware, información de volcado por caída, información de registro, etc.

OCF: 0x15B

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

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Estado 1 octeto Estado de comando completo

Soporte de descarga de hardware A2DP

La función de descarga de 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. BT Host sigue siendo responsable de la configuración y el control de la sesión A2DP.

OCF: 0x15D

Iniciar la descarga de A2DP

Sub OCF: 0x01

Utilice este comando tanto para configurar el proceso de descarga de A2DP como para iniciar el flujo de A2DP.

Parámetro de comando Tamaño Propósito
Códec 4 octetos Especifica el tipo de códec
0x01 - SBC
0x02 - AAC
0x04 - APTX
0x08 - APTX HD
0x10 - LDAC
Max_Latency 2 octetos Latencia máxima permitida (en ms). Un valor de cero desactiva la descarga.
SCMS-T_Enable 2 octetos Octeto 0: Bandera que habilita la adición de encabezado SCMS-T.
  • 0x00 - Cabecera SCMS-T no incluida.
  • 0x01 - Encabezado SCMS-T incluido.

Octeto 1: valor para el encabezado SCMS-T, cuando está habilitado.

Frecuencia de muestreo 4 octetos 0x01 - 44100 Hz
0x02 - 48000 Hz
0x04 - 88200 Hz
0x08 - 96000 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 La tasa de bits de audio codificado en bits por segundo.
0x00000000: la tasa de bits de audio no se especifica / no se usa.
0x00000001 - 0x00FFFFFF - Velocidad de bits de audio codificada en bits por segundo.
0x01000000 - 0xFFFFFFFF - Reservado.
Connection_Handle 2 octetos Manejo de conexión de la conexión A2DP que se está configurando
L2CAP_Channel_ID 2 octetos ID de canal L2CAP que se utilizará para esta conexión A2DP
L2CAP_MTU_Size 2 octetos Tamaño máximo de L2CAP MTU que contiene paquetes de audio codificados
Codec_Information 32 octetos Información específica del códec.

Códec SBC:

Consulte los elementos de información específicos de SBC Codec en A2DP v1.3.
Octeto 0: longitud del bloque | Subbandas | Método de asignación
Octeto 1: valor mínimo del grupo de bits
Octeto 2: valor máximo del grupo de bits
Octeto 3: Frecuencia de muestreo | Modo de canal
Octeto 4-31: reservado

Códec AAC:

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

Códec LDAC:

Octeto 0-3: ID de proveedor
0x0000012D

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

Octeto 6: Índice de velocidad de bits:
0x00 - Alto
0x01 - Medio
0x02 - Bajo
0x03 - 0x7E - Reservado
0x7F - ABR (velocidad de bits adaptable)
0x80 - 0xFF - Reservado

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

Octeto 8-31: reservado

Todos los demás códecs:

Octeto 0-31: reservado

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Estado 1 octeto Estado de comando completo
Sub_Opcode 1 octeto 0x0- Iniciar descarga de A2DP

Detener la descarga de A2DP

Sub OCF: 0x02

Este comando se utiliza para detener el flujo de descarga A2DP.

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

No se definen parámetros para este comando.

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Estado 1 octeto Estado de comando completo
Sub_Opcode 1 octeto 0x02 - Detener la descarga de A2DP

Comando Informe de calidad de Bluetooth

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

  • Modo de monitoreo de calidad: el controlador envía periódicamente un subevento BQR relacionado con la calidad del enlace al host.
  • Aproximadamente LSTO: si no se reciben paquetes del dispositivo BT conectado durante más de la mitad del valor de Link Supervision TimeOut (LSTO), el controlador informa un evento de Aproximación LSTO al host.
  • A2DP Audio Choppy: cuando el controlador detecta factores que causan un audio entrecortado, el controlador informa un evento de audio A2DP Choppy al anfitrión.
  • (e) Voz entrecortada de SCO: Cuando el controlador detecta factores que causan voz entrecortada, el controlador informa un evento (e) Voz entrecortada de SCO al anfitrión.
  • Inflamación de raíz: el controlador envía este evento a la pila cuando el HAL o el controlador encuentra un error fatal y necesita reiniciar Bluetooth.
  • Seguimiento de mensajes LMP / LL: el controlador envía el protocolo de enlace de mensajes LMP / LL con el dispositivo remoto al host.
  • Seguimiento de programación de Bluetooth Multi-Profile / Coex: el controlador envía su información de programación sobre el manejo de múltiples perfiles de 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 subevento de información de depuración del controlador al host.

OCF: 0x15E

Parámetro de comando Tamaño Propósito
BQR_Report_Action 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
0x01 - Eliminar
0x02 - Borrar

Eliminar borrará los informes de eventos de calidad específicos.
Clear borrará todos los informes de eventos de calidad (se puede ignorar el parámetro BQR_Quality_Event_Mask).

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

Bit 0: configurado para habilitar el modo de control de calidad.
Bit 1: configurado para habilitar el evento Aproximadamente LSTO.
Bit 2: Establecer para habilitar el evento de audio entrecortado A2DP.
Bit 3: Establecer para habilitar (e) el evento SCO Voice Choppy.
Bit 4: Establecer para habilitar el evento de inflamación de la raíz.
Bit 5 ~ 15: reservado.
Bit 16: Establecer para habilitar el seguimiento de mensajes LMP / LL.
Bit 17: Establecer para habilitar el seguimiento de programación de Bluetooth Multi-link / Coex.
Bit 18: configurado para habilitar el mecanismo de información de depuración del controlador.
Bit 19 ~ 31: Reservado.

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 será la respectiva y dedicada a los eventos de calidad que se agregan.

Unidad: ms
Predeterminado: 0 (Sin limitación para el intervalo).
Rango: 0 ~ 65535 ms

Se generará un evento Command Complete para este comando.

Parámetro de retorno Tamaño Propósito
Estado 1 octeto Estado de comando completo
Current_Quality_Event_Mask 4 octetos Indica la configuración actual de la máscara de bits.
Bit 0: el modo de supervisión de la calidad está habilitado.
Bit 1: La notificación de eventos de aproximación LSTO está habilitada.
Bit 2: El informe de eventos de audio entrecortado A2DP está habilitado.
Bit 3: (e) La notificación de eventos de SCO Voice Choppy 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
Ninguno

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 ) present
0x01: 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 octet
RSSI[0] : 1 octet
Timestamp[0] : 2 octets
Adv packet_len[0] : 1 octet
Adv_packet[0] : Adv_packet_len octets
Scan_data_resp_len[0] : 1 octet
Scan_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 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.
This value shall be an absolute receiver signal strength value.
Range: -127 to +20

SNR 1 octet [in dB]

Signal-to-Noise Ratio (SNR) value for the specified Connection_Handle.
The controller shall provide the average SNR of all the channels used by the link.

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.
The controller counts how many bytes of data are dropped.
This count shall be reset after reporting to host.

Buffer_Underflow_Bytes 4 octets [in Byte]

Buffer underflow count since the last event.
This count shall be reset after reporting to host.

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 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
Ninguno

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