Compartilhar via


Extensões de HCI Bluetooth definidas pela Microsoft

A interface de controlador host (HCI) Bluetooth especifica todas as interações entre um host e um controlador de rádio Bluetooth. As especificações de Bluetooth permitem que comandos e eventos de HCI definidos pelo fornecedor habilitem a interação não padronizada entre hosts e controladores. A Microsoft define comandos e eventos de HCI específicos do fornecedor que são consumidos pelo Windows. Os implementadores do controlador Bluetooth podem usar essas extensões a fim de implementar recursos especiais.

Requisitos

Os comandos de HCI Bluetooth são identificados por um código de comando de 16 bits. A organização Bluetooth define valores no intervalo de 0x0000 a 0xFBFF. Os fornecedores definem valores no intervalo de 0xFC00 a 0xFFFF, possibilitando 1024 códigos de comando diferentes atribuídos pelo fornecedor.

O fornecedor deve escolher o valor do código de comando definido pela Microsoft. A Microsoft não pode escolher um código de comando e presumir que nenhum outro fornecedor use o código para uma finalidade conflitante. Não é seguro emitir um comando específico do fornecedor e depender do controlador para rejeitá-lo se ele não o entender. O controlador pode interpretar o comando como uma operação destrutiva, por exemplo, como atualizar seu firmware.

O fornecedor deve comunicar o valor escolhido usando um método diferente do controlador. A Microsoft não especifica como obter o código escolhido.

Notificando a pilha Bluetooth do Windows sobre o código de comando específico do fornecedor

A pilha Bluetooth do Windows lê o código de comando específico do fornecedor em uma chave do registro, VsMsftOpCode.

A chave do registro VsMsftOpCode tem um tipo de REG_DWORD, e os dados da chave são o opcode específico do fornecedor.

Para listar o opcode específico do fornecedor, use a diretiva AddReg na seção DDInstall.HW do INF do driver. A seção add-registry deve conter:

HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>

Exemplo:

[radio.NTamd64.HW]
AddReg=radio.NTamd64.HW.AddReg
[radio.NTamd64.HW.AddReg]
HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>

Comandos de HCI definidos pela Microsoft

Comandos HCI Descrição
HCI_VS_MSFT_Read_Supported_Features Fornece um bitmap que descreve para quais recursos definidos pela Microsoft o controlador dá suporte e especifica o prefixo para eventos definidos pela Microsoft que são retornados pelo controlador.
HCI_VS_MSFT_Monitor_Rssi Solicita que o controlador comece a monitorar o RSSI do link medido de uma conexão especificada e gera um evento quando o RSSI do link medido da conexão sai dos limites especificados.
HCI_VS_MSFT_Cancel_Monitor_Rssi Cancela um comando HCI_VS_MSFT_Monitor_Rssi emitido anteriormente.
HCI_VS_MSFT_LE_Monitor_Advertisement Solicita que o controlador comece a monitorar anúncios que se enquadrem no intervalo de RSSI especificado e atendam a outros requisitos.
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Cancela um comando HCI_VS_MSFT_LE_Monitor_Advertisement emitido anteriormente.
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Define o estado dos filtros de anúncio.
HCI_VS_MSFT_Read_Absolute_RSSI Lê o valor absoluto do RSSI (indicador de intensidade do sinal recebido) de uma conexão BR/EDR do controlador.

Comando e subcomandos de HCI definidos pela Microsoft

O controlador entende que há somente um comando de HCI específico da Microsoft. O conjunto de comandos específicos da Microsoft é estendido usando um opcode. O primeiro parâmetro de comando do comando de HCI definido pela Microsoft é um opcode que especifica o subcomando.

Os controladores devem dar suporte a HCI_VS_MSFT_Read_Supported_Features para dar suporte a quaisquer outros subcomandos de HCI da Microsoft. O suporte para outros comandos é opcional e depende dos valores retornados por HCI_VS_MSFT_Read_Supported_Features. O Windows não envia subcomandos definidos pela Microsoft, a menos que o controlador indique suporte ao subcomando usando uma resposta a HCI_VS_MSFT_Read_Supported_Features.

HCI_VS_MSFT_Read_Supported_Features

HCI_VS_MSFT_Read_Supported_Features fornece um bitmap que descreve para quais recursos definidos pela Microsoft o controlador dá suporte e especifica o prefixo para eventos definidos pela Microsoft que são retornados pelo controlador.

O controlador sempre deve concluir esse comando prontamente com um evento Command Completed.

Comando Código Parâmetros de comando Parâmetros de retorno
HCI_VS_MSFT_Read_Supported_Features Código base escolhido Subcommand_opcode Status,
Subcommand_opcode,
Supported_features,
Microsoft_event_prefix_length,
Microsoft_event_prefix

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x00 O opcode de subcomando para HCI_VS_MSFT_Read_Supported_Features.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
De 0x01 a 0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x00 O opcode de subcomando para HCI_VS_MSFT_Read_Supported_Features.

Supported_features (8 octetos):

Valor Descrição do parâmetro
0x00000000 00000001 O controlador dá suporte ao recurso de monitoramento de RSSI para conexões BR/EDR. Além disso, o controlador tem suporte para HCI_VS_MSFT_Read_Absolute_RSSI para ler a métrica RSSI absoluta de uma conexão BR/EDR.
0x00000000 00000002 O controlador dá suporte ao recurso de monitoramento de RSSI para conexões LE.
0x00000000 00000004 O controlador dá suporte ao monitoramento de RSSI de anúncios LE herdados.
0x00000000 00000008 O controlador dá suporte ao monitoramento de anúncios LE herdados.
0x00000000 00000010 O controlador dá suporte à verificação da validade das coordenadas X e Y públicas na curva durante o processo de emparelhamento Secure Simple para P-192 e P-256.
Para obter mais informações, consulte a Errata 10734 da especificação Bluetooth Core.
0x00000000 00000020 O controlador dá suporte ao monitoramento contínuo de anúncios LE realizados simultaneamente a outras atividades de rádio usando HCI_VS_MSFT_LE_Monitor_Advertisement [v1].
0x00000000 00000040 Reservado.
0x00000000 00000080 O controlador dá suporte ao descarregamento AVDTP e aos comandos HCI_VS_MSFT_Avdtp_* descritos neste documento.
0x00000000 00000100 Reservado.
0x00000000 00000200 Reservado.
0x00000000 00000400 O controlador dá suporte a HCI_VS_MSFT_LE_Monitor_Advertisement [v2]. Além disso, o controlador dá suporte ao monitoramento contínuo de anúncios LE realizados simultaneamente a outras atividades de rádio usando HCI_VS_MSFT_LE_Monitor_Advertisement [v2].
0xFFFFFFFF FFFFFF00 Bits reservados para definição futura. Deve ser zero.

Microsoft_event_prefix_length (1 octeto):

Valor Descrição do parâmetro
De 0x00 a 0x20 Número de bytes no campo de prefixo de evento da Microsoft, conforme especificado no Microsoft_event_prefix retornado. Esse é o número de bytes de informações constantes no início de cada evento de HCI especificado pela Microsoft.

Microsoft_event_prefix (comprimento variável):

Valor Descrição do parâmetro
Valor de prefixo do evento As informações constantes esperadas no início de cada evento definido pela Microsoft. Essas informações são usadas para diferenciar eventos definidos pela Microsoft de outros eventos personalizados.

HCI_VS_MSFT_Monitor_Rssi

HCI_VS_MSFT_Monitor_Rssi solicita que o controlador comece a monitorar o RSSI do link medido de uma conexão especificada e gera um evento quando esse RSSI sai dos limites especificados.

Comando Código Parâmetros de comando Parâmetros de retorno
HCI_VS_MSFT_Monitor_Rssi Código base escolhido Subcommand_opcode,
Connection_Handle,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period
Status,
Subcommand_opcode

O controlador deve notificar o host do valor de RSSI com um evento gerado periodicamente (com base em RSSI_sampling_period). O RSSI do link medido deve ser o valor absoluto da intensidade do sinal do receptor em dBm para a conexão BR/EDR.

Em resposta a um comando HCI_VS_MSFT_Monitor_Rssi, o controlador deverá gerar um evento Command Complete com status igual a zero se puder começar a monitorar ou com status diferente de zero caso contrário. Se o valor do status for diferente de zero, o controlador não deverá gerar um HCI_VS_MSFT_Rssi_Event em resposta a esse comando.

O controlador deverá recusar o comando se outro comando HCI_VS_MSFT_Monitor_Rssi com o mesmo Connection_Handle estiver pendente ou se o identificador de conexão especificado for inválido. O controlador também poderá recusar o comando por outros motivos, como esgotamento de recursos.

Este diagrama de estado mostra os estados de transição no controlador ao monitorar o RSSI de uma conexão.

Diagrama de estado mostrando os estados de transição no controlador ao monitorar o RSSI de uma conexão.

O controlador deve gerar um HCI_VS_MSFT_Rssi_Event quando o RSSI recebido é maior ou igual ao RSSI_threshold_high especificado. Depois que esse evento for gerado, o controlador não deverá gerar um novo HCI_VS_MSFT_Rssi_Event para especificar que o RSSI_threshold_high foi excedido até gerar um HCI_VS_MSFT_Rssi_Event que especifique que o RSSI ficou abaixo de RSSI_threshold_low.

O controlador deverá gerar um HCI_VS_MSFT_Rssi_Event quando o RSSI recebido for igual ou inferior ao RSSI_threshold_low especificado em relação ao RSSI_threshold_low_time_interval especificado. Depois que esse evento for gerado, o controlador não deverá gerar um novo HCI_VS_MSFT_Rssi_Event para especificar que o RSSI ficou abaixo do RSSI_threshold_low até que um evento HCI_VS_MSFT_Rssi_Event seja gerado para especificar que RSSI_threshold_high foi atingido ou excedido.

Se RSSI_sampling_period estiver entre 0x01 e 0xFE, o controlador deverá gerar um HCI_VS_MSFT_Rssi_Event periodicamente a cada RSSI_sampling_period. Esse evento deve conter a média do RSSI calculado ao longo do RSSI_sampling_period. Se RSSI_sampling_period for 0x00 ou 0xFF, o controlador não notificará o host periodicamente com HCI_VS_MSFT_Rssi_Event.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x01 O opcode de subcomando para HCI_VS_MSFT_Monitor_Rssi.

Connection_Handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX O identificador da conexão cujo RSSI deve ser monitorado.

RSSI_threshold_high (1 octeto):

Valor Descrição do parâmetro
0xXX O valor de RSSI máximo esperado. O controlador gera um evento se o RSSI observado se torna maior ou igual a esse valor.
Unidade: dBm
Intervalo BR/EDR: -128 a 127 (inteiro com sinal)
Intervalo LE: -127 a 20 (inteiro com sinal)

RSSI_threshold_low (1 octeto):

Valor Descrição do parâmetro
0xXX O valor de RSSI mínimo esperado. O controlador gera um evento se o RSSI observado se torna menor ou igual a esse valor.
Unidade: dBm
Intervalo BR/EDR obrigatório: -128 a 127 (inteiro com sinal)
Intervalo LE obrigatório: -127 a 20 (inteiro com sinal)

RSSI_threshold_low_time_interval (1 octeto):

Valor Descrição do parâmetro
0x00 Valor reservado.
N = 0xXX O tempo em segundos durante o qual o valor de RSSI deve ficar abaixo de RSSI_threshold_low antes que um HCI_VS_MSFT_Rssi_Event seja gerado.
Período de tempo = N * 1 segundo
Intervalo obrigatório: de 0x01 a 0x3C

RSSI_sampling_period (1 octeto):

Valor Descrição do parâmetro
0x00 Valor reservado.
N = 0xXX O intervalo de amostragem em milissegundos.
Período de tempo = N * 100 milissegundos
Intervalo obrigatório: de 0x01 a 0xFE
0xFF Valor reservado.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
De 0x01 a 0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.
0x07 O controlador deverá retornar Capacidade de Memória Excedida se não tiver memória suficiente para processar o comando.
Código de erro O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x01 O opcode de subcomando para HCI_VS_MSFT_Monitor_Rssi.

Eventos gerados, a menos que sejam mascarados

O controlador deverá gerar um evento Command Complete de imediato quando o comando HCI_VS_MSFT_Monitor_Rssi for recebido. Se o evento Command Complete retornar um status de 0, o controlador deverá gerar um HCI_VS_MSFT_Rssi_Event quando ocorrer uma das condições a seguir.

  • O RSSI observado do dispositivo em relação a RSSI_threshold_low_time_interval se torna igual ou menor do que o valor de RSSI_threshold_low especificado.
  • O RSSI observado do dispositivo se torna maior ou igual ao valor de RSSI_threshold_high especificado.
  • O RSSI_sampling_period é válido e o período de amostragem expira.

O controlador deverá fazer toda a limpeza necessária se a conectividade com o dispositivo especificado for perdida. Nesse caso, um comando HCI_VS_MSFT_Cancel_Monitor_Rssi não será enviado ao controlador.

HCI_VS_MSFT_Cancel_Monitor_Rssi

HCI_VS_MSFT_Cancel_Monitor_Rssi cancela um comando HCI_VS_MSFT_Monitor_Rssi emitido anteriormente. O controlador deve gerar um evento Command Completed de imediato em resposta a esse comando.

Comando Código Parâmetros de comando Parâmetros de retorno
HCI_VS_MSFT_Cancel_Monitor_Rssi Código base escolhido Subcommand_opcode,
Connection_Handle
Status,
Subcommand_opcode

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x02 O opcode de subcomando para HCI_VS_MSFT_Cancel_Monitor_Rssi.

Connection_Handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX O identificador da conexão cujo RSSI deve ser cancelado.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
De 0x01 a 0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x02 O opcode de subcomando para HCI_VS_MSFT_Cancel_Monitor_Rssi.

Eventos gerados, a menos que sejam mascarados

O controlador deve gerar um evento Command Complete quando o comando HCI_VS_MSFT_Cancel_Monitor_RSSI é recebido.

HCI_VS_MSFT_LE_Monitor_Advertisement

HCI_VS_MSFT_LE_Monitor_Advertisement solicita que o controlador comece a monitorar anúncios que se enquadrem no intervalo de RSSI especificado e também satisfaçam a uma das seguintes condições:

  • Um padrão especificado pode ter correspondência com o pacote de anúncio recebido.
  • Um UUID especificado pode ter correspondência com o pacote de anúncio recebido.
  • Uma chave de resolução de identidade (IRK) especificada pode ser usada para resolver o endereço privado do dispositivo do qual se originou o pacote de anúncio.
  • Um endereço Bluetooth especificado pode ter correspondência com o pacote de anúncio recebido.

O comando v2 permite que o Host combine algumas das condições acima com opções que regem a origem do anúncio e o destino de um anúncio direcionado com a finalidade de refinar ainda mais quais anúncios são monitorados. O comando v2 também permite que o Host filtre quais anúncios monitorados fazem com que o Controlador gere relatórios de anúncios.

Comando Código Parâmetros de comando Parâmetros de retorno
HCI_VS_MSFT_LE_Monitor_Advertisement [v2] Código base escolhido Subcommand_opcode_v2,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Monitor_options,
Advertisement_report_filtering_options,
Peer_device_address,
Peer_device_address_type,
Peer_device_IRK,
Condition_type,
<Parâmetros de condição>
Status,
Subcommand_opcode,
Monitor_Handle
HCI_VS_MSFT_LE_Monitor_Advertisement [v1] Código base escolhido Subcommand_opcode_v1,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Condition_type,
<Parâmetros de condição>
Status,
Subcommand_opcode,
Monitor_Handle

O controlador deve gerar um evento Command Complete em resposta a esse comando. O valor de status deve ser definido como zero se o controlador puder começar a monitorar ou como um status diferente de zero caso contrário. Se o controlador não der suporte ao monitoramento de RSSI para anúncios LE, ele deverá ignorar os valores de parâmetro RSSI_threshold_high, RSSI_threshold_low, RSSI_threshold_low_time_interval e RSSI_sampling_period.

Este diagrama de estado mostra os estados de transição no controlador ao monitorar o RSSI de um anúncio.

Diagrama de estado mostrando estados de transição de HCI_VS_MSFT_LE_Monitor_Advertisement.

O controlador deverá começar a monitorar um anúncio somente quando o RSSI recebido for maior ou igual a RSSI_threshold_high para um determinado dispositivo e Monitor_options corresponder (veja abaixo). O controlador deve gerar um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 1 e Monitor_handle definido como o identificador desse Condition para notificar o host de que o controlador está monitorando Condition desse dispositivo específico. Além disso, o Controlador deve propagar o primeiro relatório de anúncio de um anúncio monitorado para o Host somente quando Advertisement_report_filter_options corresponderem (veja abaixo).

Os Monitor_options de um filtro são considerados uma correspondência com base na seguinte lógica (em pseudocódigo):

MatchesCondition = (PDU Matches Condition Parameters)

IsAdvAMatch = ((Monitor_options bit 0 is set) && ((AdvA == Peer_device_address) && (TxAdd == Peer_device_address_type))) ||
    ((Monitor_options bit 1 is set) && (AdvA resolvable with Peer_device_IRK))

IsDirectedAdvAMatch = (TargetA is permitted based on the Scanning Filter Policy) &&
    (((Monitor_options bit 2 is set) && ((AdvA == Peer_device_address) && (TxAdd == Peer_device_address_type))) ||
        ((Monitor_options bit 3 is set) && (AdvA resolvable with Peer_device_IRK)))

IsDirectedTargetAMatch = (Monitor_options bit 4 is set) &&
    (TargetA is permitted based on the Scanning Filter Policy)

MonitorOptionsMatch = (MatchesCondition && IsAdvAMatch) ||
    IsDirectedAdvAMatch ||
    IsDirectedTargetAMatch ||
    ((Monitor_options bit 5 is set) && MatchesCondition)

E, no caso de um anúncio monitorado, os Advertisement_report_filter_options são considerados uma correspondência com base na seguinte lógica (em pseudocódigo):

IsDuplicateFilterSatisfied = (Advertisement_report_filter_options bit 0 is NOT set || PDU is not a duplicate)

ShouldGenerateLegacyReport = (Advertisement_report_filter_options bit 1 is set) &&
    (PDU is Legacy) &&
    MonitorOptionsMatch

ShouldGenerateExtendedReport = (Advertisement_report_filter_options bit 2 is set) &&
    (PDU is Extended) &&
    MonitorOptionsMatch

ShouldGenerateDirectedReport = (Advertisement_report_filter_options bit 3 is set) &&
    (PDU is Directed) &&
    MonitorOptionsMatch

AdvertisementReportFilterOptionsMatch = IsDuplicateFilterSatisfied &&
    (ShouldGenerateLegacyReport || ShouldGenerateExtendedReport || ShouldGenerateDirectedReport)

O controlador deverá parar de monitorar Condition se o RSSI dos anúncios recebidos for igual ou inferior a RSSI_threshold_low em comparação com RSSI_threshold_low_interval do dispositivo específico. O controlador deve gerar um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 0 para notificar o host de que parou de monitorar Condition do dispositivo específico. Depois que o controlador especificar o HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 0, ele não permitirá que outros pacotes de anúncio passem para o host do dispositivo até notificar o host de que o RSSI do dispositivo específico aumentou ou ficou acima de RSSI_threshold_high do dispositivo específico para Condition.

Além disso, o controlador deverá gerar um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 0 para notificar o host de que parou de monitorar Condition do dispositivo se o RSSI_threshold_low_time_interval especificado expirar sem receber pacotes de anúncio do dispositivo. Se o controlador estiver monitorando um dispositivo quanto a uma determinada condição, as instruções a seguir se aplicarão.

Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem, ele deverá propagar pacotes de anúncio anônimos para o host se o valor de RSSI do pacote for maior ou igual a RSSI_threshold_high. Anúncios anônimos não devem ser rastreados e o evento HCI_VS_MSFT_LE_Monitor_Device_Event não deve ser gerado.

Se o controlador der suporte ao monitoramento de RSSI de anúncios LE sem amostragem, ele deverá gerar um relatório de anúncios truncado caso os fragmentos recebidos do anúncio correspondam, mas o anúncio inteiro não foi recebido com sucesso.

O Controlador deve aceitar, no mínimo, 30 Monitor_handles simultâneos, 30 dispositivos rastreados simultâneos e 20 anúncios duplicados rastreados simultâneos. O controlador também deve ser capaz de realizar uma varredura LE contínua quando atingir 10% do ciclo de trabalho.

Se a Resolução de Endereço está habilitada no Controlador e o Host pretende monitorar um dispositivo remoto com sua IRK armazenada com sucesso na lista de resolução do Controlador, o Host deve fornecer os parâmetros Peer_Identity_Address e Peer_Identity_Address_Type da entrada da lista de resolução do dispositivo remoto como os parâmetros Peer_device_address e Peer_device_address_type, respectivamente.

RSSI_sampling_period Anúncios herdados Anúncios estendidos (não anônimos) Anúncios estendidos (anônimos)
0x00 O controlador deve propagar todos os pacotes de anúncio recebidos para o host do dispositivo para esse Condition, a menos que o controlador tenha recebido anteriormente um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x00. O controlador deve propagar um pacote de anúncio para o host mesmo que o RSSI recebido seja menor ou igual a RSSI_threshold_low, desde que RSSI_threshold_low_time_interval do dispositivo específico não tenha expirado para esse Condition. O valor de RSSI desse pacote de anúncio deve ser o valor de RSSI do anúncio recebido. Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem, mesmo comportamento da coluna Anúncios herdados, com exceção de que um pacote de anúncios é definido como todas as PDUs na cadeia de anúncios. Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem, ele deverá propagar todos os pacotes de anúncio recebidos para o host do dispositivo para esse Condition, a menos que ele tenha recebido anteriormente um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x00.
De 0x01 a 0xFE O controlador deve propagar pacotes de anúncios herdados para o host a cada RSSI_sampling_period especificado, a menos que ele tenha recebido anteriormente um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x00. O valor de RSSI especificado para o anúncio deve ser a média do valor de RSSI recebido durante esse intervalo de amostragem. Se o controlador não receber um pacote de anúncio durante o período de amostragem, ele não deverá propagar um anúncio para o host. É possível que RSSI_sampling_period seja menor que RSSI_threshold_low_time_interval e todos os anúncios recebidos durante o RSSI_sampling_period tenham um RSSI abaixo de RSSI_threshold_low. O controlador ainda deve propagar o anúncio com a média do valor de RSSI recebido durante esse intervalo de amostragem. Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem, ele deverá se comportar como se o RSSI_sampling_period fosse 0x00. Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem, ele deverá se comportar como se o RSSI_sampling_period fosse 0x00.
0xFF O controlador não deverá permitir que outros pacotes de anúncio passem para o host do dispositivo para Condition até que tenha notificado o host de que o RSSI do dispositivo específico ficou abaixo de RSSI_threshold_low para RSSI_threshold_low_time_interval do dispositivo específico para esse Condition. Essa notificação é feita gerando um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 0. Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem, mesmo comportamento da coluna Anúncios herdados. Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem, ele deverá se comportar como se o RSSI_sampling_period fosse 0x00.

Se o controlador tiver recebido anteriormente um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x00, o temporizador do período de amostragem não deverá ser interrompido. Para obter mais informações, consulte Exemplo: HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable sobre filtros com período de amostragem. Se o controlador receber pacotes de anúncio não duplicados do mesmo dispositivo, deverá comparar cada pacote com os Conditions armazenados.

Se o controlador receber um pacote de anúncio de um dispositivo que corresponda a vários Conditions, ele deverá gerar um HCI_VS_MSFT_LE_Monitor_Device_Event para cada Condition correspondente, com Monitor_handle definido como o Condition correspondente.

Se o controlador não conseguir monitorar os valores de RSSI de todos os dispositivos no intervalo que correspondem a Condition, ele continuará monitorando o maior número possível de dispositivos. A decisão sobre quais dispositivos devem ser monitorados dependerá dos valores de RSSI dos anúncios recebidos. O controlador deve monitorar os dispositivos com a maior intensidade do sinal recebido.

Se o controlador tiver notificado o host sobre um dispositivo específico (A) e se estiver monitorando os dispositivos na capacidade máxima de hardware, e ainda se outro dispositivo (B) aparecer no intervalo com um valor de RSSI mais alto, ele deverá notificar o host de que parou de monitorar o dispositivo (A) gerando um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 0. O controlador também deverá gerar um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 1 para notificar o host de que o dispositivo (B) está sendo monitorado.

Tipo de condição e parâmetros de condição

O parâmetro Condition_type especifica se o parâmetro Condition especifica um padrão, UUID, IRK ou BD_ADDR.

Se o parâmetro Condition_type especificar um padrão, Condition conterá duas seções com o número de padrões presentes em Condition e os dados do padrão.

Diagrama ilustrando o layout de dados da condição de padrão para HCI_VS_MSFT_LE_Monitor_Advertisement.

Number of Patterns especifica o número de padrões que precisam ser correspondidos.

Pattern Data tem o formato a seguir.

  • Length especifica o comprimento desse padrão e inclui o tipo de dados e o byte inicial do padrão.
  • AD Type especifica o campo AD Type.
  • Start of Pattern especifica a posição do byte inicial do padrão logo após AD Type.
  • Pattern tem um tamanho de (Length - 0x2) e é o padrão a ser correspondido para o AD Type especificado no pacote de anúncio do byte inicial especificado.

Se houver vários padrões especificados, o controlador deverá garantir que pelo menos um deles corresponda ao anúncio recebido.

Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem:

  • O controlador deverá procurar o padrão nos primeiros 251 octetos de Host Advertising Data e poderá procurar em quaisquer octetos restantes de Host Advertising Data. Se a seção AD se estender além dos primeiros 251 octetos de Host Advertising Data, o controlador deverá procurar o padrão na parte da seção AD que está nos primeiros 251 octetos de Host Advertising Data e poderá procurar em quaisquer desses octetos restantes. Observação: com base na fragmentação do anunciante, os primeiros 251 octetos de Host Advertising Data podem se estender pelos AdvData de várias PDUs de anúncio. Os scanners devem ter o cuidado de limitar o número de AuxPtrs que seguem, para evitar seguir cadeias de PDUs excessivamente longas.

  • O controlador deve rastrear com base em um endereço por dispositivo por conjunto de anúncios. O controlador deve propagar um HCI_VS_MSFT_LE_Monitor_Device_Event para cada conjunto de anúncios que corresponda ao padrão, mesmo que o anúncio venha do mesmo endereço do dispositivo.

Se o parâmetro Condition_type especificar um UUID, o parâmetro Condition conterá um UUID Type e um UUID. O UUID Type especifica se o UUID é de 16 bits, 32 bits ou 128 bits. O controlador deve analisar o Service UUID do pacote de anúncio para verificar o UUID especificado. Se UUID Type for definido como 0x01, o controlador deverá analisar a lista incompleta de UUIDs de serviço de 16 bits e a lista completa de UUIDs de serviço de 16 bits especificados no AD Type Service UUID. Se UUID Type for definido como 0x02, o controlador deverá analisar a lista incompleta de UUIDs de serviço de 32 bits e a lista completa de UUIDs de serviço de 32 bits especificados no AD Type Service UUID. Se UUID Type especificado for 0x03, o controlador deverá analisar a lista incompleta de Service UUIDs de 128 bits e a lista completa de Service UUIDs de 128 bits especificados no AD Type Service UUID.

Se o controlador der suporte ao monitoramento de RSSI de anúncios estendidos LE sem amostragem:

  • O controlador deverá procurar o Service UUID nos primeiros 251 octetos de Host Advertising Data e poderá procurar em quaisquer octetos restantes de Host Advertising Data. Se a seção AD se estender além dos primeiros 251 octetos de Host Advertising Data, o controlador deverá procurar o Service UUID na parte da seção AD que está nos primeiros 251 octetos de Host Advertising Data e poderá procurar em quaisquer desses octetos restantes. Observação: com base na fragmentação do anunciante, os primeiros 251 octetos de Host Advertising Data podem abranger os AdvData de várias PDUs de anúncio. Os scanners devem ter o cuidado de limitar o número de AuxPtrs que seguem, para evitar seguir cadeias de PDUs excessivamente longas.

  • O controlador deve rastrear com base em um endereço por dispositivo por conjunto de anúncios. O controlador deve propagar um HCI_VS_MSFT_LE_Monitor_Device_Event para cada conjunto de anúncios que corresponda a Service UUID, mesmo que o anúncio venha do mesmo dispositivo.

Se o parâmetro Condition_type especificar uma IRK, o parâmetro Condition conterá a IRK.

Se o parâmetro Condition_type especificar um Bluetooth Address, o parâmetro Condition conterá o tipo de endereço e BD_ADDR.

O controlador deverá continuar monitorando com base nas condições, mesmo quando a varredura (ativa ou passiva) estiver habilitada. Quando a varredura ativa está habilitada, a resposta de varredura de um anúncio que corresponde a um filtro deve ser propagada para o host.

Se o controlador receber um comando HCI_VS_MSFT_LE_Monitor_Advertisement quando os filtros estiverem desabilitados (devido a um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable recebido anteriormente com Enable definido como 0x00), ele deverá aceitar o comando se puder, mas defini-lo para um estado desabilitado. O controlador também poderá recusar o comando por outros motivos, como esgotamento de recursos.

Se todos os bits de Monitor_options estiverem limpos, o Controlador deverá retornar o código de erro Parâmetros de Comando de HCI Inválidos (0x12).

Se o bit 1 ou o bit 3 de Monitor_options estiver definido e Peer_device_IRK estiver definido como uma IRK inválida ou se nenhum dos bits de Monitor_options estiver definido, o Controlador deverá retornar o código de erro Parâmetros de Comando de HCI Inválidos (0x12).

Se o bit 0 ou o bit 1 ou o bit 2 ou o bit 3 de Monitor_options estiver definido e Condition_type estiver definido como 0x03 ou 0x04, o Controlador deverá retornar o código de erro Parâmetros de Comando de HCI Inválidos (0x12).

Se o bit 0 de Advertisement_report_filter_options estiver definido e RSSI_sampling_period for qualquer valor diferente de 0x00, o Controlador deverá retornar o código de erro Parâmetros de Comando de HCI Inválidos (0x12).

Parâmetros ausentes

Quando é emitida uma versão desse comando que não inclui todos os parâmetros, use o seguinte:

Parâmetro Valor
Monitor_options Bit 5 definido; todos os outros bits limpos
Advertisement_report_filter_options Bits 1 e 2 definidos; todos os outros bits limpos
Peer_device_IRK 0x0000000000000000 0000000000000000
Peer_device_address 0x000000000000
Peer_device_address_type 0x00

Command_parameters

Subcommand_opcode_v1 (1 octeto):

Valor Descrição do parâmetro
0x03 O opcode de subcomando para HCI_VS_MSFT_LE_Monitor_Advertisement [v1].

Subcommand_opcode_v2 (1 octeto):

Valor Descrição do parâmetro
0x0F O opcode de subcomando para HCI_VS_MSFT_LE_Monitor_Advertisement [v2].

RSSI_threshold_high (1 octeto):

Valor Descrição do parâmetro
0xXX O valor de RSSI máximo esperado. O controlador gera um evento se o RSSI observado se torna maior ou igual a esse valor.
Unidade: dBm
Intervalo obrigatório: -127 a 20 (inteiro com sinal)

RSSI_threshold_low (1 octeto):

Valor Descrição do parâmetro
0xXX O valor de RSSI mínimo esperado. O controlador gera um evento se o RSSI observado se torna menor ou igual a esse valor.
Unidade: dBm
Intervalo obrigatório: -127 a 20 (inteiro com sinal)

RSSI_threshold_low_time_interval (1 octeto):

Valor Descrição do parâmetro
0x00 Valor reservado.
N = 0xXX O tempo em segundos durante o qual o valor de RSSI deve ficar abaixo de RSSI_threshold_low antes que um HCI_VS_MSFT_Rssi_Event seja gerado.
Período de tempo = N * 1 segundo
Intervalo obrigatório: de 0x01 a 0x3C.

RSSI_sampling_period (1 octeto):

Valor Descrição do parâmetro
0x00 O controlador deve propagar todos os anúncios recebidos para o host.
N = 0xXX O intervalo de amostragem em milissegundos.
Período de tempo = N * 100 milissegundos.
Intervalo obrigatório: de 0x01 a 0xFE
0xFF O controlador não deve propagar nenhum dos anúncios recebidos para o host.

Monitor_options (1 octeto):

Número do bit Descrição do parâmetro
0 O Controlador deve monitorar PDUs de anúncio em que AdvA ou seu Endereço de Identidade resolvido corresponde a Peer_device_address e a Peer_device_address_type e em que TargetA não está presente ou, se estiver presente, TargetA é permitido com base na Política de Filtro de Varredura, se essas PDUs corresponderem à condição especificada em Condition_Type.
1 O Controlador deve monitorar PDUs de anúncio em que AdvA é resolvível com Peer_device_IRK e em que TargetA não esteja presente ou, se estiver presente, TargetA seja permitido com base na Política de Filtro de Varredura, se essas PDUs corresponderem à condição especificada em Condition_Type. Esse bit não deverá ser definido se a Privacidade da Camada de Link estiver em uso no Controlador.
2 O Controlador deve monitorar PDUs de anúncio direcionado em que TargetA é permitido com base na Política de Filtro de Varredura e em que AdvA ou seu Endereço de Identidade resolvido corresponde a Peer_device_address e a Peer_device_address_type. Isso ocorre independentemente de a PDU corresponder à condição especificada em Condition_Type.
3 O Controlador deve monitorar PDUs de anúncio direcionado em que TargetA é permitido com base na Política de Filtro de Varredura e em que AdvA é solucionável com Peer_device_IRK. Isso ocorre independentemente de a PDU corresponder à condição especificada em Condition_Type. Esse bit não deverá ser definido se a Privacidade da Camada de Link estiver em uso no Controlador.
4 O Controlador deve monitorar PDUs de anúncio direcionado em que TargetA é permitido com base na Política de Filtro de Varredura, independentemente do valor de Peer_device_address e de Peer_device_address_type ou de Peer_device_IRK e independentemente de a PDU corresponder à condição especificada em Condition_Type.
5 O Controlador deve monitorar as PDUs de anúncio de qualquer AdvA em que TargetA não esteja presente ou, se estiver presente, TargetA seja permitido com base na Política de Filtro de Varredura, se essas PDUs corresponderem às condições especificadas em Condition_Type.
Todos os outros bits Reservado para uso futuro

Advertisement_report_filtering_options (1 octeto):

Número do bit Descrição do parâmetro
0 Filtre PDUs de anúncio duplicadas. Esse bit só deverá ser definido se RSSI_sampling_period for 0x00.
1 O Controlador deverá gerar eventos HCI_LE_Advertising_Report, HCI_LE_Directed_Advertising_Report ou HCI_LE_Extended_Advertising_Report para PDUs de anúncios herdados, se essas PDUs corresponderem a Monitor_options especificado.
2 O Controlador deverá gerar eventos HCI_LE_Extended_Advertising_Report para PDUs de anúncio estendido, se essas PDUs corresponderem a Monitor_options especificado.
3 O Controlador deverá gerar eventos HCI_LE_Advertising_Report, HCI_LE_Directed_Advertising_Report ou HCI_LE_Extended_Advertising_Report para PDUs de anúncios direcionados, se essas PDUs corresponderem a Monitor_options especificado.
Todos os outros bits Reservado para uso futuro

Peer_device_address (6 octetos):

Valor Descrição do parâmetro
0xXXXXXXXXXXXX Endereço de dispositivo público ou endereço de dispositivo aleatório para correspondência.

Peer_device_address_type (1 octeto):

Valor Descrição do parâmetro
0x00 Endereço de dispositivo público
0x01 Endereço de dispositivo aleatório
Todos os outros valores Reservado para uso futuro

Peer_device_IRK (16 octetos):

Valor Descrição do parâmetro
0x0000000000000000 0000000000000000 IRK inválido. Não deve ser o valor quando o bit 1 de Monitor_options está definido ou quando o bit 3 de Monitor_options está definido.
0xXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX IRK do dispositivo para correspondência. Peer_device_address e Peer_device_address_type devem ser preenchidos.

Condition_type (1 octeto):

Valor Descrição do parâmetro
0x01 A condição é um padrão que deve ser correspondido no anúncio.
0x02 A condição é um UUID Type e um UUID.
0x03 A condição é a resolução de uma IRK. Excluído se qualquer um dos bits 0, 1, 2 ou 3 de Monitor_options estiver definido.
0x04 A condição é um tipo de endereço Bluetooth e um endereço Bluetooth. Excluído se qualquer um dos bits 0, 1, 2 ou 3 de Monitor_options estiver definido.

Condição: os campos aplicáveis para Condition dependem do valor de Condition_type. Consulte a seção Condition_type e parâmetros de condição para obter mais informações.

Number_of_patterns (1 octeto):

Valor Descrição do parâmetro
0xXX O número de padrões especificados no parâmetro Pattern_data.

Pattern_data (>3 octetos):

Valor Descrição do parâmetro
Length Comprimento desse padrão.
Tipo de dados Tipo de dados da seção de anúncios. Os valores estão listados no documento Bluetooth Assigned Numbers.
Byte inicial Posição inicial do padrão a ser correspondida para o tipo de dados especificado.
Padrão Padrão a ser correspondido (tamanho de Length – 0x2 bytes).

UUID_type (1 octeto):

Valor Descrição do parâmetro
0x01 O UUID é um serviço de 16 bits.
0x02 O UUID é um serviço de 32 bits.
0x03 O UUID é um serviço de 128 bits.

UUID (2, 4 ou 16 octetos):

Valor Descrição do parâmetro
0xXXXX 2 bytes se UUID_type for 0x01.
4 bytes se UUID_type for 0x02.
16 bytes se UUID_type for 0x03.

IRK (16 octetos):

Valor Descrição do parâmetro
0xXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX A IRK a ser usada para resolver o endereço privado.

Address_type (1 octeto):

Valor Descrição do parâmetro
0x00 Endereço de dispositivo público.
0x01 Endereço de dispositivo aleatório.
De 0x02 a 0xFF Valores reservados para uso futuro.

BD_ADDR (6 octetos):

Valor Descrição do parâmetro
0xXXXXXXXXXXXX O endereço Bluetooth do dispositivo a ser monitorado.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x07 O controlador deverá retornar Capacidade de Memória Excedida se não tiver memória suficiente para processar o comando.
Código do erro O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x03 ou 0x0F O opcode de subcomando para HCI_VS_MSFT_LE_Monitor_Advertisement [v1] ou HCI_VS_MSFT_LE_Monitor_Advertisement [v2], dependendo de qual comando foi enviado.

Monitor_handle (1 octeto):

Valor Descrição do parâmetro
De 0x00 a 0xFF O identificador para esta regra. Esse identificador é usado como parâmetro para HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement para cancelar o monitoramento do anúncio.
Esse parâmetro só será válido se Status for 0x00.

Eventos gerados, a menos que sejam mascarados

Quando o comando HCI_VS_MSFT_LE_Monitor_Advertisement for recebido, o controlador deverá gerar um evento Command Complete.

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement cancela um comando HCI_VS_MSFT_LE_Monitor_Advertisement emitido anteriormente.

Comando Código Parâmetros de comando Parâmetros de retorno
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Código base escolhido Subcommand_opcode,
Monitor_handle
Status,
Subcommand_opcode

O controlador deve gerar um evento Command Completed de imediato em resposta a esse comando.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x04 O opcode de subcomando para HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Connection_Handle (1 octeto):

Valor Descrição do parâmetro
0xXX O identificador para o filtro que está sendo cancelado.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x07 O controlador deverá retornar Capacidade de Memória Excedida se não tiver memória suficiente para processar o comando.
Código do erro O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x04 O opcode de subcomando para HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Eventos gerados, a menos que sejam mascarados

O controlador deverá gerar um evento Command Complete quando o comando HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement for recebido.

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable define o estado dos filtros de anúncio.

Comando Código Parâmetros de comando Parâmetros de retorno
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Código base escolhido Subcommand_opcode,
Habilitar
Status,
Subcommand_opcode

Se Enable estiver definido como 0x00, o controlador deverá propagar os anúncios recebidos para o host com base nas configurações existentes da lista de aceitação de filtros. O controlador deverá continuar monitorando os dispositivos que estão sendo monitorados no momento e gerar um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 0 se o dispositivo não estiver mais sendo monitorado. O controlador deverá gerar um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 1 se um novo dispositivo estiver sendo monitorado. O host pode emitir HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x01 para reativar todas as condições de filtro.

Se Enable estiver definido como 0x01, esse comando habilitará todos os filtros que foram definidos com um comando HCI_VS_MSFT_LE_Monitor_Advertisement emitido anteriormente. O controlador deverá rejeitar um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable se não alternar o estado do filtro:

  • O controlador deverá rejeitar um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x01 se tiver recebido anteriormente um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x01.
  • O controlador deverá rejeitar o comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x00 se tiver recebido anteriormente um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x00.

O estado padrão do filtro de anúncio deve ser desativado. Esse estado é equivalente ao controlador que anteriormente recebeu um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido como 0x00. O controlador deve gerar um evento Command Completed de imediato em resposta a esse comando.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x05 O opcode de subcomando para HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Enable (1 octeto):

Valor Descrição do parâmetro
0x00 Reverta para o comportamento atual da lista de aceitação de filtros, mas continue monitorando os dispositivos com base no parâmetro Condition de comandos HCI_VS_MSFT_LE_Monitor_Advertisement.
0x01 Habilite todos os comandos HCI_VS_MSFT_LE_Monitor_Advertisement emitidos no controlador.

Return_parameter

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x0C O controlador deverá retornar Command Disallowed se rejeitou o comando por ter visto anteriormente um comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable com Enable definido com o mesmo valor desse comando.
Código do erro O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x05 O opcode de subcomando para HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Eventos gerados, a menos que sejam mascarados

O controlador deverá gerar um evento Command Complete quando o comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable for recebido.

HCI_VS_MSFT_Read_Absolute_RSSI

HCI_VS_MSFT_Read_Absolute_RSSI lê o valor absoluto do indicador de intensidade do sinal recebido (RSSI) de uma conexão BR/EDR do controlador.

Comando Código Parâmetros de comando Parâmetros de retorno
HCI_VS_MSFT_Read_Absolute_RSSI Código base escolhido Subcommand_opcode,
Connection_Handle
Status,
Subcommand_opcode,
Connection_Handle,
RSSI

Um identificador de conexão é fornecido como um comando e como parâmetro de retorno para identificar a conexão ACL cujo RSSI está sendo lido. A métrica RSSI é a intensidade de sinal absoluta do receptor em dBm com precisão de ± 6 dB. Se não for possível ler o RSSI, a métrica de RSSI deverá ser definida como 127. O controlador sempre deve concluir esse comando prontamente com um evento Command Completed.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x06 O opcode de subcomando para HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX O identificador da conexão BR/EDR cujo RSSI deve ser lido.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
De 0x01 a 0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x06 O opcode de subcomando para HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX O identificador da conexão BR/EDR cujo RSSI foi lido.

RSSI (1 octeto):

Valor Descrição do parâmetro
N = 0xXX O valor de RSSI da conexão BR/EDR.
Unidade: dBm
Intervalo obrigatório: -128 a 127 (inteiro com sinal)

Eventos gerados, a menos que sejam mascarados

O controlador deverá gerar um evento Command Complete quando o comando HCI_VS_MSFT_Read_Absolute_RSSI for concluído.

Eventos de HCI Bluetooth definidos pela Microsoft

Todos os eventos de HCI Bluetooth definidos pela Microsoft são eventos definidos pelo fornecedor e usam o código de evento 0xFF. Os dados de evento referentes a eventos da Microsoft sempre começam com uma cadeia de caracteres constante de bytes para diferenciar os eventos definidos pela Microsoft de outros eventos definidos pelo fornecedor. O comprimento e o valor da cadeia de caracteres constante são definidos pelo implementador do controlador e retornados em resposta a HCI_VS_MSFT_Read_Supported_Features.

Evento HCI Descrição
HCI_VS_MSFT_Rssi_Event HCI_VS_MSFT_RSSI_Event indica que um comando HCI_VS_MSFT_Monitor_Rssi foi concluído.
HCI_VS_MSFT_LE_Monitor_Device_Event HCI_VS_MSFT_LE_Monitor_Device_Event indica que o controlador começou ou parou de monitorar um dispositivo Bluetooth LE.

HCI_VS_MSFT_RSSI_Event

HCI_VS_MSFT_RSSI_Event indica que um comando HCI_VS_MSFT_Monitor_Rssi foi concluído. Se o parâmetro Status for zero, o comando será concluído porque o valor de RSSI do dispositivo remoto foi alterado para um valor fora do intervalo especificado. Se o parâmetro Status for diferente de zero, o comando será concluído porque o valor de RSSI da conexão não pode mais ser monitorado.

Evento Código do Evento Código de evento da Microsoft Parâmetros de evento
HCI_VS_MSFT_RSSI_Event 0xFF 0x01 Event_prefix,
Microsoft_event_code,
Status,
Connection_Handle,
RSSI

Event_parameters

Event_prefix (tamanho variável):

Valor Descrição do parâmetro
Prefixo de evento O prefixo de evento que sinaliza esse evento como sendo definido pela Microsoft. O tamanho e o valor são retornados pelo comando HCI_VS_MSFT_Read_Supported_Features.

Microsoft_event_code (1 octeto):

Valor Descrição do parâmetro
0x01 O código de evento para HCI_VS_MSFT_RSSI_Event.

Status (1 octeto):

Valor Descrição do parâmetro
0x00 Êxito. O valor de RSSI da conexão atendeu a uma das condições a seguir. O RSSI atingiu ou ultrapassou RSSI_threshold_high.
O RSSI atingiu ou ficou abaixo de RSSI_threshold_low comparação a RSSI_threshold_low_time_interval de segundos.
O RSSI_sampling_period expirou e esse evento foi gerado para notificar o host sobre o valor de RSSI.
De 0x01 a 0xFF Falha. Não é mais possível monitorar o valor de RSSI da conexão. O código de erro geralmente é um dos códigos que descreve por que a conexão ACL subjacente foi perdida.

Connection_Handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX O identificador da conexão cujo RSSI deve ser monitorado.

RSSI (1 octeto):

Valor Descrição do parâmetro
0xXX O valor de RSSI do link medido da conexão.
Unidade: dBm
Intervalo BR/EDR: -128 a 127 (inteiro com sinal)
Intervalo LE: -127 a 20 (inteiro com sinal)

HCI_VS_MSFT_LE_Monitor_Device_Event

HCI_VS_MSFT_LE_Monitor_Device_Event indica que o controlador começou ou parou de monitorar um dispositivo Bluetooth LE.

Se o valor do parâmetro Monitor_state for 1, o controlador começou a monitorar o dispositivo Bluetooth com o BD_ADDR especificado. Se o valor do parâmetro Monitor_state for 0, o controlador parou de monitorar o dispositivo Bluetooth com o BD_ADDR especificado.

Evento Código do Evento Código de evento da Microsoft Parâmetros de evento
HCI_VS_MSFT_LE_Monitor_Device_Event 0xFF 0x02 Event_prefix,
Microsoft_event_code,
Address_type,
BD_ADDR,
Monitor_handle,
Monitor_state

O controlador não deverá gerar um HCI_VS_MSFT_LE_Monitor_Device_Event com o parâmetro Monitor_state definido como 0 se ainda não tiver gerado um HCI_VS_MSFT_LE_Monitor_Device_Event com Monitor_state definido como 1.

Event_parameters

Event_prefix (tamanho variável):

Valor Descrição do parâmetro
Prefixo de evento O prefixo de evento que sinaliza esse evento como sendo definido pela Microsoft. O tamanho e o valor são retornados pelo comando HCI_VS_MSFT_Read_Supported_Features.

Microsoft_event_code (1 octeto):

Valor Descrição do parâmetro
0x02 O código de evento para HCI_VS_MSFT_LE_Monitor_Device_Event.

Address_type (1 octeto):

Valor Descrição do parâmetro
0x00 Endereço de dispositivo público.
0x01 Endereço de dispositivo aleatório.
De 0x02 a 0xFF Valores reservados para uso futuro.

BD_ADDR (6 octetos):

Valor Descrição do parâmetro
0xXXXXXXXXXXXX O endereço Bluetooth do dispositivo.

Monitor_handle (1 octeto):

Valor Descrição do parâmetro
0xXX O identificador do filtro que foi especificado para o comando HCI_VS_MSFT_LE_Monitor_Advertisement.

Monitor_state (1 octeto):

Valor Descrição do parâmetro
0x00 O controlador parou de monitorar o dispositivo especificado por BD_ADDR e Monitor_handle.
0x01 O controlador começou a monitorar o dispositivo especificado por BD_ADDR e Monitor_handle.

Comandos de HCI AVDTP definidos pela Microsoft

Os comandos de HCI AVDTP a seguir dão suporte para o descarregamento A2DP de banda lateral de áudio. Para obter mais informações, consulte Descarregamento A2DP de banda lateral de áudio.

Comandos de HCI AVDTP Descrição
HCI_VS_MSFT_Avdtp_Capabilities_Configuration Configura a interface de transporte de áudio e retorna recursos de codec do controlador Bluetooth, que é uma lista de blocos de informações de codec.
HCI_VS_MSFT_Avdtp_Open Aloca e configura recursos de descarregamento AVDTP no controlador.
HCI_VS_MSFT_Avdtp_Start Inicia o streaming de áudio do transporte de áudio para pacotes de mídia AVDTP transmitidos.
HCI_VS_MSFT_Avdtp_Suspend Interrompe a atividade de streaming iniciada por HCI_VS_MSFT_Avdtp_Start.
HCI_VS_MSFT_Avdtp_Close Libera os recursos de descarregamento AVDTP alocados por HCI_VS_MSFT_Avdtp_Open.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

HCI_VS_MSFT_Avdtp_Capabilities_Configuration configura a interface de transporte de áudio e retorna os recursos de codec do controlador Bluetooth, que é uma lista de blocos de informações de codec. Cada bloco de informações do codec descreve um codec com suporte.

Alguns dos parâmetros abaixo são matrizes de estruturas com comprimento variável, por isso se presume que todos esses parâmetros ainda se encaixarão em um comando de HCI e em um evento de HCI correspondente.

Command_parameters

External_codec_count (1 octeto):

Valor Descrição do parâmetro
0x00-0xFF A contagem de blocos de Codec_capability que se seguem.

External_codec_capability (comprimento variável):

Valor Descrição do parâmetro
Bloco de recursos de codec Um bloco de informações de recursos de codec, conforme descrito nas informações de recursos de codec. Isso descreve um único codec compatível com o dispositivo conectado à interface de áudio.

Essa estrutura de dados se repete External_codec_count vezes.

Audio_interface_parameter_count (1 octeto):

Valor Descrição do parâmetro
0x00-0xFF A contagem de Audio_interface_parameters que se seguem.

Audio_interface_parameter (comprimento variável)

Valor Descrição do parâmetro
Parâmetro da interface de áudio Um parâmetro da interface de áudio conforme descrito acima, definido pelo dispositivo conectado à interface de áudio.

Essa estrutura de dados se repete Audio_interface_parameter_count vezes.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x01-0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode _ (1 octeto):

Valor Descrição do parâmetro
0x07 O opcode de subcomando para HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Internal_codec_count (1 octeto):

Valor Descrição do parâmetro
0x00-0xFF A contagem de blocos de Internal_codec_capability que se seguem.

Internal_codec_capability (comprimento variável):

Valor Descrição do parâmetro
Bloco de recursos de codec Um bloco de informações de recursos de codec, conforme descrito em Descarregamento A2DP de banda lateral de áudio. Isso descreve um único codec suportado pelo controlador Bluetooth.

Essa estrutura de dados se repete Internal_codec_count vezes.

Audio_interface_parameter_count (1 octeto):

Valor Descrição do parâmetro
0x00-0xFF A contagem de Audio_interface_parameters que se seguem.

Audio_interface_parameter (comprimento variável)

Valor Descrição do parâmetro
Parâmetro da interface de áudio Um parâmetro da interface de áudio, conforme descrito acima. O software host passa esse parâmetro para o dispositivo conectado à interface de áudio.

Essa estrutura de dados se repete Audio_interface_parameter_count vezes.

HCI_VS_MSFT_Avdtp_Open

Aloca e configura recursos de descarregamento AVDTP no controlador.

Alguns dos parâmetros abaixo são matrizes de estruturas com comprimento variável, por isso se presume que todos esses parâmetros ainda se encaixarão em um comando de HCI e em um evento de HCI correspondente.

Command_parameters

Connection_handle (2 octetos)

Valor Descrição do parâmetro
0xXXXX Identifica o canal L2CAP de mídia AVDTP conectado ao dispositivo remoto.

L2cap_destination_cid (2 octetos)

Valor Descrição do parâmetro
0xXXXX CID de destino L2CAP do canal de mídia AVDTP

L2cap_mtu (2 octetos)

Valor Descrição do parâmetro
0xXXXX MTU do canal de mídia L2CAP AVDTP

Configured_codec_capability (comprimento variável):

Valor Descrição do parâmetro
Bloco de recursos de codec Um bloco de informações de recursos de codec, conforme descrito em Descarregamento A2DP de banda lateral de áudio. Isso descreve o codec configurado para a mídia AVDTP.

Audio_interface_parameter_count (1 octeto):

Valor Descrição do parâmetro
0x00-0xFF A contagem de Audio_interface_parameters que se seguem.

Audio_interface_parameter (comprimento variável)

Valor Descrição do parâmetro
Parâmetro da interface de áudio Um parâmetro da interface de áudio, conforme descrito acima. O dispositivo conectado à interface de áudio especifica esses parâmetros para uma instância de fluxo específica.

Essa estrutura de dados se repete Audio_interface_parameter_count vezes.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x01-0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x08 O opcode de subcomando para HCI_VS_MSFT_Avdtp_Open.

Avdtp_offload_handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX Identifica o recurso alocado para o fluxo descarregado.

Audio_interface_parameter_count (1 octeto):

Valor Descrição do parâmetro
0x00-0xFF A contagem de Audio_interface_parameters que se seguem.

Audio_interface_parameter (comprimento variável)

Valor Descrição do parâmetro
Parâmetro da interface de áudio Um parâmetro da interface de áudio, conforme descrito acima. O software host passa esse parâmetro para o dispositivo conectado à interface de áudio para a instância de fluxo.

Essa estrutura de dados se repete Audio_interface_parameter_count vezes.

HCI_VS_MSFT_Avdtp_Start

Esse comando inicia o streaming de áudio do transporte de áudio para os pacotes de mídia AVDTP transmitidos. Ao executar esse comando, o controlador Bluetooth inicia a atividade a seguir.

  • Recebe dados de áudio do transporte de áudio
  • Se o codificador estiver no controlador Bluetooth, codifica os dados recebidos do transporte de áudio para produzir quadros codificados
  • Se o codificador estiver no DSP de áudio, extrairá quadros codificados do transporte de áudio
  • Monta quadros codificados em cargas de mídia AVDTP
  • Constrói e transmite pacotes de mídia AVDTP contendo as cargas de mídia

Command_parameters

Avdtp_offload_handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX Identifica o recurso alocado para o fluxo descarregado.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x01-0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x09 O opcode de subcomando para HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Interrompe a atividade de streaming iniciada por HCI_VS_MSFT_Avdtp_Start.

Command_parameters

Avdtp_offload_handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX Identifica o recurso alocado para o fluxo descarregado

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x01-0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x0A O opcode de subcomando para HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Libera os recursos de descarregamento AVDTP alocados por HCI_VS_MSFT_Avdtp_Open.

Command_parameters

Avdtp_offload_handle (2 octetos):

Valor Descrição do parâmetro
0xXXXX Observação: esse valor não é mais válido após a conclusão desse comando.

Return_parameters

Status (1 octeto):

Valor Descrição do parâmetro
0x00 O comando foi bem-sucedido.
0x01-0xFF O comando falhou. Para obter os detalhes, consulte Códigos de erro na especificação Bluetooth Core.

Subcommand_opcode (1 octeto):

Valor Descrição do parâmetro
0x0B O opcode de subcomando para HCI_VS_MSFT_Avdtp_Close.
Valor Descrição do parâmetro
0x00
0x01 O controlador começou a monitorar o dispositivo especificado por BD_ADDR e Monitor_handle.

Apêndice

Esta seção contém exemplos e diagramas de extensão de HCI Bluetooth definidos pela Microsoft.

Exemplo: Padrões correspondentes para HCI_VS_MSFT_LE_Monitor_Advertisement

Este exemplo mostra um comando HCI_VS_MSFT_LE_Monitor_Advertisement recebido e as avaliações de três pacotes de anúncio diferentes em relação aos parâmetros do comando.

Comando HCI_VS_MSFT_LE_Monitor_Advertisement Um comando HCI_VS_MSFT_LE_Monitor_Advertisement é recebido pelo controlador e contém os parâmetros a seguir.

Parâmetro Valor Observações
Subcommand_opcode 0x03 Opcode de subcomando para HCI_VS_MSFT_LE_Monitor_Advertisement.
RSSI_threshold_high 0x01 1dB
RSSI_threshold_low 0xCE -50dB
RSSI_threshold_low_time_interval 0x05 5 segundos
RSSI_sampling_period 0xFF Sem amostragem
Condition_type 0x01 Condição
Condição 0x02 Dois padrões devem corresponder
0x03 Comprimento do primeiro padrão, incluindo AD Type e posição inicial
0x01 AD Type
0x00 Posição inicial após AD Type
0x01 Primeiro padrão a ser correspondido
0x06 Comprimento do segundo padrão, incluindo AD Type e posição inicial
0xFF AD Type (dados específicos do fabricante)
0x00 Posição inicial após AD Type
0x00 Segundo padrão a ser correspondido
0x06
0xFF
0xFF

O controlador então recebe os pacotes de anúncio a seguir.

  • Pacote de anúncio [A]

    0x02 0x01 0x01 0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x05 0xFF 0x00 0x06 0xFF 0xFF

  • Pacote de anúncio [B]

    0x02 0x01 0x01 0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x04 0xFF 0x00 0x06 0xFF

  • Pacote de anúncio [C]

    0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x05 0xFF 0x00 0x06 0xFF 0xFF

  • Pacote de anúncio [D]

    0x02 0x01 0x02 0x05 0xFF 0x00 0x06 0xFF 0x01

Avaliando a correspondência para o pacote de anúncio [A]

Descrição Valor
AD Type do primeiro padrão a ser correspondido 0x01
Comprimento do primeiro padrão a ser correspondido 0x03 - 0x02 = 0x01 byte
Padrão a ser correspondido na posição 0x00 para AD Type 0x01 0x01
Bytes na posição 0x00 para o AD Type 0x01 0x01 (CORRESPONDÊNCIA!)
AD Type do segundo padrão a ser correspondido 0xFF (Dados específicos do fabricante)
Comprimento do segundo padrão a ser correspondido 0x06 - 0x02 = 0x04 bytes
Padrão a ser correspondido na posição 0x00 para AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes na posição 0x00 para o AD Type 0xFF 0x00 0x06 0xFF 0xFF (CORRESPONDÊNCIA!)

Veredito: APROVAÇÃO (ambos os padrões correspondem)

Avaliando a correspondência para o pacote de anúncio [B]

Descrição Valor
AD Type do primeiro padrão a ser correspondido 0x01
Comprimento do primeiro padrão a ser correspondido 0x03 - 0x02 = 0x01 byte
Padrão a ser correspondido na posição 0x00 para AD Type 0x01 0x01
Bytes na posição 0x00 para o AD Type 0x01 0x01 (CORRESPONDÊNCIA!)
AD Type do segundo padrão a ser correspondido 0xFF (Dados específicos do fabricante)
Comprimento do segundo padrão a ser correspondido 0x06 - 0x02 = 0x04 bytes
Padrão a ser correspondido na posição 0x00 para AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes na posição 0x00 para o AD Type 0xFF 0x00 0x06 0xFF (sem correspondência)

Veredito: APROVAÇÃO (somente o primeiro padrão corresponde)

Avaliando a correspondência para o pacote de anúncio [C]

Descrição Valor
AD Type do primeiro padrão a ser correspondido 0x01
Comprimento do primeiro padrão a ser correspondido 0x03 - 0x02 = 0x01 byte
Padrão a ser correspondido na posição 0x00 para AD Type 0x01 0x01
Bytes na posição 0x00 para o AD Type 0x01 Undefined. O anúncio não tem dados com AD Type 0x01.
AD Type do segundo padrão a ser correspondido 0xFF (Dados específicos do fabricante)
Comprimento do segundo padrão a ser correspondido 0x06 - 0x02 = 0x04 bytes
Padrão a ser correspondido na posição 0x00 para AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes na posição 0x00 para o AD Type 0xFF 0x00 0x06 0xFF 0xFF (CORRESPONDÊNCIA!)

Veredito: APROVAÇÃO (apenas o segundo padrão corresponde)

Avaliando a correspondência para o pacote de anúncio [D]

Descrição Valor
AD Type do primeiro padrão a ser correspondido 0x01
Comprimento do primeiro padrão a ser correspondido 0x03 - 0x02 = 0x01 byte
Padrão a ser correspondido na posição 0x00 para AD Type 0x01 0x01
Bytes na posição 0x00 para o AD Type 0x01 0x02 (não há correspondência)
AD Type do segundo padrão a ser correspondido 0xFF (Dados específicos do fabricante)
Comprimento do segundo padrão a ser correspondido 0x06 - 0x02 = 0x04 bytes
Padrão a ser correspondido na posição 0x00 para AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes na posição 0x00 para o AD Type 0xFF 0x00 0x06 0xFF 0x01 (não há correspondência)

Veredito: FALHA (nenhum padrão corresponde)

Exemplo: monitoramento de anúncios

Este exemplo ilustra o monitoramento de anúncios RSSI. Os valores de RSSI de anúncios recebidos que corresponderam a uma condição especificada são mostrados abaixo.

Tempo (s) RSSI (dB)
1 -100
2 -90
3 -5
4 15-
5 -30
6 15-
7 -45
8 -20
9 -35
10 -45
11 70-
12 -85
13 -85
14 -85
15 -90
16 -90
17 70-
Parâmetro Valor
RSSI_threshold_high -10dB
RSSI_threshold_low -80dB
RSSI_threshold_low_time_interval 3 Segundos
RSSI_sampling_period 2 segundos

Gráfico mostrando o monitoramento de anúncios com valores de RSSI ao longo do tempo.

O RSSI do anúncio é maior que RSSI_threshold_high no tempo 3. O temporizador periódico para amostragem inicia no tempo 3. A cada 2 segundos, o temporizador periódico expira e o valor médio de RSSI do anúncio recebido é propagado para a pilha.

Quando o temporizador periódico expira no tempo 5, a média dos RSSIs de anúncio recebidos durante esse tempo (-23dB) é propagada para a pilha.

Quando o temporizador periódico expira no tempo 13, a média dos RSSIs de anúncio recebidos durante esse período é inferior a RSSI_threshold_low (-80dB). A média do RSSI de anúncio (-85 dB) deve ser propagada para o host.

Quando RSSI_threshold_low_time_interval expira no instante 15, um anúncio é propagado para o host com RSSI de -85dB. Nenhum outro anúncio é enviado ao host neste exemplo.

Exemplo: Monitorando anúncios BAP de um dispositivo

Enquanto estiver vinculado a um aceitador CAP, mas não conectado, um host pode monitorar anúncios BAP desse dispositivo.

Parâmetro Valor
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options Bit 0 definido; Bit 1 definido se o dispositivo distribuiu uma IRK
Advertisement_report_filtering_options Bits 0, 1 e 2 definidos
Peer_device_address <address>
Peer_device_address_type <tipo de endereço>
Peer_device_IRK <IRK, se o bit 1 estiver definido>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (comprimento)
0x16 (Dados de serviço – UUID de 16 bits)
0x00 (byte inicial)
0x4E (byte baixo de UUID ASCS)
0x18 (byte alto de UUID ASCS)

Exemplo: Monitorando anúncios CAP de um dispositivo

Enquanto estiver vinculado a um encarregado CAP, mas não conectado, um host pode monitorar anúncios CAP desse dispositivo.

Parâmetro Valor
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options Bit 0 definido; Bit 1 definido se o dispositivo distribuiu uma IRK
Advertisement_report_filtering_options Bits 0, 1 e 2 definidos
Peer_device_address <address>
Peer_device_address_type <tipo de endereço>
Peer_device_IRK <IRK, se o bit 1 estiver definido>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (comprimento)
0x16 (Dados de serviço – UUID de 16 bits)
0x00 (byte inicial)
0x53 (byte baixo de UUID CAS)
0x18 (byte alto de UUID CAS)

Fluxograma: Anúncio e filtro aceitam filtragem de listas

Este fluxograma mostra um exemplo de implementação do controlador de filtragem de anúncio e filtragem de lista de aceitação de filtros quando um anúncio é recebido.

Um controlador pode implementar essa lógica de outra maneira, desde que o host seja notificado sobre o anúncio ou HCI_VS_MSFT_LE_Monitor_Device_Event conforme especificado pelo fluxograma.

Fluxograma mostrando o processo de filtragem de extensão de HCI da Microsoft.

Diagrama de sequência: Resposta de varredura de propagação associada ao anúncio

Diagrama de sequência: Resposta de varredura de propagação associada ao anúncio

Este diagrama de sequência mostra uma resposta de varredura de propagação associada a um anúncio que atende a um filtro de anúncio quando a varredura ativa está habilitada. Este diagrama mostra apenas a sequência de eventos esperada entre o controlador e o host e não mostra os eventos entre o controlador e um dispositivo específico. Suponha que existe um anúncio A que atende a um filtro de anúncio e um anúncio B que não atende ao filtro de anúncio.

Diagrama de sequência que mostra a resposta de varredura de propagação de HCI associada ao anúncio.