A Host Controller Interface (HCI) é usada para interagir com um controlador Bluetooth.
Este documento fornece uma lista de requisitos de Bluetooth (BT) e Bluetooth Low Energy (BLE) HCI. O objetivo é que os fornecedores de pilha Host BT e 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 junto 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 variado e gerenciar as migrações, uma filosofia de design que permite que os controladores BT exponham seus recursos (além da Especificação Bluetooth Core 5.2 padrão) é descrita neste documento. A pilha BT do host pode usar esses recursos para determinar quais recursos habilitar.
Suportando padrões abertos
Um dos objetivos 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 especificação futura do 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 da 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 ativado 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 de privacidade disponível na especificação BT versão 4.2 e superior. |
total_scan_results_storage | 2 octetos | Armazenamento para resultados de varredura 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 suportada byte[0] = número principal byte[1] = Número menor v1.03 byte[0] = 0x01 byte[1] = 0x03 |
total_num_of_advt_tracked | 2 octetos | Número total de anunciantes rastreados para fins OnLost / OnFound |
extended_scan_support | 1 octeto | Suporta janela de varredura estendida e intervalo |
debug_logging_supported | 1 octeto | Suporta 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 de 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 a forma como as notificações de eventos de resposta de varredura do Bluetooth LE 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/em espera 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 dos resultados da varredura.
Este recurso se concentra no gerenciamento e configuração do recurso de armazenamento de resultados de varredura LE no controlador Bluetooth. O armazenamento é usado para agrupar temporariamente dados de anúncios e digitalizar 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}
- Completo. 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 digitalização em lote 0x3 - Definir parâmetros de digitalização em lote 0x4 - Ler os parâmetros do resultado da varredura em lote |
Um evento Command Complete será gerado para este comando. Ativar o recurso específico do cliente não inicia a digitalizaçã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 digitalização em lote 0x3 - Definir parâmetros de digitalização em lote 0x4 - Ler os parâmetros do resultado da varredura 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 digitalização em lote 0x00 - Desativar recurso de digitalizaçã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 digitalização em lote 0x3 - Definir parâmetros de digitalização em lote 0x4 - Ler os parâmetros do resultado da varredura em lote |
LE_Batch_Scan_Command: definir o subcomando do parâmetro de armazenamento de digitalização 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 digitalização em lote] |
LE_Batch_Scan_Command: Definir o 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á desativada 0x01 – O modo truncado está ativado 0x02 – Modo completo ativado 0x03 – Os modos Truncado e Completo estão ativados |
Duty_cycle_scan_window | 4 octetos | Batch Scan tempo de digitalização (# 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 o anúncio mais antigo 1 - Descartar anúncio com RSSI mais fraco |
Este subcomando iniciará a digitalização em lote, se ativado. Na verificação truncada, os resultados são armazenados em formato truncado, onde a chave exclusiva para estilo truncado = { BD_ADDR,
intervalo_scan}. Isso significa que apenas um BD_ADDR will
gravado 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 habilitado, a varredura ativa será usada e as Respostas de Varredura serão registradas. A chave exclusiva de estilo completo = {MAC, pacote de anúncios}, 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 Full, 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 único 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 digitalização em lote] |
LE_Batch_Scan_Command: Ler subcomando de resultados de varredura 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 possui mais registros para se comunicar com o host. Cada evento Comando Completo pode conter vários registros de apenas um tipo de dados (Completo ou Truncado).
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 carimbo de data/hora foi obtido no firmware é T_fw
. O tempo de relatório será: ( T_c
- T_fw
). T_c
e T_fw
estão no domínio do tempo do firmware. Isso permite que o host calcule há quanto tempo o evento ocorreu.
Parâmetro de retorno | Tamanho | Propósito |
---|---|---|
Status | 1 octeto | Status de Comando Completo |
Batch_scan_opcode | 1 octeto | 0x03 [Definir parâmetros de digitalizaçã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 Carimbo de data/hora[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 Carimbo de data/hora[0]: 2 octetos Adv packet_len[0]: 1 octeto Adv_packet[0]: Adv_packet_len octetos Scan_data_resp_len[0]: 1 octeto Scan_data_resp[0]: Scan_data_resp octetos[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. A APCF filtra os relatórios de publicidade no controlador, mas não filtra a publicidade periódica.
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 de serviço APCF 0x08 - Serviço de Descoberta de Transporte APCF 0x09 - Filtro de tipo AD APCF 0x10 ~ 0xAF - Reservado para uso futuro 0xB0 ~ 0xDF - Reservado para o fornecedor 0xE0 ~ 0xFE - Reservado para uso futuro 0xFF - Recursos estendidos de leitura APCF |
Um evento Command Complete será gerado para este comando.
Parâmetro de retorno | Tamanho | Propósito |
---|---|---|
Status | 1 octeto | Status de retorno |
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 de serviço APCF 0x08 - Serviço de Descoberta de Transporte APCF 0x09 - Filtro de tipo AD APCF 0x10 ~ 0xAF - Reservado para uso futuro 0xB0 ~ 0xDF - Reservado para o fornecedor 0xE0 ~ 0xFE - Reservado para uso futuro 0xFF - Recursos estendidos de leitura 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 | Habilitar/desabilitar é 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 Broadcast Address Bit 1: definido para habilitar o filtro de alteração de dados de serviço Bit 2: definido para ativar a verificação UUID do serviço Bit 3: definido para ativar a verificação de UUID de solicitação de serviço Bit 4: definido para ativar a verificação de nome local Bit 5: definido para ativar a verificação de dados do fabricante Bit 6: definido para ativar a verificação de dados de serviço Bit 7: definido para ativar a verificação do serviço de descoberta de transporte Bit 8: definido para ativar a verificação do tipo AD |
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 na lista. Se a lógica "OU" for selecionada, um pacote ADV passará pelo filtro se contiver qualquer uma das entradas na lista. |
APCF_Filter_Logic_Type | 1 octeto | 0x00: OU 0x01: E Observação: 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 do RSSI. Caso contrário, o firmware deve se comportar como se nunca o visse. |
delivery_mode | 1 octeto | 0x00 - immediate 0x01 - on_found 0x02 - batched |
onfound_timeout | 2 octetos | Válido apenas 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 apenas 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 depois disso. |
rssi_low_thresh | 1 octeto | Válido apenas 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 de RSSI. |
onlost_timeout | 2 octetos | Válido apenas se delivery_mode for on_found .[em milissegundos] Se um anúncio, após ser encontrado, não for visto contiguamente pelo período lost_timeout , ele será imediatamente reportado como perdido. |
num_of_tracking_entries | 2 octetos | Válido apenas 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 deve ser capaz de 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 verificação 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 cause relatórios imediatos com base em um filtro e agrupamento do mesmo devido a uma ação de filtro diferente.
Os limites de nível RSSI (alto e baixo) fornecem a capacidade de controlar quando o quadro é 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 posterior do controlador. Aplicativos diferentes 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 varredura em lote está ativa em um aplicativo e, posteriormente, uma varredura LE regular é emitida por outro aplicativo. Antes que uma varredura em lote seja emitida, a estrutura/aplicativo define os filtros apropriados. Mais tarde, quando o segundo aplicativo emite uma verificação regular, o lote anterior continua. No entanto, devido à verificação 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 regular de LE é desativada, o controlador reverterá para uma varredura de lote anterior, se ela existisse.
O modo de entrega OnFound
é baseado em filtros configurados. Uma combinação que aciona a ação de um filtro para obter sucesso é 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 | 0x01 - APCF Definir Parâmetros de Filtragem |
APCF_Action | 1 octeto | Ecoar APCF_Action do comando 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 anunciantes 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 do transmissor 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 do transmissor |
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 | Ecoar APCF_Action do comando back |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas ainda disponíveis na tabela Broadcast Address |
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 do 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 do 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 | Ecoar APCF_Action do comando back |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas ainda disponíveis na tabela Service UUID |
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 da solicitação no filtro especificado. Limpar 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) a ser adicionado ou excluído 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 APCF |
APCF_Action | 1 octeto | Ecoar APCF_Action do comando back |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas ainda disponíveis na tabela UUID de solicitação |
LE_APCF_Command: local_name_sub_cmd
Este subcomando é usado para adicionar ou excluir uma sequência de nomes locais ou para limpar a lista de sequências de nomes locais 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:
|
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 | Ecoar APCF_Action do comando 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 sequências 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:
|
APCF_ManData_Mask | tamanho variável | A máscara de dados de manufatura 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 | Ecoar APCF_Action do comando 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 cadeia de dados de serviço especificada no filtro especificado. Limpar limpará todas as strings 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:
|
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 de serviço APCF |
APCF_Action | 1 octeto | Ecoar APCF_Action do comando back |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas ainda disponíveis para a tabela de dados de serviço |
LE_APCF_Command: ad_type_sub_cmd
Este subcomando é usado para adicionar ou excluir um tipo de AD ou para limpar uma lista de tipos de AD para filtragem no chip. Use read_extended_features_sub_cmd
para verificar se este comando é suportado ou não.
Sub OCF: 0x09
Parâmetro de subcomando | Tamanho | Propósito |
---|---|---|
APCF_Action | 1 octeto | 0x00 - Adicionar 0x01 - Excluir 0x02 - Limpar Excluir excluirá o tipo de AD especificado no filtro especificado. Limpar limpará todos os tipos de AD no filtro especificado. |
APCF_Filter_Index | 1 octeto | Índice de filtro (0, max_filter -1) |
APCF_AD_TYPE | 1 octeto | O tipo de AD para adicionar ou excluir da lista. Ignorar quando APCF_Action for 0x02 (Limpar) |
APCF_AD_DATA_Length | tamanho variável | 0x00 - significa não filtrar o conteúdo dos dados Ignorar quando APCF_Action for 0x02 (Limpar) |
APCF_AD_DATA | tamanho variável | Ignorar quando APCF_Action for 0x02 (Limpar) |
APCF_AD_DATA_MASK | tamanho variável | Ignorar quando APCF_Action for 0x02 (Limpar) Deve ter o mesmo comprimento que APCF_AD_DATA . |
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 | 0x09 - Tipo AD APCF |
APCF_Action | 1 octeto | Ecoar APCF_Action do comando back |
APCF_AvailableSpaces | 1 octeto | Número de entradas gratuitas ainda disponíveis na tabela Tipo de AD |
LE_APCF_Command: read_extended_features_sub_cmd
Este subcomando é usado para ler recursos APCF estendidos.
Sub OCF: 0xFF
Parâmetro de subcomando | Tamanho | Propósito |
---|---|---|
Não aplicável | Parâmetro de comando vazio. |
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 | 0xFF - APCF_Read_Extended_Features |
APCF_extended_features | 2 octeto | Máscaras de bits para recursos estendidos suportados:
Valor do bit
|
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 operacional macro atual do controlador
- Firmware: relatórios de atividade agregada e informações de energia
Estados de macro de pilha de host BT, conforme determinado no nível do usuário:
- Ocioso: [digitalização de página, LE advt, verificação de consulta]
- Scan: [paginação/consulta/tentando conectar]
- Ativo: [link ACL ativado, link SCO em andamento, modo de detecção]
As atividades que o controlador monitora ao longo de sua vida útil são tempo Tx, tempo Rx, tempo ocioso e 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 baixo consumo de energia não suspensos) |
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 de varredura maior e intervalo no controlador. De acordo com a especificação BT Core 5.2, uma janela de varredura e um intervalo 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 base: Especificação BT Core 5.2, página 2493 (LE Set Scan Parameters Command)
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 desde que o Controlador iniciou sua última varredura LE até iniciar a varredura LE subsequente. Intervalo: 0x0004 a 0x00FFFFFF Padrão: 0x0010 (10 ms) Tempo = N * 0,625 ms Intervalo de tempo: 2,5 ms a 10442,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 .Intervalo: 0x0004 a 0xFFFF Padrão: 0x0010 (10 ms) Tempo = N * 0,625 ms Intervalo de tempo: 2,5 ms a 40,95 segundos |
Own_Address_Type | 1 octeto | 0x00 - Endereço de 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 direcionados 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 White List Only. Os pacotes de publicidade direcionados 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 |
Obtenha 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 (subevento Controller Debug Info) ou de forma autônoma quando desejado pelo controlador. Os usos de exemplo podem ser para relatar informações de estado de firmware, informações de despejo de memória, informações de registro, 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 de 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 controlador BT. O fluxo de dados de áudio codificado passa diretamente do processador de áudio para o controlador BT sem o envolvimento do host BT. O BT Host 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 - APTXHD 0x10 - LDAC |
Max_Latency | 2 octetos | Latência máxima permitida (em ms). Um valor de zero desativa a descarga. |
SCMS-T_Enable | 2 octetos | Octeto 0: Flag que habilita a adição do cabeçalho SCMS-T.
Octeto 1: Valor do cabeçalho SCMS-T, quando habilitado. |
Sampling_Frequency | 4 octetos | 0x01 - 44100 Hz 0x02 - 48000 Hz 0x04 - 88200 Hz 0x08 - 96000 Hz |
Bits_Per_Sample | 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 |
Encoded_Audio_Bitrate | 4 octetos | A taxa de bits do áudio codificado em bits por segundo. 0x00000000 - A taxa de bits do áudio não foi especificada/não utilizada. 0x00000001 - 0x00FFFFFF - Taxa de bits de áudio codificada 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 | ID do canal L2CAP 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. Codec AAC: Consulte os elementos de informação específicos do Codec AAC em A2DP v1.3 Código LDAC: Octeto 0-3: ID do fornecedor Octeto 4-5: ID do codec Octeto 6: Índice de taxa de bits: Octeto 7: Modo Canal LDAC 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 o descarregamento A2DP
Sub OCF: 0x02
Este comando é usado para parar o stream 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 o descarregamento A2DP |
Comando de relatório de qualidade 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.
- Aproximando-se do LSTO: Se nenhum pacote for recebido do dispositivo BT conectado por mais da metade do valor do Link Supervision TimeOut (LSTO), o controlador reportará 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.
- Root Inflammation: 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.
- Bluetooth Multi-profile/Coex scheduling trace: The controller sends its scheduling information on handling multiple Bluetooth profiles and wireless coexistence in the 2.4 Ghz band to the host.
- Controller Debug Information mechanism: When enabled, the controller can autonomously report debug logging information through the Controller debug info sub-event to the host.
OCF: 0x15E
Command parameter | Size | Purpose |
---|---|---|
BQR_Report_Action | 1 octet | Action to add / delete reporting of quality event(s) set in BQR_Quality_Event_Mask parameter, or clear all. 0x00 - Add Delete will clear specific quality event(s) reporting. |
BQR_Quality_Event_Mask | 4 octets | Bit masks for the selected quality event reporting. Bit 0: Set to enable quality monitoring mode. |
BQR_Minimum_Report_Interval | 2 octets | Define the minimum time interval of quality event reporting for the selected quality event(s). The controller Firmware should not report the next event within the defined time interval. The interval setting shall be respective and dedicated for the quality event(s) which are being added. Unit: ms |
BQR_Vendor_Specific_Quality_Event_Mask | 4 octets | Bit masks for the selected vendor-specific quality event reporting. This parameter is valid only when bit 15 of BQR_Quality_Event_Mask is set.Bit 0 ~ 31: Reserved. |
BQR_Vendor_Specific_Trace_Mask | 4 octets | Bit masks for the selected vendor-specific trace reporting. This parameter is valid only when bit 31 of BQR_Quality_Event_Mask is set.Bit 0 ~ 31: Reserved. |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Current_Quality_Event_Mask | 4 octets | Indicates current bit mask setting. Bit 0: Quality monitoring mode is enabled. Bit 1: Approaching LSTO event reporting is enabled. Bit 2: A2DP Audio Choppy event reporting is enabled. Bit 3: (e)SCO Voice Choppy event reporting is enabled. Bit 4: Root inflammation event reporting is enabled. Bit 5: Energy monitoring mode is enabled. Bit 6: LE audio choppy event reporting is enabled. Bit 7: Connect fail event. Bit 8 ~ 14: Reserved. Bit 15: Vendor-specific quality event reporting is enabled. 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 ~ 30: Reserved. Bit 31: Vendor-specific trace is enabled. |
Current_Vendor_Specific_Quality_Event_Mask | 4 octets | Indicates current bit mask setting. |
Current_Vendor_Specific_Trace_Mask | 4 octets | Indicates current bit mask setting. |
Dynamic Audio Buffer command
The Dynamic Audio Buffer reduces audio glitching by changing the audio buffer size in the Bluetooth controller based on various scenarios.
OCF: 0x15F
Get audio buffer time capability
Sub OCF: 0x01
Use this command to get the audio buffer time capability from the Bluetooth controller.
Command parameter | Size | Purpose |
---|---|---|
N/A | Empty Command parameter list |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Dynamic_Audio_Buffer_opcode | 1 octet | 0x01 - Get audio buffer time |
Audio_Codec_Type_Supported | 4 octets | Bit masks for the supported codec types Bit 0 - SBC Bit 1 - AAC Bit 2 - APTX Bit 3 - APTX HD Bit 4 - LDAC Bit 5-31 are reserved |
Audio_Codec_Buffer_Default_Time_For_Bit_0 | 2 octets | Default buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 0 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 | 2 octets | Maximum buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 0 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 | 2 octets | Minimum buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 0 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Default_Time_For_Bit_1 | 2 octets | Default buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 1 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 | 2 octets | Maximum buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 1 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 | 2 octets | Minimum buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 1 codec type is not supported. Unit: ms |
...... | ...... | ...... |
Audio_Codec_Buffer_Default_Time_For_Bit_31 | 2 octets | Default buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 31 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 | 2 octets | Maximum buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 31 codec type is not supported. Unit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 | 2 octets | Minimum buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported. This value shall be 0 if the Bit 31 codec type is not supported. Unit: ms |
Set audio buffer time
Sub OCF: 0x02
Use this command to set the audio buffer time to the Bluetooth controller.
Command parameter | Size | Purpose |
---|---|---|
Audio_Codec_Buffer_Time | 2 octets | Requested audio buffer time for the current used codec. Unit: ms |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Dynamic_Audio_Buffer_opcode | 1 octet | 0x02 - Set audio buffer time |
Audio_Codec_Buffer_Time | 2 octets | Current audio buffer time in the Bluetooth controller. Unit: ms |
HCI event (vendor-specific)
Vendor-specific HCI events are required in some cases. Refer to Figure 5.4 on page 1897 of the BT Core 5.2 Specification. Event parameter 0 will always contain the first sub-event code, based on which the rest of the HCI event is decoded.
Event Parameter | Size | Purpose |
---|---|---|
HCI_vendor_specific_event_code | 1 octet | 0xFF |
sub_event_code | 1 octet | A sub-event code will be 1 octet in size, the byte immediately following Parameter Length in the HCI event packet. |
Storage threshold breach sub-event
This event indicates that the storage threshold has been breached.
Sub-event code = 0x54
Sub-event Parameter | Size | Purpose |
---|---|---|
None |
LE multi-advertising state change sub-event
This event indicates that an advertising instance has changed its state. At this time, this event is only used to indicate which advertising instance was stopped as a result of a connection.
Sub-event code = 0x55
Sub-event parameter | Size | Purpose |
---|---|---|
Advertising_instance | 1 octet | Identifies the specific advertising instance Valid values are 0 through max_advt_instances -1 |
State_Change_Reason | 1 octet | 0x00: Connection received |
Connection_handle | 2 octets | Identifies the connection that caused the advt instance to be disabled (0xFFFF if invalid) |
LE advertisement tracking sub-event
This event indicates when an advertiser is found or lost.
Sub event code = 0x56
Sub-event Parameter | Size | Purpose |
---|---|---|
APCF_Filter_Index | 1 octet | Filter Index (0, max_filter -1) |
Advertiser_State | 1 octet | 0x00: Advertiser found 0x01: Advertiser lost |
Advt_Info_Present | 1 octet | 0x00: Advertiser information ( Advt_Info ) present0x01: Advertiser information ( Advt_Info ) not present |
Advertiser_Address | 6 octets | Public or random address |
Advertiser_Address_Type | 1 octet | 0x00: Public address 0x01: Random address |
Advt_Info | Tx_Pwr[0] : 1 octetRSSI[0] : 1 octetTimestamp[0] : 2 octetsAdv packet_len[0] : 1 octetAdv_packet[0] : Adv_packet_len octetsScan_data_resp_len[0] : 1 octetScan_data_resp[0] : Scan_data_resp octets |
Controller debug info sub-event
This event is used by a Controller to provide binary debug information to a host.
Sub-event code = 0x57
Sub-event Parameter | Size | Purpose |
---|---|---|
debug_block_byte_offset_start | 2 octets | Debug block byte offset from the start |
last_block | 1 octet | 0x00: More debug data present 0x01: Last binary block; no more debug data |
cur_pay_load_sz | 2 octets | Binary block size in a current event |
Debug_Data | Variable | Debug data of cur_payload_sz |
Bluetooth Quality Report sub-event
This event indicates one of the following: a Bluetooth quality event occurred, the controller uploaded the LMP/LL message trace and Bluetooth Multi-link/Coex scheduling trace, or the controller dumped debug information data.
Sub-event code = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, Link Quality related event]
Sub-event Parameter | Size | Purpose |
---|---|---|
Quality_Report_Id | 1 octet | 0x01: Quality reporting on the monitoring mode. 0x02: Approaching LSTO. 0x03: A2DP Audio Choppy. 0x04: (e)SCO Voice Choppy. 0x05 ~ 0x06: Reserved. 0x07: LE audio choppy. 0x08: Connect fail. 0x09 ~ 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 ~ 0x50: Reserved 0x51: ISO packet 0x52 ~ 0xFF: Reserved |
Connection_Handle | 2 octets | ACL/(e)SCO/ISO connection handle. |
Connection_Role | 1 octet | Performing Role for the connection. 0x00: Central 0x01: Peripheral 0x02 ~ 0xFF: Reserved. |
TX_Power_Level | 1 octet | Current transmit power level for the specified Connection_Handle. This value shall be the same as the controller's responding to the HCI_Read_Transmit_Power_Level HCI command. |
RSSI | 1 octet | [in dBm] Received Signal Strength Indication (RSSI) value for the specified Connection_Handle. |
SNR | 1 octet | [in dB] Signal-to-Noise Ratio (SNR) value for the specified Connection_Handle. |
Unused_AFH_Channel_Count | 1 octet | Indicates the number of unused channels in AFH_channel_map. 0x4F ~ 0xFF: Reserved. |
AFH_Select_Unideal_Channel_Count | 1 octet | Indicates the number of the channels which are interfered and have bad quality, but they are still selected for AFH. The minimum number of channels allowed by the Bluetooth specification is 20, so even if all 79 channels are interfered and have bad quality, the controller still needs to choose at least 20 channels for AFH. |
LSTO | 2 octets | Current Link Supervision Timeout Setting. Time = N * 0.625 ms Time Range: 0.625 ms to 40.9 s |
Connection_Piconet_Clock | 4 octets | Piconet Clock for the specified Connection_Handle. This value shall be the same as the controller's responding to HCI_Read_Clock HCI command with parameter "Which_Clock" of 0x01 (Piconet Clock). Unit: N * 0.3125 ms (1 Bluetooth Clock) |
Retransmission_Count | 4 octets | The number of retransmissions since the last event. This count shall be reset after reporting to the host. |
No_RX_Count | 4 octets | No RX count since the last event. The count increases when no packet is received at the scheduled time slot or the received packet is corrupted. This count shall be reset after reporting to the host. |
NAK_Count | 4 octets | NAK (Negative Acknowledge) count since the last event. This count shall be reset after reporting to the host. |
Last_TX_ACK_Timestamp | 4 octets | Timestamp of last TX ACK. It is based on the Bluetooth Clock of the piconet central (CLK). Unit: N * 0.3125 ms (1 Bluetooth Clock) |
Flow_Off_Count | 4 octets | The number of times the controller receives Flow-off (STOP) since the last event. This count shall be reset after reporting to the host. |
Last_Flow_On_Timestamp | 4 octets | Timestamp of last Flow-on (GO). It is based on the Bluetooth Clock of the piconet central (CLK). Unit: N * 0.3125 ms (1 Bluetooth Clock) |
Buffer_Overflow_Bytes | 4 octets | [in Byte] Buffer overflow count since the last event. |
Buffer_Underflow_Bytes | 4 octets | [in Byte] Buffer underflow count since the last event. |
bdaddr | 6 octets | Remote device address |
cal_failed_item_count | 1 octet | The count of calibration failed items |
TX_Total_Packets | 4 octets | The number of packets that are sent out. |
TX_UnAcked_Packets | 4 octets | The number of packets that don't receive an acknowledgment. This count is reset after reporting to the host. |
TX_Flushed_Packets | 4 octets | The number of packets that aren't sent out by its flush point. This count is reset after reporting to the host. |
TX_Last_Subevent_Packets | 4 octets | The number of packets that Link Layer transmits a CIS data PDU in the last subevent of a CIS event. This count is reset after reporting to the host. The value is zero if there's no valid value for the link. |
CRC_Error_Packets | 4 octets | The number of received packages with CRC error since the last event. This count is reset after reporting to the host. |
RX_Duplicate_Packets | 4 octets | The number of duplicate (retransmission) packages received since the last event. This count is reset after reporting to the host. |
Vendor Specific Parameter | (parameter total length - TBD) * octets | For the controller vendor to obtain more vendor specific parameters. |
Sub-event code = 0x58 [Quality_Report_Id = 0x05, Root Inflammation event]
This event indicates that Bluetooth HAL or the controller encountered a fatal error and needs Bluetooth stack to record this situation and restart. The controller must send a Root_Inflammation_Event to Bluetooth stack before sending the first fragment of the debug info events in any case.
The Error_Code parameter contains an error code reported from HAL/Controller, 0 if it is a chipset vendor specific error. The Vendor_Specific_Error_Code contains a chipset vendor specific error code from HAL/Controller. It should set as 0 if the parameter Error_Code is not 0. The parameters Error_Code and Vendor_Specific_Error_Code should not both be 0.
Sub-event Parameter | Size | Purpose |
---|---|---|
Quality_Report_Id | 1 octet | 0x00 ~ 0x04: Reserved. 0x05: Root inflammation. 0x06 ~ 0xFF: Reserved. |
Error_Code | 1 octet | 0x00: Chipset vendor specific error code is included. 0x01 ~ 0xFF: Controller failure occurred. See Bluetooth Spec [Vol 2] Part D, Error Codes for a list of error codes and descriptions. |
Vendor_Specific_Error_Code | 1 octet | 0x00: No chipset vendor specific error code is included. 0x01 ~ 0xFF: Chipset vendor specific error code. |
Vendor Specific Parameter | (Parameter Total Length - 4) * octets | For the controller vendor to obtain more vendor specific parameters. |
Sub-event code = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, Log Dump related event]
Sub-event Parameter | Size | Purpose |
---|---|---|
Quality_Report_Id | 1 octet | 0x00 ~ 0x10: Reserved. 0x11: LMP/LL message trace. 0x12: Bluetooth Multi-link/Coex scheduling trace. 0x13: Controller Debug Information data dump. 0x14 ~ 0xFF: Reserved. |
Connection_Handle | 2 octets | Connection Handle. |
Vendor Specific Parameter | (Parameter Total Length - 4) * octets | Vendor Specific format of LMP message trace, Bluetooth Multi-link/Coex scheduling trace and Controller Debug Information data dump. |
Multi-advertiser support
The objectives of multi-advertiser support are the following:
- Ability to support multiple advertisements (
max_advt_instances
) - Different transmit powers to allow for a varying range
- Different advertising content
- An individualized response for each advertiser
- Privacy (non-trackable) for each advertiser
- Connectable
To keep this specification close to existing standards, the following vendor-specific commands are provided. They are derived from the Bluetooth Core 4.1 Specification.
LE_Multi_Advt_Command
OCF: 0x154
Command parameter | Size | Purpose |
---|---|---|
Multi_advt_opcode | 1 octet | 0x01 - Set_Advt_Param_Multi_Sub_Cmd 0x02 - Set_Advt_Data_Multi_Sub_Cmd 0x03 - Set_Scan_Resp_Data_Multi_Sub_Cmd 0x04 - Set_Random_Addr_Multi_Sub_Cmd 0x05 - Set_Advt_Enable_Multi_Sub_Cmd |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x01 - Set_Advt_Param_Multi_Command 0x02 - Set_Advt_Data_Multi_Command 0x03 - Set_Scan_Resp_Data_Multi_Command 0x04 - Set_Random_Addr_Multi_Command 0x05 - Set_Advt_Enable_Multi_Command |
LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 964 (LE Set Advertising Parameter Command)
Sub OCF: 0x01
Sub-command parameter | Size | Purpose |
---|---|---|
Advertising_Interval_Min | Per spec | Per spec |
Advertising_Interval_Max | Per spec | Per spec |
Advertising_Type | Per spec | Per spec |
Own_Address_Type | Per spec | Per spec |
Own_Address | Per spec | Per spec |
Direct_Address_Type | Per spec | Per spec |
Direct_Address | Per spec | Per spec |
Advertising_Channel_Map | Per spec | Per spec |
Adverstising_Filter_Policy | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
Tx_power | 1 octet | Transmit_Power Unit - in dBm (signed integer) Range (-70 to +20) |
The Own_Address
parameter could be a host-configured address at the time of setting up this multi-advertisement instance. This provides the ability to have a resolvable private address at the time of the transmit of the first beacon. Advertisement on an instance will continue irrespective of the connection. The host BT stack could issue a command to start advertisement on an instance, post connection.
A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success (invalid parameter) code if the advertising instance or Tx_Power
parameters are invalid.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x01 [ Set_Advt_Param_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 969 (LE Set Advertising Data Command)
Sub OCF: 0x02
Sub-command parameter | Size | Purpose |
---|---|---|
Advertising_Data_Length | Per spec | Per spec |
Advertising_Data | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success code if the advertising instance or Tx_Power
parameters are invalid.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x02 [ Set_Advt_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 970 (LE Set Scan Response Data Command)
Sub OCF: 0x03
Sub-command parameter | Size | Purpose |
---|---|---|
Scan_Response_Data_Length | Per spec | Per spec |
Scan_Response_Data | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success code (invalid parameter) if the advertising instance or Tx_Power
parameters are invalid.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x03 [ Set_Scan_Resp_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 963 (LE Set Random Address Command)
Sub OCF: 0x04
Sub-command parameter | Size | Purpose |
---|---|---|
Random Address | Per spec | Per spec |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x04 [ Set_Random_Addr_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd
Base reference: Bluetooth Core 4.1 Specification, page 971 (LE Set Advertise Enable Command in that core specification)
OCF: 0x05
Sub-command parameter | Size | Purpose |
---|---|---|
Advertising_Enable | 1 octet | A value of 1 means enable. Any other value means disable. |
Advertising_Instance | 1 octet | Specifies the applicability of the above parameters to an instance. Instance 0 means a standard HCI instance. |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Multi_advt_opcode | 1 octet | 0x05 [ Set_Advt_Enable_Multi_Sub_Cmd] |
Offloaded resolution of private address
This feature resolves a private address in the controller firmware or hardware, which provides the following benefits:
- Latency involved with the host in resolving a private address
- Saving power by refraining from waking up the host
LE_Set_RPA_Timeout
OCF: 0x15C
Command parameter | Size | Purpose |
---|---|---|
LE_local_IRK | 16 octet | The local device IRK used to generate the random resolvable address(es). |
tRPA_min | 2 octets | The minimum RPA generation timeout in seconds. The controller must generate new resolvable addresses for any advertising/scanning/connection events on or after this timeout. Valid range: 300-1800 |
tRPA_max | 2 octets | The maximum RPA generation timeout in seconds. The controller must generate new resolvable addresses for any advertising/scanning/connection events on or before this timeout. Valid range: tRPA_min -1800 |
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | The status of the command. Suggested HCI status values: 0x00 Success 0x01 Unknown command (if not supported) 0x12 Invalid command parameters (if any parameters are outside the given range) |
LE_RPA_offload_Command
OCF: 0x155
Command parameter | Size | Purpose |
---|---|---|
RPA_offload_opcode | 1 octet | 0x1 - Enable customer specific feature 0x2 - Add IRK to the list 0x3 - Remove IRK from the list 0x4 - Clear IRK list 0x5 - Read IRK list entry |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_RPA_offload_opcode | 1 octet | 0x1 - Enable customer specific feature 0x2 - Add IRK to the list 0x3 - Remove IRK from the list 0x4 - Clear IRK list 0x5 - Read IRK list entry |
LE_RPA_offload: Enable_cust_specific_sub_Command
Sub OCF: 0x01
Sub-command parameter | Size | Purpose |
---|---|---|
enable_customer_specific_feature_set | 1 octet | 0x01 - Enable offloaded RPA feature 0x00 - Disable offloaded RPA feature |
RPA offload is required to be enabled by the host, based on the chip capability. Refer to the LE_Get_Vendor_Capabilities_Command
. Each chip can have a varying max_irk_list_sz
in the firmware.
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x01 [Enable customer-specific feature] |
LE_RPA_offload: Add_IRK_to_list_sub_Command
Sub OCF: 0x02
Sub-command parameter | Size | Purpose |
---|---|---|
LE_IRK | 16 octets | LE IRK (1st byte LSB) |
Address_Type | 1 octet | 0: Public address 1: Random address |
LE_Device_Address | 6 octets | Public or random address associated to the IRK (1st byte LSB) |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x02 [Add IRK to the list] |
LE_IrkList_AvailableSpaces | 1 octet | Available IRL list entries after current operation |
LE_RPA_offload: Remove_IRK_to_list_sub_Command
Sub OCF: 0x03
Sub-command parameter | Size | Purpose |
---|---|---|
Address_Type | 1 octet | 0: Public address 1: Random address |
LE_Device_Address | 6 octets | Public or random address that associates to the IRK |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x03 [Remove IRK from the list] |
LE_IrkList_AvailableSpaces | 1 octet | Available IRL list entries after current operation |
LE_RPA_offload: Clear_IRK_list_sub_Command
Sub OCF: 0x04
Sub-command parameter | Size | Purpose |
---|---|---|
None |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x04 [Clear IRK List] |
LE_IrkList_AvailableSpaces | 1 octet | Available IRL list entries after current operation [ max_irk_list_sz] |
LE_RPA_offload: Read_IRK_list_sub_Command
Sub OCF: 0x05
Sub-command parameter | Size | Purpose |
---|---|---|
LE_read_IRK_list_entry-index | 1 octet | Index of the IRK list [0, max_irk_list_sz-1] |
A Command Complete event will be generated for this command.
Return parameter | Size | Purpose |
---|---|---|
Status | 1 octet | Command Complete status |
Event_cust_specific_feature_opcode | 1 octet | 0x05 [Read IRK List Entry] |
LE_Read_IRK_List_entry | 1 octet | Index of the IRK that the host wants to read back (maximum IRK list size is 32) |
LE_IRK | 16 octets | IRK value |
Address_Type | 1 octet | 0: Public address 1: Random address |
LE_Device_Address | 6 octets | Public or random address associated to the IRK |
LE_Resolved_Private_Address | 6 octets | Current resolved resolvable private address of this IRK |