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.
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.
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.
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 |
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.
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.