Compartir a través de


Extensiones de Bluetooth HCI definidas por Microsoft

La interfaz bluetooth Host-Controller (HCI) especifica todas las interacciones entre un host y un controlador de radio Bluetooth. Las especificaciones de Bluetooth permiten que los eventos y comandos HCI definidos por el proveedor habiliten la interacción no estándar entre hosts y controladores. Microsoft define los comandos y eventos de HCI específicos del proveedor que Usa Windows. Los implementadores de controladores Bluetooth pueden usar estas extensiones para implementar características especiales.

Requisitos

Los comandos bluetooth HCI se identifican mediante un código de comando de 16 bits. La organización bluetooth define los valores del intervalo 0x0000 a través de 0xFBFF. Los proveedores definen valores en el intervalo 0xFC00 a través de 0xFFFF, lo que permite 1024 diferentes códigos de comandos asignados por el proveedor.

El proveedor debe elegir el valor del código de comando definido por Microsoft. Microsoft no puede elegir un código de comando y asumir que ningún otro proveedor usa el código para un propósito en conflicto. No es seguro emitir un comando específico del proveedor y depender del controlador para rechazar el comando si no lo entiende. El controlador podría interpretar el comando como una operación destructiva, como actualizar el firmware del controlador.

El proveedor debe comunicar el valor elegido a través de un método distinto del controlador. Microsoft no especifica cómo obtener el código elegido.

Notificación a la pila bluetooth de Windows del código de comando específico del proveedor

La pila bluetooth de Windows lee el código de comando específico del proveedor de una clave del Registro, VsMsftOpCode.

La VsMsftOpCode clave del Registro tiene un tipo de REG_DWORD y los datos de clave son el código de operación específico del proveedor.

Para especificar el código de operación específico del proveedor, use la directiva en la AddReg sección DDInstall.HW del inf del controlador. La sección agregar registro debe contener:

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

Ejemplo:

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

Comandos HCI definidos por Microsoft

Comandos de HCI Descripción
HCI_VS_MSFT_Read_Supported_Features Proporciona un mapa de bits que describe qué características definidas por Microsoft admite el controlador y especifica el prefijo para los eventos definidos por Microsoft devueltos por el controlador.
HCI_VS_MSFT_Monitor_Rssi Solicita que el controlador inicie la supervisión del vínculo medido RSSI para una conexión especificada y genera un evento cuando el vínculo medido de la conexión RSSI sale de los límites especificados.
HCI_VS_MSFT_Cancel_Monitor_Rssi Cancela un comando de HCI_VS_MSFT_Monitor_Rssi emitido anteriormente.
HCI_VS_MSFT_LE_Monitor_Advertisement Solicita que el controlador inicie la supervisión de anuncios que se encuentran dentro del intervalo RSSI especificado y que también cumplan otros requisitos.
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Cancela un comando de HCI_VS_MSFT_LE_Monitor_Advertisement emitido anteriormente.
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Establece el estado de los filtros de anuncios.
HCI_VS_MSFT_Read_Absolute_RSSI Lee el valor absoluto de indicación de intensidad de señal recibida (RSSI) para una conexión BR/EDR desde el controlador.

Comando y subcomandos de HCI definidos por Microsoft

El controlador entiende que solo hay un comando HCI específico de Microsoft. El conjunto de comandos específico de Microsoft se extiende mediante un código de operación. El primer parámetro de comando para el comando HCI definido por Microsoft es un código de operación que especifica el subcomando.

Los controladores deben admitir HCI_VS_MSFT_Read_Supported_Features para admitir cualquier otro subcomando de Microsoft HCI. La compatibilidad con otros comandos es opcional y depende de los valores devueltos por HCI_VS_MSFT_Read_Supported_Features. Windows no envía ningún subcomando definido por Microsoft a menos que el controlador indique la compatibilidad con el subcomando a través de una respuesta a HCI_VS_MSFT_Read_Supported_Features.

HCI_VS_MSFT_Read_Supported_Features

HCI_VS_MSFT_Read_Supported_Features proporciona un mapa de bits que describe qué características definidas por Microsoft admite el controlador y especifica el prefijo para los eventos definidos por Microsoft devueltos por el controlador.

El controlador siempre completará este comando con un evento Command Completed.

Get-Help Código Parámetros de comando Devolver parámetros
HCI_VS_MSFT_Read_Supported_Features Código base elegido Subcommand_opcode Estado
Subcommand_opcode,
Supported_features,
Microsoft_event_prefix_length,
Microsoft_event_prefix

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x00 Código de operación de subcomando para HCI_VS_MSFT_Read_Supported_Features.

Return_parameters

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 El comando se realizó correctamente.
0x01 a 0xFF Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x00 Código de operación de subcomando para HCI_VS_MSFT_Read_Supported_Features.

Supported_features (8 octetos):

Valor Descripción de los parámetros
0x00000000 00000001 El controlador admite la característica de supervisión RSSI para las conexiones BR/EDR. Además, el controlador admite HCI_VS_MSFT_Read_Absolute_RSSI para leer la métrica RSSI absoluta de una conexión BR/EDR.
0x00000000 00000002 El controlador admite la característica de supervisión RSSI para las conexiones LE.
0x00000000 00000004 El controlador admite la supervisión RSSI de anuncios heredados de LE.
0x00000000 00000008 El controlador admite la supervisión de publicidad de anuncios heredados de LE.
0x00000000 00000010 El controlador admite la comprobación de la validez de las coordenadas X e Y públicas en la curva durante el proceso de emparejamiento simple seguro para P-192 y P-256.
Para obtener más información, consulta Bluetooth Core Specification Erratum 10734.
0x00000000 00000020 El controlador admite la supervisión continua de la publicidad de los anuncios le realizados simultáneamente con otras actividades de radio, utilizando HCI_VS_MSFT_LE_Monitor_Advertisement [v1].
0x00000000 00000040 Reservado.
0x00000000 00000080 Reservado.
0x00000000 00000100 Reservado.
0x00000000 00000200 Reservado.
0x00000000 00000400 El controlador admite HCI_VS_MSFT_LE_Monitor_Advertisement [v2]. Además, el controlador admite la supervisión continua de la publicidad de los anuncios le realizados simultáneamente con otras actividades de radio, utilizando HCI_VS_MSFT_LE_Monitor_Advertisement [v2].
0xFFFFFFFF FFFFF800 Bits reservados para la definición futura. Debe ser cero.

Microsoft_event_prefix_length (1 octeto):

Valor Descripción de los parámetros
0x00 a 0x20 Número de bytes en el campo de prefijo de evento de Microsoft tal y como se especifica en la Microsoft_event_prefix devuelta. Este es el número de bytes de información constante al principio de cada evento HCI especificado por Microsoft.

Microsoft_event_prefix (longitud variable):

Valor Descripción de los parámetros
Valor de prefijo de evento Información constante que se espera al principio de cada evento definido por Microsoft. Esta información se usa para distinguir los eventos definidos por Microsoft de otros eventos personalizados.

HCI_VS_MSFT_Monitor_Rssi

HCI_VS_MSFT_Monitor_Rssi solicitudes que el controlador inicia la supervisión del vínculo medido RSSI para una conexión especificada y genera un evento cuando el vínculo medido de la conexión RSSI sale de los límites especificados.

Get-Help Código Parámetros de comando Devolver parámetros
HCI_VS_MSFT_Monitor_Rssi Código base elegido Subcommand_opcode,
Connection_Handle,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period
Estado
Subcommand_opcode

El responsable notificará al host del valor RSSI con un evento generado periódicamente (basado en el RSSI_sampling_period). El enlace medido RSSI será el valor absoluto de intensidad de señal del receptor en dBm para la conexión BR/EDR.

En respuesta a un comando de HCI_VS_MSFT_Monitor_Rssi, el controlador generará un evento Command Complete con un estado igual a cero si el controlador puede comenzar la supervisión o, de lo contrario, un estado distinto de cero. Si el valor de estado es distinto de cero, el controlador no generará un HCI_VS_MSFT_Rssi_Event en respuesta a este comando.

El controlador rechazará el comando si otro comando de HCI_VS_MSFT_Monitor_Rssi con la misma Connection_Handle está pendiente o si el identificador de conexión especificado no es válido. El controlador también puede rechazar el comando por otros motivos, como el agotamiento de recursos.

En este diagrama de estado se muestran los estados de transición en el controlador al supervisar RSSI para una conexión.

Diagrama de estado que muestra los estados de transición en el controlador al supervisar RSSI para una conexión.

El controlador generará un HCI_VS_MSFT_Rssi_Event cuando el RSSI recibido sea mayor o igual que el RSSI_threshold_high especificado. Una vez generado este evento, el controlador no generará un nuevo HCI_VS_MSFT_Rssi_Event para especificar que el RSSI_threshold_high se haya superado hasta que genere una HCI_VS_MSFT_Rssi_Event que especifique que RSSI ha caído por debajo de RSSI_threshold_low.

El responsable generará un HCI_VS_MSFT_Rssi_Event cuando el RSSI recibido sea igual o esté por debajo del RSSI_threshold_low especificado sobre el RSSI_threshold_low_time_interval especificado. Una vez generado este evento, el controlador no generará un nuevo HCI_VS_MSFT_Rssi_Event para especificar que el RSSI ha caído por debajo del RSSI_threshold_low hasta que se genere un evento de HCI_VS_MSFT_Rssi_Event para especificar que se haya alcanzado o superado RSSI_threshold_high .

Si el RSSI_sampling_period está entre 0x01 y 0xFE, el responsable generará periódicamente una HCI_VS_MSFT_Rssi_Event cada RSSI_sampling_period. Este evento contendrá el promedio del RSSI calculado sobre el RSSI_sampling_period. Si el RSSI_sampling_period es 0x00 o 0xFF, el responsable del tratamiento no notificará al anfitrión periódicamente con HCI_VS_MSFT_Rssi_Event.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x01 Código de operación de subcomando para HCI_VS_MSFT_Monitor_Rssi.

Connection_Handle (2 octetos):

Valor Descripción de los parámetros
0xXXXX Identificador de la conexión cuya RSSI se debe supervisar.

RSSI_threshold_high (1 octeto):

Valor Descripción de los parámetros
0xXX Valor RSSI máximo esperado. El controlador genera un evento si el RSSI observado se convierte en mayor o igual que este valor.
Unidad: dBm
Intervalo BR/EDR: -128 a 127 (entero con signo)
Intervalo LE: -127 a 20 (entero con signo)

RSSI_threshold_low (1 octeto):

Valor Descripción de los parámetros
0xXX Valor RSSI mínimo esperado. El controlador genera un evento si el RSSI observado se convierte en menor o igual que este valor.
Unidad: dBm
Intervalo obligatorio de BR/EDR: -128 a 127 (entero con signo)
Intervalo obligatorio de LE: -127 a 20 (entero con signo)

RSSI_threshold_low_time_interval (1 octeto):

Valor Descripción de los parámetros
0x00 Valor reservado.
N = 0xXX Tiempo en segundos en el que el valor RSSI debe estar por debajo de RSSI_threshold_low antes de generar un HCI_VS_MSFT_Rssi_Event .
Período de tiempo = N * 1 segundo
Intervalo obligatorio: 0x01 a 0x3C

RSSI_sampling_period (1 octeto):

Valor Descripción de los parámetros
0x00 Valor reservado.
N = 0xXX Intervalo de muestreo en milisegundos.
Período de tiempo = N * 100 milisegundos
Intervalo obligatorio: 0x01 a 0xFE
0xFF Valor reservado.

Return_parameters

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 El comando se realizó correctamente.
0x01 a 0xFF Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.
0x07 El controlador devolverá la capacidad de memoria superada si no tiene suficiente memoria para procesar el comando.
Código de error Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x01 Código de operación de subcomando para HCI_VS_MSFT_Monitor_Rssi.

Eventos generados a menos que se enmascaran

El controlador generará rápidamente un evento Command Complete cuando se reciba el comando HCI_VS_MSFT_Monitor_Rssi . Si el evento Command Complete devuelve un estado 0, el controlador generará un HCI_VS_MSFT_Rssi_Event cuando se produzca una de las condiciones siguientes.

  • El RSSI observado para el dispositivo en RSSI_threshold_low_time_interval se convierte en igual o menor que el valor de RSSI_threshold_low especificado.
  • El RSSI observado para el dispositivo se convierte en mayor o igual que el valor de RSSI_threshold_high especificado.
  • El RSSI_sampling_period es válido y el período de muestreo expira.

El controlador debe realizar toda la limpieza necesaria si se pierde la conectividad con el dispositivo especificado. En este caso, no se envía un comando HCI_VS_MSFT_Cancel_Monitor_Rssi al controlador.

HCI_VS_MSFT_Cancel_Monitor_Rssi

HCI_VS_MSFT_Cancel_Monitor_Rssi cancela un comando de HCI_VS_MSFT_Monitor_Rssi emitido anteriormente. El controlador generará rápidamente un evento Command Completed en respuesta a este comando.

Get-Help Código Parámetros de comando Devolver parámetros
HCI_VS_MSFT_Cancel_Monitor_Rssi Código base elegido Subcommand_opcode,
Connection_Handle
Estado
Subcommand_opcode

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x02 Código de operación de subcomando para HCI_VS_MSFT_Cancel_Monitor_Rssi.

Connection_Handle (2 octetos):

Valor Descripción de los parámetros
0xXXXX Identificador de la conexión cuya RSSI debe cancelarse.

Return_parameters

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 El comando se realizó correctamente.
0x01 a 0xFF Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x02 Código de operación de subcomando para HCI_VS_MSFT_Cancel_Monitor_Rssi.

Eventos generados a menos que se enmascaran

El controlador generará un evento Command Complete cuando se reciba el comando HCI_VS_MSFT_Cancel_Monitor_RSSI .

HCI_VS_MSFT_LE_Monitor_Advertisement

HCI_VS_MSFT_LE_Monitor_Advertisement solicitudes que el controlador inicia la supervisión de anuncios que se encuentran dentro del intervalo RSSI especificado y que también cumplen una de las condiciones siguientes:

  • Un patrón especificado puede coincidir con el paquete de anuncio recibido.
  • Un UUID especificado puede coincidir con el paquete de anuncio recibido.
  • Se puede usar una clave de resolución de identidad (IRK) especificada para resolver la dirección privada del dispositivo desde el que se originó el paquete de anuncio.
  • Una dirección Bluetooth especificada puede coincidir con el paquete de anuncio recibido.

El comando v2 permite al Host combinar algunas de las condiciones anteriores con opciones que rigen el origen del anuncio y el destino de un anuncio dirigido, para refinar aún más qué anuncios se supervisan. El comando v2 también permite al host filtrar qué anuncios supervisados hacen que el controlador genere informes de anuncios.

Get-Help Código Parámetros de comando Devolver parámetros
HCI_VS_MSFT_LE_Monitor_Advertisement [v2] Código base elegido 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 condición>
Estado
Subcommand_opcode,
Monitor_Handle
HCI_VS_MSFT_LE_Monitor_Advertisement [v1] Código base elegido Subcommand_opcode_v1,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Condition_type,
<Parámetros de condición>
Estado
Subcommand_opcode,
Monitor_Handle

El controlador generará un evento Command Complete en respuesta a este comando. El valor de estado debe establecerse en cero si el controlador puede comenzar la supervisión o un estado distinto de cero. Si el controlador no admite la supervisión RSSI para los anuncios de LE, omitirá los valores de parámetro RSSI_threshold_high, RSSI_threshold_low, RSSI_threshold_low_time_interval y RSSI_sampling_period .

En este diagrama de estado se muestran los estados de transición en el controlador al supervisar RSSI para un anuncio.

Diagrama de estado que muestra los estados de transición para HCI_VS_MSFT_LE_Monitor_Advertisement.

El responsable comenzará a supervisar un anuncio solo cuando el RSSI recibido sea mayor o igual que RSSI_threshold_high para un dispositivo determinado y la coincidencia de Monitor_options (véase a continuación). El controlador generará un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 1 y Monitor_handle establecido en el identificador de esta condición, para notificar al host que el controlador está supervisando este dispositivo en particular para condición. Además, el Responsable propagará el primer informe de anuncio de un anuncio supervisado al Anfitrión solo cuando coincida el Advertisement_report_filter_options (véase a continuación).

El Monitor_options de un filtro se considera una coincidencia basada en la siguiente lógica (en 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)

Y para un anuncio supervisado, el Advertisement_report_filter_options se considera una coincidencia basada en la siguiente lógica (en 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)

El responsable dejará de supervisar la condición si el RSSI de los anuncios recibidos es igual o cae por debajo de RSSI_threshold_low sobre RSSI_threshold_low_interval para el dispositivo en particular. El responsable generará un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 0 para notificar al host que el controlador ha detenido la supervisión del dispositivo determinado para la condición. Después de que el controlador especifique el HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 0, el controlador no permitirá que los paquetes de anuncios adicionales fluyan al host para el dispositivo hasta que el controlador haya notificado al host que el RSSI para el dispositivo determinado ha aumentado a o más RSSI_threshold_high para el dispositivo determinado para la Condición.

Además, el controlador generará un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 0 para notificar al host que el controlador ha detenido la supervisión del dispositivo para la condición si el RSSI_threshold_low_time_interval especificado expira sin recibir ningún paquete publicitario del dispositivo. Si el controlador supervisa un dispositivo para una condición determinada, las siguientes instrucciones son verdaderas.

Si el controlador admite la supervisión RSSI de anuncios extendidos le sin muestreo, el controlador propagará paquetes de anuncios anónimos al host si el valor RSSI del paquete es mayor o igual que RSSI_threshold_high. No se realizará un seguimiento de los anuncios anónimos y no se generará el evento de HCI_VS_MSFT_LE_Monitor_Device_Event .

Si el responsable apoya la supervisión RSSI de anuncios LE sin muestreo, el responsable generará un informe de publicidad truncado en el caso de que los fragmentos recibidos del anuncio coincidan, pero cuando todo el anuncio no se haya recibido correctamente.

El Responsable apoyará un mínimo de 30 Monitor_handles simultáneas, un mínimo de 30 dispositivos de seguimiento simultáneos y un mínimo de 20 anuncios duplicados de seguimiento simultáneos. El controlador también podrá realizar un examen DE LE continuo en un ciclo de trabajo del 10 %.

Si la resolución de direcciones está habilitada en el controlador y el host pretende supervisar un dispositivo remoto con su IRK almacenado correctamente en la lista de resolución del controlador, el host proporcionará los parámetros Peer_Identity_Address y Peer_Identity_Address_Type desde la entrada de lista de resolución del dispositivo remoto como parámetros de Peer_device_address y Peer_device_address_type, Respectivamente.

RSSI_sampling_period Anuncios heredados Anuncios extendidos (no anónimos) Anuncios extendidos (anónimo)
0x00 El controlador propagará todos los paquetes de anuncios recibidos al host para el dispositivo para esta condición , a menos que el controlador haya recibido previamente un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x00. El controlador propagará un paquete de anuncio al host aunque el RSSI recibido sea menor o igual que RSSI_threshold_low siempre que RSSI_threshold_low_time_interval no haya expirado para el dispositivo determinado para esta condición. El valor RSSI de este paquete de publicidad será el valor RSSI del anuncio recibido. Si el controlador admite la supervisión RSSI de anuncios extendidos de LE sin muestreo, el mismo comportamiento que la columna Anuncios heredados , excepto que un paquete de anuncios se define como todas las PDU de la cadena de publicidad. Si el controlador admite la supervisión RSSI de anuncios extendidos le sin muestreo, el controlador propagará todos los paquetes de anuncios recibidos al host para el dispositivo para esta condición a menos que el controlador haya recibido previamente un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Habilitar establecido en 0x00.
0x01 a 0xFE El controlador propagará los paquetes de anuncios heredados al host cada RSSI_sampling_period especificado a menos que el controlador haya recibido previamente un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x00. El valor RSSI especificado para el anuncio será el promedio del valor RSSI recibido durante este intervalo de muestreo. Si el controlador no recibe un paquete de anuncio durante el período de muestreo, no propagará un anuncio al host. Es posible que RSSI_sampling_period sea menor que RSSI_threshold_low_time_interval y que todos los anuncios recibidos durante la RSSI_sampling_period tengan RSSI por debajo de RSSI_threshold_low. El responsable seguirá propagando el anuncio con el promedio del valor RSSI recibido durante este intervalo de muestreo. Si el responsable admite la supervisión RSSI de anuncios extendidos le sin muestreo, el responsable se comportará como si el RSSI_sampling_period fuera 0x00. Si el responsable admite la supervisión RSSI de anuncios extendidos le sin muestreo, el responsable se comportará como si el RSSI_sampling_period fuera 0x00.
0xFF El controlador no permitirá que los paquetes de anuncios adicionales fluyan al host para el dispositivo para la condición hasta que el controlador haya notificado al host que el RSSI del dispositivo determinado ha caído por debajo de RSSI_threshold_low para RSSI_threshold_low_time_interval para el dispositivo determinado para esta condición. Esta notificación se realiza generando un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 0. Si el controlador admite la supervisión RSSI de anuncios extendidos le sin muestreo, el mismo comportamiento que la columna Anuncios heredados . Si el responsable admite la supervisión RSSI de anuncios extendidos le sin muestreo, el responsable se comportará como si el RSSI_sampling_period fuera 0x00.

Si el controlador recibió previamente un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x00, no se detendrá el temporizador del período de muestreo. Vea Ejemplo: HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable en filtros con período de muestreo para obtener más información. Si el controlador recibe paquetes de anuncios noduplicados del mismo dispositivo, coincidirá con cada paquete de anuncio con las Condiciones almacenadas en el controlador.

Si el controlador recibe un paquete de anuncio de un dispositivo que coincide con varias condiciones, el controlador generará un HCI_VS_MSFT_LE_Monitor_Device_Event para cada Condición que coincida, con Monitor_handle establecido en la Condición que coincida.

Si el controlador no puede supervisar los valores RSSI de todos los dispositivos del intervalo que coinciden con la condición, sigue supervisando tantos dispositivos como pueda. La decisión sobre qué dispositivos se deben supervisar dependerá de los valores RSSI de los anuncios recibidos. El controlador supervisará los dispositivos con mayor intensidad de señal recibida.

Si el controlador ha notificado al host sobre un dispositivo determinado (A) y está supervisando los dispositivos con capacidad máxima de hardware y, si otro dispositivo (B) entra en el rango con un valor RSSI superior, el controlador notificará al host que ha dejado de supervisar el dispositivo (A) generando un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 0. El controlador también generará un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 1 para notificar al host que el dispositivo (B) se está supervisando.

Parámetros de condición y tipo de condición

El parámetro Condition_type especifica si el parámetro Condition especifica un patrón, UUID, IRK o BD_ADDR.

Si el parámetro Condition_type especifica un patrón, la condición contiene dos secciones que contienen el número de patrones presentes en la condición y los datos del patrón.

Diagrama que ilustra el diseño de datos de condición de patrón para HCI_VS_MSFT_LE_Monitor_Advertisement.

Número de patrones especifica el número de patrones que deben coincidir.

Los datos de patrón tienen el formato siguiente.

  • Length especifica la longitud de este patrón incluyen el tipo de datos y el byte inicial del patrón.
  • Tipo de AD especifica el campo Tipo de AD.
  • Start of Pattern especifica la posición inicial de byte del patrón inmediatamente después del tipo de AD.
  • El patrón tiene un tamaño de (Length - 0x2) y es el patrón que se va a coincidir con el tipo de AD especificado dentro del paquete de anuncio desde el byte inicial especificado.

Si se especifican varios patrones, el responsable garantizará que al menos un patrón coincida con el anuncio recibido.

Si el controlador admite la supervisión RSSI de anuncios extendidos le sin muestreo:

  • El responsable buscará el patrón en los primeros 251 octetos de los datos de publicidad de host y podrá buscar en los octetos restantes de los datos de publicidad del host. Si la sección AD se extiende más allá de los primeros 251 octetos de los datos de publicidad de host, el controlador buscará el patrón dentro de la parte de la sección de AD que se encuentra en los primeros 251 octetos de los datos de publicidad del host y puede buscar en los octetos restantes de los datos de publicidad del host. Nota: En función de la fragmentación por parte del anunciante, los primeros 251 octetos de los datos de publicidad de host pueden extenderse a través de AdvData de varias PDU publicitarias. Los escáneres deben tener cuidado para limitar el número de AuxPtrs que siguen, para evitar seguir cadenas excesivamente largas de PDU.

  • El responsable realizará un seguimiento basado en una dirección por dispositivo por cada anuncio establecido. El responsable propagará un HCI_VS_MSFT_LE_Monitor_Device_Event para cada conjunto de publicidad que coincida con el patrón incluso si el anuncio procede de la misma dirección del dispositivo.

Si el parámetro Condition_type especifica un UUID, el parámetro Condition contiene un tipo UUID y un UUID. El tipo UUID especifica si el UUID es de 16 bits, de 32 bits o de 128 bits. El responsable analizará el UUID de servicio del paquete de publicidad para comprobar el UUID especificado. Si el tipo UUID se define como 0x01, el controlador analizará la lista incompleta de UUID de servicio de 16 bits y la lista completa de UUID de servicio de 16 bits especificados en el tipo de AD de UUID de servicio. Si el tipo UUID se define como 0x02, el controlador analizará la lista incompleta de UUID de servicio de 32 bits y una lista completa de UUID de 32 bits especificados en el Tipo de AD UUID de servicio. Si el tipo UUID especificado es 0x03, el controlador analizará la lista incompleta de UUID de servicio de 128 bits y la lista completa de UUID de servicio de 128 bits especificados en el Tipo de AD de UUID de servicio.

Si el controlador admite la supervisión RSSI de anuncios extendidos le sin muestreo:

  • El responsable buscará el UUID de servicio en los primeros 251 octetos de los datos de publicidad del host y podrá buscar en los octetos restantes de los datos de publicidad del host. Si la sección AD se extiende más allá de los primeros 251 octetos de los datos de publicidad de host, el responsable buscará el UUID de servicio dentro de la parte de la sección de AD que se encuentra en los primeros 251 octetos de los datos de publicidad del host y puede buscar en los octetos restantes de los datos de publicidad del host. Nota: En función de la fragmentación por parte del anunciante, los primeros 251 octetos de los datos de publicidad del host pueden abarcar AdvData de varias PDU publicitarias. Los escáneres deben tener cuidado para limitar el número de AuxPtrs que siguen, para evitar seguir cadenas excesivamente largas de PDU.

  • El responsable realizará un seguimiento basado en una dirección por dispositivo por cada anuncio establecido. El responsable propagará un HCI_VS_MSFT_LE_Monitor_Device_Event para cada conjunto de publicidad que coincida con el UUID del servicio incluso si el anuncio procede del mismo dispositivo.

Si el parámetro Condition_type especifica un IRK, el parámetro Condition contiene el IRK.

Si el parámetro Condition_type especifica una dirección Bluetooth, el parámetro Condition contiene el tipo de dirección y BD_ADDR.

El responsable mantendrá la supervisión en función de las condiciones, incluso cuando se habilite el examen (activo o pasivo). Cuando se habilita el examen activo, la respuesta del examen de un anuncio que coincida con un filtro se propagará al host.

Si el controlador recibe un comando de HCI_VS_MSFT_LE_Monitor_Advertisement cuando los filtros están deshabilitados (debido a un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable recibido previamente con Enable establecido en 0x00), el controlador aceptará el comando si puede, pero establecerlo en un estado deshabilitado. El controlador también puede rechazar el comando por otros motivos, como el agotamiento de recursos.

Si todos los bits de Monitor_options están claros, el controlador debe devolver el código de error Parámetros de comando de HCI no válidos (0x12).

Si se establece el bit 1 o bit 3 de Monitor_options y Peer_device_IRK se establece en un IRK no válido o ninguno de los bits de Monitor_options se establece, el controlador debe devolver el código de error Parámetros de comando de HCI no válidos (0x12).

Si se establece el bit 0 o bit 1 o bit 2 o bit 3 de Monitor_options y Condition_type se establece en 0x03 o 0x04, el controlador debe devolver el código de error Parámetros de comando HCI no válidos (0x12).

Si se establece el bit 0 de Advertisement_report_filter_options y RSSI_sampling_period es cualquier valor distinto de 0x00, el controlador debe devolver el código de error Parámetros de comando de HCI no válidos (0x12).

Parámetros que faltan

Cuando se emite una versión de este comando que no incluye todos los parámetros, se usará lo siguiente:

Parámetro Valor
Monitor_options Bit 5 set; todos los demás bits borrados
Advertisement_report_filter_options Bits 1 y 2 set; todos los demás bits borrados
Peer_device_IRK 0x0000000000000000 0000000000000000000
Peer_device_address 0x000000000000
Peer_device_address_type 0x00

Command_parameters

Subcommand_opcode_v1 (1 octeto):

Valor Descripción de los parámetros
0x03 Código de operación de subcomando para HCI_VS_MSFT_LE_Monitor_Advertisement [v1].

Subcommand_opcode_v2 (1 octeto):

Valor Descripción de los parámetros
0x0F Código de operación de subcomando para HCI_VS_MSFT_LE_Monitor_Advertisement [v2].

RSSI_threshold_high (1 octeto):

Valor Descripción de los parámetros
0xXX Valor RSSI máximo esperado. El controlador genera un evento si el RSSI observado se convierte en mayor o igual que este valor.
Unidad: dBm
Intervalo obligatorio: -127 a 20 (entero con signo)

RSSI_threshold_low (1 octeto):

Valor Descripción de los parámetros
0xXX Valor RSSI mínimo esperado. El controlador genera un evento si el RSSI observado se convierte en menor o igual que este valor.
Unidad: dBm
Intervalo obligatorio: -127 a 20 (entero con signo)

RSSI_threshold_low_time_interval (1 octeto):

Valor Descripción de los parámetros
0x00 Valor reservado.
N = 0xXX Tiempo en segundos en el que el valor RSSI debe estar por debajo de RSSI_threshold_low antes de que se genere un HCI_VS_MSFT_Rssi_Event
Período de tiempo = N * 1 segundo
Intervalo obligatorio: 0x01 a 0x3C.

RSSI_sampling_period (1 octeto):

Valor Descripción de los parámetros
0x00 El responsable propagará todos los anuncios recibidos al anfitrión.
N = 0xXX Intervalo de muestreo en milisegundos.
Período de tiempo = N * 100 milisegundos.
Intervalo obligatorio: 0x01 a 0xFE
0xFF El responsable no propagará ninguno de los anuncios recibidos al anfitrión.

Monitor_options (1 octeto):

Número de bits Descripción de los parámetros
0 El Responsable supervisará las PDU publicitarias en las que AdvA o su dirección de identidad resuelta coincidan con Peer_device_address y Peer_device_address_type y cuando TargetA no esté presente o, si está presente, el TargetA se permite en función de la directiva de filtro de examen, si esas PDU coinciden con la condición especificada en Condition_Type.
1 El Responsable supervisará las PDU publicitarias en las que AdvA se pueda resolver con Peer_device_IRK y cuando TargetA no esté presente o, si está presente, el TargetA se permite en función de la directiva de filtro de examen, si esas PDU coinciden con la condición especificada en Condition_Type. Este bit no se establecerá si la privacidad de la capa de vínculo está en uso en el controlador.
2 El Responsable supervisará las PDU publicitarias dirigidas en las que se permita la TargetA en función de la Directiva de filtro de examen y en la que AdvA o su dirección de identidad resuelta coincida con Peer_device_address y Peer_device_address_type. Esto es independientemente de si la PDU coincide con la condición especificada en Condition_Type.
3 El Responsable supervisará las PDU publicitarias dirigidas en las que se permita la TargetA en función de la directiva de filtro de examen y en la que AdvA se pueda resolver con Peer_device_IRK. Esto es independientemente de si la PDU coincide con la condición especificada en Condition_Type. Este bit no se establecerá si la privacidad de la capa de vínculo está en uso en el controlador.
4 El Responsable supervisará las PDU publicitarias dirigidas en función de la Directiva de filtro de examen, independientemente del valor de Peer_device_address y Peer_device_address_type o Peer_device_IRK, e independientemente de si la PDU coincide con la condición especificada en Condition_Type.
5 El Responsable supervisará las PDU publicitarias de cualquier AdvA en la que TargetA no esté presente o, si está presente, el TargetA se permitirá en función de la Directiva de filtro de examen, si esas PDU coinciden con la condición especificada en Condition_Type.
Todos los demás bits Reservado para uso futuro

Advertisement_report_filtering_options (1 octeto):

Número de bits Descripción de los parámetros
0 Filtre las PDU de publicidad duplicadas. Este bit solo se establecerá si se 0x00 RSSI_sampling_period.
1 El Controlador generará eventos HCI_LE_Advertising_Report o eventos HCI_LE_Directed_Advertising_Report o eventos HCI_LE_Extended_Advertising_Report para PDU de publicidad heredada, si esas PDU coinciden con el Monitor_options especificado.
2 El Responsable generará eventos HCI_LE_Extended_Advertising_Report para PDU de publicidad extendida, si esas PDU coinciden con el Monitor_options especificado.
3 El Responsable generará HCI_LE_Advertising_Report eventos o eventos de HCI_LE_Directed_Advertising_Report o eventos HCI_LE_Extended_Advertising_Report para las PTU de publicidad dirigida, si esas PTU coinciden con el Monitor_options especificado.
Todos los demás bits Reservado para uso futuro

Peer_device_address (6 octetos):

Valor Descripción de los parámetros
0xXXXXXXXXXXXXXXX Dirección de dispositivo público o Dirección de dispositivo aleatoria que debe coincidir.

Peer_device_address_type (1 octeto):

Valor Descripción de los parámetros
0x00 Dirección del dispositivo público
0x01 Dirección aleatoria del dispositivo
Todos los demás valores Reservado para uso futuro

Peer_device_IRK (16 octetos):

Valor Descripción de los parámetros
0x0000000000000000 000000000000000000 IRK no válido. No debe ser el valor cuando se establece Monitor_options bit 1 o cuando se establece Monitor_options bit 3.
0xXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX IRK del dispositivo que debe coincidir. Peer_device_address y Peer_device_address_type se rellenarán.

Condition_type (1 octeto):

Valor Descripción de los parámetros
0x01 La condición es un patrón que debe coincidir con el anuncio.
0x02 La condición es un tipo UUID y un UUID.
0x03 La condición es la resolución de una IRK. Se excluye si se establece cualquiera de los bits de Monitor_options 0, 1, 2 o 3.
0x04 La condición es un tipo de dirección Bluetooth y una dirección Bluetooth. Se excluye si se establece cualquiera de los bits de Monitor_options 0, 1, 2 o 3.

Condición: los campos aplicables de Condition dependen del valor de Condition_type. Consulte la sección Condition_type y Parámetros de condición para obtener más información.

Number_of_patterns (1 octeto):

Valor Descripción de los parámetros
0xXX Número de patrones especificados en el parámetro Pattern_data.

Pattern_data (>3 octetos):

Valor Descripción de los parámetros
Length Longitud de este patrón.
Tipo de datos Tipo de datos de la sección de anuncios. Los valores se muestran en el documento Números asignados por Bluetooth.
Inicio de byte Posición inicial del patrón que se va a buscar para el tipo de datos especificado.
Patrón Patrón que se va a coincidir (tamaño de longitud: 0x2 bytes).

UUID_type (1 octeto):

Valor Descripción de los parámetros
0x01 El UUID es un servicio de 16 bits.
0x02 El UUID es un servicio de 32 bits.
0x03 El UUID es un servicio de 128 bits.

UUID (2, 4 o 16 octetos):

Valor Descripción de los parámetros
0xXXXX 2 bytes si UUID_type está 0x01.
4 bytes si UUID_type es 0x02.
16 bytes si UUID_type está 0x03.

IRK (16 octetos):

Valor Descripción de los parámetros
0xXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX IrK que se va a usar para resolver la dirección privada.

Address_type (1 octeto):

Valor Descripción de los parámetros
0x00 Dirección del dispositivo público.
0x01 Dirección de dispositivo aleatoria.
0x02 a 0xFF Valores reservados para uso futuro.

BD_ADDR (6 octetos):

Valor Descripción de los parámetros
0xXXXXXXXXXXXXXXX La dirección Bluetooth del dispositivo que se va a supervisar.

Return_parameters

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 El comando se realizó correctamente.
0x07 El controlador devolverá la capacidad de memoria superada si no tiene suficiente memoria para procesar el comando.
Código de error Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x03 o 0x0F Código de operación de subcomando para HCI_VS_MSFT_LE_Monitor_Advertisement [v1] o HCI_VS_MSFT_LE_Monitor_Advertisement [v2], según el comando que se envió.

Monitor_handle (1 octeto):

Valor Descripción de los parámetros
0x00 a 0xFF Identificador de esta regla. Este identificador se usa como parámetro para HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement cancelar la supervisión del anuncio.
Este parámetro solo es válido si Status es 0x00.

Eventos generados a menos que se enmascaran

Cuando se recibe el comando HCI_VS_MSFT_LE_Monitor_Advertisement , el controlador generará un evento Command Complete.

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement cancela un comando de HCI_VS_MSFT_LE_Monitor_Advertisement emitido anteriormente.

Get-Help Código Parámetros de comando Devolver parámetros
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Código base elegido Subcommand_opcode,
Monitor_handle
Estado
Subcommand_opcode

El controlador generará rápidamente un evento Command Completed en respuesta a este comando.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x04 Código de operación de subcomando para HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Connection_Handle (1 octeto):

Valor Descripción de los parámetros
0xXX Identificador del filtro que se va a cancelar.

Return_parameters

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 El comando se realizó correctamente.
0x07 El controlador devolverá la capacidad de memoria superada si no tiene suficiente memoria para procesar el comando.
Código de error Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x04 Código de operación de subcomando para HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Eventos generados a menos que se enmascaran

El controlador generará un evento Command Complete cuando se reciba el comando HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement .

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable establece el estado de los filtros de anuncios.

Get-Help Código Parámetros de comando Devolver parámetros
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Código base elegido Subcommand_opcode,
Habilitar
Estado
Subcommand_opcode

Si Enable se establece en 0x00, el controlador propagará los anuncios recibidos al host en función de la configuración de la lista de aceptación de filtros existente. El controlador seguirá supervisando los dispositivos que se están supervisando y generando un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 0 si el dispositivo ya no se está supervisando. El controlador generará un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 1 si se supervisa un nuevo dispositivo. El host puede emitir HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x01 para volver a habilitar todas las condiciones de filtro.

Si Enable se establece en 0x01, este comando habilita todos los filtros que se establecieron con un comando de HCI_VS_MSFT_LE_Monitor_Advertisement emitido anteriormente. El controlador rechazará un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable si no alterna el estado del filtro:

  • El controlador rechazará un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x01 si previamente recibió un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x01.
  • El controlador rechazará el comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x00 si anteriormente recibió un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x00.

El estado predeterminado del filtro de anuncios estará desactivado. Este estado es equivalente al controlador que recibió previamente un comando de HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en 0x00. El controlador generará rápidamente un evento Command Completed en respuesta a este comando.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x05 Código de operación de subcomando para HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Habilitar (1 octeto):

Valor Descripción de los parámetros
0x00 Vuelva al comportamiento actual de la lista de aceptación de filtros, pero continúe supervisando los dispositivos en función de la condición de HCI_VS_MSFT_LE_Monitor_Advertisement comandos.
0x01 Habilite todos los comandos de HCI_VS_MSFT_LE_Monitor_Advertisement emitidos en el controlador.

Return_parameter

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 El comando se realizó correctamente.
0x0C El controlador devolverá Command Disallowed si el controlador rechazó el comando porque anteriormente vio un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable establecido en el mismo valor que este comando.
Código de error Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x05 Código de operación de subcomando para HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Eventos generados a menos que se enmascaran

El controlador generará un evento Command Complete cuando se reciba el comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable .

HCI_VS_MSFT_Read_Absolute_RSSI

HCI_VS_MSFT_Read_Absolute_RSSI lee el valor absoluto de indicación de intensidad de señal recibida (RSSI) para una conexión BR/EDR del controlador.

Get-Help Código Parámetros de comando Devolver parámetros
HCI_VS_MSFT_Read_Absolute_RSSI Código base elegido Subcommand_opcode,
Connection_Handle
Estado
Subcommand_opcode,
Connection_Handle,
RSSI

Se proporciona un identificador de conexión como un comando y un parámetro de devolución para identificar la conexión de ACL cuya RSSI se está leyendo. La métrica RSSI es la intensidad absoluta de la señal del receptor en dBm para ± precisión de 6 dB. Si no se puede leer rssi, la métrica RSSI se establecerá en 127. El controlador siempre completará este comando con un evento Command Completed.

Command_parameters

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x06 Código de operación de subcomando para HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 octetos):

Valor Descripción de los parámetros
0xXXXX Identificador de la conexión BR/EDR cuya RSSI debe leerse.

Return_parameters

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 El comando se realizó correctamente.
0x01 a 0xFF Error en el comando. Consulta Códigos de error en la especificación de Bluetooth Core para obtener más información.

Subcommand_opcode (1 octeto):

Valor Descripción de los parámetros
0x06 Código de operación de subcomando para HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 octetos):

Valor Descripción de los parámetros
0xXXXX Identificador de la conexión BR/EDR cuya RSSI se leyó.

RSSI (1 octeto):

Valor Descripción de los parámetros
N = 0xXX Valor RSSI de la conexión BR/EDR.
Unidad: dBm
Intervalo obligatorio: -128 a 127 (entero con signo)

Eventos generados a menos que se enmascaran

El controlador generará un evento Command Complete cuando se haya completado el comando HCI_VS_MSFT_Read_Absolute_RSSI .

Eventos bluetooth HCI definidos por Microsoft

Todos los eventos bluetooth HCI definidos por Microsoft son eventos definidos por el proveedor y usan código de evento 0xFF. Los datos de evento de los eventos de Microsoft siempre comienzan con una cadena constante de bytes para distinguir los eventos definidos por Microsoft de otros eventos definidos por el proveedor. La longitud y el valor de la cadena constante se definen mediante el implementador del controlador y se devuelven en respuesta a HCI_VS_MSFT_Read_Supported_Features.

Evento HCI Descripción
HCI_VS_MSFT_Rssi_Event HCI_VS_MSFT_RSSI_Event indica que se ha completado un comando HCI_VS_MSFT_Monitor_Rssi .
HCI_VS_MSFT_LE_Monitor_Device_Event HCI_VS_MSFT_LE_Monitor_Device_Event indica que el controlador ha iniciado o detenido la supervisión de un dispositivo Bluetooth LE.

HCI_VS_MSFT_RSSI_Event

HCI_VS_MSFT_RSSI_Event indica que se ha completado un comando HCI_VS_MSFT_Monitor_Rssi . Si el parámetro Status es cero, el comando se completó porque el valor RSSI del dispositivo remoto cambió a un valor fuera del intervalo especificado. Si el parámetro Status es distinto de cero, el comando se completó porque el valor RSSI de la conexión ya no se puede supervisar.

Evento Código de evento Código de evento de Microsoft Parámetros de evento
HCI_VS_MSFT_RSSI_Event 0xFF 0x01 Event_prefix,
Microsoft_event_code,
Estado
Connection_Handle,
RSSI

Event_parameters

Event_prefix (tamaño variable):

Valor Descripción de los parámetros
Prefijo de evento Prefijo de evento que marca este evento como definido por Microsoft. El tamaño y el valor son devueltos por el comando HCI_VS_MSFT_Read_Supported_Features .

Microsoft_event_code (1 octeto):

Valor Descripción de los parámetros
0x01 Código de evento para HCI_VS_MSFT_RSSI_Event.

Estado (1 octeto):

Valor Descripción de los parámetros
0x00 Correcto. El valor RSSI de la conexión ha cumplido una de las condiciones siguientes. El RSSI alcanzó o superó RSSI_threshold_high.
El RSSI alcanzó o cayó por debajo de RSSI_threshold_low durante RSSI_threshold_low_time_interval segundos.
El RSSI_sampling_period ha expirado y este evento se generó para notificar al host del valor RSSI.
0x01 a 0xFF Error. El valor RSSI de la conexión ya no se puede supervisar. El código de error suele ser uno de los códigos que describe por qué se perdió la conexión de ACL subyacente.

Connection_Handle (2 octetos):

Valor Descripción de los parámetros
0xXXXX Identificador de la conexión cuyo RSSI se va a supervisar.

RSSI (1 octeto):

Valor Descripción de los parámetros
0xXX Valor RSSI del vínculo medido para la conexión.
Unidad: dBm
Intervalo BR/EDR: -128 a 127 (entero con signo)
Intervalo LE: -127 a 20 (entero con signo)

HCI_VS_MSFT_LE_Monitor_Device_Event

HCI_VS_MSFT_LE_Monitor_Device_Event indica que el controlador ha iniciado o detenido la supervisión de un dispositivo Bluetooth LE.

Si el valor del parámetro Monitor_state es 1, el controlador inició la supervisión del dispositivo Bluetooth con el BD_ADDR especificado. Si el valor del parámetro Monitor_state es 0, el controlador detuvo la supervisión del dispositivo Bluetooth con el BD_ADDR especificado.

Evento Código de evento Código de evento de 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

El controlador no generará un HCI_VS_MSFT_LE_Monitor_Device_Event con el parámetro Monitor_state establecido en 0 si aún no ha generado un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state establecido en 1.

Event_parameters

Event_prefix (tamaño variable):

Valor Descripción de los parámetros
Prefijo de evento Prefijo de evento que marca este evento como definido por Microsoft. El tamaño y el valor son devueltos por el comando HCI_VS_MSFT_Read_Supported_Features .

Microsoft_event_code (1 octeto):

Valor Descripción de los parámetros
0x02 Código de evento para HCI_VS_MSFT_LE_Monitor_Device_Event.

Address_type (1 octeto):

Valor Descripción de los parámetros
0x00 Dirección del dispositivo público.
0x01 Dirección de dispositivo aleatoria.
0x02 a 0xFF Valores reservados para uso futuro.

BD_ADDR (6 octetos):

Valor Descripción de los parámetros
0xXXXXXXXXXXXXXXX La dirección Bluetooth del dispositivo.

Monitor_handle (1 octeto):

Valor Descripción de los parámetros
0xXX Identificador del filtro especificado para el comando HCI_VS_MSFT_LE_Monitor_Advertisement .

Monitor_state (1 octeto):

Valor Descripción de los parámetros
0x00 El controlador detuvo la supervisión del dispositivo especificado por BD_ADDR y Monitor_handle.
0x01 El controlador inició la supervisión del dispositivo especificado por BD_ADDR y Monitor_handle.

Apéndice

Esta sección contiene ejemplos y diagramas de extensión Bluetooth HCI definidos por Microsoft.

Ejemplo: Patrones coincidentes para HCI_VS_MSFT_LE_Monitor_Advertisement

En este ejemplo se muestra un comando de HCI_VS_MSFT_LE_Monitor_Advertisement recibido y las evaluaciones de tres paquetes de anuncios diferentes con los parámetros de comando.

Recibido HCI_VS_MSFT_LE_Monitor_Advertisement comando Un comando HCI_VS_MSFT_LE_Monitor_Advertisement recibe el controlador y contiene los parámetros siguientes.

Parámetro Valor Notas
Subcommand_opcode 0x03 Código de operación 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 Sin muestreo
Condition_type 0x01 Condición
Condition 0x02 Se deben coincidir dos patrones
0x03 Longitud del primer patrón, incluido el tipo de AD y la posición inicial
0x01 Tipo de AD
0x00 Posición inicial después del tipo de AD
0x01 Primer patrón que debe coincidir
0x06 Longitud del segundo patrón, incluido el tipo de AD y la posición inicial
0xFF Tipo de AD (datos específicos del fabricante)
0x00 Posición inicial después del tipo de AD
0x00 Segundo patrón que se va a coincidir
0x06
0xFF
0xFF

A continuación, el controlador recibe los siguientes paquetes de anuncios.

  • Paquete de anuncio [A]

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

  • Paquete de anuncio [B]

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

  • Paquete de anuncio [C]

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

  • Paquete de anuncio [D]

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

Evaluación de la coincidencia para el paquete de anuncio [A]

Descripción Valor
Tipo de AD del primer patrón que se va a hacer coincidir 0x01
Longitud del primer patrón que debe coincidir 0x03: 0x02 = 0x01 byte
Patrón que se va a buscar en la posición 0x00 para el 0x01 de tipo de AD 0x01
Bytes en la posición 0x00 del 0x01 de tipo de AD 0x01 (MATCH!)
Tipo de AD de segundo patrón que se va a coincidir 0xFF (datos específicos del fabricante)
Longitud del segundo patrón que se va a coincidir 0x06: 0x02 = bytes de 0x04
Patrón que se va a buscar en la posición 0x00 de AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes en la posición 0x00 del 0xFF de tipo de AD 0x00 0x06 0xFF 0xFF (MATCH!)

Veredicto: PASS (ambos patrones coinciden)

Evaluación de la coincidencia para el paquete de anuncio [B]

Descripción Valor
Tipo de AD del primer patrón que se va a hacer coincidir 0x01
Longitud del primer patrón que debe coincidir 0x03: 0x02 = 0x01 byte
Patrón que se va a buscar en la posición 0x00 para el 0x01 de tipo de AD 0x01
Bytes en la posición 0x00 del 0x01 de tipo de AD 0x01 (MATCH!)
Tipo de AD de segundo patrón que se va a coincidir 0xFF (datos específicos del fabricante)
Longitud del segundo patrón que se va a coincidir 0x06: 0x02 = bytes de 0x04
Patrón que se va a buscar en la posición 0x00 de AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes en la posición 0x00 del 0xFF de tipo de AD 0x00 0x06 0xFF (sin coincidencia)

Veredicto: PASS (solo coincidencias de primer patrón)

Evaluación de coincidencias para el paquete de anuncio [C]

Descripción Valor
Tipo de AD del primer patrón que se va a hacer coincidir 0x01
Longitud del primer patrón que debe coincidir 0x03: 0x02 = 0x01 byte
Patrón que se va a buscar en la posición 0x00 para el 0x01 de tipo de AD 0x01
Bytes en la posición 0x00 del 0x01 de tipo de AD Sin definir. El anuncio no tiene datos con el tipo de AD 0x01.
Tipo de AD de segundo patrón que se va a coincidir 0xFF (datos específicos del fabricante)
Longitud del segundo patrón que se va a coincidir 0x06: 0x02 = bytes de 0x04
Patrón que se va a buscar en la posición 0x00 de AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes en la posición 0x00 del 0xFF de tipo de AD 0x00 0x06 0xFF 0xFF (MATCH!)

Veredicto: PASS (solo coincidencias de segundo patrón)

Evaluación de coincidencias para el paquete de anuncio [D]

Descripción Valor
Tipo de AD del primer patrón que se va a hacer coincidir 0x01
Longitud del primer patrón que debe coincidir 0x03: 0x02 = 0x01 byte
Patrón que se va a buscar en la posición 0x00 para el 0x01 de tipo de AD 0x01
Bytes en la posición 0x00 del 0x01 de tipo de AD 0x02 (sin coincidencia)
Tipo de AD de segundo patrón que se va a coincidir 0xFF (datos específicos del fabricante)
Longitud del segundo patrón que se va a coincidir 0x06: 0x02 = bytes de 0x04
Patrón que se va a buscar en la posición 0x00 de AD Type 0xFF 0x00 0x06 0xFF 0xFF
Bytes en la posición 0x00 del 0xFF de tipo de AD 0x00 0x06 0xFF 0x01 (sin coincidencia)

Veredicto: FAIL (ninguna coincidencia de patrón)

Ejemplo: Supervisión de anuncios

En este ejemplo se muestra la supervisión de anuncios RSSI. A continuación se muestran los valores RSSI de los anuncios recibidos que coinciden con una condición especificada.

Tiempo (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 que muestra la supervisión de anuncios con valores RSSI a lo largo del tiempo.

El anuncio RSSI es mayor que RSSI_threshold_high en el momento 3. El temporizador periódico para el muestreo comienza en el momento 3. Cada 2 segundos, el temporizador periódico expira y el valor RSSI medio del anuncio recibido se propaga a la pila.

Cuando el temporizador periódico expira en el momento 5, el promedio de los RSS de anuncio recibidos durante este tiempo (-23dB) se propaga a la pila.

Cuando el temporizador periódico expira en el momento 13, el promedio de los RSS de anuncios recibidos durante este período de tiempo es inferior a RSSI_threshold_low (-80dB). El promedio del anuncio RSSI (-85 dB) debe propagarse al host.

Cuando RSSI_threshold_low_time_interval expira al instante 15, se propaga un anuncio al host con RSSI de -85dB. En este ejemplo no se envían anuncios adicionales al host.

Ejemplo: Supervisión de anuncios de BAP desde un dispositivo

Aunque está unido a un aceptador CAP, pero no conectado, un host podría supervisar los anuncios de BAP desde ese 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 set; Bit 1 establecido si el dispositivo distribuyó un IRK
Advertisement_report_filtering_options Bit 0, 1 y 2 set
Peer_device_address <address>
Peer_device_address_type <tipo de dirección>
Peer_device_IRK <IRK, si se establece el bit 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (longitud)
0x16 (Datos de servicio: UUID de 16 bits)
0x00 (start byte)
0x4E (byte bajo de UUID de ASCS)
0x18 (byte alto de UUID de ASCS)

Ejemplo: Supervisión de anuncios cap desde un dispositivo

Aunque está unido a un comandante cap, pero no conectado, un host podría supervisar los anuncios cap desde ese 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 set; Bit 1 establecido si el dispositivo distribuyó un IRK
Advertisement_report_filtering_options Bit 0, 1 y 2 set
Peer_device_address <address>
Peer_device_address_type <tipo de dirección>
Peer_device_IRK <IRK, si se establece el bit 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (longitud)
0x16 (Datos de servicio: UUID de 16 bits)
0x00 (start byte)
0x53 (byte bajo de UUID de CAS)
0x18 (byte alto de UUID de CAS)

Diagrama de flujo: filtrado de listas de aceptación de anuncios y filtros

Este diagrama de flujo proporciona una implementación de controlador de ejemplo de filtrado de anuncios y filtrado de listas de aceptación de filtros cuando se recibe un anuncio.

Un controlador puede implementar esta lógica de forma diferente, siempre que se notifique al host del anuncio o HCI_VS_MSFT_LE_Monitor_Device_Event según lo especificado por el diagrama de flujo.

Diagrama de flujo que muestra el proceso de filtrado de extensiones de Microsoft HCI.

Diagrama de secuencia: Propagación de la respuesta de examen asociada con el anuncio

Diagrama de secuencia: Propagación de la respuesta de examen asociada con el anuncio

En este diagrama de secuencia se muestra una respuesta de examen de propagación asociada a un anuncio que satisface un filtro de anuncio cuando se habilita el examen activo. Este diagrama solo muestra la secuencia esperada de eventos entre el controlador y el host, y no muestra eventos entre el controlador y un dispositivo determinado. Supongamos que hay un anuncio A que satisface un filtro de anuncio y un anuncio B que no satisface el filtro de anuncio.

Diagrama de secuencia que muestra que HCI propaga la respuesta de examen asociada al anuncio.