Requisitos de HCI

O Host Controller Interface (HCI) é usado para interagir com um controlador Bluetooth.

Este documento fornece uma lista de requisitos de HCI para Bluetooth (BT) e Bluetooth Low Energy (BLE). O objetivo é que os fornecedores de pilhas Host BT e os fornecedores de controladores BT estejam em conformidade com esses requisitos de plataforma para usar o conjunto de recursos descrito abaixo.

Este documento refere-se à especificação Bluetooth Core 5.2 como "especificação". A especificação Bluetooth Core 5.2 está disponível no site da Bluetooth SIG juntamente com outros documentos adotados.

Visão geral do projeto

Capacidades e configuração do chip

Como uma plataforma aberta, o Android tem uma matriz de lançamentos de software, OEMs, fornecedores e recursos de plataforma e chip.

Para gerenciar o cenário variável e gerenciar migrações, uma filosofia de design que permite que os controladores BT exponham seus recursos (além da especificação padrão Bluetooth Core 5.2) é descrita neste documento. A pilha BT do host pode usar esses recursos para determinar quais recursos habilitar.

Suportando padrões abertos

Um objetivo do Android é oferecer suporte a padrões abertos após a ratificação em uma especificação Bluetooth. Se um recurso descrito abaixo se tornar disponível nos métodos HCI padrão em uma futura especificação Bluetooth, nos inclinaremos a tornar essa abordagem o padrão.

Recursos específicos do fornecedor

Comando específico do fornecedor: LE_Get_Vendor_Capabilities_Command

Campo de comando OpCode (OCF): 0x153

Parâmetro de comando Tamanho Propósito
N / D Lista de parâmetros de comando vazia

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
max_advt_instances
(Descontinuada)
1 octeto Número de instâncias de anúncio suportadas.

Reservado após v0.98.
Este parâmetro está obsoleto na especificação de recurso do Google v0.98 e superior em favor do LE Extended Advertising disponível na especificação BT versão 5.0 e superior.
offloaded_resolution_of_private-address
(Descontinuada)
1 octeto Capacidade de chip BT de RPA.
Se suportado por um chip, ele precisa ser habilitado pelo host.
0 = Incapaz
1 = Capaz

Reservado após v0.98.
Este parâmetro está obsoleto na especificação de recurso do Google v0.98 e superior em favor do recurso Privacidade disponível na especificação BT versão 4.2 e superior.
total_scan_results_storage 2 octetos Armazenamento para resultados de verificação em bytes
max_irk_list_sz 1 octeto Número de entradas IRK suportadas no firmware
filtering_support 1 octeto Suporte para filtragem no controlador
0 = Não suportado
1 = Suportado
max_filter 1 octeto Número de filtros suportados
activity_energy_info_support 1 octeto Suporta relatórios de atividade e informações de energia
0 = Incapaz
1 = Capaz
version_supported 2 octetos Especifica a versão da especificação de recurso do Google compatível
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 rastreados para fins de OnLost / OnFound
extended_scan_support 1 octeto Suporta janela e intervalo de varredura estendidos
debug_logging_supported 1 octeto Suporta o registro de informações de depuração binária do controlador
LE_address_generation_offloading_support
(Descontinuada)
1 octeto 0 = Não suportado
1 = Suportado

Reservado após v0.98.
Este parâmetro está obsoleto na especificação de recurso do Google v0.98 e superior em favor do recurso Privacidade disponível na especificação BT versão 4.2 e superior.
A2DP_source_offload_capability_mask 4 Octetos Máscaras de bits para tipos de codec suportados
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 são reservados
bluetooth_quality_report_support 1 octeto Suporta relatórios de eventos de qualidade Bluetooth
0 = Incapaz
1 = Capaz
dynamic_audio_buffer_support 4 octetos Suporta buffer de áudio dinâmico no controlador Bluetooth
Máscaras de bits para tipos de codec suportados
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 são reservados

Lote de resultados de verificação

Um objetivo do projeto é aprimorar como as notificações de eventos Bluetooth LE Scan Response são entregues ao host, a fim de economizar energia no host.

Ao reduzir a frequência com que o controlador notifica o processador do aplicativo host para verificar os resultados, o processador do aplicativo host pode permanecer inativo/suspenso por mais tempo. Isso reduz o consumo de energia no host. O parâmetro de retorno total_scan_results_storage de LE_Get_Vendor_Capabilities_Command indica a capacidade do chip para armazenamento de resultados de varredura.

Esse recurso se concentra no gerenciamento e na configuração do recurso de armazenamento LE Scan Results no controlador Bluetooth. O armazenamento é usado para dados de anúncio em lote temporariamente e varrer dados e metadados que são recebidos pelo controlador para entrega posterior ao host.

O firmware deve suportar dois tipos de lotes, que podem ser ativados simultaneamente:

  • Truncado. Contém os seguintes elementos de informação: {MAC, TX Power, RSSI, Timestamp}
  • Cheio. Contém os seguintes elementos de informação: {MAC, TX Power, RSSI, Timestamp, Adv Data, Scan Response}

LE_Batch_Scan_Command

OCF: 0x156

Parâmetro de comando Tamanho Propósito
Batch_Scan_opcode 1 octeto 0x1 - Ativar recurso específico do cliente
0x2 - Definir parâmetros de armazenamento de verificação em lote
0x3 - Definir parâmetros de verificação em lote
0x4 - Ler parâmetros do resultado da verificação em lote

Um evento Command Complete será gerado para este comando. A ativação do recurso específico do cliente não inicia a verificação.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Batch_Scan_opcode 1 octeto 0x1 - Ativar recurso específico do cliente
0x2 - Definir parâmetros de armazenamento de verificação em lote
0x3 - Definir parâmetros de verificação em lote
0x4 - Ler parâmetros do resultado da verificação em lote

LE_Batch_Scan_Command: Ativar recurso específico do cliente

Sub OCF: 0x01

Parâmetro de subcomando Tamanho Propósito
enable_customer_specific_feature_set 1 octeto 0x01 - Ativar recurso de verificação em lote
0x00 - Desativar recurso de verificação em lote

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Batch_Scan_opcode 1 octeto 0x1 - Ativar recurso específico do cliente
0x2 - Definir parâmetros de armazenamento de verificação em lote
0x3 - Definir parâmetros de verificação em lote
0x4 - Ler parâmetros do resultado da verificação em lote

LE_Batch_Scan_Command: Definir subcomando Parâmetro de Armazenamento de Varredura em Lote

Sub OCF: 0x02

Parâmetro de subcomando Tamanho Propósito
Batch_Scan_Full_Max 1 octeto Espaço máximo de armazenamento (em %) alocado para estilo completo
[Intervalo: 0-100]
Batch_Scan_Truncated_Max 1 octeto Espaço máximo de armazenamento (em %) alocado para estilo truncado
[Intervalo: 0-100]
Batch_Scan_Notify_Threshold 1 octeto Nível de notificação de configuração (em %) para pool de armazenamento individual
[Intervalo: 0-100]
Definir como 0 desativará a notificação. O evento HCI específico do fornecedor é gerado (subevento de violação do limite de armazenamento)

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Batch_scan_opcode 1 octeto 0x02 [Definir parâmetros de verificação em lote]

LE_Batch_Scan_Command: Definir subcomando Batch Scan Param

Sub OCF: 0x03

Parâmetro de subcomando Tamanho Propósito
Batch_Scan_Mode 1 octeto 0x00 – A varredura em lote está desabilitada
0x01 – O modo truncado está habilitado
0x02 – O modo completo está ativado
0x03 – Os modos Truncado e Completo estão habilitados
Duty_cycle_scan_window 4 octetos Tempo de varredura de varredura em lote (nº de slot)
Duty_cyle_scan_interval 4 octetos Período de intervalo de varredura em lote (nº de slot)
own_address_type 1 octeto 0x00 - Endereço de dispositivo público
0x01 - Endereço de dispositivo aleatório
Batch_scan_Discard_Rule 1 octeto 0 - Descartar anúncio mais antigo
1 - Descarte o anúncio com RSSI mais fraco

Este subcomando iniciará a varredura em lote, se ativado. Na varredura truncada, os resultados são armazenados em formato truncado, onde a chave exclusiva para o estilo truncado = { BD_ADDR, scan_interval}. Isso significa que apenas um BD_ADDR will registrado para cada intervalo de varredura. O registro a ser mantido para o modo Truncado é o seguinte: { BD_ADDR , Tx Power, RSSI, Timestamp}

Quando o modo Completo estiver ativado, a varredura ativa será usada e as respostas da varredura serão registradas. A chave exclusiva de estilo completo = {MAC, Ad packet}, independentemente do intervalo de verificação. O registro a ser mantido para o modo Completo é { BD_ADDR , Tx Power, RSSI, Timestamp, Ad packet, Scan Response}. No estilo Completo, o mesmo pacote AD, quando visto várias vezes em diferentes intervalos de varredura, é registrado apenas uma vez. No entanto, no modo Truncado, é a visibilidade de BA_ADDR em diferentes intervalos de varredura que interessa (uma vez por intervalo de varredura). O RSSI é o valor médio de todas as duplicatas de um anúncio exclusivo dentro de um intervalo de varredura.

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Batch_scan_opcode 1 octeto 0x03 [Definir Parâmetros de Varredura em Lote]

LE_Batch_Scan_Command: subcomando Ler resultados da verificação em lote

Sub OCF: 0x04

Parâmetro de subcomando Tamanho Propósito
Batch_Scan_Data_read 1 octeto 0x01 – Dados de modo truncado
0x02 – Dados de modo completo

Um evento Command Complete será gerado para este comando. Quando o host emite este comando, todos os resultados no controlador podem não caber em um evento Command Complete. O host irá iterar emitindo este comando até que os resultados correspondentes no evento Command Complete indiquem 0 no número de registros, o que indica que o controlador não tem mais registros para se comunicar com o host. Cada evento Command Complete pode conter vários registros de apenas um tipo de dados (Full ou Truncated).

As referências de tempo do controlador e do host não são sincronizadas. A unidade do timestamp é 50ms. O valor do carimbo de data/hora é baseado quando o Read_Batch_Scan_Results_Sub_cmd é fornecido pelo host. Se a hora de chegada de um comando for T_c no firmware, a hora real em que o timestamp foi obtido no firmware será T_fw . O tempo de reporte será: ( T_c - T_fw ). T_c e T_fw estão no domínio de tempo do firmware. Isso permite que o host calcule há quanto tempo o evento aconteceu.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Batch_scan_opcode 1 octeto 0x03 [Definir parâmetros de verificação em lote]
Batch_Scan_data_read 1 octeto Identifica o formato (Truncado ou Completo)
num_of_records 1 octeto Número de registros de Batch_Scan_data_read
format_of_data Variável Modo truncado:
Endereço[0]: 6 octetos
Address_Type[0]: 1 octeto
Tx_Pwr[0]: 1 octeto
RSSI[0] : 1 octeto
Timestamp[0]: 2 octetos
[vários registros ( num_of_records ) com o formato acima]

Modo completo:
Endereço[0]: 6 octetos
Address_Type[0]: 1 octeto
Tx_Pwr[0]: 1 octeto
RSSI[0]: 1 octeto
Timestamp[0]: 2 octetos
Adv packet_len[0]: 1 octeto
Adv_packet[0]: Adv_packet_len octetos
Scan_data_resp_len[0]: 1 octeto
Scan_data_resp[0]: octetos Scan_data_resp
[vários registros com o formato acima ( num_of_records )]

Filtro de conteúdo do pacote de publicidade

Use isso para habilitar/desabilitar/configurar o Filtro de Conteúdo do Pacote de Publicidade (APCF) no controlador.

LE_APCF_Command

OCF: 0x157

Parâmetro de comando Tamanho Propósito
APCF_opcode 1 octeto 0x00 - Ativar APCF
0x01 - APCF Definir parâmetros de filtragem
0x02 - Endereço da emissora APCF
0x03 - UUID do serviço APCF
0x04 - UUID de solicitação de serviço APCF
0x05 - Nome Local APCF
0x06 - Dados do fabricante APCF
0x07 - Dados do serviço APCF

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de devolução
APCF_opcode 1 octeto 0x00 - Ativar APCF
0x01 - APCF Definir parâmetros de filtragem
0x02 - Endereço da emissora APCF
0x03 - UUID do serviço APCF
0x04 - UUID de solicitação de serviço APCF
0x05 - Nome Local APCF
0x06 - Dados do fabricante APCF
0x07 - Dados do serviço APCF

LE_APCF_Command: Enable_sub_cmd

Sub OCF: 0x00

Parâmetro de subcomando Tamanho Propósito
APCF_enable 1 octeto 0x01 - Ativar recurso APCF
0x00 - Desativar recurso APCF

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x0 - Ativar APCF
APCF_Enable 1 octeto Ativar/desativar é definido via APCF_enable

LE_APCF_Command: set_filtering_parameters_sub_cmd

Este subcomando é usado para adicionar ou excluir uma especificação de filtro ou limpar uma lista de filtros para filtragem no chip.

Sub OCF: 0x01

Parâmetro de subcomando Tamanho Propósito
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
Excluir limpará o filtro específico junto com as entradas de recurso associadas em outras tabelas.
Limpar limpará todos os filtros e entradas associadas em outras tabelas.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1 )
APCF_Feature_Selection 2 octetos Máscaras de bits para os recursos selecionados:
Bit 0: definido para habilitar o filtro de endereço de transmissão
Bit 1: Definido para habilitar o filtro de alteração de dados de serviço
Bit 2: definido para habilitar a verificação de UUID de serviço
Bit 3: definido para habilitar a verificação de UUID de solicitação de serviço
Bit 4: Definido para habilitar a verificação de nome local
Bit 5: Definido para habilitar a Verificação de dados do fabricante
Bit 6: Definido para habilitar a Verificação de Dados de Serviço
APCF_List_Logic_Type 2 octetos Operação lógica para cada seleção de recurso (posição por bit) especificada em APCF_Feature_Selection .
Válido somente quando um recurso está ativado.
Valor da posição do bit:
0: OU
1: E
Se a lógica "AND" for selecionada, um pacote ADV passará pelo filtro somente se contiver TODAS as entradas da lista.
Se a lógica "OR" for selecionada, um pacote ADV passará pelo filtro se contiver qualquer uma das entradas da lista.
APCF_Filter_Logic_Type 1 octeto 0x00: OU
0x01: E
Nota: O tipo de lógica é N/A para os três primeiros campos de APCF_Feature_Selection , que é sempre a lógica "AND". Eles são aplicáveis ​​apenas para (Bit 3 - Bit 6) quatro campos de APCF_Feature_Selection .
rssi_high_thresh 1 octeto [em dBm]
O anunciante é considerado visto apenas se o sinal for superior ao limite alto de RSSI. Caso contrário, o firmware deve se comportar como se nunca o tivesse visto.
delivery_mode 1 octeto 0x00 - immediate
0x01 - on_found
0x02 - em batched
onfound_timeout 2 octetos Válido somente se delivery_mode for on_found .
[em milissegundos]
Tempo para o firmware demorar e coletar anúncios adicionais antes de relatar.
onfound_timeout_cnt 1 octeto Válido somente se delivery_mode for on_found .
[contar]
Se um anúncio no onFound permanecer no firmware pela duração do onfound_timeout , ele coletará alguns anúncios e a contagem será verificada. Se a contagem exceder onfound_timeout_cnt , será relatado OnFound imediatamente em seguida.
rssi_low_thresh 1 octeto Válido somente se delivery_mode for on_found .
[em dBm]
O pacote do anunciante é considerado como não visto se o RSSI do pacote recebido não estiver acima do limite baixo do RSSI.
onlost_timeout 2 octetos Válido somente se delivery_mode for on_found .
[em milissegundos]
Se um anúncio, após ser encontrado, não for visto de forma contígua durante o período lost_timeout , ele será imediatamente reportado como perdido.
num_of_tracking_entries 2 octetos Válido somente se delivery_mode for on_found .
[contar]
Número total de anunciantes a serem rastreados por filtro.

Os valores RSSI devem usar o complemento de 2 para representar valores negativos.

O host poderá configurar vários filtros com APCF_Application_Address_type definido como 0x02 (para todos os endereços de broadcaster) para gerenciar várias combinações de filtros.

Filtragem, lotes e relatórios são conceitos inter-relacionados. Cada anúncio e resposta de varredura relacionada terá que passar por todos os filtros, um após o outro. Assim, as ações resultantes ( delivery_mode ) estão intimamente ligadas à filtragem. Os modos de entrega são os seguintes: report_immediately , batch e onFound . O valor OnLost está relacionado a OnFound no sentido de que virá após OnFound quando perdido.

Este fluxo de processamento descreve o modelo conceitual:

Quando um quadro de anúncio (ou resposta de varredura) é recebido, ele é aplicado a todos os filtros em ordem serial. É possível que um anúncio possa causar relatórios imediatos com base em um filtro e lote do mesmo devido a uma ação de filtro diferente.

Os limites de nível RSSI (alto e baixo) permitem controlar quando o quadro está visível para processamento de filtro, mesmo quando um pacote válido é recebido pelo controlador. No caso de o modo de entrega ser definido como imediato ou em lote, o RSSI de um quadro é considerado para processamento adicional do controlador. Diferentes aplicativos precisam de relatórios e comportamentos de lote diferentes. Isso permite que vários aplicativos tenham relatórios diretos e/ou lotes de resultados no firmware, simultaneamente. Um exemplo é um caso em que uma verificação em lote está ativa em um aplicativo e, posteriormente, uma verificação LE regular é emitida por outro aplicativo. Antes de uma verificação em lote ser emitida, a estrutura/aplicativo define os filtros apropriados. Mais tarde, quando o segundo aplicativo emitir uma verificação regular, o lote anterior continuará. No entanto, devido à varredura regular, é semelhante a adicionar conceitualmente um filtro nulo (junto com todos os filtros existentes) junto com o comando LE scan. Os parâmetros do comando LE scan têm precedência quando ativos. Quando a varredura LE regular estiver desabilitada, o controlador reverterá para uma varredura em lote anterior, se ela existir.

O modo de entrega OnFound é baseado em filtros configurados. Uma combinação que aciona a ação de um filtro para ser bem-sucedida é considerada a entidade a ser rastreada para onLost . O evento correspondente é o subevento de rastreamento LE Advt.

A transição OnFound/OnLost para um filtro (se ativado) terá a seguinte aparência:

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x02 - APCF Definir Parâmetros de Filtragem
APCF_Action 1 octeto APCF_Action do comando Echo back
APCF_AvailableSpaces 1 octeto Número de entradas disponíveis na tabela de filtros

LE_APCF_Command: broadcast_address_sub_cmd

Este subcomando é usado para adicionar ou excluir um endereço de anunciante ou para limpar a lista de endereços de anunciante para filtragem no chip.

Sub OCF: 0x02

Parâmetro de subcomando Tamanho Propósito
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
Excluir excluirá o endereço do transmissor especificado no filtro especificado.
Limpar limpará todos os endereços de emissora no filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1 )
APCF_Broadcaster_Address 6 octetos Endereço de dispositivo de 6 bytes para adicionar ou excluir da lista de endereços da emissora
APCF_Application_Address_type 1 octeto 0x00: Público
0x01: Aleatório
0x02: NA (tipo de endereço não aplicável)

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x02 - Endereço da emissora APCF
APCF_Action 1 octeto APCF_Action do comando Echo back
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas ainda disponíveis na tabela de endereços de transmissão

LE_APCF_Command: service_uuid_sub_cmd

Este subcomando é usado para adicionar ou excluir um UUID de serviço ou para limpar uma lista de UUID de serviço para filtragem no chip.

Sub OCF: 0x03

Parâmetro de subcomando Tamanho Propósito
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
Excluir excluirá o endereço UUID de serviço especificado no filtro especificado.
Limpar limpará todos os UUIDs de serviço no filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter -1)
APCF_UUID 2,4,16 octeto O UUID de Serviço (16 bits, 32 bits ou 128 bits) para adicionar ou excluir da lista.
APCF_UUID_MASK 2,4,16 octeto A máscara UUID de serviço (16 bits, 32 bits ou 128 bits) a ser adicionada à lista. Deve ter o mesmo comprimento que APCF_UUID.

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x03 - UUID do serviço APCF
APCF_Action 1 octeto APCF_Action do comando Echo back
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas ainda disponíveis na tabela UUID de serviço

LE_APCF_Command: solicitação_uuid_sub_cmd

Este subcomando é usado para adicionar ou excluir um UUID de solicitação ou para limpar uma lista de UUID de solicitação para filtragem no chip.

Sub OCF: 0x04

Parâmetro de subcomando Tamanho Propósito
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
Excluir excluirá o endereço UUID de solicitação no filtro especificado.
Clear limpará todos os UUIDs de solicitação no filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter -1)
APCF_UUID 2,4,16 octeto O UUID de Solicitação (16 bits, 32 bits ou 128 bits) para adicionar ou excluir da lista.
APCF_UUID_MASK 2,4,16 octeto A máscara UUID de solicitação (16 bits, 32 bits ou 128 bits) a ser adicionada à lista. Deve ter o mesmo comprimento que o APCF_UUID .

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x04 - UUID de solicitação de APCF
APCF_Action 1 octeto APCF_Action do comando Echo back
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas ainda disponíveis na tabela Solicitation UUID

LE_APCF_Command: local_name_sub_cmd

Este subcomando é usado para adicionar ou excluir uma string de nome local ou para limpar a lista de strings de nome local para filtragem no chip.

Sub OCF: 0x05

Parâmetro de subcomando Tamanho Propósito
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
Excluir excluirá a string de nome local especificada no filtro especificado.
Limpar limpará todas as sequências de nomes locais no filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter -1)
APCF_LocName_Mandata_or_SerData Tamanho variável Uma cadeia de caracteres para o nome local.

Notas:
  • Atualmente, o número máximo de caracteres em uma string de nome local é 29
  • Não aplicável quando a ação é "Limpar" (0x2)

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x05 - Nome Local APCF
APCF_Action 1 octeto APCF_Action do comando Echo back
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas ainda disponíveis na tabela de nomes locais

LE_APCF_Command: manf_data_sub_cmd

Este subcomando é usado para adicionar ou excluir uma string de dados do fabricante ou para limpar a lista de strings de dados do fabricante para filtragem no chip.

Sub OCF: 0x06

Parâmetro de subcomando Tamanho Propósito
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
Excluir excluirá a sequência de dados do fabricante especificada no filtro especificado.
Limpar limpará todas as cadeias de dados do fabricante no filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter -1)
APCF_LocName_Mandata_or_SerData Tamanho variável Uma cadeia de caracteres para dados do fabricante.

Notas:
  • Atualmente, o número máximo de caracteres em uma string de nome local é 29
  • Não aplicável quando a ação é "Limpar" (0x2)
APCF_ManData_Mask Tamanho variável A máscara de dados de fabricação a ser adicionada à lista. Deve ter o mesmo comprimento que APCF_LocName_or_ManData_or_SerData .

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x06 - Dados do fabricante APCF
APCF_Action 1 octeto APCF_Action do comando Echo back
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas ainda disponíveis na tabela de dados do fabricante

LE_APCF_Command: service_data_sub_cmd

Este subcomando é usado para adicionar ou excluir uma string de dados de serviço ou para limpar a lista de strings de dados de serviço para filtragem no chip.

Sub OCF: 0x07

Parâmetro de subcomando Tamanho Propósito
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
Excluir excluirá a sequência de dados de serviço especificada no filtro especificado.
Limpar limpará todas as sequências de dados de serviço no filtro especificado.
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter -1)
APCF_LocName_Mandata_or_SerData Tamanho variável Uma cadeia de caracteres para dados de serviço.

Notas:
  • Atualmente, o número máximo de caracteres em uma string de nome local é 29
  • Não aplicável quando a ação é "Limpar" (0x2)
APCF_LocName_Mandata_or_SerData_Mask Tamanho variável A máscara de dados de serviço a ser adicionada à lista. Deve ter o mesmo comprimento que APCF_LocName_or_ManData_or_SerData.

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
APCF_opcode 1 octeto 0x07 - Dados do serviço APCF
APCF_Action 1 octeto APCF_Action do comando Echo back
APCF_AvailableSpaces 1 octeto Número de entradas gratuitas ainda disponíveis para a tabela Service Data

Atividade do controlador e comando de informações de energia

O objetivo dessas informações é que as funções superiores do sistema host analisem as atividades totais de todos os componentes, incluindo o controlador BT e seu estado macro, em conjunto com o que está acontecendo nos aplicativos e na estrutura. Para fazer isso, são necessárias as seguintes informações da pilha BT e do controlador:

  • Pilha BT: relatando o estado macro-operacional atual do controlador
  • Firmware: relatando atividade agregada e informações de energia

Estados da macro da pilha do host BT, conforme determinado no nível do usuário:

  • Inativo: [varredura de página, anúncio LE, varredura de consulta]
  • Digitalizar: [paginação/consulta/tentando conectar]
  • Ativo: [link ACL ativado, link SCO em andamento, modo sniff]

As atividades que o controlador acompanha ao longo de sua vida útil são o tempo Tx, o tempo Rx, o tempo ocioso e a energia total consumida. Eles são apagados quando lidos do host.

LE_Get_Controller_Activity_Energy_Info

Este é um comando específico do fornecedor.

OCF: 0x159

Parâmetro de subcomando Tamanho Propósito
N / D Parâmetros de comando vazios

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
total_tx_time_ms 4 octetos Tempo total realizando Tx
total_rx_time_ms 4 octetos Tempo total realizando Rx
total_idle_time_ms 4 octetos Tempo total em inatividade (estados de baixa energia sem suspensão)
total_energy_used 4 octetos Energia total utilizada [produto da corrente (mA), tensão (V) e tempo (ms)]

Comando de parâmetros de varredura de conjunto estendido LE

Este comando pode ser usado para habilitar uma janela e intervalo de varredura maiores no controlador. De acordo com a especificação BT Core 5.2, uma janela e intervalo de varredura têm um limite superior de 10,24 segundos, o que dificulta os intervalos de varredura mais longos dos aplicativos além de 10,24 segundos.

Referência básica: Especificação BT Core 5.2, página 2493 (Comando LE Set Scan Parameters)

OCF: 0x15A

Parâmetro de comando Tamanho Propósito
LE_Ex_Scan_Type 1 octeto 0x00 - Varredura passiva. Nenhum pacote SCAN_REQ deve ser enviado (padrão).
0x01 - Varredura ativa. Pacotes SCAN_REQ podem ser enviados.
LE_Ex_Scan_Interval 4 octetos Definido como o intervalo de tempo de quando o Controlador iniciou sua última varredura LE até o início da varredura LE subsequente.
Faixa: 0x0004 a 0x00FFFFFF
Padrão: 0x0010 (10 ms)
Tempo = N * 0,625 ms
Faixa de tempo: 2,5 ms a 10.442,25 segundos
LE_Ex_Scan_Window 4 octetos A duração da varredura LE. LE_Scan_Window deve ser menor ou igual a LE_Scan_Interval .
Faixa: 0x0004 a 0xFFFF
Padrão: 0x0010 (10 ms)
Tempo = N * 0,625 ms
Faixa de tempo: 2,5 ms a 40,95 segundos
Own_Address_Type 1 octeto 0x00 - Endereço do dispositivo público (padrão)
0x01 - Endereço de dispositivo aleatório
LE_Ex_Scan_Filter_Policy 0x00 - Aceita todos os pacotes de anúncio (padrão). Os pacotes de publicidade direcionada que não são endereçados para este dispositivo devem ser ignorados.
0x01 - Ignora pacotes de anúncios de dispositivos que não estão na lista Somente Lista Branca. Os pacotes de publicidade direcionada que não são endereçados para este dispositivo devem ser ignorados.

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo

Obter o comando de informações de depuração do controlador

O objetivo deste elemento de informação é adquirir informações de depuração do controlador por um host, em formato binário, para pós-processamento e análise. Isso ajuda a depurar problemas em campo e fornece aos engenheiros um kit de ferramentas para registrar informações para análise. Um controlador pode fornecer as informações quando solicitado por um host por meio do evento (sub-evento Controller Debug Info) ou de forma autônoma quando desejado pelo controlador. Exemplos de uso podem ser relatar informações de estado de firmware, informações de despejo de memória, informações de log, etc.

OCF: 0x15B

Parâmetro de comando Tamanho Propósito
N / D Lista de parâmetros de comando vazia

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo

Suporte para descarregamento de hardware A2DP

O recurso A2DP Offload suporta o descarregamento do processo de codificação de áudio A2DP para um processador de áudio conectado ao BT Controller. O fluxo de dados de áudio codificado passa diretamente do processador de áudio para o controlador BT sem o envolvimento do host BT. O Host BT ainda é responsável pela configuração e controle da sessão A2DP.

OCF: 0x15D

Iniciar descarregamento A2DP

Sub OCF: 0x01

Use este comando para configurar o processo de descarregamento A2DP e para iniciar o fluxo A2DP.

Parâmetro de comando Tamanho Propósito
Codec 4 octetos Especifica o tipo de codec
0x01 - SBC
0x02 - AAC
0x04 - APTX
0x08 - APTX HD
0x10 - LDAC
Max_Latency 2 octetos Latência máxima permitida (em ms). Um valor de zero desabilita a descarga.
SCMS-T_Enable 2 octetos Octeto 0: Sinalizador que permite a adição do cabeçalho SCMS-T.
  • 0x00 - Cabeçalho SCMS-T não incluído.
  • 0x01 - Cabeçalho SCMS-T incluído.

Octeto 1: Valor para o cabeçalho SCMS-T, quando habilitado.

Frequência de amostragem 4 octetos 0x01 - 44100Hz
0x02 - 48000Hz
0x04 - 88200Hz
0x08 - 96000Hz
Bits_Por_Amostra 1 octeto 0x01 - 16 bits por amostra
0x02 - 24 bits por amostra
0x04 - 32 bits por amostra
Channel_Mode 1 octeto 0x01 - Mono
0x02 - Estéreo
Codificado_áudio_bitrate 4 octetos A taxa de bits de áudio codificado em bits por segundo segundo.
0x00000000 - A taxa de bits de áudio não foi especificada/não utilizada.
0x00000001 - 0x00FFFFFF - Taxa de bits de áudio codificado em bits por segundo.
0x01000000 - 0xFFFFFFFF - Reservado.
Connection_Handle 2 octetos Identificador de conexão da conexão A2DP sendo configurada
L2CAP_Channel_ID 2 octetos L2CAP Channel ID a ser usado para esta conexão A2DP
L2CAP_MTU_Size 2 octetos Tamanho máximo de L2CAP MTU contendo pacotes de áudio codificados
Codec_Information 32 octetos Informações específicas do codec.

Codec SBC:

Consulte os elementos de informação específicos do Codec SBC em A2DP v1.3.
Octeto 0: Comprimento do bloco | Subbandas | Método de alocação
Octeto 1: valor mínimo do Bitpool
Octeto 2: valor máximo do pool de bits
Octeto 3: Frequência de amostragem | Modo de canal
Octeto 4-31: reservado

Codec AAC:

Consulte os elementos de informação específicos do Codec AAC em A2DP v1.3
Octeto 0: Tipo de objeto
Octeto 1; b7: VBR
Octeto 2-31: reservado

Codec LDAC:

Octeto 0-3: ID do fornecedor
0x0000012D

Octeto 4-5: Codec ID
0x00AA - LDAC
Todos os outros valores são reservados

Octeto 6: Índice de taxa de bits:
0x00 - Alto
0x01 - Meio
0x02 - Baixo
0x03 - 0x7E - Reservado
0x7F - ABR (taxa de bits adaptável)
0x80 - 0xFF - Reservado

Octeto 7: Modo de Canal LDAC
0x01 - Estéreo
0x02 - Duplo
0x04 - Mono
Outros são reservados

Octeto 8-31: reservado

Todos os outros codecs:

Octeto 0-31: reservado

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Sub_Opcode 1 octeto 0x0- Iniciar descarregamento A2DP

Parar a descarga A2DP

Sub OCF: 0x02

Este comando é usado para parar o fluxo A2DP Offload.

Parâmetro de comando Tamanho Propósito
N / D Lista de parâmetros de comando vazia.

Nenhum parâmetro é definido para este comando.

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Sub_Opcode 1 octeto 0x02 - Parar a descarga A2DP

Comando do relatório de qualidade do Bluetooth

O recurso de comando BT Quality Report inicia o mecanismo no controlador Bluetooth para relatar eventos de qualidade Bluetooth ao host. Você pode habilitar quatro opções:

  • Modo de monitoramento de qualidade: o controlador envia periodicamente um subevento BQR relacionado à qualidade do link para o host.
  • Approaching LSTO: Se nenhum pacote for recebido do dispositivo BT conectado por mais da metade do valor do Link Supervision TimeOut (LSTO), o controlador relatará um evento Approaching LSTO ao host.
  • A2DP Audio Choppy: Quando o controlador detecta fatores que causam áudio instável, o controlador relata um evento A2DP Audio Choppy ao host.
  • (e)SCO Voice Choppy: Quando o controlador detecta fatores que causam voz instável, o controlador relata um evento (e)SCO Voice Choppy ao host.
  • Inflamação da raiz: Este evento é enviado pelo controlador para a pilha quando o HAL ou o controlador encontra um erro fatal e precisa reiniciar o Bluetooth.
  • Rastreamento de mensagem LMP/LL: O controlador envia o handshake de mensagem LMP/LL com o dispositivo remoto para o host.
  • Rastreamento de agendamento Bluetooth Multi-perfil/Coex: O controlador envia suas informações de agendamento sobre como lidar com vários perfis Bluetooth e coexistência sem fio na banda de 2,4 Ghz para o host.
  • Mecanismo de informações de depuração do controlador: quando habilitado, o controlador pode relatar de forma autônoma informações de registro de depuração por meio do subevento de informações de depuração do controlador para o host.

OCF: 0x15E

Parâmetro de comando Tamanho Propósito
BQR_Report_Action 1 octeto Ação para adicionar/excluir relatórios de eventos de qualidade definidos no parâmetro BQR_Quality_Event_Mask ou limpar tudo.

0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar

Excluir limpará os relatórios de eventos de qualidade específicos.
Limpar limpará todos os relatórios de eventos de qualidade (o parâmetro BQR_Quality_Event_Mask pode ser ignorado).

BQR_Quality_Event_Mask 4 octetos Máscaras de bits para o relatório de eventos de qualidade selecionado.

Bit 0: Configurado para habilitar o modo de monitoramento de qualidade.
Bit 1: Definido para habilitar o evento Approaching LSTO.
Bit 2: Definido para habilitar o evento A2DP Audio Choppy.
Bit 3: Definido para habilitar o evento (e)SCO Voice Choppy.
Bit 4: Definido para habilitar o evento de inflamação da raiz.
Bit 5 ~ 15: Reservado.
Bit 16: Definido para habilitar o rastreamento de mensagens LMP/LL.
Bit 17: Definido para habilitar o rastreamento de agendamento Bluetooth Multi-link/Coex.
Bit 18: Definido para habilitar o mecanismo Controller Debug Information.
Bit 19 ~ 31: Reservado.

BQR_Minimum_Report_Interval 2 octetos Defina o intervalo de tempo mínimo do relatório de eventos de qualidade para o(s) evento(s) de qualidade selecionado(s). O firmware do controlador não deve relatar o próximo evento dentro do intervalo de tempo definido. A configuração do intervalo deve ser respectiva e dedicada ao(s) evento(s) de qualidade que está(ão) sendo adicionado(s).

Unidade: ms
Padrão: 0 (Sem limitação para o intervalo.)
Alcance: 0 ~ 65535 ms

Um evento Command Complete será gerado para este comando.

Parâmetro de retorno Tamanho Propósito
Status 1 octeto Status de comando completo
Current_Quality_Event_Mask 4 octetos Indica a configuração atual da máscara de bits.
Bit 0: O modo de monitoramento de qualidade está habilitado.
Bit 1: O relatório de eventos LSTO de aproximação está habilitado.
Bit 2: O relatório de evento A2DP Audio Choppy está habilitado.
Bit 3: (e)SCO Voice Choppy reporte de evento habilitado.
Bit 4: O relatório de eventos de inflamação da raiz está ativado.
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 / D 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
Nenhum

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
Nenhum

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