Requisitos de HCI

A interface de controlador do host (HCI, na sigla em inglês) é usada para interagir com um controlador Bluetooth.

Este documento fornece uma lista de requisitos de interface de controle de host (HCI) do Bluetooth (BT) e do Bluetooth de baixa energia (BLE). O objetivo é que os fornecedores de pilha BT do host e de controladores BT atendam a esses requisitos da plataforma para usar o conjunto de recursos descrito abaixo.

Neste documento, a especificação principal do Bluetooth 5.2 é chamada de "espec.". A especificação principal do Bluetooth 5.2 está disponível no site do Bluetooth SIG (em inglês), junto com outros documentos adotados.

Visão geral do design

Recursos e configuração do chip

Como uma plataforma aberta, o Android tem uma matriz de versões de software, OEMs, fornecedores e recursos de plataforma e chip.

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

Apoiar 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 ficar disponível em métodos padrão de HCI em uma especificação futura do Bluetooth, vamos priorizar 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 Finalidade
NA Lista de parâmetros de comando vazia

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
max_advt_instances
(Uso suspenso)
1 octeto Número de instâncias de publicidade compatíveis.

Reservado após a v0.98.
Esse parâmetro está descontinuado na especificação de recursos do Google v0.98 e mais recente em favor da publicidade estendida LE disponível na especificação do BT versão 5.0 e mais recente.
offloaded_resolution_of_private-address
(Uso suspenso)
1 octeto Capacidade do chip BT do RPA.
Se for compatível com um chip, ele precisará ser ativado pelo host.
0 = Não é capaz
1 = Capaz

Reservado após a v0.98.
Esse parâmetro foi descontinuado na especificação de recursos do Google v0.98 e mais recentes em favor do recurso de privacidade disponível na especificação BT versão 4.2 e mais recentes.
total_scan_results_storage 2 octetos Armazenamento para resultados da verificação em bytes
max_irk_list_sz 1 octeto Número de entradas de IRK compatíveis com o firmware
filtering_support 1 octeto Suporte para filtragem no controlador
0 = Não compatível
1 = Compatível
max_filter 1 octeto Número de filtros compatíveis
activity_energy_info_support 1 octeto Oferece suporte a relatórios de atividade e informações de energia
0 = Não é capaz
1 = Capaz
version_supported 2 octetos Especifica a versão da especificação de recursos do Google compatível
byte[0] = número principal
byte[1] = número secundário

v1.05
byte[0] = 0x01
byte[1] = 0x05

Adições de recursos nas seguintes versões:
v1.05:
  • iso_link_feedback_support
  • BQRv7
  • sniff_offload_support
V1.04:
  • BQRv6
total_num_of_advt_tracked 2 octetos Número total de anunciantes rastreados para fins de OnLost/OnFound
extended_scan_support 1 octeto Compatível com janela e intervalo de verificação estendidos
debug_logging_supported 1 octeto Compatível com o registro de informações de depuração binárias do controlador
LE_address_generation_offloading_support
(Uso suspenso)
1 octeto 0 = Não compatível
1 = Compatível

Reservado após a v0.98.
Esse parâmetro foi descontinuado na especificação de recursos do Google v0.98 e mais recentes em favor do recurso de privacidade disponível na especificação BT versão 4.2 e mais recentes.
A2DP_source_offload_capability_mask 4 octetos Máscaras de bits para tipos de codec compatíveis
Bit 0: SBC
Bit 1: AAC
Bit 2: APTX
Bit 3: APTX HD
Bit 4: LDAC
Bits de 5 a 31 são reservados
bluetooth_quality_report_support 1 octeto Oferece suporte a relatórios de eventos de qualidade do Bluetooth
0 = Não é possível
1 = É possível
dynamic_audio_buffer_support 4 octetos Compatibilidade com buffer de áudio dinâmico no controlador Bluetooth
Máscaras de bits para tipos de codec compatíveis
Bit 0: SBC
Bit 1: AAC
Bit 2: APTX
Bit 3: APTX HD
Bit 4: LDAC
Bits de 5 a 31 são reservados
a2dp_offload_v2_support 1 octeto Aceita comandos de descarga A2DP v2 no controlador Bluetooth. Consulte Iniciar descarga A2DP, Parar descarga A2DP.
0 = Não compatível
1 = Compatível
iso_link_feedback_support 1 octeto Oferece suporte ao evento ISO Link Feedback
0 = Não compatível
1 = Compatível
sniff_offload_support 1 octeto Aceita comandos de descarga de detecção em um controlador Bluetooth.
0 = Não compatível
1 = Compatível

Resultados da verificação em lote

Uma meta de design é melhorar a forma como as notificações de eventos de resposta de verificação do Bluetooth LE são entregues ao host, para economizar energia nele.

Ao reduzir a frequência com que o controlador notifica o processador do app host para verificar os resultados, o processador do app host pode ficar mais tempo ocioso/em espera. 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 verificação.

Esse recurso se concentra no gerenciamento e na configuração do recurso de armazenamento de resultados da verificação LE no controlador Bluetooth. O armazenamento é usado para agrupar temporariamente dados de publicidade e de verificação, além de metadados recebidos pelo controlador para entrega posterior ao host.

O firmware precisa ser compatível com dois tipos de agrupamento, que podem ser ativados simultaneamente:

  • Truncado. Contém os seguintes elementos de informação: {MAC, TX Power, RSSI, Timestamp}
  • Completa. 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 Finalidade
Batch_Scan_opcode 1 octeto 0x1: ativar o 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 de resultado da verificação em lote

Um evento "Comando concluído" será gerado para esse comando. A ativação do recurso específico do cliente não inicia a verificação.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Batch_Scan_opcode 1 octeto 0x1: ativar o 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 de resultado da verificação em lote

LE_Batch_Scan_Command: ativar recurso específico do cliente

Sub OCF: 0x01

Parâmetro de subcomando Tamanho Finalidade
enable_customer_specific_feature_set 1 octeto 0x01: ativar o recurso de leitura em lote
0x00: desativar o recurso de leitura em lote

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Batch_Scan_opcode 1 octeto 0x1: ativar o 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 de resultado da verificação em lote

LE_Batch_Scan_Command: define o subcomando do parâmetro de armazenamento de verificação em lote

Sub OCF: 0x02

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

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Batch_scan_opcode 1 octeto 0x02 [Definir parâmetros de verificação em lote]

LE_Batch_Scan_Command: define o subcomando do parâmetro de verificação em lote

Sub OCF: 0x03

Parâmetro de subcomando Tamanho Finalidade
Batch_Scan_Mode 1 octeto 0x00 – A verificação em lote está desativada
0x01 – O modo truncado está ativado
0x02 – O modo completo está ativado
0x03 – Os modos truncado e completo estão ativados
Duty_cycle_scan_window 4 octetos Tempo de verificação da verificação em lote (# de slots)
Duty_cyle_scan_interval 4 octetos Período do intervalo de verificação em lote (número de slots)
own_address_type 1 octeto 0x00: endereço público do dispositivo
0x01: endereço aleatório do dispositivo
Batch_scan_Discard_Rule 1 octeto 0 - Descartar o anúncio mais antigo
1 - Descartar o anúncio com o RSSI mais fraco

Esse subcomando vai iniciar a verificação em lote, se ela estiver ativada. Na verificação truncada, os resultados são armazenados de forma truncada, em que a chave exclusiva para o estilo truncado é {BD_ADDR, scan_interval}. Isso significa que apenas um BD_ADDR will será registrado para cada intervalo de verificação. O registro a ser mantido para o modo truncado é o seguinte: {BD_ADDR, Tx Power, RSSI, Timestamp}

Quando o modo "Completo" está ativado, a verificação ativa é usada e as respostas de verificação são registradas. A chave exclusiva do estilo completo = {MAC, pacote de anúncio}, independente 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 de AD, quando visto várias vezes em intervalos de verificação diferentes, é registrado apenas uma vez. No entanto, no modo truncado, o que interessa é a visibilidade de BA_ADDR em diferentes intervalos de verificação (uma vez por intervalo). O RSSI é o valor médio de todos os duplicados de um anúncio exclusivo em um intervalo de verificação.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Batch_scan_opcode 1 octeto 0x03 [Definir parâmetros de verificação em lote]

LE_Batch_Scan_Command: subcomando para ler resultados de verificação em lote

Sub OCF: 0x04

Parâmetro de subcomando Tamanho Finalidade
Batch_Scan_Data_read 1 octeto 0x01 - Dados do modo truncado
0x02 - Dados do modo completo

Um evento "Comando concluído" será gerado para esse comando. Quando o host emite esse comando, todos os resultados no controlador podem não caber em um evento de conclusão de comando. O host vai repetir a emissão desse comando até que os resultados correspondentes no evento "Comando concluído" indiquem 0 no número de registros, o que indica que o controlador não tem mais registros para comunicar ao host. Cada evento "Command Complete" 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 estão sincronizadas. A unidade do carimbo de data/hora é de 50 ms. O valor do carimbo de data/hora é baseado no momento em que o Read_Batch_Scan_Results_Sub_cmd é fornecido pelo host. Se o horário de chegada de um comando for T_c no firmware, o horário real em que o carimbo de data/hora foi registrado no firmware será T_fw. O horário do relatório 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 Finalidade
Status 1 octeto Status "Comando concluído"
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:
Address[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:
Address[0]: 6 octetos
Address_Type[0]: 1 octeto
Tx_Pwr[0]: 1 octeto
RSSI[0]: 1 octeto
Timestamp[0]: 2 octetos
Adv packet_len[0]: 1 octeto
Adv_packet[0]: Adv_packet_len octetos
Scan_data_resp_len[0]: 1 octeto
Scan_data_resp[0]: Scan_data_resp octetos
[vários registros com o formato acima (num_of_records)]

Filtro de conteúdo do pacote de publicidade

Use isso para ativar/desativar/configurar o filtro de conteúdo do pacote de publicidade (APCF) no controlador. O 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 Finalidade
APCF_opcode 1 octeto 0x00 - APCF Enable
0x01 - APCF Set Filtering parameters
0x02 - APCF Broadcaster Address
0x03 - APCF Service UUID
0x04 - APCF Service Solicitation UUID
0x05 - APCF Local Name
0x06 - APCF Manufacturer Data
0x07 - APCF Service Data
0x08 - APCF Transport Discovery Service
0x09 - APCF AD Type Filter
0x10 ~ 0xAF - Reserved for future use
0xB0 ~ 0xDF - Reserved for vendor
0xE0 ~ 0xFE - Reserved for future use
0xFF - APCF Read extended Features

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status da devolução
APCF_opcode 1 octeto 0x00 - APCF Enable
0x01 - APCF Set Filtering parameters
0x02 - APCF Broadcaster Address
0x03 - APCF Service UUID
0x04 - APCF Service Solicitation UUID
0x05 - APCF Local Name
0x06 - APCF Manufacturer Data
0x07 - APCF Service Data
0x08 - APCF Transport Discovery Service
0x09 - APCF AD Type Filter
0x10 ~ 0xAF - Reserved for future use
0xB0 ~ 0xDF - Reserved for vendor
0xE0 ~ 0xFE - Reserved for future use
0xFF - APCF Read extended Features

LE_APCF_Command: Enable_sub_cmd

Sub OCF: 0x00

Parâmetro de subcomando Tamanho Finalidade
APCF_enable 1 octeto 0x01: ativar o recurso APCF
0x00: desativar o recurso APCF

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x0: APCF Enable
APCF_Enable 1 octeto A ativação/desativação é definida via APCF_enable

LE_APCF_Command: set_filtering_parameters_sub_cmd

Esse 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 Finalidade
APCF_Action 1 octeto 0x00 - Add
0x01 - Delete
0x02 - Clear
A exclusão vai limpar o filtro específico e as entradas de recursos associadas em outras tabelas.
A opção "Limpar" remove todos os filtros e entradas associadas em outras tabelas.
APCF_Filter_Index 1 octeto Índice do filtro (0, max_filter-1)
APCF_Feature_Selection 2 octetos Máscaras de bits para os recursos selecionados:
Bit 0: definido para ativar o filtro de endereço de transmissão
Bit 1: definido para ativar o filtro de mudança de dados do serviço
Bit 2: definido para ativar a verificação de 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 do 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 de tipo de anúncio
APCF_List_Logic_Type 2 octetos Operação lógica para cada seleção de recursos (por posição de bit) especificada em APCF_Feature_Selection.
Válido apenas quando um recurso está ativado.
Valor da posição do bit:
0: OR
1: AND
Se a lógica "AND" for selecionada, um pacote ADV vai passar pelo filtro somente se conter TODAS as entradas na lista.
Se a lógica "OU" for selecionada, um pacote ADV vai passar pelo filtro se conter qualquer uma das entradas na lista.
APCF_Filter_Logic_Type 1 octeto 0x00: OR
0x01: AND
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 aos quatro campos (bit 3 a bit 6) de APCF_Feature_Selection.
rssi_high_thresh 1 octeto [em dBm]
O anunciante é considerado visto somente se o sinal for maior que o limite alto de RSSI. Caso contrário, o firmware precisa se comportar como se nunca tivesse visto o arquivo.
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 permanecer e coletar mais anúncios antes de gerar relatórios.
onfound_timeout_cnt 1 octeto Válido apenas se delivery_mode for on_found.
[count]
Se um anúncio em onFound permanecer no firmware por a duração de onfound_timeout, ele vai coletar alguns anúncios e a contagem será verificada. Se a contagem exceder onfound_timeout_cnt, ela será informada OnFound imediatamente depois.
rssi_low_thresh 1 octeto Válido apenas se delivery_mode for on_found.
[em dBm]
O pacote do anunciante é considerado não visto se o RSSI do pacote recebido não estiver acima do limite mínimo de RSSI.
onlost_timeout 2 octetos Válido apenas se delivery_mode for on_found.
[em milissegundos]
Se um anúncio, depois de ser encontrado, não for visto continuamente por o 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.
[count]
Número total de anunciantes a serem rastreados por filtro.

Os valores de RSSI precisam usar o complemento de dois para representar valores negativos.

O host precisa conseguir configurar vários filtros com APCF_Application_Address_type definido como 0x02 (para todos os endereços de transmissão) para gerenciar várias combinações de filtros.

Filtragem, agrupamento em lote e geração de relatórios são conceitos inter-relacionados. Cada anúncio e resposta de verificação relacionada precisa 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 ele vai aparecer depois de OnFound quando for perdido.

Esse fluxo de processamento descreve o modelo conceitual:

Quando um frame de anúncio (ou resposta de verificação) é recebido, ele é aplicado a todos os filtros em ordem serial. É possível que um anúncio cause um relatório imediato com base em um filtro e o agrupamento do mesmo devido a uma ação de filtro diferente.

Os limites de nível de RSSI (alto e baixo) permitem controlar quando o frame fica visível para o processamento de filtros, mesmo quando um pacote válido é recebido pelo controlador. Se o modo de entrega estiver definido como imediato ou em lote, o RSSI de um frame será considerado para mais processamento do controlador. Cada app precisa de um comportamento de relatórios e agrupamento em lotes diferente. Isso permite que vários apps tenham relatórios diretos e/ou agrupamento de resultados no firmware simultaneamente. Um exemplo é quando uma verificação em lote está ativa em um app e, mais tarde, outro app emite uma verificação LE regular. Antes de uma verificação em lote ser emitida, a estrutura/o app define filtros adequados. Depois, quando o segundo app emitir uma verificação regular, o agrupamento anterior vai continuar. No entanto, devido à verificação regular, é semelhante a adicionar conceitualmente um filtro nulo (junto com todos os filtros existentes) com o comando de verificação LE. Os parâmetros do comando de verificação LE têm prioridade quando estão ativos. Quando a verificação LE regular é desativada, o controlador volta para uma verificação em lote anterior, se ela existia.

O modo de veiculação 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 de publicidade LE.

A transição OnFound/OnLost de um filtro (se ativada) será assim:

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x01: APCF Set Filtering Parameters
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas disponíveis na tabela de filtros

LE_APCF_Command: broadcast_address_sub_cmd

Esse 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 Finalidade
APCF_Action 1 octeto 0x00 - Add
0x01 - Delete
0x02 - Clear
A exclusão remove o endereço de transmissão especificado no filtro especificado.
"Clear" vai limpar todos os endereços de transmissão no filtro especificado.
APCF_Filter_Index 1 octeto Índice do filtro (0, max_filter-1)
APCF_Broadcaster_Address 6 octet Endereço de dispositivo de 6 bytes a ser adicionado ou excluído da lista de endereços do transmissor.
APCF_Application_Address_type 1 octeto 0x00: público
0x01: aleatório
0x02: NA (ignorar o tipo de endereço)
Para filtrar relatórios de publicidade com tipos de endereço de identidade (0x02, 0x03). Para receber relatórios de publicidade com os tipos de endereço 0x02 e 0x03, defina esse campo como 0x02: NA (ignorar o tipo de endereço).

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x02: endereço do transmissor APCF
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas livres ainda disponíveis na tabela de endereços de transmissão

LE_APCF_Command: service_uuid_sub_cmd

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

Sub OCF: 0x03

Parâmetro de subcomando Tamanho Finalidade
APCF_Action 1 octeto 0x00: Add
0x01: Delete
0x02: Clear
A exclusão vai remover o endereço UUID do serviço especificado no filtro especificado.
"Limpar" vai limpar todos os UUIDs de serviço no filtro especificado.
APCF_Filter_Index 1 octeto Índice do filtro (0, max_filter-1)
APCF_UUID Octeto 2,4,16 O UUID do serviço (16, 32 ou 128 bits) para adicionar ou excluir da lista.
APCF_UUID_MASK Octeto 2,4,16 A máscara de UUID do serviço (16 bits, 32 bits ou 128 bits) a ser adicionada à lista. Ele precisa ter o mesmo comprimento de APCF_UUID..

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x03: UUID do serviço APCF
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas livres ainda disponíveis na tabela de UUIDs de serviço

LE_APCF_Command: solicitation_uuid_sub_cmd

Esse 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 Finalidade
APCF_Action 1 octeto 0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
A exclusão vai remover o endereço UUID de solicitação no filtro especificado.
A opção "Limpar" vai limpar todos os UUIDs de solicitação no filtro especificado.
APCF_Filter_Index 1 octeto Índice do filtro (0, max_filter-1)
APCF_UUID Octeto 2,4,16 O UUID de solicitação (16, 32 ou 128 bits) a ser adicionado ou excluído da lista.
APCF_UUID_MASK Octeto 2,4,16 A máscara de UUID de solicitação (16 bits, 32 bits ou 128 bits) a ser adicionada à lista. Ele precisa ter o mesmo comprimento que o APCF_UUID.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x04: UUID de solicitação do APCF
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas sem custo financeiro ainda disponíveis na tabela de UUID de solicitação

LE_APCF_Command: local_name_sub_cmd

Esse 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 Finalidade
APCF_Action 1 octeto 0x00 - Add
0x01 - Delete
0x02 - Clear
A exclusão remove a string de nome local especificada no filtro especificado.
"Clear" limpa todas as strings de nome local no filtro especificado.
APCF_Filter_Index 1 octeto Índice do filtro (0, max_filter-1)
APCF_LocName_Mandata_or_SerData Tamanho variável Uma string de caracteres para o nome local.

Observações:
  • 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 "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x05: APCF Local Name
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas sem custo financeiro ainda disponíveis na tabela "Nome local"

LE_APCF_Command: manf_data_sub_cmd

Esse 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 Finalidade
APCF_Action 1 octeto 0x00 - Add
0x01 - Delete
0x02 - Clear
A exclusão vai remover a string de dados do fabricante especificada no filtro especificado.
A opção "Limpar" remove todas as strings 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 string de caracteres para dados do fabricante.

Observações:
  • 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. Ele precisa ter o mesmo comprimento de APCF_LocName_or_ManData_or_SerData.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x06: dados do fabricante da APCF
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas sem custo financeiro ainda disponíveis na tabela de dados do fabricante

LE_APCF_Command: service_data_sub_cmd

Esse 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 Finalidade
APCF_Action 1 octeto 0x00 - Add
0x01 - Delete
0x02 - Clear
A exclusão remove a string de dados do serviço especificada no filtro especificado.
"Clear" limpa 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 string de caracteres para dados de serviço.

Observações:
  • 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 do serviço a ser adicionada à lista. Ele precisa ter o mesmo comprimento de APCF_LocName_or_ManData_or_SerData.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x07: dados de serviço do APCF
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas sem custo financeiro ainda disponíveis para a tabela de dados de serviço

LE_APCF_Command: ad_type_sub_cmd

Esse subcomando é usado para adicionar ou excluir um tipo de anúncio ou limpar uma lista de tipos de anúncio para filtragem no chip. Use read_extended_features_sub_cmd para verificar se esse comando é compatível ou não.
Quando APCF_AD_DATA_Length é 0, filtre APCF_AD_TYPE sem comparar dados de AD e máscara de dados de AD. Se o comprimento dos dados do pacote ADV recebido exceder AD_DATA_LENGTH, compare apenas os primeiros AD_DATA_LENGTH bytes de dados de anúncio e ignore os dados restantes.

Sub OCF: 0x09

Parâmetro de subcomando Tamanho Finalidade
APCF_Action 1 octeto 0x00 - Add
0x01 - Delete
0x02 - Clear
A exclusão remove o tipo de anúncio especificado no filtro indicado.
"Limpar" vai 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 anúncio para adicionar ou excluir da lista. Ignorar quando APCF_Action for 0x02 (Limpar)
APCF_AD_DATA_Length 1 octeto 0x00: não filtrar o conteúdo dos dados
Ignorar quando APCF_Action for 0x02 (Limpar)
APCF_AD_DATA Tamanho variável Tamanho variável, com base em APCF_AD_DATA_Length
Ignorar quando APCF_Action for 0x02 (Limpar)
APCF_AD_DATA_MASK Tamanho variável Tamanho variável, com base em APCF_AD_DATA_Length
Ignorar quando APCF_Action for 0x02 (Limpar)
Ele precisa ter o mesmo comprimento que APCF_AD_DATA.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0x09: APCF AD Type
APCF_Action 1 octeto APCF_Action do comando de eco
APCF_AvailableSpaces 1 octeto Número de entradas sem custo financeiro ainda disponíveis na tabela "Tipo de anúncio"

LE_APCF_Command: read_extended_features_sub_cmd

Esse subcomando é usado para ler recursos APCF estendidos.

Sub OCF: 0xFF

Parâmetro de subcomando Tamanho Finalidade
Não relevante Parâmetro de comando vazio.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
APCF_opcode 1 octeto 0xFF - APCF_Read_Extended_Features
APCF_extended_features 2 octetos

Máscaras de bits para recursos estendidos compatíveis:

  • Bit 0: suporte ao filtro do serviço de descoberta de transporte
  • Bit 1: suporte ao filtro de tipo de anúncio
  • Bits 2 a 15: reservados para uso futuro

Valor do bit

  • 0 = Não compatível
  • 1 = Compatível

Comando de informações de atividade e energia do controlador

O objetivo dessas informações é que funções de sistema host mais altas analisem o total de atividades de todos os componentes, incluindo o controlador BT e o estado macro dele, em conjunto com o que está acontecendo nos apps e no framework. Para isso, as seguintes informações são necessárias da pilha e do controlador de BT:

  • Pilha BT: informa o estado macro-operacional atual do controlador
  • Firmware: relatórios de atividades agregadas e informações de energia

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

  • Inativo: [verificação de página, anúncio LE, verificação de consulta, verificação LE]
  • Verificação: [paginação/consulta/tentativa de conexão]
  • Ativo: [link da ACL ativado, link do SCO em andamento, modo de detecção]

As atividades que o controlador acompanha durante a vida útil são tempo de Tx, tempo de Rx, tempo ocioso e energia total consumida. Elas são apagadas quando lidas do host.

LE_Get_Controller_Activity_Energy_Info

Esse é um comando específico do fornecedor.

OCF: 0x159

Parâmetro de subcomando Tamanho Finalidade
NA Parâmetros de comando vazios

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
total_tx_time_ms 4 octetos Tempo total realizando Tx
total_rx_time_ms 4 octetos Tempo total de execução de Rx
total_idle_time_ms 4 octetos Tempo total ocioso (estados de baixa energia sem ser o sono)
total_energy_used 4 octetos Energia total usada [produto de corrente (mA), tensão (V) e tempo (ms)]

Comando de parâmetros de verificação de conjunto estendido LE

Esse comando pode ser usado para ativar uma janela e um intervalo de verificação maiores no controlador. De acordo com a especificação BT Core 5.2, uma janela e um intervalo de verificação têm um limite máximo de 10,24 segundos, o que dificulta intervalos de verificação maiores para apps.

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 Finalidade
LE_Ex_Scan_Type 1 octeto 0x00: verificação passiva. Nenhum pacote de SCAN_REQ será enviado (padrão).
0x01 - Varredura ativa. SCAN_REQ pacotes podem ser enviados.
LE_Ex_Scan_Interval 4 octetos Definido como o intervalo de tempo entre o início da última verificação LE do controlador e o início da verificação 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 verificação LE. LE_Scan_Window precisa 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 público do dispositivo (padrão)
0x01: endereço aleatório do dispositivo
LE_Ex_Scan_Filter_Policy 0x00: aceita todos os pacotes de publicidade (padrão). Os pacotes de publicidade direcionada que não forem destinados a este dispositivo serão ignorados.
0x01 - Ignorar pacotes de anúncios de dispositivos que não estão na lista de permissões Somente lista. Pacotes de publicidade direcionada que não forem destinados a este dispositivo serão ignorados.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"

Comando para receber informações de depuração do controlador

O objetivo desse 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 oferece 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 via evento (subevento "Controller Debug Info") ou de forma autônoma quando desejado pelo controlador. Por exemplo, para informar o estado do firmware, informações de despejo de falhas, informações de registro etc.

OCF: 0x15B

Parâmetro de comando Tamanho Finalidade
N/A Lista de parâmetros de comando vazia

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"

Suporte para descarga de hardware A2DP

O recurso de descarregamento A2DP é compatível com o descarregamento do processo de codificação de áudio A2DP para um processador de áudio conectado ao controlador BT. O stream de dados de áudio codificados 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. Duas versões dos comandos estão disponíveis. Os comandos legados com Sub OCF 0x01-0x02 só são compatíveis com codecs de código aberto. As versões com Sub-OCF 0x03-0x04 são independentes do codec configurado.

OCF: 0x15D

Iniciar o descarregamento A2DP (legado)

Sub OCF: 0x01

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

Parâmetro de comando Tamanho Finalidade
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 zero desativa a limpeza.
SCMS-T_Enable 2 octetos Octeto 0: flag 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 do cabeçalho SCMS-T quando ele está ativado.

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 de áudio codificada em bits por segundo.
0x00000000: a taxa de bits de áudio não foi especificada/não usada.
0x00000001 - 0x00FFFFFF - Taxa de bits de áudio codificada em bits por segundo.
0x01000000 - 0xFFFFFFFF - Reservado.
Connection_Handle 2 octetos Handle de conexão A2DP sendo configurado
L2CAP_Channel_ID 2 octetos ID do canal L2CAP a ser usado para essa conexão A2DP.
L2CAP_MTU_Size 2 octetos Tamanho máximo da MTU do L2CAP que contém pacotes de áudio codificados
Codec_Information 32 octetos Informações específicas do codec.

Codec SBC:

Consulte os elementos de informações específicas do codec SBC no A2DP v1.3.
Octeto 0: comprimento do bloco | subbandas | método de alocação
Octeto 1: valor mínimo de bitpool
Octeto 2: valor máximo de bitpool
Octeto 3: frequência de amostragem | modo de canal
Octeto 4 a 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:

Octetos 0 a 3: ID do fornecedor
0x0000012D

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

Octeto 6: índice de taxa de bits:
0x00: alta
0x01: média
0x02: baixa
0x03 a 0x7E: reservado
0x7F: ABR (taxa de bits adaptável)
0x80 a 0xFF: reservado

Octeto 7: modo de canal LDAC
0x01: estéreo
0x02: duplo
0x04: mono
Outros são reservados

Octetos de 8 a 31: reservados

Todos os outros codecs:

Octeto 0 a 31: reservado

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Sub_Opcode 1 octeto 0x01: iniciar o descarregamento A2DP

Iniciar o descarregamento A2DP

Sub OCF: 0x03

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

Parâmetro de comando Tamanho Finalidade
Connection Handle 2 octetos Handle da conexão HCI ativa.
L2CAP_Channel_ID 2 octetos Identificador do canal L2CAP aberto para streaming A2DP.
Data_Path_Direction 1 octeto 0x00: saída (origem/fusão do AVDTP)
0x01: entrada (receptor/divisão do AVDTP)
Peer_MTU 2 octetos Tamanho máximo dos pacotes L2CAP, negociado com o peer.
CP_Enable_SCMS_T 1 octeto 0x00: desativa o cabeçalho de proteção de conteúdo SCMS-T
0x01: ativa o cabeçalho de proteção de conteúdo SCMS-T
CP_Header_SCMS_T 1 octeto Quando o cabeçalho de proteção de conteúdo SCMS-T está ativado (CP_SCMS_T_Enable definido como 0x01), define o valor do cabeçalho que precede o conteúdo de áudio (consulte A2DP, seção 3.2.1-2), conforme definido pelos números atribuídos do Bluetooth, seção 6.3.2.
Ignorado quando a proteção de conteúdo SCMS-T não está ativada.
Vendor_Specific_Parameters_Length 1 octeto Comprimento dos parâmetros específicos do fornecedor, no intervalo de 0 a 128.
O valor 0 é usado quando nenhum parâmetro adicional é fornecido.
Vendor_Specific_Parameters 0 a 128 octetos Parâmetros específicos do fornecedor fornecidos pela HAL de áudio Bluetooth, CodecParameters.vendorSpecificParameters[].

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Sub_Opcode 1 octeto 0x03: iniciar descarga A2DP

Interromper o descarregamento A2DP (legado)

Sub OCF: 0x02

Esse comando é usado para interromper o fluxo de descarga do A2DP.

Parâmetro de comando Tamanho Finalidade
N/A Lista de parâmetros de comando vazia.

Nenhum parâmetro foi definido para esse comando.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Sub_Opcode 1 octeto 0x02: parar a descarga do A2DP

Interromper o descarregamento A2DP

Sub OCF: 0x04

Esse comando é usado para interromper o fluxo de descarga do A2DP.

Parâmetro de comando Tamanho Finalidade
Connection Handle 2 octetos Handle da conexão HCI ativa.
L2CAP_Channel_ID 2 octetos Identificador do canal L2CAP aberto para streaming A2DP.
Data_Path_Direction 1 octeto 0x00: saída (origem/fusão do AVDTP)
0x01: entrada (receptor/divisão do AVDTP)

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Sub_Opcode 1 octeto 0x04: parar a descarga do A2DP

Comando do relatório de qualidade do Bluetooth

O comando do recurso de relatório de qualidade do BT inicia o mecanismo no controlador Bluetooth para informar eventos de qualidade do Bluetooth ao host. Você pode ativar quatro opções:

  • Modo de monitoramento da qualidade: o controlador envia periodicamente um subevento de BQR relacionado à qualidade do link para o host.
  • Aproximação do LSTO: se nenhum pacote for recebido do dispositivo BT conectado por mais da metade do valor do tempo limite de supervisão de link (LSTO), o controlador vai informar um evento de aproximação do LSTO ao host.
  • Áudio A2DP instável: quando o controlador detecta fatores que causam áudio instável, ele informa um evento de áudio A2DP instável ao host.
  • (e)SCO Voice Choppy: quando o controlador detecta fatores que causam voz instável, ele informa um evento (e)SCO Voice Choppy ao host.
  • Inflamação da raiz: esse evento é enviado pelo controlador à pilha quando a HAL ou o controlador encontram um erro fatal e precisam reiniciar o Bluetooth.
  • Rastreamento de mensagens LMP/LL: o controlador envia o handshake de mensagens LMP/LL com o dispositivo remoto para o host.
  • Rastreamento de agendamento de vários perfis/coexistência do Bluetooth: o controlador envia ao host as informações de agendamento sobre o processamento de vários perfis do Bluetooth e a coexistência sem fio na banda de 2,4 GHz.
  • Mecanismo de informações de depuração do controlador: quando ativado, o controlador pode informar de forma autônoma informações de registro de depuração ao host usando o subevento de informações de depuração do controlador.
  • LE Audio entrecortado: quando o controlador detecta fatores que causam áudio entrecortado, ele informa um evento LE Audio entrecortado ao host.
  • Modo de estatísticas avançadas de RF: o controlador informa ao host as estatísticas de RF e as informações relacionadas, oferecendo suporte a dois casos de uso de relatórios:
    • Relatórios periódicos
    • Gatilhos de eventos (início/interrupção da transmissão e gatilho de evento de qualidade do link).
  • O mecanismo de monitoramento da integridade do controlador fornece ao host informações relacionadas à integridade por dois tipos de eventos: relatórios periódicos e relatórios acionados por eventos.
  • BQR_Report_Action do comando de relatório de qualidade do Bluetooth: o host pode usar esse comando HCI para receber uma consulta única para o modo de monitoramento de qualidade, o modo de monitoramento de energia ou um modo avançado de estatísticas de RF.

OCF: 0x15E

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

0x00 - Adicionar
0x01 - Excluir
0x02 - Limpar
0x03 - Consulta única

A exclusão vai limpar os relatórios de eventos de qualidade específicos.
A limpeza vai remover 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: definido para ativar o modo de monitoramento de qualidade.
Bit 1: definido para ativar o evento de aproximação do LSTO (para ACL/(e)SCO/ISO).
Bit 2: definido para ativar o evento de áudio picotado A2DP.
Bit 3: definido para ativar o evento de voz instável (e)SCO.
Bit 4: definido para ativar o evento de inflamação da raiz.
Bit 5: definido para ativar o modo de monitoramento de energia.
Bit 6: definido para ativar o evento instável de áudio LE.
Bit 7: definido para ativar o evento de falha de conexão.
Bit 8: definido para ativar o gatilho de evento do modo de estatísticas avançadas de RF.
Bit 9: definido para ativar o relatório periódico de estatísticas avançadas de RF.
Bit 10: definido para ativar o gatilho de evento do mecanismo de monitoramento de integridade do controlador. (adicionado no BQRv7)
Bit 11: definido para ativar o mecanismo de relatório periódico de monitoramento da integridade do controlador. (adicionado no BQRv7)
Bits 12 a 14: reservados.
Bit 15: definido para ativar eventos de qualidade específicos do fornecedor.
Bit 16: definido para ativar o rastreamento de mensagens LMP/LL.
Bit 17: definido para ativar o rastreamento de agendamento de coexistência/multilink do Bluetooth.
Bit 18: definido para ativar o mecanismo de informações de depuração do controlador.
Bit 19: Reserved for offload debug information.
Bit 20: acionador de evento de despejo do histórico da UART. (adicionado no BQRv7)
Bits 21 a 30: reservados.
Bit 31: definido para ativar o rastreamento específico do fornecedor.

BQR_Minimum_Report_Interval 2 octetos Defina o intervalo mínimo de tempo para o envio de relatórios de eventos de qualidade para os eventos selecionados. O firmware do controlador não deve informar o próximo evento dentro do intervalo de tempo definido. A configuração de intervalo precisa ser respectiva e dedicada aos eventos de qualidade que estão sendo adicionados.

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

BQR_Vendor_Specific_Quality_Event_Mask 4 octetos Bitmasks para o relatório de eventos de qualidade específicos do fornecedor selecionado.
Esse parâmetro só é válido quando o bit 15 de BQR_Quality_Event_Mask está definido.

Bits de 0 a 31: reservados.

BQR_Vendor_Specific_Trace_Mask 4 octetos Máscaras de bits para o relatório de rastreamento específico do fornecedor selecionado.
Esse parâmetro só é válido quando o bit 31 de BQR_Quality_Event_Mask está definido.

Bits de 0 a 31: reservados.

Report_interval_multiple 4 octetos O multiplicador de BQR_Minimum_Report_Interval. Quando esse valor é >= 1, o intervalo do relatório de BQR segue o formato
. Intervalo do relatório de BQR = Intervalo_mínimo_do_relatório_de_BQR x Múltiplo_do_intervalo_do_relatório.
O firmware do controlador não pode informar o próximo evento dentro do intervalo de tempo definido. A configuração de intervalo é dedicada especificamente aos eventos de qualidade adicionados.

Unidade: ms
Padrão: 1
Intervalo: 0 ~ 4294967295 (0: é igual a 1)

Observação: se a configuração de BQR_Report_Interval for maior que a capacidade do controlador, ele precisará retornar o tempo máximo de BQR_Report_Interval na conclusão do comando.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
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á ativado.
Bit 1: Approaching LSTO event reporting is enabled.
Bit 2: A geração de relatórios de eventos de áudio instável A2DP está ativada.
Bit 3: (e)SCO Voice Choppy event reporting is enabled.
Bit 4: Root inflammation event reporting is enabled.
Bit 5: o modo de monitoramento de energia está ativado.
Bit 6: a geração de relatórios de eventos instáveis de áudio LE está ativada.
Bit 7: evento de falha na conexão.
Bit 8: definido para ativar o gatilho de evento do modo de estatísticas avançadas de RF.
Bit 9: definido para ativar o relatório periódico de estatísticas avançadas de RF.
Bit 10: definido como evento de acionamento do mecanismo de monitoramento de integridade do controlador ativado.
Bit 11: definido para que o mecanismo de monitoramento de integridade do controlador ativado gere relatórios periodicamente.
Bits 12 a 14: reservados.
Bit 15: a geração de relatórios de eventos de qualidade específicos do fornecedor está ativada.
Bit 16: o rastreamento de mensagens LMP/LL está ativado.
Bit 17: o rastreamento de agendamento de coexistência/multilink do Bluetooth está ativado.
Bit 18: o mecanismo de informações de depuração do controlador está ativado.
Bit 19: Reserved for offload debug information
Bit 20: UART History Dump Event trigger
Bit 21 ~ 30: Reserved.
Bit 31: o rastreamento específico do fornecedor está ativado.
Current_Vendor_Specific_Quality_Event_Mask 4 octetos Indica a configuração atual da máscara de bits.
Current_Vendor_Specific_Trace_Mask 4 octetos Indica a configuração atual da máscara de bits.
BQR_Report_interval 4 octetos Indica a configuração atual da máscara de bits.
Current_Vendor_Specific_Trace_Mask 4 octetos A configuração de BQR_Report_interval. Ele precisa ser o valor mínimo entre BQR_Minimum_Report_Interval * Report_interval_multiple ou o intervalo máximo de suporte do controlador.

Comando de buffer de áudio dinâmico

O buffer de áudio dinâmico reduz as falhas de áudio mudando o tamanho do buffer de áudio no controlador Bluetooth com base em vários cenários.

OCF: 0x15F

Receber capacidade de intervalo de buffer de áudio

Sub OCF: 0x01

Use esse comando para receber a capacidade de tempo de buffer de áudio do controlador Bluetooth.

Parâmetro de comando Tamanho Finalidade
N/A Lista de parâmetros de comando vazia

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Dynamic_Audio_Buffer_opcode 1 octeto 0x01: receber o intervalo de áudio
Audio_Codec_Type_Supported 4 octetos Máscaras de bits para os tipos de codecs compatíveis
Bit 0: SBC
Bit 1: AAC
Bit 2: APTX
Bit 3: APTX HD
Bit 4: LDAC
Os bits de 5 a 31 são reservados
Audio_Codec_Buffer_Default_Time_For_Bit_0 2 octetos Tempo de buffer padrão do tipo de codec Bit 0 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 0 não for compatível.
Unidade: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 2 octetos Tempo máximo de buffer do tipo de codec Bit 0 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 0 não for compatível.
Unidade: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 2 octetos Tempo mínimo de buffer do tipo de codec Bit 0 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 0 não for compatível.
Unidade: ms
Audio_Codec_Buffer_Default_Time_For_Bit_1 2 octetos Tempo de buffer padrão do tipo de codec Bit 1 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 1 não for compatível.
Unidade: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 2 octetos Tempo máximo de buffer do tipo de codec Bit 1 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 1 não for compatível.
Unidade: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 2 octetos Tempo mínimo de buffer do tipo de codec Bit 1 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 1 não for compatível.
Unidade: ms
...... ...... ......
Audio_Codec_Buffer_Default_Time_For_Bit_31 2 octetos Tempo de buffer padrão do tipo de codec Bit 31 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 31 não for compatível.
Unidade: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 2 octetos Tempo máximo de buffer do tipo de codec Bit 31 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 31 não for compatível.
Unidade: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 2 octetos Tempo mínimo de buffer do tipo de codec Bit 31 especificado em Audio_Codec_Type_Supported.
Esse valor será 0 se o tipo de codec Bit 31 não for compatível.
Unidade: ms

Definir o tempo do buffer de áudio

Sub OCF: 0x02

Use esse comando para definir o tempo de buffer de áudio para o controlador Bluetooth.

Parâmetro de comando Tamanho Finalidade
Audio_Codec_Buffer_Time 2 octetos Tempo de buffer de áudio solicitado para o codec usado no momento.
Unidade: ms

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Dynamic_Audio_Buffer_opcode 1 octeto 0x02: definir o tempo de intervalo do áudio
Audio_Codec_Buffer_Time 2 octetos Tempo atual do buffer de áudio no controlador Bluetooth.
Unidade: ms

Evento de HCI (específico do fornecedor)

Em alguns casos, são necessários eventos de HCI específicos do fornecedor. Consulte a Figura 5.4 na página 1897 da especificação BT Core 5.2. O parâmetro de evento 0 sempre vai conter o primeiro código de subevento, com base no qual o restante do evento de HCI é decodificado.

Parâmetro de evento Tamanho Finalidade
HCI_vendor_specific_event_code 1 octeto 0xFF
sub_event_code 1 octeto Um código de subevento terá um octeto de tamanho, o byte imediatamente após o comprimento do parâmetro no pacote de eventos da HCI.

Subevento de violação do limite de armazenamento

Esse evento indica que o limite de armazenamento foi violado.

Código do subevento = 0x54

Parâmetro de subevento Tamanho Finalidade
Nenhum

Subevento de mudança de estado de vários anúncios de LE

Esse evento indica que uma instância de publicidade mudou de estado. No momento, esse evento é usado apenas para indicar qual instância de publicidade foi interrompida como resultado de uma conexão.

Código do subevento = 0x55

Parâmetro de subevento Tamanho Finalidade
Advertising_instance 1 octeto Identifica a instância de publicidade específica
. Os valores válidos são de 0 a max_advt_instances-1.
State_Change_Reason 1 octeto 0x00: conexão recebida
Connection_handle 2 octetos Identifica a conexão que causou a desativação da instância advt (0xFFFF se for inválida).

Subevento de rastreamento de anúncios LE

Esse evento indica quando um anunciante é encontrado ou perdido.

Sub event code = 0x56

Parâmetro de subevento Tamanho Finalidade
APCF_Filter_Index 1 octeto Índice de filtro (0, max_filter-1)
Advertiser_State 1 octeto 0x00: Anunciante encontrado
0x01: Anunciante perdido
Advt_Info_Present 1 octeto 0x00: Informações do anunciante (Advt_Info) presentes
0x01: Informações do anunciante (Advt_Info) não presentes
Advertiser_Address 6 octetos Endereço público ou aleatório
Advertiser_Address_Type 1 octeto 0x00: endereço público
0x01: endereço aleatório
Advt_Info Tx_Pwr[0]: 1 octeto
RSSI[0]: 1 octeto
Timestamp[0]: 2 octetos
Adv packet_len[0]: 1 octeto
Adv_packet[0]: Adv_packet_len octetos
Scan_data_resp_len[0]: 1 octeto
Scan_data_resp[0]: Scan_data_resp octetos

Sub evento de informações de depuração do controle

Esse evento é usado por um controlador para fornecer informações de depuração binária a um host.

Código do subevento = 0x57

Parâmetro de subevento Tamanho Finalidade
debug_block_byte_offset_start 2 octetos Depurar o deslocamento de bytes do bloco desde o início
last_block 1 octeto 0x00: mais dados de depuração presentes
0x01: último bloco binário; sem mais dados de depuração
cur_pay_load_sz 2 octetos Tamanho do bloco binário em um evento atual
Debug_Data Variável Dados de depuração de cur_payload_sz

Subevento de relatório de qualidade do Bluetooth.

Esse evento indica uma das seguintes situações: ocorreu um evento de qualidade do Bluetooth, o controlador enviou o rastreamento de mensagens LMP/LL e o rastreamento de agendamento de vários links/coex do Bluetooth ou o controlador despejou dados de informações de depuração.

Parâmetro de subevento Tamanho Finalidade
Quality_Report_Id 1 octeto 0x01: relatórios de qualidade no modo de monitoramento.
0x02: LSTO se aproximando.
0x03: A2DP Audio Choppy.
0x04: (e)SCO Voice Choppy.
0x05 ~ 0x06: reservado.
0x07: LE audio choppy.
0x08: falha na conexão.
0x09 ~ 0xFF: reservado.
Packet_Types 1 octeto 0x01: ID
0x02: NULL
0x03: POLL
0x04: FHS
0x05: HV1
0x06: HV2
0x07: HV3
0x08: DV
0x09: EV3
0x0A: EV4
0x0B: EV5
0x0C: 2-EV3
0x0D: 2-EV5
0x0E: 3-EV3
0x0F: 3-EV5
0x10: DM1
0x11: DH1
0x12: DM3
0x13: DH3
0x14: DM5
0x15: DH5
0x16: AUX1
0x17: 2-DH1
0x18: 2-DH3
0x19: 2-DH5
0x1A: 3-DH1
0x1B: 3-DH3
0x1C: 3-DH5
0x1D ~ 0x50: Reserved
0x51: ISO packet
0x52: 1M PHY
0x53: 2M PHY
0x54: Codec PHY S=2
0x55: Codec PHY S=8
0x56 ~ 0xFF: Reserved
Connection_Handle 2 octetos Handle de conexão ACL/(e)SCO/ISO.
Connection_Role 1 octeto Execução da função para a conexão.
0x00: Central
0x01: Periférico
0x02 ~ 0xFF: Reservado.
TX_Power_Level 1 octeto Nível de potência de transmissão atual para o Connection_Handle especificado.

Esse valor precisa ser igual ao do controlador em resposta ao comando HCI_Read_Transmit_Power_Level HCI.

RSSI 1 octeto [em dBm]

Valor da indicação de intensidade do sinal recebido (RSSI) para o Connection_Handle especificado.
Esse valor precisa ser um valor absoluto de intensidade do sinal do receptor.
Intervalo: -127 a +20

SNR 1 octeto [em dB]

Valor da relação sinal-ruído (SNR) para o Connection_Handle especificado.
O controlador vai fornecer a SNR média de todos os canais usados pelo link.

Unused_AFH_Channel_Count 1 octeto Indica o número de canais não usados em AFH_channel_map.
0x4F ~ 0xFF: reservado.
AFH_Select_Unideal_Channel_Count 1 octeto Indica o número de canais que sofrem interferência e têm qualidade ruim, mas ainda estão selecionados para o AFH.
O número mínimo de canais permitidos pela especificação do Bluetooth é 20. Portanto, mesmo que todos os 79 canais estejam com interferência e má qualidade, o controlador ainda precisa escolher pelo menos 20 canais para o AFH.
LSTO 2 octetos Configuração atual de tempo limite da supervisão de link.
Tempo = N * 0,625 ms
Intervalo de tempo: 0,625 ms a 40,9 s
Connection_Piconet_Clock 4 octetos Relógio da piconet para o Connection_Handle especificado.
Esse valor precisa ser o mesmo que o controlador responde ao comando HCI_Read_Clock HCI com o parâmetro "Which_Clock" de 0x01 (Piconet Clock).
Unidade: N * 0,3125 ms (1 relógio Bluetooth)
Retransmission_Count 4 octetos O número de retransmissões desde o último evento.
Essa contagem será redefinida após a denúncia ao organizador.
No_RX_Count 4 octetos Nenhuma contagem de RX desde o último evento.
A contagem aumenta quando nenhum pacote é recebido no período programado ou quando o pacote recebido está corrompido.
Essa contagem será redefinida após a denúncia ao organizador.
NAK_Count 4 octetos Contagem de NAK (confirmação negativa) desde o último evento.
Essa contagem será redefinida após a denúncia ao organizador.
Last_TX_ACK_Timestamp 4 octetos Carimbo de data/hora da última confirmação de recebimento da transmissão. Ele é baseado no relógio Bluetooth do central da piconet (CLK).
Unidade: N * 0,3125 ms (1 relógio Bluetooth)
Flow_Off_Count 4 octetos O número de vezes que o controlador recebeu o comando de interrupção (STOP) desde o último evento.
Essa contagem será redefinida após a denúncia ao organizador.
Last_Flow_On_Timestamp 4 octetos Carimbo de data/hora da última transferência (GO). Ele é baseado no relógio Bluetooth do central da piconet (CLK).
Unidade: N * 0,3125 ms (1 relógio Bluetooth)
Buffer_Overflow_Bytes 4 octetos [in Byte]

Contagem de estouro de buffer desde o último evento.
O controlador conta quantos bytes de dados são descartados.
Essa contagem será redefinida após o envio de uma denúncia ao organizador.

Buffer_Underflow_Bytes 4 octetos [in Byte]

Contagem de estouro negativo do buffer desde o último evento.
Essa contagem será redefinida após o envio de uma denúncia ao organizador.

bdaddr 6 octetos Endereço do dispositivo remoto
cal_failed_item_count 1 octeto A contagem de itens com falha na calibragem
TX_Total_Packets 4 octetos O número de pacotes enviados.
TX_UnAcked_Packets 4 octetos O número de pacotes que não recebem um reconhecimento.
Essa contagem é redefinida após o envio de uma denúncia ao organizador.
TX_Flushed_Packets 4 octetos O número de pacotes que não são enviados pelo ponto de descarga.
Essa contagem é redefinida após o envio de uma denúncia ao organizador.
TX_Last_Subevent_Packets 4 octetos O número de pacotes que a camada de link transmite uma PDU de dados CIS no último subevento de um evento CIS.
Essa contagem é redefinida após o envio de uma denúncia ao organizador.
. O valor é zero se não houver um valor válido para o link.
CRC_Error_Packets 4 octetos O número de pacotes recebidos com erro de CRC desde o último evento.
Essa contagem é redefinida após o envio de uma denúncia ao organizador.
RX_Duplicate_Packets 4 octetos O número de pacotes duplicados (retransmissão) recebidos desde o último evento.
Essa contagem é redefinida após o envio de uma denúncia ao organizador.
RX_Unreceived_Packets 4 octetos O número de pacotes não recebidos é o mesmo que o parâmetro do comando LE READ ISO Link Quality (consulte a especificação principal do Bluetooth versão 5.4). Os streams associados são CIS e BIS.
Quando esse valor é incrementado, a camada de link não recebe um payload específico pelo ponto de limpeza (em um CIS) ou no final do evento associado a ele (em um BIS; consulte a especificação principal do Bluetooth, versão 5.4, volume 6, parte B, seção 4.4.6.6).
Coex_Info_Mask 2 octetos Bit 0 - CoexInvolvement: definido para indicar que há suspeita de envolvimento de atividades de coexistência quando este relatório é gerado (por exemplo, A2DP Chops e Approaching LSTO).
Bit 1: WL 2G Radio Active. Definido para indicar que o rádio WLAN 2G está ativo.
Bit 2: WL 2G Connected. Definido para indicar que o rádio WLAN 2G está ativo e conectado.
Bit 3 - WL 5G/6G Radio Active: definido para indicar que o rádio WLAN 5G/6G está ativo.
Bits 4 a 15: reservados
Parâmetro específico do fornecedor (comprimento total do parâmetro - a definir) * octetos Para que o fornecedor do controlador obtenha mais parâmetros específicos.

Código do subevento = 0x58 [Quality_Report_Id = 0x05, Root Inflammation event]

Esse evento indica que a HAL do Bluetooth ou o controlador encontrou um erro fatal e precisa que a pilha do Bluetooth registre essa situação e reinicie. O controlador precisa enviar um Root_Inflammation_Event para a pilha Bluetooth antes de enviar o primeiro fragmento dos eventos de informações de depuração em qualquer caso.

O parâmetro "Error_Code" contém um código de erro informado pelo HAL/Controller, 0 se for um erro específico do fornecedor do chipset. O Vendor_Specific_Error_Code contém um código de erro específico do fornecedor do chipset da HAL/Controller. Ele precisa ser definido como 0 se o parâmetro Error_Code não for 0. Os parâmetros Error_Code e Vendor_Specific_Error_Code não podem ser 0 ao mesmo tempo.

Parâmetro de subevento Tamanho Finalidade
Quality_Report_Id 1 octeto 0x00 ~ 0x04: reservado.
0x05: inflamação da raiz.
0x06 ~ 0xFF: reservado.
Error_Code 1 octeto 0x00: o código de erro específico do fornecedor do chipset está incluído.
0x01 ~ 0xFF: ocorreu uma falha no controlador. Consulte a especificação do Bluetooth [Vol 2], Parte D, Códigos de erro para conferir uma lista de códigos de erro e descrições.
Vendor_Specific_Error_Code 1 octeto 0x00: nenhum código de erro específico do fornecedor do chipset está incluído.
0x01 ~ 0xFF: código de erro específico do fornecedor do chipset.
Parâmetro específico do fornecedor (Comprimento total do parâmetro - 4) * octetos Para que o fornecedor do controlador obtenha mais parâmetros específicos.

Código do subevento = 0x58 [Quality_Report_Id = 0x06, evento do monitor de energia]

Esse evento fornece um snapshot do consumo de energia e dos estados operacionais do controlador Bluetooth em um período específico. Esse evento ajuda desenvolvedores e engenheiros a analisar como o controlador gerencia a energia, identificar quais atividades consomem mais energia e resolver problemas relacionados à energia.

Os parâmetros no relatório rastreiam métricas importantes, incluindo:

  • Consumo médio atual:a corrente geral usada pelo controlador.
  • Tempo gasto em diferentes estados:o tempo total (em milissegundos) que o controlador passa em um estado ocioso (suspensão/baixo consumo de energia) em comparação com um estado ativo (conectando, transmitindo ou recebendo dados).
  • Contagens de transição de estado:o número de vezes que o controlador alterna entre os estados ativo e inativo.
  • Tempo gasto em estados de rádio específicos:métricas separadas para o tempo gasto transmitindo (Tx) e recebendo (Rx) para links BR/EDR (Bluetooth clássico) e LE (Bluetooth de baixa energia).
  • Níveis médios de potência de transmissão:a potência média (em dBm) usada para transmissões em links BR/EDR e LE.
  • Atividade detalhada da cadeia:informa sobre o tempo gasto com cadeias de transmissão ou recebimento ativas, distinguindo entre operações de uma e duas cadeias e entre amplificadores de potência internos (iPA) e externos (ePA).
  • Tempo de atividade de verificação:o tempo que o controlador passa verificando ativamente dispositivos BR/EDR e LE.

Ao analisar esses parâmetros, os engenheiros podem entender a eficiência energética do controlador e otimizar o desempenho dele.

Parâmetro de subevento Tamanho Finalidade
Quality_Report_Id 1 octeto 0x06: Monitoramento de energia
Average_Current_Consumption 2 octetos [em mA] Consumo médio de corrente de todas as atividades consumidas pelo controlador
Idle_Total_Time (suspensão) 4 octetos [em ms] Tempo total no estado inativo (estados de baixo consumo de energia, sono).
Idle_Sate_Enter_Count 4 octetos Indica quantas vezes o controlador entra no estado inativo.
Active_Total_Time 4 octetos [em ms] Tempo total no estado ativo (consultando, paginando, tráfego de ACL/SCO/eSCO/BIS/CIS, processando qualquer tarefa).
Active_State_Enter_Count 4 octetos Indica quantas vezes o controlador entra nos estados ativos.
BR_RDR_Tx_Total_Time 4 octetos [em ms] Tempo total no estado Tx(transmissão para tráfego ACL/SCO/eSCO) específico de BR/EDR.
BR_RDR_Tx_State_Enter_Count 4 octetos Indica quantas vezes o controlador entra no estado de transmissão específico de BR/EDR.
BR_RDR_Tx_Average_Power_Level 1 octeto [em dBm] Nível médio de potência de transmissão de todos os links BR/EDR
BR_RDR_Rx_Total_Time 4 octetos [em ms] Tempo total no estado de Rx (recebimento de tráfego ACL/SCO/eSCO) específico de BR/EDR.
BR_RDR_Rx_State_Enter_Count 4 octetos [em ms] Indica quantas vezes o controlador entra no estado de Rx específico de BR/EDR.
LE_Tx_Total_Time 4 octetos [em ms] Tempo total no estado de transmissão específica de LE (transmissão para tráfego de publicidade ACL/BIS/CIS ou LE).
LE_Tx_State_Enter_Count 4 octetos Indica quantas vezes o controlador entra no estado de Rx específico de BR/EDR.
LE_Tx_Average_Power_Level 1 octeto [em dBm] Nível médio de potência de transmissão de todos os links LE.
LE_Rx_Total_Time 4 octetos [em ms] Tempo total no estado de Rx específico de LE (recebimento de tráfego de verificação ACL/BIS/CIS ou LE).
LE_Rx_State_Enter_Count 4 octetos [em ms] Indica quantas vezes o controlador entra no estado de Rx específico de LE.
Report_Time_Duration (tempo total) 4 octetos [em ms] A duração total para coletar informações relacionadas à energia.
RX_Active_One_Chain_Time 4 octetos [em ms] A duração do tempo de RX ativo em uma cadeia.
RX_Active_Two_Chain_Time 4 octetos [em ms] A duração do tempo de RX ativo em duas cadeias
TX_iPA_Active_One_Chain_Time 4 octetos [em ms] A duração do tempo de TX interno ativo em uma cadeia
TX_iPA_Active_Two_Chain_Time 4 octetos [em ms] A duração do tempo de TX interno ativo em duas cadeias.
TX_ePA_Active_One_Chain_Time 4 octetos [em ms] A duração do tempo de TX externo ativo em uma cadeia.
TX_ePA_Active_Two_Chain_Time 4 octetos [em ms] A duração do tempo de transmissão externa ativa em duas cadeias
BREDR_RX_Active_Scan_total_Time 4 octetos [em ms] Período (ms) no tempo ativo de RX de busca por BR/EDR
LE_RX_Active_Scan_total_Time 4 octetos [em ms] Período (ms) no tempo ativo de RX de verificação LE

Código do subevento = 0x58 [Quality_Report_Id = 0x09~0x0A, evento de estatísticas avançadas de RF]

O evento de estatísticas avançadas de RF (radiofrequência) do Bluetooth fornece métricas de desempenho detalhadas sobre o comportamento de rádio do controlador Bluetooth. O evento pode ser acionado de duas maneiras:

  • Por acionador (0x09): um relatório único é enviado em resposta a um comando específico.
  • Por monitor (0x0A): o controlador envia relatórios periodicamente em um intervalo especificado.

Os parâmetros do evento são essencialmente contadores de pacotes que rastreiam vários comportamentos de rádio durante um período especificado.

Principais métricas e finalidade
  • Estatísticas de potência de transmissão:esses contadores rastreiam pacotes enviados usando diferentes configurações de energia, distinguindo entre amplificadores de potência internos (iPA) e externos (ePA) e vários modos de diversidade de antena (Div) ou beamforming (BF). Isso ajuda a determinar quais configurações de energia e antena são usadas com mais frequência.
  • Intervalos do indicador de intensidade do sinal recebido (RSSI):esses parâmetros categorizam os pacotes recebidos com base na intensidade do sinal. Ao fornecer uma contagem de pacotes em intervalos específicos de RSSI (por exemplo, menos de -90 dBm, -70 a -75 dBm), o relatório oferece uma imagem clara da qualidade do link. Uma contagem alta nos intervalos de sinal "fraco" (por exemplo, < -90 dBm) indica uma conexão ruim.
  • Delta de RSSI:essa métrica mede a diferença na intensidade do sinal entre as duas antenas de recepção (se aplicável). Os contadores rastreiam quantos pacotes têm um delta de RSSI em diferentes intervalos. Um delta grande (por exemplo, >11 dBm) pode sugerir interferência ou obstrução física, já que uma antena está recebendo um sinal muito mais forte do que a outra.
  • Troca de antena e retransmissões:o relatório conta com que frequência o controlador troca de antena e rastreia pacotes retransmitidos (ReTX). Um grande número de retransmissões geralmente indica uma conexão fraca ou não confiável, exigindo o reenvio de pacotes.
  • Qualidade do canal:esses parâmetros fornecem um resumo de alto nível da integridade de diferentes canais de comunicação, categorizando-os como "Boa", "OK", "Ruim" ou "Muito ruim" com base no RSSI. Isso dá uma visão geral imediata do ambiente de RF.
  • Fila de buffer de TX:esta seção monitora o número de pacotes aguardando no buffer de transmissão do controlador para diferentes tipos de link, como ACL (link lógico assíncrono orientado a conexão), LECONN (conexão LE) e LEISOC (LE isócrono). Contagens altas de buffer podem indicar um gargalo ou um problema com o fluxo de dados do host para o controlador.
Parâmetro de subevento Tamanho Finalidade
Quality_Report_Id 1 octeto 0x09: Advance RF Stats By Trigger
0x0A: Advance RF Stats By Monitor
Extension_info 1 octeto Informações da versão do BQR.
0x01 para BQRv6
0x02 para BQRv7
Report_Time_Period 4 octetos O período para coletar informações de performance. Unidade: ms
TX_Power_iPA_BF 4 octetos Contador de pacotes do iPA BF.
TX_Power_ePA_BF 4 octetos Contador de pacotes de ePA BF
TX_Power_iPA_Div 4 octetos Contador de pacotes da Divisão de ePA
TX_Power_ePA_Div 4 octetos Contador de pacotes da Divisão de ePA
RSSI_chain_50 4 octetos Contador de pacotes da cadeia RSSI > -50 dBm
RSSI_chain_50_55 4 octetos Contador de pacotes da cadeia RSSI entre -50 dBm e >-55 dBm
RSSI_chain_55_60 4 octetos Contador de pacotes da cadeia RSSI entre -55 dBm e >-60 dBm
RSSI_chain_60_65 4 octetos Contador de pacotes da cadeia RSSI entre -60 dBm e >-65 dBm
RSSI_chain_65_70 4 octetos Contador de pacotes da cadeia RSSI entre -65 dBm e >-70 dBm
RSSI_chain_70_75 4 octetos Contador de pacotes da cadeia RSSI entre -70 dBm e >-75 dBm
RSSI_chain_75_80 4 octetos Contador de pacotes da cadeia RSSI entre -75 dBm e >-80 dBm
RSSI_chain_80_85 4 octetos Contador de pacotes da cadeia RSSI entre -80 dBm e >-85 dBm
RSSI_chain_85_90 4 octetos Contador de pacotes da cadeia RSSI entre -85 dBm e >-90 dBm
RSSI_chain_90 4 octetos Contador de pacotes da cadeia RSSI < -90 dBm
RSSI_delta_2 4 octetos Contador de pacotes de delta de RSSI < 2 dBm
RSSI_delta_2_5 4 octetos Contador de pacotes do delta de RSSI entre 2 dBm e 5 dBm
RSSI_delta_5_8 4 octetos Contador de pacotes de delta de RSSI entre 5 dBm e 8 dBm
RSSI_delta_8_11 4 octetos Contador de pacotes do delta de RSSI entre 8 dBm e 11 dBm
RSSI_delta_11 4 octetos Contador de pacotes de delta de RSSI > 11 dBm
Antenna_Switch_Count 4 octetos Contador de pacotes do evento de troca de antena.
ReTX_iPA_BF 4 octetos Contador de pacotes de ReTX_iPA_BF no período mais recente
ReTX_ePA_BF 4 octetos Contador de pacotes de ReTX_ePA_BF no período mais recente
ReTX_iPA_Div 4 octetos Contador de pacotes de ReTX_iPA_Div no período mais recente
ReTX_ePA_Div 4 octetos Contador de pacotes de ReTX_ePA_Div no período mais recente
Channel_count_Good 1 octeto Número de canais cujo RSSI está no intervalo do agrupamento 1 (<-90)
Channel_count_OK 1 octeto Número de canais cujo RSSI está no intervalo do Bin-2 (-90~-76)
Channel_count_Bad 1 octeto Número de canais cujo RSSI está no intervalo do Bin-3 (-76~-50)
Channel_count_VeryBad 1 octeto Número de canais cujo RSSI está no intervalo do agrupamento 4 (>-50)
TX_buffer_Queue_Count 4 octetos Contador do buffer TX do controlador de status da fila de buffer no período mais recente [0:3] ACL_1 [4:7] ACL_2 [8:11] LECONN_1 [12:15] LECONN_2 [16:19] LEISOC_1 [20:23] LEISOC_2 [24:27] LEBroadcast [28:31] rsvd

Código do subevento = 0x58 [Quality_Report_Id = 0x0B~0x0C, evento de monitoramento da integridade do controlador]

O evento de monitoramento da integridade do controlador Bluetooth fornece um resumo do status operacional do controlador. O evento pode ser acionado de duas maneiras:

  • Por acionador (0x09): um relatório único é enviado em resposta a um comando específico.
  • Por monitor (0x0A): o controlador envia relatórios periodicamente em um intervalo especificado.

O evento de monitoramento da integridade do controlador Bluetooth é uma ferramenta de diagnóstico que fornece um resumo do status operacional do controlador. Esse evento faz parte da estrutura do Relatório de qualidade do Bluetooth (BQR) e é usado para depurar problemas de conectividade, gerenciamento de energia e tempo. Ele pode ser enviado como um relatório único ou periodicamente para fornecer monitoramento contínuo.

Principais métricas e finalidade
  • Contadores de pacotes de HCI:o evento rastreia o número total de pacotes enviados do host para o controlador e vice-versa. Esses contadores são essenciais para depurar problemas com o transporte da interface do controlador host (HCI, na sigla em inglês), que é o canal de comunicação entre a pilha de software e o chip do controlador Bluetooth.
  • Comprimentos de pacotes:o evento informa o comprimento do último pacote HCI enviado e recebido. Isso ajuda a verificar se os dados estão sendo transmitidos corretamente e se não há problemas inesperados de tamanho.
  • Contagens de sinal de despertar:o relatório inclui o número total de vezes que os pinos BT_Wake e HOST_Wake foram declarados. Esses sinais físicos são essenciais para o gerenciamento de energia, já que são usados para ativar as respectivas entidades de estados de baixo consumo de energia. O monitoramento dessas contagens ajuda a depurar problemas relacionados à energia, como ativações inesperadas ou falhas ao entrar no modo de espera.
  • Carimbos de data/hora:o evento fornece vários carimbos de data/hora, incluindo o horário do último sinal de despertar e da última redefinição de HCI. Esses carimbos de data/hora ajudam a resolver problemas relacionados ao tempo e fornecem um ponto de referência para quando determinados eventos ocorreram.
  • Timer de watchdog:uma flag específica indica se o evento foi gerado como um aviso antecipado de que o timer de watchdog do controlador está prestes a expirar. Este é um alerta crítico para possíveis travamentos ou falhas de funcionamento do controlador.
  • Status do link:o relatório resume o estado atual das conexões ativas, incluindo a contagem total de links BR/EDR, LE e CIS (Connected Isochronous Stream). Ele também indica se há links SCO (Synchronous Connection-Oriented) ativos. Essas informações fornecem um resumo da carga de conexão atual do controlador.
Parâmetro de subevento Tamanho Finalidade
Quality_Report_Id 1 octeto 0xB~0xC
0x0B: relatórios únicos ou acionados por eventos
0x0C: relatórios periódicos.
Packet_Count_Host_to_Controller 4 octetos Contagem total de pacotes enviados do host para o controlador pelo transporte de HCI. Esse campo é usado para depurar problemas de HCI (por exemplo, UART). Comportamento: os contadores são redefinidos quando o controlador recebe uma redefinição de HCI.
Packet_Count_Controller_to_Host 4 octetos Contagem total de pacotes de eventos de HCI enviados ao host. Esse campo é usado para fins de depuração de HCI (por exemplo, UART). Comportamento: os contadores são redefinidos quando o controlador recebe uma redefinição de HCI.
Last_Packet_Length_Host_to_Controller 2 octetos Comprimento do último pacote HCI enviado para a UART do host. Observação: comprimento máximo do pacote HCI de 2 octetos (inclui HCI, ACL, SCO, ISO)
Last_Packet_Length_Controller_To_host 2 octetos Comprimento do último pacote HCI recebido da UART do host. Observação: comprimento máximo do pacote HCI de 2 octetos (inclui HCI, ACL, SCO, ISO)
Total_BT_Wake_Count 4 octetos A contagem agregada de declarações de fixação BT_Wake pela entidade host. Esse campo serve como uma ferramenta de diagnóstico para depurar problemas relacionados à energia. Comportamento: os contadores são redefinidos quando o controlador recebe uma redefinição de HCI.
Total_HOST_Wake_Count 4 octetos Cálculo agregado de asserções de pinos Host_Wake iniciadas pelo controlador. Esse campo serve como uma ferramenta de diagnóstico para depurar problemas relacionados à energia. Comportamento: os contadores são redefinidos quando o controlador recebe uma redefinição de HCI.
Last_BT_Wake_TimeStamp 4 octetos Último carimbo de data/hora em que o host confirmou o BT_Wake Pin.Esse campo é implementado para depurar problemas de energia.
Last_HOST_Wake_TimeStamp 4 octetos O carimbo de data/hora mais recente em que o controlador confirmou o pin Host_Wake. Esse campo é usado para depurar problemas de energia.
Reset_Timestamp 4 octetos Carimbo de data/hora que indica a conclusão da redefinição de HCI mais recente. Esse campo é usado com o objetivo expresso de facilitar a resolução de problemas relacionados a tempo. Ele deve servir como o ponto de gravação inicial em relação ao qual todos os outros itens são referenciados.
Current_Timestamp 4 octetos O horário atual em que o evento é gerado. Esse campo é usado para solucionar problemas de discrepâncias de tempo. Ele deve servir como o ponto de gravação de acionamento que todos os outros elementos referenciam.
Is_WatchDog_Timer_About_To_Expire 4 octetos Flag para indicar que esse evento de status de integridade foi gerado pelo controlador como um aviso antecipado de expiração do watchdog. O carimbo de data/hora atual serve para indicar o momento da ocorrência.
Coex_Status_Mask 2 octetos Bit 0: reservado
Total_Links_BR_EDR_LE_Active 1 octeto Contagem total de links de BR/EDR/LE no estado ativo.
Total_Links_BR_EDR_Sniff 1 octeto Contagem total de links de BR/EDR no estado Sniff/Idle.
Total_Links_CIS 1 octeto Contagem total de links da ISO.
Is_SCO_Active 1 octeto Indicador para verificar se o link do SCO está ativado no momento.
Parâmetro de subevento Tamanho Finalidade
Quality_Report_Id 1 octeto 0x00 ~ 0x10: reservado.
0x11: rastreamento de mensagens LMP/LL.
0x12: rastreamento de agendamento de coexistência/multilink do Bluetooth.
0x13: despejo de dados de informações de depuração do controlador.
0x14 ~ 0xFF: reservado.
Connection_Handle 2 octetos Handle de conexão.
Parâmetro específico do fornecedor (Comprimento total do parâmetro - 4) * octetos Formato específico do fornecedor do rastreamento de mensagens LMP, rastreamento de agendamento Bluetooth Multi-link/Coex e despejo de dados de informações de depuração do controlador.

Sub event code = 0x5C

Quando ativado, esse evento precisa ser gerado durante cada intervalo ISO.

Ativação
A ativação é feita selecionando o código do fornecedor Data_Path_ID 0x19 no comando padrão HCI_LE_Setup_ISO_Data_Path. O comando HCI_Configure_Data_Path com Data_Path_ID definido como 0x19 e Vendor_Specific_Config_Length definido como 0 precisa ser aceito, mesmo que nenhuma ação seja esperada do controlador ao receber esse comando.
Ponto de tempo de expedição
O evento é emitido do início de um intervalo ISO (ponto de ancoragem CIG ou BIG) até o intervalo ISO seguinte. O controlador indica o atraso com o início efetivo do intervalo ISO usando Anchor_Point_Delay.
Sincronização do controlador
No início de um intervalo ISO, o controlador calcula StreamSN incrementando o valor atual pelo ISO_Interval ÷ SDU_Interval configurado. No primeiro intervalo, ele é inicializado como 0.
Em seguida, para cada pacote na FIFO ISO, o seguinte se aplica:
  • O controlador calcula a diferença de ajuste SNdiff entre os dois números de sequência:
    SNdiff = (SDUSN - StreamSN + 0x10000) mod 0x10000
  • Quando (SNdiff + (FT-1) × ISO_Interval ÷ SDU_Interval) mod 0x10000 <= (FT-1) × ISO_Interval ÷ SDU_Interval:
    O pacote está na janela de retransmissão. Ele deveria ter sido agendado para transmissão em intervalos anteriores e agora está disponível para retransmissão. Se não for esse o caso (não foi programado para transmissão), ele foi recebido com atraso. Isso precisa ser sinalizado ao host usando o In_Status. Esses pacotes podem ser descartados ou programados para transmissão. A escolha é definida pela implementação.
  • Ou quando SNdiff < ISO_Interval ÷ SDU_Interval:
    O pacote é programado para transmissão desse evento até que o tempo limite de limpeza ocorra.
  • Ou quando SNdiff >= ISO_Interval ÷ SDU_Interval e SNdiff <= Max_Forward_Buffers:
    O pacote está no futuro e será transmitido com um evento subsequente. Como os pacotes são enviados em ordem, essa condição encerra a pesquisa de pacotes para esse intervalo.
    Os buffers usados pelo host não são comunicados ao controlador, mas são limitados a Max_Forward_Buffers = 16.
  • Ou quando nenhuma das condições acima é atendida:
    O pacote é descartado, o limite de tempo limite de limpeza é atingido ou um pacote malformado foi recebido.

Parâmetro de subevento Tamanho Finalidade
Connection_Handle 2 octetos Identificador de conexão do CIS ou BIS
Intervalo: 0x0000 a 0x0EFF
Sequence_Number 2 octetos Número de sequência do fluxo, gerenciado pelo controlador.

Inicializado como 0 quando o CIS ou BIS é criado e incrementado pelo número de SDUs por intervalo isócrono ISO, definido como ISO_interval ÷ SDU_Interval, em cada intervalo ISO.
Anchor_Point_Delay 2 octetos Atraso em microssegundos entre a geração do evento e o ponto de ancoragem BIG ou CIG efetivo ou o início do intervalo ISO. O carimbo de data/hora do ponto de ancoragem efetivo é definido por:
Event generation time - Anchor_Point_Delay

Intervalo: de 0 ao intervalo ISO em microssegundos
In_Status 2 octetos Status do buffer ISO do controlador

No início de um intervalo ISO, cada bit bi é definido quando a SDU (Sequence_Number + i) mod 0x10000 está disponível. Quando não está disponível, a SDU é identificada como Not received from the host.

O valor i varia de 0 a ISO_Interval ÷ SDU_Interval - 1. Para outros valores de i, os bits são definidos como 0.
Tx_Status 2 octetos Status da transmissão, em relação às SDUs com números de sequência:
(Sequence_Number - Flush_Timeout × ISO_Interval ÷ SDU_Interval + i + 0x10000) mod 0x10000

Cada bit bi é definido quando todas as PDUs da SDU identificada, pelo número de sequência, foram transmitidas e reconhecidas.

O valor i varia de 0 a ISO_Interval ÷ SDU_Interval - 1. Para outros valores de i, os bits são definidos como 0.
Em um grupo de transmissão, a transmissão sempre precisa ser confirmada.

Suporte a vários anunciantes

Os objetivos do suporte a vários anunciantes são os seguintes:

  • Capacidade de veicular vários anúncios (max_advt_instances)
  • Diferentes potências de transmissão para permitir um alcance variável
  • Conteúdo publicitário diferente
  • Uma resposta individualizada para cada anunciante
  • Privacidade (não rastreável) para cada anunciante
  • Conectável

Para manter essa especificação próxima aos padrões atuais, os seguintes comandos específicos do fornecedor são fornecidos. Eles são derivados da especificação Bluetooth Core 4.1.

LE_Multi_Advt_Command

OCF: 0x154

Parâmetro de comando Tamanho Finalidade
Multi_advt_opcode 1 octeto 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

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Multi_advt_opcode 1 octeto 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

Referência básica: Especificação principal do Bluetooth 4.1, página 964 (comando de parâmetro de publicidade do conjunto LE)

Sub OCF: 0x01

Parâmetro de subcomando Tamanho Finalidade
Advertising_Interval_Min Por especificação Por especificação
Advertising_Interval_Max Por especificação Por especificação
Advertising_Type Por especificação Por especificação
Own_Address_Type Por especificação Por especificação
Own_Address Por especificação Por especificação
Direct_Address_Type Por especificação Por especificação
Direct_Address Por especificação Por especificação
Advertising_Channel_Map Por especificação Por especificação
Adverstising_Filter_Policy Por especificação Por especificação
Advertising_Instance 1 octeto Especifica a aplicabilidade dos parâmetros acima a uma instância.
Tx_power 1 octeto Transmit_Power
Unidade: dBm (número inteiro com sinal)
Intervalo: -70 a +20

O parâmetro Own_Address pode ser um endereço configurado pelo host no momento da configuração dessa instância de vários anúncios. Isso permite ter um endereço particular resolúvel no momento da transmissão do primeiro beacon. A publicidade em uma instância vai continuar independentemente da conexão. A pilha de BT do host pode emitir um comando para iniciar a publicidade em uma instância após a conexão.

Um evento de conclusão de comando será gerado para esse comando, conforme especificado na especificação principal do Bluetooth 4.1, de acordo com o comando acima. O controlador vai responder com um código de não sucesso (parâmetro inválido) se a instância de publicidade ou os parâmetros Tx_Power forem inválidos.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Multi_advt_opcode 1 octeto 0x01 [Set_Advt_Param_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd

Referência básica: especificação principal do Bluetooth 4.1, página 969 (comando de dados de publicidade do conjunto LE)

Sub OCF: 0x02

Parâmetro de subcomando Tamanho Finalidade
Advertising_Data_Length Por especificação Por especificação
Advertising_Data Por especificação Por especificação
Advertising_Instance 1 octeto Especifica a aplicabilidade dos parâmetros acima a uma instância.

Um evento de conclusão de comando será gerado para esse comando, conforme especificado na especificação principal do Bluetooth 4.1, de acordo com o comando acima. O controlador vai responder com um código de falha se a instância de publicidade ou os parâmetros Tx_Power forem inválidos.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Multi_advt_opcode 1 octeto 0x02 [Set_Advt_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd

Referência básica: Bluetooth Core 4.1 Specification, página 970 (comando de dados de resposta de verificação de conjunto LE)

Sub OCF: 0x03

Parâmetro de subcomando Tamanho Finalidade
Scan_Response_Data_Length Por especificação Por especificação
Scan_Response_Data Por especificação Por especificação
Advertising_Instance 1 octeto Especifica a aplicabilidade dos parâmetros acima a uma instância.

Um evento de conclusão de comando será gerado para esse comando, conforme especificado na especificação Bluetooth Core 4.1, de acordo com o comando acima. O controlador vai responder com um código de não sucesso (parâmetro inválido) se a instância de publicidade ou os parâmetros Tx_Power forem inválidos.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Multi_advt_opcode 1 octeto 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd

Referência básica: Especificação principal do Bluetooth 4.1, página 963 (comando LE Set Random Address)

Sub OCF: 0x04

Parâmetro de subcomando Tamanho Finalidade
Endereço aleatório Por especificação Por especificação
Advertising_Instance 1 octeto Especifica a aplicabilidade dos parâmetros acima a uma instância.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Multi_advt_opcode 1 octeto 0x04 [Set_Random_Addr_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd

Referência básica: especificação principal do Bluetooth 4.1, página 971 (comando LE Set Advertise Enable nessa especificação principal)

OCF: 0x05

Parâmetro de subcomando Tamanho Finalidade
Advertising_Enable 1 octeto Um valor de 1 significa "ativar". Qualquer outro valor significa desativar.
Advertising_Instance 1 octeto Especifica a aplicabilidade dos parâmetros acima a uma instância. A instância 0 significa uma instância padrão de HCI.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Multi_advt_opcode 1 octeto 0x05 [Set_Advt_Enable_Multi_Sub_Cmd]

Resolução descarregada de endereço particular

Esse recurso resolve um endereço particular no firmware ou hardware do controlador, o que oferece os seguintes benefícios:

  • Latência envolvida com o host na resolução de um endereço particular
  • Economia de energia ao evitar ativar o host

LE_Set_RPA_Timeout

OCF: 0x15C

Parâmetro de comando Tamanho Finalidade
LE_local_IRK 16 octetos O IRK do dispositivo local usado para gerar os endereços aleatórios resolvíveis.
tRPA_min 2 octetos O tempo limite mínimo de geração de RPA em segundos. O controlador precisa gerar novos endereços resolvíveis para qualquer evento de publicidade/verificação/conexão durante ou após esse tempo limite.
Intervalo válido: 300 a 1800
tRPA_max 2 octetos O tempo limite máximo de geração de RPA em segundos. O controlador precisa gerar novos endereços resolvíveis para eventos de publicidade/verificação/conexão antes ou durante esse tempo limite.
Intervalo válido: tRPA_min-1800
Parâmetro de retorno Tamanho Finalidade
Status 1 octeto O status do comando.

Valores de status de HCI sugeridos:
0x00 Sucesso
0x01 Comando desconhecido (se não for compatível)
0x12 Parâmetros de comando inválidos (se algum parâmetro estiver fora do intervalo especificado)

LE_RPA_offload_Command

OCF: 0x155

Parâmetro de comando Tamanho Finalidade
RPA_offload_opcode 1 octeto 0x1 - Ativar recurso específico do cliente
0x2 - Adicionar IRK à lista
0x3 - Remover IRK da lista
0x4 - Limpar lista de IRK
0x5 - Ler entrada da lista de IRK

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Event_RPA_offload_opcode 1 octeto 0x1 - Ativar recurso específico do cliente
0x2 - Adicionar IRK à lista
0x3 - Remover IRK da lista
0x4 - Limpar lista de IRK
0x5 - Ler entrada da lista de IRK

LE_RPA_offload: Enable_cust_specific_sub_Command

Sub OCF: 0x01

Parâmetro de subcomando Tamanho Finalidade
enable_customer_specific_feature_set 1 octeto 0x01: ativar o recurso de RPA descarregado
0x00: desativar o recurso de RPA descarregado

A descarga de RPA precisa ser ativada pelo host com base na capacidade do chip. Consulte a LE_Get_Vendor_Capabilities_Command. Cada chip pode ter um max_irk_list_sz diferente no firmware.

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Event_cust_specific_feature_opcode 1 octeto 0x01 [Ativar recurso específico do cliente]

LE_RPA_offload: Add_IRK_to_list_sub_Command

Sub OCF: 0x02

Parâmetro de subcomando Tamanho Finalidade
LE_IRK 16 octetos LE IRK (1º byte LSB)
Address_Type 1 octeto 0: endereço público
1: endereço aleatório
LE_Device_Address 6 octetos Endereço público ou aleatório associado ao IRK (LSB do primeiro byte)

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Event_cust_specific_feature_opcode 1 octeto 0x02 [Adicionar IRK à lista]
LE_IrkList_AvailableSpaces 1 octeto Entradas da lista de IRL disponíveis após a operação atual

LE_RPA_offload: Remove_IRK_to_list_sub_Command

Sub OCF: 0x03

Parâmetro de subcomando Tamanho Finalidade
Address_Type 1 octeto 0: endereço público
1: endereço aleatório
LE_Device_Address 6 octetos Endereço público ou aleatório associado ao IRK

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Event_cust_specific_feature_opcode 1 octeto 0x03 [Remover IRK da lista]
LE_IrkList_AvailableSpaces 1 octeto Entradas da lista de IRL disponíveis após a operação atual

LE_RPA_offload: Clear_IRK_list_sub_Command

Sub OCF: 0x04

Parâmetro de subcomando Tamanho Finalidade
Nenhum

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Event_cust_specific_feature_opcode 1 octeto 0x04 [Limpar lista de IRKs]
LE_IrkList_AvailableSpaces 1 octeto Entradas da lista de IRL disponíveis após a operação atual [max_irk_list_sz]

LE_RPA_offload: Read_IRK_list_sub_Command

Sub OCF: 0x05

Parâmetro de subcomando Tamanho Finalidade
LE_read_IRK_list_entry-index 1 octeto Índice da lista de IRK [0, max_irk_list_sz-1]

Um evento "Comando concluído" será gerado para esse comando.

Parâmetro de retorno Tamanho Finalidade
Status 1 octeto Status "Comando concluído"
Event_cust_specific_feature_opcode 1 octeto 0x05 [Ler entrada da lista de IRK]
LE_Read_IRK_List_entry 1 octeto Índice do IRK que o host quer ler de volta. O tamanho máximo da lista de IRKs é 32.
LE_IRK 16 octetos Valor IRK
Address_Type 1 octeto 0: endereço público
1: endereço aleatório
LE_Device_Address 6 octetos Endereço público ou aleatório associado ao IRK
LE_Resolved_Private_Address 6 octetos Endereço particular resolvido e resolúvel atual desta IRK.

Descarregamento de sniff

O recurso Sniff Offload descarrega o gerenciamento do modo Sniff da pilha de host Bluetooth para o controlador Bluetooth. Isso permite que o controlador gerencie o tempo de entrada/saída do modo Sniff e aplique parâmetros configuráveis de Sniff e subavaliação de Sniff, enquanto o host mantém o controle sobre a seleção de parâmetros com base nas mudanças de atividade do perfil Bluetooth.

Estados de descarga de sniff

Esta seção define os estados em um controlador Bluetooth em relação à função Sniff Offload. Dois estados globais foram definidos para identificar o status de um controlador Bluetooth em relação à ativação do Sniff Offload. Dois estados específicos de conexão foram definidos para identificar o status de uma conexão BR/EDR quando o controlador Bluetooth está no estado "Sniff Offload Enabled".

Estados globais

Dois estados globais foram definidos para identificar o status de um controlador Bluetooth em relação à ativação do Sniff Offload.

Estado de desativação do descarregamento de detecção

Um controlador Bluetooth é considerado no estado "Sniff Offload Disabled" por padrão. Espera-se que o controlador Bluetooth processe os comandos HCI_Sniff_Mode, HCI_Exit_Sniff_Mode e HCI_Sniff_Subrating emitidos por um host Bluetooth. O controlador Bluetooth também encaminha os eventos HCI_Mode_Change e HCI_Sniff_Subrating para um host Bluetooth de acordo com a máscara de evento definida pelo host Bluetooth.

Estado de ativação do descarregamento de detecção

Um controlador Bluetooth é considerado no estado "Sniff Offload Enabled" depois de processar com êxito um "WriteSniffOffloadEnable" para ativar o Sniff Offload. Nesse estado, o controlador Bluetooth encaminha os eventos HCI_Mode_Change e HCI_Sniff_Subrating para um host Bluetooth, conforme decidido por uma função lógica AND da máscara de evento definida pelo host Bluetooth e as flags de supressão de eventos.

Estados específicos da conexão

Quando um controlador Bluetooth está no estado "Sniff Offload Enabled", cada ACL ativa pode estar em um dos dois estados descritos abaixo.

Estado do parâmetro pendente

Uma ACL é considerada no estado "Pending-Parameters" quando o controlador Bluetooth está no estado "Sniff Offload Enabled", mas um comando específico do fornecedor "WriteSniffOffloadParameters" não foi emitido pelo menos uma vez pelo host Bluetooth para a ACL atual.

Estado de início do controle

Uma ACL é considerada no estado "Controle iniciado" quando o controlador Bluetooth está no estado "Descarregamento de detecção ativado" e um comando específico do fornecedor "WriteSniffOffloadParameters" foi emitido pelo menos uma vez pelo host Bluetooth para a ACL atual.

WriteSniffOffloadEnable

OCF: 0x310

Parâmetro de comando Tamanho Finalidade
Enable_Sniff_Offload 1 octeto 0x00 : Desativar
0x01 : Ativar
Subrating_Max_Latency 2 octetos O parâmetro "Latência máxima" será usado para calcular a taxa de subamostragem máxima que o dispositivo remoto pode usar. Padrão: latência T*sniff* = N × 0,625 ms (1 slot de banda de base) Intervalo: 0x0002 a 0xFFFE Intervalo de tempo: 1,25 ms a 40,9 s
Subrating_Min_Remote_Timeout 2 octetos Tempo limite mínimo do modo de detecção (T*sniff_mode_timeout*) que o dispositivo remoto pode usar. Padrão: 0x0000 Tempo limite = N × 0,625 ms (1 slot de banda de base) Intervalo: 0x0000 a 0xFFFE Intervalo de tempo: 0 s a 40,9 s
Subrating_Min_Local_Timeout 2 octetos Tempo limite mínimo do modo de detecção (T*sniff_mode_timeout*) que o dispositivo local pode usar. Padrão: 0x0000 Tempo limite = N × 0,625 ms (1 slot de banda de base) Intervalo: 0x0000 a 0xFFFE Intervalo de tempo: 0 s a 40,9 s
Suppress_Mode_Change_Event 1 octeto 0x00 : o controlador Bluetooth vai informar o evento HCI Mode_Change ao host de acordo com a configuração definida no comando HCI_Set_Event_Mask.
0x01 : o controlador Bluetooth não vai informar o evento HCI Mode_Change ao host.
Suppress_Sniff_Subrating_Event 1 octeto 0x00 : o controlador Bluetooth vai informar o evento HCI Sniff_Subrating ao host sujeito à configuração definida no comando HCI_Set_Event_Mask.
0x01 : o controlador Bluetooth não vai informar o evento HCI Sniff_Subrating ao host.

WriteSniffOffloadParameters

OCF: 0x311

Parâmetro de comando Tamanho Finalidade
Connection_Handle 2 octetos Handle de conexão ACL BR/EDR de 16 bits. Intervalo: 0x0000 a 0x0EFF
Sniff_Max_Interval 2 octetos –Intervalo definido pelo Bluetooth SIG, normalmente usado para entrar no modo Sniff. Intervalo: 0x0002 a 0xFFFE. Somente valores pares são válidos. Intervalo obrigatório: 0x0006 a 0x0540. Tempo = N × 0,625 ms. Intervalo de tempo: 1,25 ms a 40,9 s. Casos especiais 0x0000 : usado para selecionar o modo "Push-Active" Sniff-Offload. 0x0001 : usado para selecionar o modo "Prefer-Active" Sniff-Offload.
Sniff_Min_Interval 2 octetos Intervalo: 0x0002 a 0xFFFE; somente valores pares são válidos. Intervalo obrigatório: 0x0006 a 0x0540 Tempo = N × 0,625 ms. Intervalo de tempo: 1,25 ms a 40,9 s
Sniff_Attempts 2 octetos Número de slots de recebimento de banda de base para tentativa de detecção. Comprimento = N × 1,25 ms Intervalo: 0x0001 a 0x7FFF Intervalo de tempo: 1,25 ms a 40,9 s Intervalo obrigatório para o controlador: 1 a T*sniff* ÷ 2
Sniff_Timeout 2 octetos Número de slots de recebimento de banda de base para tempo limite de detecção. Comprimento = N × 1,25 ms Intervalo: 0x0000 a 0x7FFF Intervalo de tempo: 0 ms a 40,9 s Intervalo obrigatório para o controlador: 0 a 0x0028
Link_Inactivity_Timeout 2 octetos Valor de tempo limite em milissegundos. O timer de inatividade do link é iniciado/redefinido em todas as transações HCI-ACL. Quando o timer expirar, o controlador vai iniciar a entrada no modo Sniff.
Subrating_Max_Latency 2 octetos O parâmetro "Latência máxima" será usado para calcular a taxa de subamostragem máxima que o dispositivo remoto pode usar. Padrão: latência T*sniff* = N × 0,625 ms (1 slot de banda de base) Intervalo: 0x0002 a 0xFFFE Intervalo de tempo: 1,25 ms a 40,9 s
Subrating_Min_Remote_Timeout 2 octetos Tempo limite mínimo do modo de detecção (T*sniff_mode_timeout*) que o dispositivo remoto pode usar. Padrão: 0x0000 Tempo limite = N × 0,625 ms (1 slot de banda de base) Intervalo: 0x0000 a 0xFFFE Intervalo de tempo: 0 s a 40,9 s
Subrating_Min_Local_Timeout 2 octetos Tempo limite mínimo do modo de detecção (T*sniff_mode_timeout*) que o dispositivo local pode usar. Padrão: 0x0000 Tempo limite = N × 0,625 ms (1 slot de banda de base) Intervalo: 0x0000 a 0xFFFE Intervalo de tempo: 0 s a 40,9 s
Allow_Exit_Sniff_On_Rx 1 octeto Flag para controlar a saída do modo Sniff em uma transação HCI-ACL de recebimento. 0x00 : Não saia do rastreamento no Rx. 0x01 : sai do rastreamento. O HCI-ACL de direção de recebimento Rx é definido como transmissão de pacotes ACL do controlador para o host via HCI.
Allow_Exit_Sniff_On_Tx 1 octeto Flag para controlar a saída do modo Sniff em uma transação HCI-ACL de direção de transmissão. 0x00 : não saia da detecção no Tx. 0x01 : sai do Sniff na transmissão Tx. O HCI-ACL de direção é definido como transmissão de pacotes ACL do host para o controlador via HCI.