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:
|
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 - immediate0x01 - on_found0x02 - 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:
|
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:
|
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:
|
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_LengthIgnorar quando APCF_Action for 0x02 (Limpar) |
APCF_AD_DATA_MASK |
Tamanho variável |
Tamanho variável, com base em APCF_AD_DATA_LengthIgnorar 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:
Valor do bit
|
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.
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. Codec AAC:
Consulte os elementos de informação específicos do codec AAC em A2DP v1.3 Codec LDAC:
Octetos 0 a 3: ID do fornecedor
Octeto 4-5: ID do codec
Octeto 6: índice de taxa de bits:
Octeto 7: modo de canal LDAC 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
A exclusão vai limpar os relatórios de eventos de qualidade específicos. |
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. |
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 |
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 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) presentes0x01: 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 octetoRSSI[0]: 1 octetoTimestamp[0]: 2 octetosAdv packet_len[0]: 1 octetoAdv_packet[0]: Adv_packet_len octetosScan_data_resp_len[0]: 1 octetoScan_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.
Código do subevento = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, evento relacionado à qualidade do link]
| 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. |
SNR |
1 octeto |
[em dB]
Valor da relação sinal-ruído (SNR) para o Connection_Handle especificado. |
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. |
Buffer_Underflow_Bytes |
4 octetos |
[in Byte]
Contagem de estouro negativo do buffer desde o último evento. |
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. |
Código do subevento = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, evento relacionado ao despejo de registros]
| 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. |
Subevento de feedback do link ISO
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 fornecedorData_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 usandoAnchor_Point_Delay.
Sincronização do controlador
No início de um intervalo ISO, o controlador calcula StreamSN incrementando o valor atual peloISO_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 oIn_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_IntervaleSNdiff <= 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 aMax_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_Cmd0x02 - Set_Advt_Data_Multi_Sub_Cmd0x03 - Set_Scan_Resp_Data_Multi_Sub_Cmd0x04 - Set_Random_Addr_Multi_Sub_Cmd0x05 - 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_Command0x02 - Set_Advt_Data_Multi_Command0x03 - Set_Scan_Resp_Data_Multi_Command0x04 - Set_Random_Addr_Multi_Command0x05 - 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. |