Estensioni HCI Bluetooth definite da Microsoft

Il Bluetooth Host-Controller Interface (HCI) specifica tutte le interazioni tra un host e un controller di radio Bluetooth. Le specifiche Bluetooth consentono ai comandi e agli eventi HCI definiti dal fornitore di abilitare l'interazione non standard tra host e controller. Microsoft definisce comandi ed eventi HCI specifici del fornitore utilizzati da Windows. Gli implementatori del controller Bluetooth possono usare queste estensioni per implementare funzionalità speciali.

Requirements

I comandi Bluetooth HCI sono identificati da un codice di comando a 16 bit. L'organizzazione Bluetooth definisce i valori nell'intervallo 0x0000 tramite 0xFBFF. I fornitori definiscono i valori nell'intervallo 0xFC00 tramite 0xFFFF, consentendo 1024 diversi codici di comando assegnati dal fornitore.

Il fornitore deve scegliere il valore del codice di comando definito da Microsoft. Microsoft non può scegliere un codice di comando e presupporre che nessun altro fornitore usi il codice per uno scopo in conflitto. Non è sicuro eseguire un comando specifico del fornitore e dipende dal controller per rifiutare il comando se non lo riconosce. Il controller potrebbe interpretare il comando come operazione distruttiva, ad esempio l'aggiornamento del firmware del controller.

Il fornitore deve comunicare il valore scelto tramite un metodo diverso dal controller. Microsoft non specifica come ottenere il codice scelto.

Notifica allo stack Bluetooth di Windows del codice di comando specifico del fornitore

Lo stack Bluetooth di Windows legge il codice di comando specifico del fornitore da una chiave del Registro di sistema, VsMsftOpCode.

La VsMsftOpCode chiave del Registro di sistema ha un tipo di REG_DWORD e i dati della chiave sono il codice operativo specifico del fornitore.

To specify the vendor specific opcode, use the AddReg directive under DDInstall.HW section in the driver's INF. La sezione di aggiunta al registro deve contenere:

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

Example:

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

Comandi HCI definiti da Microsoft

HCI Commands Description
HCI_VS_MSFT_Read_Supported_Features Fornisce una bitmap che descrive le funzionalità definite da Microsoft supportate dal controller e specifica il prefisso per gli eventi definiti da Microsoft restituiti dal controller.
HCI_VS_MSFT_Monitor_Rssi Richiede che il controller avvii il monitoraggio del collegamento misurato RSSI per una connessione specificata e generi un evento quando il collegamento misurato della connessione RSSI non rientra nei limiti specificati.
HCI_VS_MSFT_Cancel_Monitor_Rssi Cancels a previously issued HCI_VS_MSFT_Monitor_Rssi command.
HCI_VS_MSFT_LE_Monitor_Advertisement Richiede che il controller avvii il monitoraggio degli annunci che rientrano nell'intervallo RSSI specificato e soddisfi anche altri requisiti.
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Cancels a previously issued HCI_VS_MSFT_LE_Monitor_Advertisement command.
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Imposta lo stato dei filtri degli annunci pubblicitari.
HCI_VS_MSFT_Read_Absolute_RSSI Legge dal controller il valore assoluto di RSSI (Received Signal Strength Indication) per una connessione BR/EDR.

Comandi e sottocomandi HCI definiti da Microsoft

Il controller riconosce che è presente un solo comando HCI specifico di Microsoft. Il set di comandi specifico di Microsoft viene esteso usando un codice operativo. Il primo parametro di comando per il comando HCI definito da Microsoft è un codice operativo che specifica il sottocomando.

Controllers must support HCI_VS_MSFT_Read_Supported_Features in order to support any other Microsoft HCI subcommands. Il supporto per altri comandi è facoltativo e dipende dai valori restituiti da HCI_VS_MSFT_Read_Supported_Features. Windows non invia comandi secondari definiti da Microsoft a meno che il controller non indichi il supporto per il sottocomando tramite una risposta a HCI_VS_MSFT_Read_Supported_Features.

HCI_VS_MSFT_Read_Supported_Features

HCI_VS_MSFT_Read_Supported_Features fornisce una bitmap che descrive le funzionalità definite da Microsoft supportate dal controller e specifica il prefisso per gli eventi definiti da Microsoft restituiti dal controller.

Il controller completerà sempre questo comando tempestivamente con un evento Command Completed.

Command Code Command parameters Return parameters
HCI_VS_MSFT_Read_Supported_Features Codice di base scelto Subcommand_opcode Status,
Subcommand_opcode,
Supported_features,
Microsoft_event_prefix_length,
Microsoft_event_prefix

Command_parameters

Subcommand_opcode (1 octet):

Value Parameter description
0x00 The subcommand opcode for HCI_VS_MSFT_Read_Supported_Features.

Return_parameters

Status (1 octet):

Value Parameter description
0x00 Il comando è riuscito.
0x01 a 0xFF Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.

Subcommand_opcode (1 octet):

Value Parameter description
0x00 The subcommand opcode for HCI_VS_MSFT_Read_Supported_Features.

Supported_features (8 octets):

Value Parameter description
0x00000000 00000001 Il controller supporta la funzionalità di monitoraggio RSSI per le connessioni BR/EDR. In addition, the controller supports HCI_VS_MSFT_Read_Absolute_RSSI to read the absolute RSSI metric of a BR/EDR connection.
0x00000000 00000002 Il controller supporta la funzionalità di monitoraggio RSSI per le connessioni LE.
0x00000000 00000004 Il controller supporta il monitoraggio RSSI degli annunci legacy LE.
0x00000000 00000008 Il controller supporta il monitoraggio promozionale degli annunci legacy LE.
0x00000000 00000010 Il controller supporta la verifica della validità delle coordinate X e Y pubbliche sulla curva durante il processo di associazione Secure Simple per P-192 e P-256.
Per altre informazioni, vedere Bluetooth Core Specification Erratum 10734.
0x00000000 00000020 Controller supports Continuous Advertising Monitoring of LE advertisements performed concurrently with other radio activities, using HCI_VS_MSFT_LE_Monitor_Advertisement [v1].
0x00000000 00000040 Reserved.
0x00000000 00000080 Il controller supporta l'offload AVDTP e i comandi HCI_VS_MSFT_Avdtp_* descritti in questo documento.
0x00000000 00000100 Reserved.
0x00000000 00000200 Reserved.
0x00000000 00000400 Controller supports HCI_VS_MSFT_LE_Monitor_Advertisement [v2]. Additionally, the Controller supports Continuous Advertising Monitoring of LE advertisements performed concurrently with other radio activities, using HCI_VS_MSFT_LE_Monitor_Advertisement [v2].
0xFFFFFFFF FFFFFF00 Bit riservati per una definizione futura. Deve essere zero.

Microsoft_event_prefix_length (1 octet):

Value Parameter description
0x00 a 0x20 Number of bytes in the Microsoft event prefix field as specified in the returned Microsoft_event_prefix. Questo è il numero di byte di informazioni costanti all'inizio di ogni evento HCI specificato da Microsoft.

Microsoft_event_prefix (variable length):

Value Parameter description
Valore del prefisso dell'evento Informazioni costanti previste all'inizio di ogni evento definito da Microsoft. Queste informazioni vengono usate per distinguere gli eventi definiti da Microsoft da altri eventi personalizzati.

HCI_VS_MSFT_Monitor_Rssi

HCI_VS_MSFT_Monitor_Rssi richiede che il controller avvii il monitoraggio del collegamento misurato RSSI per una connessione specificata e generi un evento quando il collegamento misurato della connessione RSSI non rientra nei limiti specificati.

Command Code Command parameters Return parameters
HCI_VS_MSFT_Monitor_Rssi Codice di base scelto Subcommand_opcode,
Connection_Handle,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period
Status,
Subcommand_opcode

The controller shall notify the host of the RSSI value with a periodically generated event (based on the RSSI_sampling_period). The measured link RSSI shall be the absolute receiver signal strength value in dBm for the BR/EDR connection.

In risposta a un comando HCI_VS_MSFT_Monitor_Rssi, il controller genererà un evento Command Complete con stato uguale a zero se il controller può iniziare il monitoraggio o uno stato diverso da zero. If the status value is nonzero, the controller shall not generate an HCI_VS_MSFT_Rssi_Event in response to this command.

The controller shall refuse the command if another HCI_VS_MSFT_Monitor_Rssi command with the same Connection_Handle is outstanding, or if the specified connection handle is invalid. Il controller può anche rifiutare il comando per altri motivi, ad esempio l'esaurimento delle risorse.

Questo diagramma di stato mostra gli stati di transizione nel controller quando si monitora RSSI per una connessione.

Diagramma dello stato che mostra gli stati di transizione nel controller durante il monitoraggio di RSSI per una connessione.

The controller shall generate an HCI_VS_MSFT_Rssi_Event when the received RSSI is greater than or equal to the specified RSSI_threshold_high. After this event has been generated, the controller shall not generate a new HCI_VS_MSFT_Rssi_Event to specify that the RSSI_threshold_high has been exceeded until it generates an HCI_VS_MSFT_Rssi_Event that specifies the RSSI has fallen below RSSI_threshold_low.

The controller shall generate an HCI_VS_MSFT_Rssi_Event when the received RSSI equals or falls below the specified RSSI_threshold_low over the specified RSSI_threshold_low_time_interval. After this event has been generated, the controller shall not generate a new HCI_VS_MSFT_Rssi_Event to specify that the RSSI has fallen below the RSSI_threshold_low until an HCI_VS_MSFT_Rssi_Event event is generated to specify that RSSI_threshold_high has been reached or exceeded.

If the RSSI_sampling_period is between 0x01 and 0xFE, the controller shall generate an HCI_VS_MSFT_Rssi_Event periodically every RSSI_sampling_period. This event shall contain the average of the RSSI calculated over the RSSI_sampling_period. If the RSSI_sampling_period is 0x00 or 0xFF, the controller shall not notify the host periodically with HCI_VS_MSFT_Rssi_Event.

Command_parameters

Subcommand_opcode (1 ottetto):

Value Parameter description
0x01 The subcommand opcode for HCI_VS_MSFT_Monitor_Rssi.

Connection_Handle (2 ottetti):

Value Parameter description
0xXXXX Handle per la connessione di cui deve essere monitorato RSSI.

RSSI_threshold_high (1 ottetto):

Value Parameter description
0xXX Valore RSSI massimo previsto. Il controller genera un evento se l'RSSI osservato diventa maggiore o uguale a questo valore.
Unit: dBm
Intervallo BR/EDR: da -128 a 127 (intero con segno)
Intervallo LE: da -127 a 20 (intero con segno)

RSSI_threshold_low (1 byte):

Value Parameter description
0xXX Valore RSSI minimo previsto. Il controller genera un evento se l'RSSI osservato diventa minore o uguale a questo valore.
Unit: dBm
Intervallo obbligatorio BR/EDR: da -128 a 127 (intero con segno)
Intervallo obbligatorio LE: da -127 a 20 (intero con segno)

RSSI_threshold_low_time_interval (1 ottetto):

Value Parameter description
0x00 Reserved value.
N = 0xXX The time in seconds over which the RSSI value should be below RSSI_threshold_low before an HCI_VS_MSFT_Rssi_Event is generated.
Time period = N * 1 second
Intervallo obbligatorio: da 0x01 a 0x3C

RSSI_sampling_period (1 ottetto):

Value Parameter description
0x00 Reserved value.
N = 0xXX Intervallo di campionamento in multipli di 100 millisecondi.
Time period = N * 100 milliseconds
Intervallo obbligatorio: da 0x01 a 0xFE
0xFF Reserved value.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01 a 0xFF Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.
0x07 Il controller restituirà La capacità di memoria superata se non dispone di memoria sufficiente per elaborare il comando.
Error code Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x01 Codice operativo del sottocomando per HCI_VS_MSFT_Monitor_Rssi.

Eventi generati a meno che non siano stati mascherati

The controller shall promptly generate a Command Complete event when the HCI_VS_MSFT_Monitor_Rssi command is received. If the Command Complete event returns a status of 0, the controller shall generate an HCI_VS_MSFT_Rssi_Event when one of the following conditions occurs.

  • The observed RSSI for the device over RSSI_threshold_low_time_interval becomes equal to or less than the specified RSSI_threshold_low value.
  • The observed RSSI for the device becomes greater than or equal to the specified RSSI_threshold_high value.
  • The RSSI_sampling_period is valid and the sampling period expires.

Il controller deve eseguire tutte le operazioni di pulizia necessarie se la connettività con il dispositivo specificato viene persa. In this case, an HCI_VS_MSFT_Cancel_Monitor_Rssi command isn't sent to the controller.

HCI_VS_MSFT_Cancel_Monitor_Rssi

HCI_VS_MSFT_Cancel_Monitor_Rssi cancels a previously issued HCI_VS_MSFT_Monitor_Rssi command. Il controller genererà tempestivamente un evento Command Completed in risposta a questo comando.

Command Code Command parameters Return parameters
HCI_VS_MSFT_Cancel_Monitor_Rssi Codice di base scelto Subcommand_opcode,
Connection_Handle
Status,
Subcommand_opcode

Command_parameters

Subcommand_opcode (1 ottetto):

Value Parameter description
0x02 The subcommand opcode for HCI_VS_MSFT_Cancel_Monitor_Rssi.

Connection_Handle (2 ottetti):

Value Parameter description
0xXXXX L'handle per la connessione di cui deve essere annullato il segnale RSSI.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01 a 0xFF Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x02 The subcommand opcode for HCI_VS_MSFT_Cancel_Monitor_Rssi.

Eventi generati a meno che non siano stati mascherati

The controller shall generate a Command Complete event when the HCI_VS_MSFT_Cancel_Monitor_RSSI command is received.

HCI_VS_MSFT_LE_Monitor_Advertisement

HCI_VS_MSFT_LE_Monitor_Advertisement richiede che il controller avvii il monitoraggio degli annunci che ricadono nell'intervallo RSSI specificato e soddisfano anche una delle condizioni seguenti.

  • Un criterio specificato può essere abbinato al pacchetto di annunci ricevuti.
  • Un UUID specificato può essere abbinato al pacchetto di annuncio ricevuto.
  • È possibile usare una chiave IRK (Identity Resolution Key) specificata per risolvere l'indirizzo privato del dispositivo da cui ha avuto origine il pacchetto pubblicitario.
  • Un indirizzo Bluetooth specificato può essere abbinato al pacchetto di annunci ricevuti.

Il comando v2 consente all'host di combinare alcune delle condizioni precedenti con opzioni che regolano l'origine dell'annuncio e la destinazione di un annuncio diretto, per perfezionare ulteriormente gli annunci monitorati. Il comando v2 consente inoltre all'host di filtrare quali annunci monitorati portano il controller a generare rapporti sugli annunci.

Command Code Command parameters Return parameters
HCI_VS_MSFT_LE_Monitor_Advertisement [v2] Codice di base scelto 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,
<Parametri della condizione>
Status,
Subcommand_opcode,
Monitor_Handle
HCI_VS_MSFT_LE_Monitor_Advertisement [v1] Codice di base scelto Subcommand_opcode_v1,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Condition_type,
<Parametri della condizione>
Status,
Subcommand_opcode,
Monitor_Handle

Il controller genererà un evento Command Complete in risposta a questo comando. Il valore di stato deve essere impostato su zero se il controller può iniziare il monitoraggio o uno stato diverso da zero in caso contrario. If the controller doesn't support RSSI monitoring for LE Advertisements, it shall ignore the RSSI_threshold_high, RSSI_threshold_low, RSSI_threshold_low_time_interval, and RSSI_sampling_period parameter values.

Questo diagramma di stato mostra gli stati di transizione nel controller quando si monitora RSSI per un annuncio pubblicitario.

Diagramma dello stato che mostra gli stati di transizione per HCI_VS_MSFT_LE_Monitor_Advertisement.

The controller shall begin monitoring an advertisement only when the received RSSI is greater than or equal to RSSI_threshold_high for a particular device and the Monitor_options match (see below). The controller shall generate an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 1 and Monitor_handle set to the handle for this Condition, to notify the host that the controller is monitoring this particular device for Condition. Additionally, the Controller shall propagate the first advertisement report of a monitored advertisement to the Host only when the Advertisement_report_filter_options match (see below).

The Monitor_options for a filter are considered a match based on the following logic (in pseudocode):

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)

And for a monitored advertisement, the Advertisement_report_filter_options are considered a match based on the following logic (in pseudocode):

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)

The controller shall stop monitoring for Condition if the RSSI of the received advertisements equals or falls below RSSI_threshold_low over RSSI_threshold_low_interval for the particular device. The controller shall generate an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 0 to notify the host that the controller has stopped monitoring the particular device for the Condition. After the controller specifies the HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 0, the controller shall not allow further advertisement packets to flow to the host for the device until the controller has notified the host that the RSSI for the particular device has risen to or above RSSI_threshold_high for the particular device for the Condition.

Additionally, the controller shall generate an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 0 to notify the host that the controller has stopped monitoring the device for the Condition if the specified RSSI_threshold_low_time_interval expires without receiving any advertising packets from the device. Se il controller monitora un dispositivo per una determinata condizione, le istruzioni seguenti sono vere.

If the controller supports the RSSI monitoring of LE extended advertisements without sampling, the controller shall propagate anonymous advertisement packets to the host if the RSSI value for the packet is greater than or equal to RSSI_threshold_high. Anonymous advertisements shall not be tracked and the HCI_VS_MSFT_LE_Monitor_Device_Event event shall not be generated.

Se il titolare del trattamento supporta il monitoraggio RSSI degli annunci LE senza campionamento, il titolare del trattamento genera un rapporto pubblicitario troncato nel caso in cui i frammenti ricevuti dell'annuncio corrispondano, ma in cui l'intero annuncio non è stato ricevuto correttamente.

Il controllore supporta almeno 30 istanze di Monitor_handle simultanee, almeno 30 dispositivi monitorati simultaneamente e almeno 20 annunci duplicati tracciati simultaneamente. Il Controller deve anche essere in grado di eseguire una scansione LE continua con un ciclo di lavoro del 10%.

Se la risoluzione degli indirizzi è abilitata nel controller e l'host intende monitorare un dispositivo remoto con il relativo IRK archiviato correttamente nell'elenco di risoluzione del controller, l'host fornirà i parametri Peer_Identity_Address e Peer_Identity_Address_Type dalla voce dell'elenco di risoluzione del dispositivo remoto come parametri Peer_device_address e Peer_device_address_type, rispettivamente.

RSSI_sampling_period Legacy Advertisements Annunci estesi (non anonimi) Annunci estesi (anonimo)
0x00 The controller shall propagate all received advertisement packets to the host for the device for this Condition unless the controller previously received an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00. The controller shall propagate an advertisement packet to the host even if the received RSSI is less than or equal to RSSI_threshold_low as long as RSSI_threshold_low_time_interval hasn't expired for the particular device for this Condition. Il valore RSSI di questo pacchetto pubblicitario sarà il valore RSSI dell'annuncio ricevuto. If the controller supports the RSSI monitoring of LE extended advertisements without sampling, same behavior as Legacy Advertisements column except that an advertisement packet is defined as all PDUs in the advertising chain. If the controller supports the RSSI monitoring of LE extended advertisements without sampling, the controller shall propagate all received advertisement packets to the host for the device for this Condition unless the controller previously received an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00.
0x01 a 0xFE The controller shall propagate legacy advertisement packets to the host every RSSI_sampling_period specified unless the controller previously received an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00. Il valore RSSI specificato per l'annuncio sarà la media del valore RSSI ricevuto durante questo intervallo di campionamento. Se il controller non riceve un pacchetto pubblicitario durante il periodo di campionamento, non propaga un annuncio all'host. It's possible that RSSI_sampling_period is less than RSSI_threshold_low_time_interval and all advertisements received during the RSSI_sampling_period have RSSI below RSSI_threshold_low. Il controller deve comunque propagare l'annuncio con la media del valore RSSI ricevuto durante questo intervallo di campionamento. If the controller supports the RSSI monitoring of LE extended advertisements without sampling, the controller shall behave as if the RSSI_sampling_period was 0x00. If the controller supports the RSSI monitoring of LE extended advertisements without sampling, the controller shall behave as if the RSSI_sampling_period was 0x00.
0xFF The controller shall not allow further advertisement packets to flow to the host for the device for the Condition until the controller has notified the host that the particular device's RSSI has fallen below RSSI_threshold_low for RSSI_threshold_low_time_interval for the particular device for this Condition. This notification is done by generating an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 0. If the controller supports the RSSI monitoring of LE extended advertisements without sampling, same behavior as Legacy Advertisements column. If the controller supports the RSSI monitoring of LE extended advertisements without sampling, the controller shall behave as if the RSSI_sampling_period was 0x00.

If the controller previously received an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00, the sampling period timer shall not be stopped. Per altre informazioni, vedere Esempio: HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable sui filtri con periodo di campionamento. Se il controller riceve pacchetti pubblicitari non duplicati dallo stesso dispositivo, confronterà ogni pacchetto pubblicitario con le condizioni archiviate nel controller.

If the controller receives an advertisement packet from a device that matches multiple Conditions, then the controller shall generate an HCI_VS_MSFT_LE_Monitor_Device_Event for each Condition that matched, with Monitor_handle set to the Condition that matched.

If the controller is unable to monitor the RSSI values for all devices in range that match the Condition, it keeps monitoring as many devices as it can. La decisione sui dispositivi da monitorare dipenderà dai valori RSSI degli annunci ricevuti. Il controller monitorerà i dispositivi con maggiore potenza del segnale ricevuto.

If the controller has notified the host about a particular device (A) and it's monitoring devices at maximum hardware capacity, and if another device (B) comes into range with a higher RSSI value, then the controller shall notify the host that it has stopped monitoring the device (A) by generating an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 0. The controller shall also generate an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 1 to notify the host that the device (B) is now being monitored.

Tipo di condizione e parametri di condizione

The Condition_type parameter specifies whether the Condition parameter specifies a pattern, UUID, IRK, or BD_ADDR.

If the Condition_type parameter specifies a pattern, the Condition contains two sections that contain the number of patterns present within the Condition, and the pattern data.

Diagramma che illustra il layout dei dati della condizione del modello per HCI_VS_MSFT_LE_Monitor_Advertisement.

Number of Patterns specifica il numero di modelli che devono essere confrontati.

Pattern Data has the following format.

  • Length specifies the length of this pattern include the data type and start byte of the pattern.
  • AD Type specifies the AD Type field.
  • Inizio del pattern specifica la posizione iniziale dei byte del pattern immediatamente successivo al tipo AD.
  • Pattern has a size of (Length - 0x2) and is the pattern to be matched for the specified AD Type within the advertisement packet from the specified starting byte.

Se sono specificati più modelli, il controller deve assicurarsi che almeno un modello corrisponda all'annuncio ricevuto.

Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento:

  • Il titolare del trattamento cercherà il modello nei primi 251 ottetti dei dati della pubblicità host e potrà cercare in eventuali ottetti rimanenti dei dati della pubblicità host. Se la sezione AD si estende oltre i primi 251 ottetti dei dati di Host Advertising Data, il titolare del trattamento cercherà il modello all'interno della parte della sezione AD che si trova nei primi 251 ottetti dei dati di Host Advertising e potrebbe cercare eventuali ottetti rimanenti dei dati di Host Advertising Data. Nota: in base alla frammentazione da parte dell'inserzionista, i primi 251 ottetti dei dati della pubblicità host possono estendersi attraverso AdvData di più PDU pubblicitari. Gli scanner devono limitare il numero di AuxPtrs che seguono, per evitare di seguire catene eccessivamente lunghe di PDU.

  • Il titolare del trattamento deve tenere traccia in base a un indirizzo per dispositivo per ogni set di annunci pubblicitari. The controller shall propagate a HCI_VS_MSFT_LE_Monitor_Device_Event for each advertising set that matches the pattern even if the advertisement comes from the same device address.

If the Condition_type parameter specifies a UUID, the Condition parameter contains a UUID Type and a UUID. Il tipo UUID specifica se l'UUID è a 16 bit, a 32 bit o a 128 bit. Il controller analizzerà l'UUID del servizio del pacchetto di annuncio per verificare la presenza dell'UUID specificato. Se il tipo UUID è definito come 0x01, il controller analizzerà l'elenco incompleto degli UUID del servizio a 16 bit e l'elenco completo degli UUID del servizio a 16 bit specificati nel tipo di AD UUID del servizio. Se il tipo UUID è definito come 0x02, il controller analizzerà l'elenco incompleto degli UUID del servizio a 32 bit e l'elenco completo degli UUID a 32 bit specificati nel tipo di AD UUID del servizio. Se il tipo UUID specificato è 0x03, il controller analizzerà l'elenco incompleto degli UUID del servizio a 128 bit e l'elenco completo degli UUID del servizio a 128 bit specificati nel tipo di AD UUID del servizio.

Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento:

  • Il titolare del trattamento cercherà l'UUID del servizio nei primi 251 ottetti dei dati della pubblicità host e potrà cercare eventuali ottetti rimanenti dei dati della pubblicità host. Se la sezione AD si estende oltre i primi 251 ottetti dei dati di pubblicità host, il controllore cercherà l'UUID del servizio all'interno della parte della sezione AD che si trova nei primi 251 ottetti dei dati di pubblicità host e potrebbe cercare negli eventuali ottetti rimanenti dei dati di pubblicità host. Nota: in base alla frammentazione da parte dell'inserzionista, i primi 251 ottetti dei dati pubblicitari dell'host possono estendersi sugli AdvData di più PDU pubblicitari. Gli scanner devono limitare il numero di AuxPtrs che seguono, per evitare di seguire catene eccessivamente lunghe di PDU.

  • Il titolare del trattamento deve tenere traccia in base a un indirizzo per dispositivo per ogni set di annunci pubblicitari. The controller shall propagate a HCI_VS_MSFT_LE_Monitor_Device_Event for each advertising set that matches the Service UUID even if the advertisement comes from the same device.

If the Condition_type parameter specifies an IRK, the Condition parameter contains the IRK.

If the Condition_type parameter specifies a Bluetooth Address, the Condition parameter contains the address type and BD_ADDR.

Il titolare del trattamento deve mantenere il monitoraggio in base alle condizioni, anche quando l'analisi (attiva o passiva) è abilitata. Quando l'analisi attiva è abilitata, la risposta di analisi per un annuncio pubblicitario corrispondente a un filtro deve essere propagata all'host.

If the controller receives a HCI_VS_MSFT_LE_Monitor_Advertisement command when the filters are disabled (due to a previously received HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00), the controller shall accept the command if it can, but set it to a disabled state. Il controller può anche rifiutare il comando per altri motivi, ad esempio l'esaurimento delle risorse.

Se tutti i bit di Monitor_options sono chiari, il controller deve restituire il codice di errore Parametri di comando HCI non validi (0x12).

Se è impostato bit 1 o bit 3 di Monitor_options e Peer_device_IRK è impostato su un IRK non valido oppure nessuno dei bit di Monitor_options è impostato, il controller deve restituire il codice di errore Parametri di comando HCI non validi (0x12).

Se è impostato bit 0 o bit 1 o bit 2 o bit 3 di Monitor_options e Condition_type è impostato su 0x03 o 0x04, il controller deve restituire il codice di errore Parametri di comando HCI non validi (0x12).

Se viene impostato il bit 0 di Advertisement_report_filter_options e RSSI_sampling_period è un valore diverso da 0x00, il controller deve restituire il codice di errore Parametri di comando HCI non validi (0x12).

Missing parameters

Quando viene eseguita una versione di questo comando che non include tutti i parametri, è necessario usare quanto segue:

Parameter Value
Monitor_options Bit 5 impostato; tutti gli altri bit azzerati
Advertisement_report_filter_options Bit 1 e 2 impostati; tutti gli altri bit cancellati
Peer_device_IRK 0x0000000000000000 0000000000000000
Peer_device_address 0x000000000000
Peer_device_address_type 0x00

Command_parameters

Subcommand_opcode_v1 (1 ottetto):

Value Parameter description
0x03 The subcommand opcode for HCI_VS_MSFT_LE_Monitor_Advertisement [v1].

Subcommand_opcode_v2 (1 byte):

Value Parameter description
0x0F The subcommand opcode for HCI_VS_MSFT_LE_Monitor_Advertisement [v2].

RSSI_threshold_high (1 ottetto):

Value Parameter description
0xXX Valore RSSI massimo previsto. Il controller genera un evento se l'RSSI osservato diventa maggiore o uguale a questo valore.
Unit: dBm
Intervallo obbligatorio: da -127 a 20 (intero con segno)

RSSI_threshold_low (1 byte):

Value Parameter description
0xXX Valore RSSI minimo previsto. Il controller genera un evento se l'RSSI osservato diventa minore o uguale a questo valore.
Unit: dBm
Intervallo obbligatorio: da -127 a 20 (intero con segno)

RSSI_threshold_low_time_interval (1 ottetto):

Value Parameter description
0x00 Reserved value.
N = 0xXX The time in seconds over which the RSSI value should be below RSSI_threshold_low before an HCI_VS_MSFT_Rssi_Event is generated
Time period = N * 1 second
Intervallo obbligatorio: 0x01 da 0x3C.

RSSI_sampling_period (1 ottetto):

Value Parameter description
0x00 Il titolare del trattamento propaga tutti gli annunci ricevuti all'host.
N = 0xXX Intervallo di campionamento in multipli di 100 millisecondi.
Time period = N * 100 milliseconds.
Intervallo obbligatorio: da 0x01 a 0xFE
0xFF Il titolare del trattamento non propaga alcun annuncio ricevuto all'host.

Monitor_options (1 ottetto):

Bit number Parameter description
0 Il Controller monitora i PDU pubblicitari in cui AdvA o il relativo indirizzo di identità risolto corrisponde a Peer_device_address e Peer_device_address_type e dove TargetA non è presente o, se presente, TargetA è consentito in base alla politica di filtro di scansione, se tali PDU corrispondono alla condizione specificata in Condition_Type.
1 Il controllore monitorerà le PDU pubblicitarie in cui AdvA è risolvibile con Peer_device_IRK e dove TargetA non è presente o, se presente, TargetA è consentito in base alla Politica del filtro di scansione, se tali PDU corrispondono alla condizione specificata in Condition_Type. Questo bit non deve essere impostato se la privacy del livello di collegamento è in uso nel controller.
2 Il controller deve monitorare le PDU pubblicitarie dirette in cui TargetA è consentito in base alla politica del filtro di scansione e dove AdvA o il relativo indirizzo di identità risolto corrisponde a Peer_device_address e Peer_device_address_type. Indipendentemente dal fatto che il PDU corrisponda alla condizione specificata in Condition_Type.
3 Il controllore monitorerà le PDU pubblicitarie dirette in cui il TargetA è consentito in base alla Politica del Filtro di Scansione e dove l'AdvA è risolvibile con Peer_device_IRK. Indipendentemente dal fatto che il PDU corrisponda alla condizione specificata in Condition_Type. Questo bit non deve essere impostato se la privacy del livello di collegamento è in uso nel controller.
4 Il titolare del trattamento monitorerà le PDU pubblicitarie dirette in cui targetA è consentito in base ai criteri di filtro di analisi, indipendentemente dal valore di Peer_device_address e Peer_device_address_type o Peer_device_IRK e indipendentemente dal fatto che il PDU corrisponda alla condizione specificata in Condition_Type.
5 Il Controller monitora i PDUs pubblicitari da qualsiasi AdvA in cui TargetA non è presente o, se presente, TargetA è consentito in base alla Politica del Filtro di Scansione, se tali PDU corrispondono alla condizione specificata in Condition_Type.
Tutti gli altri bit Riservato per uso futuro

Opzioni_di_filtraggio_rapporto_annuncio (1 byte):

Bit number Parameter description
0 Filtra i PDUs pubblicitari duplicati. Questo bit verrà impostato solo se RSSI_sampling_period è 0x00.
1 Il controller genererà eventi HCI_LE_Advertising_Report o HCI_LE_Directed_Advertising_Report o HCI_LE_Extended_Advertising_Report per i PDUs pubblicitari legacy, se tali PDUs corrispondono alle Monitor_options specificate.
2 Il Controller genera eventi di HCI_LE_Extended_Advertising_Report per PDUs di annunci estesi, se tali PDUs corrispondono alle Monitor_options specificate.
3 Il Controller genererà eventi HCI_LE_Advertising_Report, HCI_LE_Directed_Advertising_Report o HCI_LE_Extended_Advertising_Report per le PDU pubblicitarie dirette, se tali PDU corrispondono alle opzioni dello specifico Monitor.
Tutti gli altri bit Riservato per uso futuro

Peer_device_address (6 byte)

Value Parameter description
0xXXXXXXXXXXXX Indirizzo pubblico del dispositivo o indirizzo casuale del dispositivo da abbinare.

Peer_device_address_type (1 ottetto):

Value Parameter description
0x00 Indirizzo dispositivo pubblico
0x01 Indirizzo casuale del dispositivo
Tutti gli altri valori Riservato per uso futuro

Peer_device_IRK (16 byte):

Value Parameter description
0x0000000000000000 0000000000000000 Invalid IRK. Non deve essere il valore quando viene impostato Monitor_options bit 1 o quando viene impostato Monitor_options bit 3.
0xXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX IRK del dispositivo da confrontare. Peer_device_address e Peer_device_address_type devono essere popolati.

Tipo_condizione (1 ottetto):

Value Parameter description
0x01 La condizione è uno schema che deve essere rispettato nell'annuncio pubblicitario.
0x02 La condizione è del tipo UUID e comprende un UUID.
0x03 La condizione è la risoluzione di un IRK. Escluso se uno dei bit di Monitor_options 0, 1, 2 o 3 è impostato.
0x04 La condizione è un tipo di indirizzo Bluetooth e un indirizzo Bluetooth. Escluso se uno dei bit di Monitor_options 0, 1, 2 o 3 è impostato.

Condizione: i campi applicabili per Condizione dipendono dal valore di Condition_type. Per altre informazioni, vedere la sezione parametri Condition_type e Condition.

Numero_di_modelli (1 ottetto):

Value Parameter description
0xXX Numero di modelli specificati all'interno del parametro Pattern_data.

Pattern_data (>3 ottetti):

Value Parameter description
Length Lunghezza di questo schema.
Data type Tipo di dati della sezione dell'annuncio. I valori sono elencati nel documento Numeri assegnati Bluetooth.
Start byte Posizione iniziale del modello da confrontare per il tipo di dati specificato.
Pattern Modello da associare (dimensione della lunghezza - 0x2 byte).

UUID_type (1 byte):

Value Parameter description
0x01 L'UUID è un servizio a 16 bit.
0x02 L'UUID è un servizio a 32 bit.
0x03 L'UUID è un servizio a 128 bit.

UUID (2, 4 o 16 ottetti):

Value Parameter description
0xXXXX 2 byte se UUID_type è 0x01.
4 byte se UUID_type è 0x02.
16 byte se UUID_type è 0x03.

IRK (16 byte):

Value Parameter description
0xXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX IRK da usare per risolvere l'indirizzo privato.

Tipo_di_indirizzo (1 octet):

Value Parameter description
0x00 Indirizzo del dispositivo pubblico.
0x01 Indirizzo casuale del dispositivo.
0x02 a 0xFF Valori riservati per uso futuro.

BD_ADDR (6 ottetti):

Value Parameter description
0xXXXXXXXXXXXX Indirizzo Bluetooth del dispositivo da monitorare.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x07 Il controller restituirà La capacità di memoria superata se non dispone di memoria sufficiente per elaborare il comando.
Error code Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x03 o 0x0F The subcommand opcode for HCI_VS_MSFT_LE_Monitor_Advertisement [v1] or HCI_VS_MSFT_LE_Monitor_Advertisement [v2], depending on which command was submitted.

Monitor_handle (1 byte):

Value Parameter description
0x00 a 0xFF Riferimento per questa regola. This handle is used as a parameter for HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement to cancel monitoring the advertisement.
Questo parametro è valido solo se Status è 0x00.

Eventi generati a meno che non siano stati mascherati

When the HCI_VS_MSFT_LE_Monitor_Advertisement command is received, the controller shall generate a Command Complete event.

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement cancels a previously issued HCI_VS_MSFT_LE_Monitor_Advertisement command.

Command Code Command parameters Return parameters
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Codice di base scelto Subcommand_opcode,
Monitor_handle
Status,
Subcommand_opcode

Il controller genererà tempestivamente un evento Command Completed in risposta a questo comando.

Command_parameters

Subcommand_opcode (1 ottetto):

Value Parameter description
0x04 The subcommand opcode for HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Connection_Handle (1 byte):

Value Parameter description
0xXX La maniglia per il filtro che viene annullato.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x07 Il controller restituirà La capacità di memoria superata se non dispone di memoria sufficiente per elaborare il comando.
Error code Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x04 The subcommand opcode for HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Eventi generati a meno che non siano stati mascherati

The controller shall generate a Command Complete event when the HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement command is received.

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable imposta lo stato dei filtri degli annunci pubblicitari.

Command Code Command parameters Return parameters
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Codice di base scelto Subcommand_opcode,
Enable
Status,
Subcommand_opcode

If Enable is set to 0x00, the controller shall propagate received advertisements to the host based on existing filter accept list settings. The controller shall continue monitoring the devices that are currently being monitored and generate an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 0 if the device is no longer being monitored. The controller shall generate an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 1 if a new device is being monitored. The host may issue HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable with Enable set to 0x01 to reenable all the filter conditions.

If Enable is set to 0x01, this command enables all filters that were set with a previously issued HCI_VS_MSFT_LE_Monitor_Advertisement command. Il controller rifiuterà un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable se non alterna lo stato del filtro.

  • The controller shall reject an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x01 if it previously received an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x01.
  • The controller shall reject the HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00 if it previously received an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00.

Lo stato predefinito del filtro di annuncio deve essere disattivato. This state is equivalent to the controller previously receiving a HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to 0x00. Il controller genererà tempestivamente un evento Command Completed in risposta a questo comando.

Command_parameters

Subcommand_opcode (1 ottetto):

Value Parameter description
0x05 The subcommand opcode for HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Abilita (1 ottetto):

Value Parameter description
0x00 Revert to current filter accept list behavior, but continue monitoring devices based on the Condition from HCI_VS_MSFT_LE_Monitor_Advertisement commands.
0x01 Enable all issued HCI_VS_MSFT_LE_Monitor_Advertisement commands on the controller.

Return_parameter

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x0C The controller shall return Command Disallowed if the controller rejected the command because it previously saw an HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command with Enable set to the same value as this command.
Error code Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x05 The subcommand opcode for HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Eventi generati a meno che non siano stati mascherati

The controller shall generate a Command Complete event when the HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable command is received.

HCI_VS_MSFT_Read_Absolute_RSSI

HCI_VS_MSFT_Read_Absolute_RSSI reads the absolute Received Signal Strength Indication (RSSI) value for a BR/EDR connection from the controller.

Command Code Command parameters Return parameters
HCI_VS_MSFT_Read_Absolute_RSSI Codice di base scelto Subcommand_opcode,
Connection_Handle
Status,
Subcommand_opcode,
Connection_Handle,
RSSI

Un handle di connessione viene fornito sia come comando che come parametro restituito per identificare la connessione ACL di cui viene letto RSSI. The RSSI metric is the absolute receiver signal strength in dBm to ± 6 dB accuracy. Se non è possibile leggere l'RSSI, la metrica RSSI verrà impostata su 127. Il controller completerà sempre questo comando tempestivamente con un evento Command Completed.

Command_parameters

Subcommand_opcode (1 ottetto):

Value Parameter description
0x06 Codice operativo sottocomando per HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 ottetti):

Value Parameter description
0xXXXX L'handle della connessione BR/EDR di cui deve essere letto l'RSSI.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01 a 0xFF Il comando non è riuscito. See Error Codes in the Bluetooth Core specification for details.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x06 The subcommand opcode for HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 ottetti):

Value Parameter description
0xXXXX Handle per la connessione BR/EDR di cui è stato letto il RSSI.

RSSI (1 ottetto):

Value Parameter description
N = 0xXX Valore RSSI per la connessione BR/EDR.
Unit: dBm
Intervallo obbligatorio: da -128 a 127 (intero con segno)

Eventi generati a meno che non siano stati mascherati

The controller shall generate a Command Complete event when the HCI_VS_MSFT_Read_Absolute_RSSI command has completed.

Eventi HCI Bluetooth definiti da Microsoft

Tutti gli eventi Bluetooth HCI definiti da Microsoft sono eventi definiti dal fornitore e usano il codice evento 0xFF. I dati dell'evento per gli eventi Microsoft iniziano sempre con una stringa costante di byte per distinguere gli eventi definiti da Microsoft da altri eventi definiti dal fornitore. The length and value of the constant string are defined by the controller implementer and returned in response to HCI_VS_MSFT_Read_Supported_Features.

HCI event Description
HCI_VS_MSFT_Rssi_Event HCI_VS_MSFT_RSSI_Event indicates that an HCI_VS_MSFT_Monitor_Rssi command has completed.
HCI_VS_MSFT_LE_Monitor_Device_Event HCI_VS_MSFT_LE_Monitor_Device_Event indica che il controller ha avviato o arrestato il monitoraggio di un dispositivo Bluetooth LE.

HCI_VS_MSFT_RSSI_Event

HCI_VS_MSFT_RSSI_Event indicates that an HCI_VS_MSFT_Monitor_Rssi command has completed. If the Status parameter is zero, the command completed because the RSSI value for the remote device changed to a value outside of the specified range. If the Status parameter is nonzero, the command completed because the RSSI value of the connection can no longer be monitored.

Event Event Code Codice evento Microsoft Event parameters
HCI_VS_MSFT_RSSI_Event 0xFF 0x01 Event_prefix,
Microsoft_event_code,
Status,
Connection_Handle,
RSSI

Event_parameters

Event_prefix (dimensione variabile):

Value Parameter description
Event prefix Prefisso dell'evento che contrassegna questo evento come definito da Microsoft. The size and value are as returned by the HCI_VS_MSFT_Read_Supported_Features command.

Microsoft_event_code (1 ottetto):

Value Parameter description
0x01 The event code for HCI_VS_MSFT_RSSI_Event.

Stato (1 ottetto):

Value Parameter description
0x00 Success. Il valore RSSI della connessione ha soddisfatto una delle condizioni seguenti. The RSSI reached or exceeded RSSI_threshold_high.
The RSSI reached or dropped below RSSI_threshold_low over RSSI_threshold_low_time_interval seconds.
The RSSI_sampling_period has expired and this event was generated to notify the host of the RSSI value.
0x01 a 0xFF Failure. Il valore RSSI della connessione non può più essere monitorato. Il codice di errore è in genere uno dei codici che descrive il motivo per cui la connessione ACL sottostante è stata persa.

Connection_Handle (2 ottetti):

Value Parameter description
0xXXXX La maniglia per la connessione di cui si desidera monitorare l'RSSI.

RSSI (1 ottetto):

Value Parameter description
0xXX Il valore RSSI misurato del collegamento per la connessione.
Unit: dBm
Intervallo BR/EDR: da -128 a 127 (intero con segno)
Intervallo LE: da -127 a 20 (intero con segno)

HCI_VS_MSFT_LE_Monitor_Device_Event

HCI_VS_MSFT_LE_Monitor_Device_Event indica che il controller ha avviato o arrestato il monitoraggio di un dispositivo Bluetooth LE.

If the Monitor_state parameter value is 1, the controller started monitoring the Bluetooth device with the specified BD_ADDR. If the Monitor_state parameter value is 0, the controller stopped monitoring the Bluetooth device with the specified BD_ADDR.

Event Event Code Codice evento Microsoft Event parameters
HCI_VS_MSFT_LE_Monitor_Device_Event 0xFF 0x02 Event_prefix,
Microsoft_event_code,
Address_type,
BD_ADDR,
Monitor_handle,
Monitor_state

The controller shall not generate an HCI_VS_MSFT_LE_Monitor_Device_Event with the Monitor_state parameter set to 0 if it hasn't already generated an HCI_VS_MSFT_LE_Monitor_Device_Event with Monitor_state set to 1.

Event_parameters

Event_prefix (dimensione variabile):

Value Parameter description
Event prefix Prefisso dell'evento che contrassegna questo evento come definito da Microsoft. The size and value are as returned by the HCI_VS_MSFT_Read_Supported_Features command.

Microsoft_event_code (1 ottetto):

Value Parameter description
0x02 The event code for HCI_VS_MSFT_LE_Monitor_Device_Event.

Tipo_di_indirizzo (1 octet):

Value Parameter description
0x00 Indirizzo del dispositivo pubblico.
0x01 Indirizzo casuale del dispositivo.
0x02 a 0xFF Valori riservati per uso futuro.

BD_ADDR (6 ottetti):

Value Parameter description
0xXXXXXXXXXXXX Indirizzo Bluetooth del dispositivo.

Monitor_handle (1 byte):

Value Parameter description
0xXX The handle to the filter that was specified for the HCI_VS_MSFT_LE_Monitor_Advertisement command.

Stato_monitoraggio (1 ottetto):

Value Parameter description
0x00 The controller stopped monitoring the device specified by BD_ADDR and Monitor_handle.
0x01 The controller started monitoring the device specified by BD_ADDR and Monitor_handle.

Comandi HCI AVDTP definiti da Microsoft

I seguenti comandi HCI AVDTP forniscono supporto per il trasferimento A2DP della banda laterale audio. Per altre informazioni, vedere Audio Sideband A2DP Offload.

Comandi AVDTP HCI Description
HCI_VS_MSFT_Avdtp_Capabilities_Configuration Configura l'interfaccia di trasporto audio e restituisce le funzionalità codec del controller Bluetooth, che è un elenco di blocchi di informazioni sui codec.
HCI_VS_MSFT_Avdtp_Open Alloca e configura le risorse di offload AVDTP all'interno del controller.
HCI_VS_MSFT_Avdtp_Start Avvia lo streaming audio dal trasporto audio ai pacchetti multimediali AVDTP trasmessi.
HCI_VS_MSFT_Avdtp_Suspend Arresta l'attività di streaming avviata da HCI_VS_MSFT_Avdtp_Start.
HCI_VS_MSFT_Avdtp_Close Rilascia le risorse di scaricamento AVDTP allocate da HCI_VS_MSFT_Avdtp_Open.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

HCI_VS_MSFT_Avdtp_Capabilities_Configuration configura l'interfaccia del trasporto audio e restituisce le funzionalità codec del controller Bluetooth, che è un elenco di blocchi di informazioni sui codec. Ogni blocco di informazioni sul codec descrive un codec supportato.

Alcuni parametri riportati di seguito sono matrici di strutture con lunghezza variabile, quindi si presuppone che tutti questi parametri siano ancora inseriti in un comando HCI e in un evento HCI corrispondente.

Command_parameters

External_codec_count (1 byte):

Value Parameter description
0x00-0xFF Numero di blocchi di Codec_capability che seguono.

External_codec_capability (lunghezza variabile)

Value Parameter description
Blocco di capacità codec Blocco di informazioni sulle funzionalità codec, come descritto nelle informazioni sulle funzionalità codec. Questo descrive un singolo codec supportato dal dispositivo collegato all'interfaccia audio.

This data structure repeats External_codec_count times.

Audio_interface_parameter_count (1 ottetto):

Value Parameter description
0x00-0xFF Il numero di parametri dell'interfaccia audio che seguono.

Audio_interface_parameter (lunghezza variabile)

Value Parameter description
Parametro dell'interfaccia audio Parametro di interfaccia audio come descritto in precedenza, impostato dal dispositivo connesso all'interfaccia audio.

This data structure repeats Audio_interface_parameter_count times.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01-0xFF Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode _ (1 octet)

Value Parameter description
0x07 Codice operativo sottocomando per HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Internal_codec_count (1 ottetto):

Value Parameter description
0x00-0xFF Il numero di blocchi di Internal_codec_capability che seguono.

Internal_codec_capability (lunghezza variabile):

Value Parameter description
Blocco di capacità codec Blocco di informazioni sulle funzionalità del codec come descritto in Audio Sideband A2DP Offload. Questo descrive un singolo codec supportato dal controller Bluetooth.

Questa struttura di dati si ripete Internal_codec_count volte.

Audio_interface_parameter_count (1 ottetto):

Value Parameter description
0x00-0xFF Il numero di parametri dell'interfaccia audio che seguono.

Audio_interface_parameter (lunghezza variabile)

Value Parameter description
Parametro dell'interfaccia audio Parametro di interfaccia audio come descritto in precedenza. Il software host passa questo parametro al dispositivo connesso all'interfaccia audio.

Questa struttura di dati si ripete Audio_interface_parameter_count volte.

HCI_VS_MSFT_Avdtp_Open

Alloca e configura le risorse di offload AVDTP all'interno del controller.

Alcuni parametri riportati di seguito sono matrici di strutture con lunghezza variabile, quindi si presuppone che tutti questi parametri siano ancora inseriti in un comando HCI e in un evento HCI corrispondente.

Command_parameters

Connection_handle (2 ottetti)

Value Parameter description
0xXXXX Identifica il canale L2CAP multimediale AVDTP connesso al dispositivo remoto.

L2cap_destination_cid (2 ottetti)

Value Parameter description
0xXXXX CID di destinazione L2CAP del canale multimediale AVDTP

L2cap_mtu (2 byte)

Value Parameter description
0xXXXX MTU del canale multimediale L2CAP AVDTP

Configured_codec_capability (lunghezza variabile):

Value Parameter description
Blocco di capacità codec Blocco di informazioni sulle funzionalità del codec come descritto in Audio Sideband A2DP Offload. Descrive il codec configurato per i media AVDTP.

Audio_interface_parameter_count (1 ottetto):

Value Parameter description
0x00-0xFF Il numero di parametri dell'interfaccia audio che seguono.

Audio_interface_parameter (lunghezza variabile)

Value Parameter description
Parametro dell'interfaccia audio Parametro di interfaccia audio come descritto in precedenza. Il dispositivo connesso all'interfaccia audio specifica questi parametri per una particolare istanza del flusso.

Questa struttura di dati si ripete Audio_interface_parameter_count volte.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01-0xFF Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x08 Codice operazione del sottocomando per HCI_VS_MSFT_Avdtp_Open.

Avdtp_offload_handle (2 byte):

Value Parameter description
0xXXXX Identifica la risorsa allocata per il flusso scaricato.

Audio_interface_parameter_count (1 ottetto):

Value Parameter description
0x00-0xFF Il numero di parametri dell'interfaccia audio che seguono.

Audio_interface_parameter (lunghezza variabile)

Value Parameter description
Parametro dell'interfaccia audio Parametro di interfaccia audio come descritto in precedenza. Il software host passa questo parametro al dispositivo connesso all'interfaccia audio per la sessione del flusso.

Questa struttura di dati si ripete Audio_interface_parameter_count volte.

HCI_VS_MSFT_Avdtp_Start

Questo comando avvia lo streaming audio dal trasporto audio ai pacchetti AVDTP multimediali trasmessi. Dopo l'esecuzione di questo comando, il controller Bluetooth avvia l'attività seguente.

  • Riceve i dati audio dal trasporto audio
  • Se il codificatore si trova nel controller Bluetooth, codifica i dati ricevuti dal trasporto audio per produrre frame codificati
  • Se il codificatore si trova nel DSP audio, estrae frame codificati dal trasporto audio.
  • Assembla i frame codificati in payload multimediali AVDTP
  • Costruisce e trasmette pacchetti multimediali AVDTP contenenti i payload multimediali

Command_parameters

Avdtp_offload_handle (2 byte):

Value Parameter description
0xXXXX Identifica la risorsa allocata per il flusso scaricato.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01-0xFF Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x09 Codice operativo del sottocomando per HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Arresta l'attività di streaming avviata da HCI_VS_MSFT_Avdtp_Start.

Command_parameters

Avdtp_offload_handle (2 byte):

Value Parameter description
0xXXXX Identifica la risorsa allocata per il flusso scaricato

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01-0xFF Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x0A Sottocomando codice operazione per HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Rilascia le risorse di scaricamento AVDTP allocate da HCI_VS_MSFT_Avdtp_Open.

Command_parameters

Avdtp_offload_handle (2 byte):

Value Parameter description
0xXXXX Nota: questo valore non è più valido al termine di questo comando.

Return_parameters

Stato (1 ottetto):

Value Parameter description
0x00 Il comando è riuscito.
0x01-0xFF Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Value Parameter description
0x0B Il codice operativo del sottocomando per HCI_VS_MSFT_Avdtp_Close.
Value Parameter description
0x00
0x01 The controller started monitoring the device specified by BD_ADDR and Monitor_handle.

Appendix

Questa sezione contiene esempi e diagrammi di estensione HCI Bluetooth definiti da Microsoft.

Esempio: Modelli di corrispondenza per HCI_VS_MSFT_LE_Monitor_Advertisement

This example shows a received HCI_VS_MSFT_LE_Monitor_Advertisement command and the evaluations of three different advertisement packets against the command parameters.

Received HCI_VS_MSFT_LE_Monitor_Advertisement command An HCI_VS_MSFT_LE_Monitor_Advertisement command is received by the controller and contains the following parameters.

Parameter Value Notes
Subcommand_opcode 0x03 Subcommand opcode for HCI_VS_MSFT_LE_Monitor_Advertisement
RSSI_threshold_high 0x01 1dB
RSSI_threshold_low 0xCE -50dB
RSSI_threshold_low_time_interval 0x05 5 seconds
RSSI_sampling_period 0xFF No sampling
Condition_type 0x01 Condition
Condition 0x02 Devono essere abbinati due modelli
0x03 Lunghezza del primo modello, incluso il tipo di Active Directory e la posizione iniziale
0x01 AD Type
0x00 Posizione iniziale seguendo il tipo di AD
0x01 Primo modello da abbinare
0x06 Lunghezza del secondo modello, inclusi il tipo di AD e la posizione iniziale
0xFF Tipo AD (dati specifici del produttore)
0x00 Posizione iniziale seguendo il tipo di AD
0x00 Secondo modello da abbinare
0x06
0xFF
0xFF

Il controller riceve quindi i pacchetti di annunci seguenti.

  • Pacchetto pubblicitario [A]

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

  • Pacchetto pubblicitario [B]

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

  • Pacchetto pubblicitario [C]

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

  • Pacchetto pubblicitario [D]

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

Valutazione della corrispondenza per il pacchetto di annunci pubblicitari [A]

Description Value
Tipo del primo modello di cui trovare la corrispondenza 0x01
Lunghezza del primo modello da abbinare 0x03 - 0x02 = byte 0x01
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 0x01
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 0x01 (MATCH!)
Tipo di secondo modello da abbinare 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da associare 0x06 - 0x02 = 0x04 byte
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0xFF
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0xFF (MATCH!)

Verdict: PASS (both patterns match)

Valutazione della corrispondenza per il pacchetto di annunci pubblicitari [B]

Description Value
Tipo del primo modello di cui trovare la corrispondenza 0x01
Lunghezza del primo modello da abbinare 0x03 - 0x02 = byte 0x01
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 0x01
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 0x01 (MATCH!)
Tipo di secondo modello da abbinare 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da associare 0x06 - 0x02 = 0x04 byte
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0xFF
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF (no match)

Verdict: PASS (only first pattern matches)

Valutazione della corrispondenza per il pacchetto di annunci pubblicitari [C]

Description Value
Tipo del primo modello di cui trovare la corrispondenza 0x01
Lunghezza del primo modello da abbinare 0x03 - 0x02 = byte 0x01
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 0x01
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 Undefined. L'annuncio non dispone di dati con il tipo di AD 0x01.
Tipo di secondo modello da abbinare 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da associare 0x06 - 0x02 = 0x04 byte
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0xFF
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0xFF (MATCH!)

Verdict: PASS (only second pattern matches)

Valutazione della corrispondenza per il pacchetto pubblicitario [D]

Description Value
Tipo del primo modello di cui trovare la corrispondenza 0x01
Lunghezza del primo modello da abbinare 0x03 - 0x02 = byte 0x01
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 0x01
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0x01 0x02 (no match)
Tipo di secondo modello da abbinare 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da associare 0x06 - 0x02 = 0x04 byte
Modello da trovare in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0xFF
Byte in corrispondenza della posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0x01 (no match)

Verdict: FAIL (neither pattern matches)

Esempio: monitoraggio degli annunci pubblicitari

Questo esempio illustra il monitoraggio degli annunci RSSI. Di seguito sono riportati i valori RSSI per gli annunci ricevuti corrispondenti a una condizione specificata.

Time (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
Parameter Value
RSSI_threshold_high -10dB
RSSI_threshold_low -80dB
RSSI_threshold_low_time_interval 3 seconds
RSSI_sampling_period 2 seconds

Grafico che mostra il monitoraggio degli annunci pubblicitari con i valori RSSI nel tempo.

The advertisement RSSI is greater than RSSI_threshold_high at time 3. Il timer periodico per il campionamento inizia all'ora 3. Ogni 2 secondi, il timer periodico scade e il valore RSSI medio dell'annuncio ricevuto viene propagato allo stack.

Quando il timer periodico scade al momento 5, la media degli annunci RSSI ricevuti durante questo periodo (-23dB) viene propagata allo stack.

When the periodic timer expires at time 13, the average of the advertisement RSSIs received during this timeframe is below RSSI_threshold_low (-80dB). La media dell'RSSI dell'annuncio (-85 dB) deve essere propagata all'host.

When RSSI_threshold_low_time_interval expires at instant 15, an advertisement is propagated to the host with RSSI of -85dB. In questo esempio non vengono inviati altri annunci all'host.

Esempio: Monitoraggio degli annunci BAP da un dispositivo

Mentre è associato a un CAP Acceptor, ma non connesso, un host potrebbe monitorare gli Annunci BAP da quel dispositivo.

Parameter Value
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 impostato; Bit 1 impostato se il dispositivo ha distribuito un IRK
Advertisement_report_filtering_options Bit 0, 1 e 2 impostati
Peer_device_address <indirizzo>
Peer_device_address_type <tipo di indirizzo>
Peer_device_IRK <IRK, se il bit 1 è impostato>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (length)
0x16 (Dati del servizio - UUID a 16 bit)
0x00 (byte iniziale)
0x4E (byte basso di ASCS UUID)
0x18 (byte alto di ASCS UUID)

Esempio: Monitoraggio degli annunci CAP da un dispositivo

Durante un legame con un comandante CAP, pur senza essere connesso, un host potrebbe monitorare gli annunci CAP da quel dispositivo.

Parameter Value
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 impostato; Bit 1 impostato se il dispositivo ha distribuito un IRK
Advertisement_report_filtering_options Bit 0, 1 e 2 impostati
Peer_device_address <indirizzo>
Peer_device_address_type <tipo di indirizzo>
Peer_device_IRK <IRK, se il bit 1 è impostato>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (length)
0x16 (Dati del servizio - UUID a 16 bit)
0x00 (byte iniziale)
0x53 (byte più basso dell'UUID CAS)
0x18 (byte alto di CAS UUID)

Diagramma di flusso: filtraggio di annunci e lista di accettazione

Questo diagramma di flusso fornisce un esempio di implementazione del controller per il filtraggio degli annunci pubblicitari e il filtraggio tramite l'elenco di accettazione dei filtri quando viene ricevuto un annuncio.

A controller can implement this logic differently, as long as the host is notified of the advertisement or HCI_VS_MSFT_LE_Monitor_Device_Event as specified by the flowchart.

Diagramma di flusso che mostra il processo di filtro delle estensioni Microsoft HCI.

Diagramma di sequenza: Propagare la risposta di scansione associata all'annuncio

Diagramma di sequenza: Propagare la risposta di scansione associata all'annuncio

Questo diagramma di sequenza mostra una risposta di analisi propagata associata a un annuncio pubblicitario che soddisfa un filtro pubblicitario quando è abilitata l'analisi attiva. Questo diagramma mostra solo la sequenza prevista di eventi tra controller e host e non mostra gli eventi tra il controller e un determinato dispositivo. Assume that there's an advertisement A that satisfies an advertisement filter, and an advertisement B that doesn't satisfy the advertisement filter.

Diagramma di sequenza che mostra la propagazione della risposta alla scansione HCI associata all'annuncio.