Estensioni HCI Bluetooth definite da Microsoft

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 e eventi HCI specifici del fornitore utilizzati da Windows. Gli implementatori del controller Bluetooth possono usare queste estensioni per implementare funzionalità speciali.

Requisiti

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 valori nell'intervallo 0xFC00 tramite 0xFFFF, consentendo 1024 diversi codici di comando assegnati dal fornitore.

Il fornitore deve scegliere il valore del codice del 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 può interpretare il comando come un'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 dello 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.

Per specificare il codice operativo specifico del fornitore, usare la AddReg direttiva nella sezione DDInstall.HW in INF del driver. La sezione add registry deve contenere:

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

Esempio:

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

Comandi HCI definiti da Microsoft

Comandi HCI Descrizione
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 Annulla un comando HCI_VS_MSFT_Monitor_Rssi emesso in precedenza.
HCI_VS_MSFT_LE_Monitor_Advertisement Richiede che il controller avvii il monitoraggio per gli annunci che rientrano nell'intervallo RSSI specificato e soddisfano anche altri requisiti.
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Annulla un comando HCI_VS_MSFT_LE_Monitor_Advertisement rilasciato in precedenza.
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Imposta lo stato dei filtri degli annunci pubblicitari.
HCI_VS_MSFT_Read_Absolute_RSSI Legge il valore RSSI (Received Strength Indication) assoluto per una connessione BR/EDR dal controller.

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.

I controller devono supportare HCI_VS_MSFT_Read_Supported_Features per supportare qualsiasi altro sottocomando Microsoft HCI. Il supporto per altri comandi è facoltativo e dipende dai valori restituiti da HCI_VS_MSFT_Read_Supported_Features. Windows non invia sottocomandi 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.

Comando Codice Parametri dei comandi Parametri restituiti
HCI_VS_MSFT_Read_Supported_Features Codice di base scelto Subcommand_opcode Stato
Subcommand_opcode,
Supported_features,
Microsoft_event_prefix_length,
Microsoft_event_prefix

Command_parameters

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x00 Codice operativo sottocomando per HCI_VS_MSFT_Read_Supported_Features.

Return_parameters

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Il comando ha avuto esito positivo.
0x01 a 0xFF Comando non riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x00 Codice operativo sottocomando per HCI_VS_MSFT_Read_Supported_Features.

Supported_features (8 ottetti):

Valore Descrizione dei parametri
0x00000000 00000001 Il controller supporta la funzionalità di monitoraggio RSSI per le connessioni BR/EDR. Inoltre, il controller supporta HCI_VS_MSFT_Read_Absolute_RSSI per leggere la metrica RSSI assoluta di una connessione BR/EDR.
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 della pubblicità 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 Il controller supporta il monitoraggio continuo della pubblicità degli annunci LE eseguiti simultaneamente con altre attività radio, usando HCI_VS_MSFT_LE_Monitor_Advertisement [v1].
0x00000000 00000040 Riservato.
0x00000000 00000080 Riservato.
0x00000000 00000100 Riservato.
0x00000000 00000200 Riservato.
0x00000000 00000400 Il controller supporta HCI_VS_MSFT_LE_Monitor_Advertisement [v2]. Inoltre, il controller supporta il monitoraggio continuo degli annunci pubblicitari LE eseguiti simultaneamente con altre attività radio, usando HCI_VS_MSFT_LE_Monitor_Advertisement [v2].
0xFFFFFFFF FFFFF800 Bit riservati per la definizione futura. Deve essere zero.

Microsoft_event_prefix_length (1 ottetto):

Valore Descrizione dei parametri
0x00 a 0x20 Numero di byte nel campo prefisso evento Microsoft, come specificato nella Microsoft_event_prefix restituita. Si tratta del numero di byte di informazioni costanti all'inizio di ogni evento HCI specificato da Microsoft.

Microsoft_event_prefix (lunghezza variabile):

Valore Descrizione dei parametri
Valore del prefisso dell'evento Le informazioni costanti da prevedere 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 inizi a monitorare il collegamento misurato RSSI per una connessione specificata e genera un evento quando il collegamento misurato della connessione RSSI non supera i limiti specificati.

Comando Codice Parametri dei comandi Parametri restituiti
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
Stato
Subcommand_opcode

Il controller deve inviare una notifica all'host del valore RSSI con un evento generato periodicamente (in base alla RSSI_sampling_period). Il collegamento misurato RSSI deve essere il valore assoluto di forza del segnale ricevitore in dBm per la connessione BR/EDR.

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. Se il valore di stato è diverso da zero, il controller non genererà un HCI_VS_MSFT_Rssi_Event in risposta a questo comando.

Il controller rifiuta il comando se un altro comando HCI_VS_MSFT_Monitor_Rssi con la stessa Connection_Handle è in sospeso o se l'handle di connessione specificato non è valido. Il controller può anche rifiutare il comando per altri motivi, ad esempio l'esaurimento delle risorse.

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

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

Il controller genererà un HCI_VS_MSFT_Rssi_Event quando l'RSSI ricevuto è maggiore o uguale al RSSI_threshold_high specificato. Dopo aver generato questo evento, il controller non genererà un nuovo HCI_VS_MSFT_Rssi_Event per specificare che la RSSI_threshold_high è stata superata fino a quando non genera unHCI_VS_MSFT_Rssi_Event che specifica che l'RSSI è caduto sotto RSSI_threshold_low.

Il controller genererà un HCI_VS_MSFT_Rssi_Event quando l'RSSI ricevuto è uguale o scende sotto il RSSI_threshold_low specificato nelRSSI_threshold_low_time_interval specificato. Dopo aver generato questo evento, il controller non genererà un nuovo HCI_VS_MSFT_Rssi_Event per specificare che l'RSSI è caduto al di sotto della RSSI_threshold_low fino a quando non viene generato un evento HCI_VS_MSFT_Rssi_Event per specificare che RSSI_threshold_high è stato raggiunto o superato.

Se il RSSI_sampling_period è compreso tra 0x01 e 0xFE, il titolare del trattamento genererà periodicamente un HCI_VS_MSFT_Rssi_Event ogniRSSI_sampling_period. Questo evento contiene la media dell'RSSI calcolata nel RSSI_sampling_period. Se il RSSI_sampling_period è 0x00 o 0xFF, il titolare del trattamento non notifica periodicamente all'host con HCI_VS_MSFT_Rssi_Event.

Command_parameters

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x01 Sottocomando opcode per HCI_VS_MSFT_Monitor_Rssi.

Connection_Handle (2 ottetti):

Valore Descrizione dei parametri
0xXXXX Handle per la connessione il cui RSSI deve essere monitorato.

RSSI_threshold_high (1 ottetto):

Valore Descrizione dei parametri
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: -128 a 127 (intero con segno)
Intervallo LE: -127 a 20 (intero con segno)

RSSI_threshold_low (1 ottetto):

Valore Descrizione dei parametri
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: -128 a 127 (intero con segno)
Intervallo obbligatorio LE: -127 a 20 (intero firmato)

RSSI_threshold_low_time_interval (1 ottetto):

Valore Descrizione dei parametri
0x00 Valore riservato.
N = 0xXX Tempo in secondi in cui il valore RSSI deve essere inferiore RSSI_threshold_low prima che venga generato un HCI_VS_MSFT_Rssi_Event .
Periodo di tempo = N * 1 secondo
Intervallo obbligatorio: 0x01 da 0x3C

RSSI_sampling_period (1 ottetto):

Valore Descrizione dei parametri
0x00 Valore riservato.
N = 0xXX Intervallo di campionamento in millisecondi.
Periodo di tempo = N * 100 millisecondi
Intervallo obbligatorio: 0x01 da 0xFE
0xff Valore riservato.

Return_parameters

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Il comando ha avuto esito positivo.
0x01 a 0xFF Comando non riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.
0x07 Il controller restituirà capacità di memoria superata se non dispone di memoria sufficiente per elaborare il comando.
Codice di errore Comando non riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x01 Codice operativo sottocomando per HCI_VS_MSFT_Monitor_Rssi.

Eventi generati a meno che non siano stati mascherati

Il controller genera tempestivamente un evento Command Complete quando viene ricevuto il comando HCI_VS_MSFT_Monitor_Rssi . Se l'evento Command Complete restituisce lo stato 0, il controller genererà un HCI_VS_MSFT_Rssi_Event quando si verifica una delle condizioni seguenti.

  • L'RSSI osservato per il dispositivo su RSSI_threshold_low_time_interval diventa uguale o minore del valore RSSI_threshold_low specificato.
  • L'RSSI osservato per il dispositivo diventa maggiore o uguale al valore di RSSI_threshold_high specificato.
  • Il RSSI_sampling_period è valido e il periodo di campionamento scade.

Se la connettività con il dispositivo specificato viene persa, il controller deve eseguire tutte le operazioni di pulizia necessarie. In questo caso, un comando HCI_VS_MSFT_Cancel_Monitor_Rssi non viene inviato al controller.

HCI_VS_MSFT_Cancel_Monitor_Rssi

HCI_VS_MSFT_Cancel_Monitor_Rssi annulla un comando HCI_VS_MSFT_Monitor_Rssi rilasciato in precedenza. Il controller genererà tempestivamente un evento Command Completed in risposta a questo comando.

Comando Codice Parametri dei comandi Parametri restituiti
HCI_VS_MSFT_Cancel_Monitor_Rssi Codice di base scelto Subcommand_opcode,
Connection_Handle
Stato
Subcommand_opcode

Command_parameters

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x02 Codice operativo sottocomando per HCI_VS_MSFT_Cancel_Monitor_Rssi.

Connection_Handle (2 ottetti):

Valore Descrizione dei parametri
0xXXXX Handle per la connessione il cui RSSI deve essere annullato.

Return_parameters

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Il comando ha avuto esito positivo.
0x01 a 0xFF Comando non riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x02 Codice operativo sottocomando per HCI_VS_MSFT_Cancel_Monitor_Rssi.

Eventi generati a meno che non siano stati mascherati

Il controller genera un evento Command Complete quando viene ricevuto il comando HCI_VS_MSFT_Cancel_Monitor_RSSI .

HCI_VS_MSFT_LE_Monitor_Advertisement

HCI_VS_MSFT_LE_Monitor_Advertisement richieste che il controller avvia il monitoraggio per gli annunci che rientrano nell'intervallo RSSI specificato e soddisfano anche una delle condizioni seguenti:

  • Un modello specificato può essere confrontato con il pacchetto di annunci ricevuti.
  • Un UUID specificato può essere confrontato con il pacchetto annuncio ricevuto.
  • È possibile usare una chiave di risoluzione delle identità (IRK) specificata per risolvere l'indirizzo privato del dispositivo da cui ha avuto origine il pacchetto di annuncio.
  • Un indirizzo Bluetooth specificato può essere confrontato con il 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 gli annunci monitorati in modo che il controller generi report pubblicitari.

Comando Codice Parametri dei comandi Parametri restituiti
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>
Stato
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>
Stato
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. Se il controller non supporta il monitoraggio RSSI per gli annunci LE, ignorerà i valori dei parametri RSSI_threshold_high, RSSI_threshold_low, RSSI_threshold_low_time_interval e RSSI_sampling_period .

Questo diagramma di stato mostra gli stati di transizione nel controller durante il monitoraggio di RSSI per un annuncio.

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

Il titolare del trattamento inizierà a monitorare un annuncio solo quando l'RSSI ricevuto è maggiore o uguale a RSSI_threshold_high per un determinato dispositivo e la corrispondenza Monitor_options (vedere di seguito). Il controller genererà un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 1 e Monitor_handle impostato sull'handle per questa condizione, per notificare all'host che il controller sta monitorando questo particolare dispositivo per Condizione. Inoltre, il controller deve propagare il primo report pubblicitario di un annuncio monitorato all'host solo quando il Advertisement_report_filter_options corrisponde (vedere di seguito).

I Monitor_options per un filtro sono considerati una corrispondenza in base alla logica seguente (in pseudocodice):

MatchesCondition = (PDU Matches Condition Parameters)

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

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

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

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

E per un annuncio monitorato, il Advertisement_report_filter_options sono considerati una corrispondenza in base alla logica seguente (in pseudocodice):

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)

Il titolare del trattamento deve interrompere il monitoraggio per condizione se l'RSSI degli annunci ricevuti è uguale o scende al di sotto di RSSI_threshold_lowRSSI_threshold_low_interval per il dispositivo specifico. Il controller genererà un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 0 per notificare all'host che il controller ha interrotto il monitoraggio del dispositivo specifico per la condizione. Dopo che il controller specifica il HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 0, il controller non consentirà ulteriori pacchetti pubblicitari di passare all'host per il dispositivo fino a quando il controller non ha comunicato all'host che l'RSSI per il dispositivo specifico è aumentato o superiore RSSI_threshold_high per il dispositivo specifico per la condizione.

Inoltre, il titolare del trattamento genera un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 0 per notificare all'host che il controller ha interrotto il monitoraggio del dispositivo per la condizione se il RSSI_threshold_low_time_interval specificato scade senza ricevere pacchetti pubblicitari dal dispositivo. Se il controller monitora un dispositivo per una determinata condizione, le istruzioni seguenti sono vere.

Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento, il controller propaga pacchetti di annunci anonimi all'host se il valore RSSI per il pacchetto è maggiore o uguale a RSSI_threshold_high. Gli annunci anonimi non verranno rilevati e l'evento HCI_VS_MSFT_LE_Monitor_Device_Event non verrà generato.

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

Il titolare del trattamento supporta almeno 30 Monitor_handles simultanee, almeno 30 dispositivi con monitoraggio simultaneo e almeno 20 annunci duplicati rilevati simultaneamente. Il titolare del trattamento deve anche essere in grado di eseguire un'analisi a le prestazioni continua al 10% del ciclo di lavoro.

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 Annunci legacy Annunci estesi (non anonimi) Annunci estesi (anonimo)
0x00 Il controller propaga tutti i pacchetti di annunci ricevuti all'host per il dispositivo per questa condizione , a meno che il controller non abbia ricevuto in precedenza un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Abilita impostato su 0x00. Il controller deve propagare un pacchetto pubblicitario all'host anche se l'RSSI ricevuto è minore o uguale a RSSI_threshold_low purché RSSI_threshold_low_time_interval non sia scaduto per il dispositivo specifico per questa condizione. Il valore RSSI di questo pacchetto pubblicitario sarà il valore RSSI dell'annuncio ricevuto. Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento, lo stesso comportamento della colonna Annunci legacy , ad eccezione del fatto che un pacchetto pubblicitario è definito come tutti i PDU nella catena di annunci pubblicitari. Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento, il controller propaga tutti i pacchetti di annunci ricevuti all'host per il dispositivo per questa condizione , a meno che il controller non abbia ricevuto in precedenza un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato su 0x00.
0x01 a 0xFE Il controller propaga i pacchetti di annunci legacy all'host ogni RSSI_sampling_period specificato, a meno che il controller non abbia ricevuto in precedenza un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Abilita impostato su 0x00. Il valore RSSI specificato per l'annuncio deve essere 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. È possibile che RSSI_sampling_period sia minore di RSSI_threshold_low_time_interval e che tutti gli annunci ricevuti durante il RSSI_sampling_period abbiano RSSI sotto RSSI_threshold_low. Il controller deve comunque propagare l'annuncio con la media del valore RSSI ricevuto durante questo intervallo di campionamento. Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento, il controller deve comportarsi come se il RSSI_sampling_period fosse 0x00. Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento, il controller deve comportarsi come se il RSSI_sampling_period fosse 0x00.
0xff Il controller non consentirà l'invio di ulteriori pacchetti pubblicitari all'host per il dispositivo per la condizione fino a quando il controller non ha comunicato all'host che l'RSSI del dispositivo specifico è sceso al di sotto di RSSI_threshold_low per RSSI_threshold_low_time_interval per il dispositivo specifico per questa condizione. Questa notifica viene eseguita generando un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 0. Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento, lo stesso comportamento della colonna Annunci legacy . Se il controller supporta il monitoraggio RSSI degli annunci estesi LE senza campionamento, il controller deve comportarsi come se il RSSI_sampling_period fosse 0x00.

Se il controller ha ricevuto in precedenza un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato su 0x00, il timer del periodo di campionamento non verrà arrestato. 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 nonduplicati dallo stesso dispositivo, deve corrispondere a ogni pacchetto pubblicitario rispetto alle condizioni archiviate nel controller.

Se il controller riceve un pacchetto pubblicitario da un dispositivo che corrisponde a più condizioni, il controller genererà un HCI_VS_MSFT_LE_Monitor_Device_Event per ogni condizione corrispondente, con Monitor_handle impostato sulla condizione corrispondente.

Se il controller non è in grado di monitorare i valori RSSI per tutti i dispositivi nell'intervallo che corrispondono alla condizione, mantiene il monitoraggio del numero possibile di dispositivi. La decisione sui dispositivi da monitorare dipenderà dai valori RSSI degli annunci ricevuti. Il controller deve monitorare i dispositivi con la maggiore potenza del segnale ricevuta.

Se il controller ha informato l'host su un particolare dispositivo (A) e monitora i dispositivi con capacità hardware massima e se un altro dispositivo (B) entra in un intervallo con un valore RSSI superiore, il controller notifica all'host che ha interrotto il monitoraggio del dispositivo (A) generando un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 0. Il titolare del trattamento genererà anche un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 1 per notificare all'host che il dispositivo (B) è attualmente monitorato.

Parametri di tipo condizione e condizione

Il parametro Condition_type specifica se il parametro Condition specifica un criterio, un UUID, un IRK o un BD_ADDR.

Se il parametro Condition_type specifica un criterio, la condizione contiene due sezioni che contengono il numero di modelli presenti all'interno della condizione e i dati del modello.

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.

I dati modello hanno il formato seguente.

  • Length specifica la lunghezza di questo modello includono il tipo di dati e il byte iniziale del criterio.
  • Il tipo di Active Directory specifica il campo Tipo di Active Directory.
  • L'inizio di Pattern specifica la posizione dei byte iniziale del criterio immediatamente dopo il tipo di Active Directory.
  • Il criterio ha una dimensione (Length - 0x2) ed è il modello da trovare per il tipo di Active Directory specificato all'interno del pacchetto di annuncio dal byte iniziale specificato.

Se sono specificati più modelli, il controller deve assicurarsi che almeno un criterio 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à esaminare eventuali ottetti rimanenti dei dati pubblicitari dell'host. Se la sezione AD si estende oltre i primi 251 ottetti 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 Annunci host e potrebbe cercare eventuali ottetti rimanenti dei dati di Annunci host. 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 pubblicitarie. Gli scanner devono prestare attenzione a 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 impostazione pubblicitaria. Il titolare del trattamento propaga un HCI_VS_MSFT_LE_Monitor_Device_Event per ogni set di annunci che corrisponde al modello anche se l'annuncio proviene dallo stesso indirizzo del dispositivo.

Se il parametro Condition_type specifica un UUID, il parametro Condition contiene un tipo UUID e un 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 analizza 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 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 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 di Host Advertising Data, il titolare del trattamento cercherà l'UUID del servizio all'interno della parte della sezione AD che si trova nei primi 251 ottetti dei dati della pubblicità host e potrebbe cercare eventuali ottetti rimanenti dei dati di Annunci host. Nota: in base alla frammentazione da parte dell'inserzionista, i primi 251 ottetti dei dati della pubblicità host possono estendersi su AdvData di più PDU pubblicitari. Gli scanner devono prestare attenzione a 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 impostazione pubblicitaria. Il titolare del trattamento propaga un HCI_VS_MSFT_LE_Monitor_Device_Event per ogni set di annunci che corrisponde all'UUID del servizio anche se l'annuncio proviene dallo stesso dispositivo.

Se il parametro Condition_type specifica un IRK, il parametro Condition contiene l'IRK.

Se il parametro Condition_type specifica un indirizzo Bluetooth, il parametro Condition contiene il tipo di indirizzo e 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 corrispondente a un filtro deve essere propagata all'host.

Se il controller riceve un comando HCI_VS_MSFT_LE_Monitor_Advertisement quando i filtri sono disabilitati (a causa di un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable ricevuto in precedenza con Enable impostato su 0x00), il controller accetta il comando se può, ma lo imposta su uno stato disabilitato. 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 o 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 il bit 0 di Advertisement_report_filter_options è impostato e RSSI_sampling_period è qualsiasi valore diverso da 0x00, il controller deve restituire il codice di errore Parametri di comando HCI non validi (0x12).

Parametri mancanti

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

Parametro Valore
Monitor_options Bit 5 set; tutti gli altri bit cancellati
Advertisement_report_filter_options Bit 1 e 2 set; tutti gli altri bit cancellati
Peer_device_IRK 0x0000000000000000 000000000000000000
Peer_device_address 0x000000000000
Peer_device_address_type 0x00

Command_parameters

Subcommand_opcode_v1 (1 ottetto):

Valore Descrizione dei parametri
0x03 Sottocomando opcode per HCI_VS_MSFT_LE_Monitor_Advertisement [v1].

Subcommand_opcode_v2 (1 ottetto):

Valore Descrizione dei parametri
0x0F Sottocomando opcode per HCI_VS_MSFT_LE_Monitor_Advertisement [v2].

RSSI_threshold_high (1 ottetto):

Valore Descrizione dei parametri
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: -127 a 20 (intero firmato)

RSSI_threshold_low (1 ottetto):

Valore Descrizione dei parametri
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: -127 a 20 (intero firmato)

RSSI_threshold_low_time_interval (1 ottetto):

Valore Descrizione dei parametri
0x00 Valore riservato.
N = 0xXX Tempo in secondi in cui il valore RSSI deve essere inferiore RSSI_threshold_low prima che venga generato un HCI_VS_MSFT_Rssi_Event
Periodo di tempo = N * 1 secondo
Intervallo obbligatorio: 0x01 a 0x3C.

RSSI_sampling_period (1 ottetto):

Valore Descrizione dei parametri
0x00 Il controller propaga tutti gli annunci ricevuti all'host.
N = 0xXX Intervallo di campionamento in millisecondi.
Periodo di tempo = N * 100 millisecondi.
Intervallo obbligatorio: 0x01 a 0xFE
0xff Il controller non verrà propagato alcun annuncio ricevuto all'host.

Monitor_options (1 ottetto):

Numero di bit Descrizione dei parametri
0 Il controller monitorerà le PDU pubblicitarie in cui AdvA o il relativo indirizzo di identità risolto corrisponde Peer_device_address e Peer_device_address_type e dove TargetA non è presente o, se presente, l'oggetto TargetA è consentito in base ai criteri di filtro di analisi, se tali PDU corrispondono alla condizione specificata in Condition_Type.
1 Il controller monitorerà le PDU pubblicitarie in cui AdvA è risolvibile con Peer_device_IRK e dove TargetA non è presente o, se presente, l'oggetto TargetA è consentito in base ai criteri di filtro di analisi, se tali CPU 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 titolare del trattamento monitorerà le PDUS dirette in cui targetA è consentito in base ai criteri di filtro di analisi e dove AdvA o il relativo indirizzo di identità risolto corrisponde Peer_device_address e Peer_device_address_type. Ciò è indipendentemente dal fatto che il PDU corrisponda alla condizione specificata in Condition_Type.
3 Il titolare del trattamento monitorerà le PDUS dirette in cui targetA è consentito in base ai criteri di filtro di analisi e dove AdvA è risolvibile con Peer_device_IRK. Ciò è 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 dirette pubblicitarie 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 titolare del trattamento monitorerà le PDU pubblicitarie da qualsiasi ADvA in cui TargetA non è presente o, se presente, l'oggetto TargetA è consentito in base ai criteri di filtro di analisi, se tali CPU corrispondono alla condizione specificata in Condition_Type.
Tutti gli altri bit Riservate per utilizzo futuro

Advertisement_report_filtering_options (1 ottetto):

Numero di bit Descrizione dei parametri
0 Filtrare le PDU di annunci duplicati. Questo bit verrà impostato solo se RSSI_sampling_period è 0x00.
1 Il controller genererà eventi HCI_LE_Advertising_Report o eventi HCI_LE_Directed_Advertising_Report o eventi HCI_LE_Extended_Advertising_Report per le CPU di pubblicità legacy, se tali CPU corrispondono al Monitor_options specificato.
2 Il titolare del trattamento genera HCI_LE_Extended_Advertising_Report eventi per le CPU pubblicitarie estese, se tali CPU corrispondono al Monitor_options specificato.
3 Il controller genererà eventi HCI_LE_Advertising_Report o eventi HCI_LE_Directed_Advertising_Report o eventi HCI_LE_Extended_Advertising_Report per le PDUS indirizzate, se tali CPU corrispondono al Monitor_options specificato.
Tutti gli altri bit Riservate per utilizzo futuro

Peer_device_address (6 ottetti):

Valore Descrizione dei parametri
0xXXXXXXXXXXXXXXX Indirizzo del dispositivo pubblico o Indirizzo dispositivo casuale da corrispondere.

Peer_device_address_type (1 ottetto):

Valore Descrizione dei parametri
0x00 Indirizzo del dispositivo pubblico
0x01 Indirizzo dispositivo casuale
Tutti gli altri valori Riservate per utilizzo futuro

Peer_device_IRK (16 ottetti):

Valore Descrizione dei parametri
0x0000000000000000 000000000000000000 IRK non valido. Non deve essere il valore quando viene impostato Monitor_options bit 1 o quando è impostato Monitor_options bit 3.
0xXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX IRK del dispositivo da trovare. Peer_device_address e Peer_device_address_type devono essere popolati.

Condition_type (1 ottetto):

Valore Descrizione dei parametri
0x01 La condizione è un modello che deve essere corrispondente all'annuncio.
0x02 La condizione è un tipo UUID e un UUID.
0x03 La condizione è la risoluzione di un IRK. Escluso se vengono impostati uno dei bit Monitor_options 0, 1, 2 o 3.
0x04 La condizione è un tipo di indirizzo Bluetooth e un indirizzo Bluetooth. Escluso se vengono impostati uno dei bit Monitor_options 0, 1, 2 o 3.

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

Number_of_patterns (1 ottetto):

Valore Descrizione dei parametri
0xXX Numero di modelli specificati all'interno del parametro Pattern_data.

Pattern_data (>3 ottetti):

Valore Descrizione dei parametri
Length Lunghezza di questo modello.
Tipo di dati Tipo di dati della sezione annuncio. I valori sono elencati nel documento Numeri assegnati Bluetooth.
Inizio byte Posizione iniziale del modello da corrispondere al tipo di dati specificato.
Modello Modello da associare (dimensioni di lunghezza - byte 0x2).

UUID_type (1 ottetto):

Valore Descrizione dei parametri
0x01 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):

Valore Descrizione dei parametri
0xXXXX 2 byte se UUID_type è 0x01.
4 byte se UUID_type è 0x02.
16 byte se UUID_type è 0x03.

IRK (16 ottetti):

Valore Descrizione dei parametri
0xXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX IRK da usare per risolvere l'indirizzo privato.

Address_type (1 ottetto):

Valore Descrizione dei parametri
0x00 Indirizzo del dispositivo pubblico.
0x01 Indirizzo dispositivo casuale.
0x02 a 0xFF Valori riservati per l'uso futuro.

BD_ADDR (6 ottetti):

Valore Descrizione dei parametri
0xXXXXXXXXXXXXXXX Indirizzo Bluetooth del dispositivo da monitorare.

Return_parameters

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Il comando ha avuto esito positivo.
0x07 Il controller restituirà capacità di memoria superata se non dispone di memoria sufficiente per elaborare il comando.
Codice di errore Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x03 o 0x0F Sottocomando opcode per HCI_VS_MSFT_LE_Monitor_Advertisement [v1] o HCI_VS_MSFT_LE_Monitor_Advertisement [v2], a seconda del comando inviato.

Monitor_handle (1 ottetto):

Valore Descrizione dei parametri
0x00 a 0xFF Handle a questa regola. Questo handle viene usato come parametro per HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement per annullare il monitoraggio dell'annuncio.
Questo parametro è valido solo se Status è 0x00.

Eventi generati a meno che non siano stati mascherati

Quando viene ricevuto il comando HCI_VS_MSFT_LE_Monitor_Advertisement , il controller genererà un evento Command Complete.

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement annulla un comando HCI_VS_MSFT_LE_Monitor_Advertisement rilasciato in precedenza.

Comando Codice Parametri dei comandi Parametri restituiti
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Codice di base scelto Subcommand_opcode,
Monitor_handle
Stato
Subcommand_opcode

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

Command_parameters

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x04 Sottocomando opcode per HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Connection_Handle (1 ottetto):

Valore Descrizione dei parametri
0xXX Handle per il filtro che viene annullato.

Return_parameters

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Il comando ha avuto esito positivo.
0x07 Il controller restituirà capacità di memoria superata se non dispone di memoria sufficiente per elaborare il comando.
Codice di errore Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x04 Sottocomando opcode per HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Eventi generati a meno che non siano stati mascherati

Il controller genererà un evento Command Complete quando viene ricevuto il comando HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement .

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable imposta lo stato dei filtri pubblicitari.

Comando Codice Parametri dei comandi Parametri restituiti
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Codice di base scelto Subcommand_opcode,
Abilita
Stato
Subcommand_opcode

Se Enable è impostato su 0x00, il controller propaga annunci ricevuti all'host in base alle impostazioni dell'elenco di filtri esistenti. Il controller continuerà a monitorare i dispositivi attualmente monitorati e generare un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 0 se il dispositivo non viene più monitorato. Il controller genera un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 1 se viene monitorato un nuovo dispositivo. L'host può rilasciare HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato su 0x01 per ripristinare tutte le condizioni di filtro.

Se Enable è impostato su 0x01, questo comando abilita tutti i filtri impostati con un comando HCI_VS_MSFT_LE_Monitor_Advertisement rilasciato in precedenza. Il controller rifiuta un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable se non attiva lo stato del filtro:

  • Il controller rifiuta un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato su 0x01 se in precedenza ha ricevuto un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato su 0x01.
  • Il controller rifiuta il comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato su 0x00 se in precedenza ha ricevuto un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato su 0x00.

Lo stato predefinito del filtro annuncio deve essere disattivato. Questo stato equivale al controller che riceve in precedenza un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Abilita impostato su 0x00. Il controller genererà tempestivamente un evento Command Completed in risposta a questo comando.

Command_parameters

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x05 Sottocomando opcode per HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Abilita (1 ottetto):

Valore Descrizione dei parametri
0x00 Ripristinare il comportamento dell'elenco di accettare il filtro corrente, ma continuare a monitorare i dispositivi in base alla condizione dai comandi di HCI_VS_MSFT_LE_Monitor_Advertisement .
0x01 Abilitare tutti i comandi HCI_VS_MSFT_LE_Monitor_Advertisement rilasciati nel controller.

Return_parameter

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Il comando ha avuto esito positivo.
0x0C Il controller restituirà il comando Disallowed se il controller ha rifiutato il comando perché in precedenza ha visto un comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable con Enable impostato sullo stesso valore del comando.
Codice di errore Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x05 Sottocomando opcode per HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Eventi generati a meno che non siano stati mascherati

Il controller genererà un evento Command Complete quando viene ricevuto il comando HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable .

HCI_VS_MSFT_Read_Absolute_RSSI

HCI_VS_MSFT_Read_Absolute_RSSI legge il valore RSSI (Received Signal Strength Indication) assoluto per una connessione BR/EDR dal controller.

Comando Codice Parametri dei comandi Parametri restituiti
HCI_VS_MSFT_Read_Absolute_RSSI Codice di base scelto Subcommand_opcode,
Connection_Handle
Stato
Subcommand_opcode,
Connection_Handle,
RSSI

Un handle di connessione viene fornito sia come comando che come parametro restituito per identificare la connessione ACL il cui RSSI è in corso di lettura. La metrica RSSI è la forza assoluta del segnale ricevitore in dBm per ± precisione 6 dB. Se non è possibile leggere l'RSSI, la metrica RSSI deve essere impostata su 127. Il controller completa sempre questo comando con un evento Command Completed.

Command_parameters

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x06 Sottocomando opcode per HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 ottetti):

Valore Descrizione dei parametri
0xXXXX Handle per la connessione BR/EDR il cui RSSI deve essere letto.

Return_parameters

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Il comando ha avuto esito positivo.
0x01 a 0xFF Il comando non è riuscito. Per informazioni dettagliate, vedere Codici di errore nella specifica Bluetooth Core.

Subcommand_opcode (1 ottetto):

Valore Descrizione dei parametri
0x06 Sottocomando opcode per HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 ottetti):

Valore Descrizione dei parametri
0xXXXX Handle per la connessione BR/EDR di cui è stato letto RSSI.

RSSI (1 ottetto):

Valore Descrizione dei parametri
N = 0xXX Valore RSSI per la connessione BR/EDR.
Unità: dBm
Intervallo obbligatorio: -128 a 127 (intero firmato)

Eventi generati a meno che non siano stati mascherati

Il controller genererà un evento Command Complete al termine del comando HCI_VS_MSFT_Read_Absolute_RSSI .

Eventi Bluetooth HCI 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. La lunghezza e il valore della stringa costante sono definiti dall'implementatore del controller e restituiti in risposta alla HCI_VS_MSFT_Read_Supported_Features.

Evento HCI Descrizione
HCI_VS_MSFT_Rssi_Event HCI_VS_MSFT_RSSI_Event indica che è stato completato un comando HCI_VS_MSFT_Monitor_Rssi .
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 indica che è stato completato un comando HCI_VS_MSFT_Monitor_Rssi . Se il parametro Status è zero, il comando è stato completato perché il valore RSSI per il dispositivo remoto è stato modificato in un valore esterno all'intervallo specificato. Se il parametro Status è diverso da zero, il comando è stato completato perché il valore RSSI della connessione non può più essere monitorato.

Evento Codice evento Codice evento Microsoft Parametri di evento
HCI_VS_MSFT_RSSI_Event 0xff 0x01 Event_prefix,
Microsoft_event_code,
Stato
Connection_Handle,
RSSI

Event_parameters

Event_prefix (dimensione variabile):

Valore Descrizione dei parametri
Prefisso evento Prefisso dell'evento che contrassegna questo evento come definito da Microsoft. Le dimensioni e il valore vengono restituiti dal comando HCI_VS_MSFT_Read_Supported_Features .

Microsoft_event_code (1 ottetto):

Valore Descrizione dei parametri
0x01 Codice evento per HCI_VS_MSFT_RSSI_Event.

Stato (1 ottetto):

Valore Descrizione dei parametri
0x00 Operazione completata. Il valore RSSI della connessione ha soddisfatto una delle condizioni seguenti. L'RSSI ha raggiunto o superato RSSI_threshold_high.
L'RSSI è stato raggiunto o eliminato sotto RSSI_threshold_low oltre RSSI_threshold_low_time_interval secondi.
Il RSSI_sampling_period è scaduto e questo evento è stato generato per notificare all'host del valore RSSI.
0x01 a 0xFF Esito negativo. 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):

Valore Descrizione dei parametri
0xXXXX Handle per la connessione il cui RSSI deve essere monitorato.

RSSI (1 ottetto):

Valore Descrizione dei parametri
0xXX Valore RSSI del collegamento misurato per la connessione.
Unità: dBm
Intervallo BR/EDR: -128 a 127 (intero con segno)
Intervallo LE: -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.

Se il valore del parametro Monitor_state è 1, il controller ha avviato il monitoraggio del dispositivo Bluetooth con il BD_ADDR specificato. Se il valore del parametro Monitor_state è 0, il controller ha arrestato il monitoraggio del dispositivo Bluetooth con il BD_ADDR specificato.

Evento Codice evento Codice evento Microsoft Parametri di evento
HCI_VS_MSFT_LE_Monitor_Device_Event 0xff 0x02 Event_prefix,
Microsoft_event_code,
Address_type,
BD_ADDR,
Monitor_handle,
Monitor_state

Il controller non genera un HCI_VS_MSFT_LE_Monitor_Device_Event con il parametro Monitor_state impostato su 0 se non è già stato generato un HCI_VS_MSFT_LE_Monitor_Device_Event con Monitor_state impostato su 1.

Event_parameters

Event_prefix (dimensione variabile):

Valore Descrizione dei parametri
Prefisso evento Prefisso dell'evento che contrassegna questo evento come definito da Microsoft. Le dimensioni e il valore vengono restituiti dal comando HCI_VS_MSFT_Read_Supported_Features .

Microsoft_event_code (1 ottetto):

Valore Descrizione dei parametri
0x02 Codice evento per HCI_VS_MSFT_LE_Monitor_Device_Event.

Address_type (1 ottetto):

Valore Descrizione dei parametri
0x00 Indirizzo del dispositivo pubblico.
0x01 Indirizzo dispositivo casuale.
0x02 a 0xFF Valori riservati per l'uso futuro.

BD_ADDR (6 ottetti):

Valore Descrizione dei parametri
0xXXXXXXXXXXXXXXX Indirizzo Bluetooth del dispositivo.

Monitor_handle (1 ottetto):

Valore Descrizione dei parametri
0xXX Handle per il filtro specificato per il comando HCI_VS_MSFT_LE_Monitor_Advertisement .

Monitor_state (1 ottetto):

Valore Descrizione dei parametri
0x00 Il controller ha arrestato il monitoraggio del dispositivo specificato da BD_ADDR e Monitor_handle.
0x01 Il controller ha avviato il monitoraggio del dispositivo specificato da BD_ADDR e Monitor_handle.

Appendice

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

Esempio: Modelli di corrispondenza per HCI_VS_MSFT_LE_Monitor_Advertisement

In questo esempio viene visualizzato un comando HCI_VS_MSFT_LE_Monitor_Advertisement ricevuto e le valutazioni di tre pacchetti pubblicitari diversi rispetto ai parametri dei comandi.

Ricevuto HCI_VS_MSFT_LE_Monitor_Advertisement comando Un comando HCI_VS_MSFT_LE_Monitor_Advertisement viene ricevuto dal controller e contiene i parametri seguenti.

Parametro Valore Note
Subcommand_opcode 0x03 Codice operativo sottocomando per HCI_VS_MSFT_LE_Monitor_Advertisement
RSSI_threshold_high 0x01 1db
RSSI_threshold_low 0xCE -50dB
RSSI_threshold_low_time_interval 0x05 5 secondi
RSSI_sampling_period 0xff Nessun campionamento
Condition_type 0x01 Condizione
Condition 0x02 Devono essere confrontati due modelli
0x03 Lunghezza del primo modello, incluso il tipo di Active Directory e la posizione iniziale
0x01 Tipo AD
0x00 Posizione iniziale in base al tipo di Active Directory
0x01 Primo modello a cui trovare la corrispondenza
0x06 Lunghezza del secondo modello, incluso il tipo di Active Directory e la posizione iniziale
0xff Tipo AD (dati specifici del produttore)
0x00 Posizione iniziale in base al tipo di Active Directory
0x00 Secondo modello a cui trovare la corrispondenza
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 di annunci pubblicitari [B]

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

  • Pacchetto di annunci pubblicitari [C]

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

  • Pacchetto di annunci pubblicitari [D]

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

Valutazione della corrispondenza per il pacchetto annuncio [A]

Descrizione Valore
Tipo di Active Directory del primo modello a cui trovare la corrispondenza 0x01
Lunghezza del primo criterio da associare 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 di Active Directory a cui trovare la corrispondenza 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da associare 0x06 - 0x02 = byte 0x04
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!)

Verdetto: PASS (entrambi i criteri corrispondono)

Valutazione della corrispondenza per il pacchetto annuncio [B]

Descrizione Valore
Tipo di Active Directory del primo modello a cui trovare la corrispondenza 0x01
Lunghezza del primo criterio da associare 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 di Active Directory a cui trovare la corrispondenza 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da associare 0x06 - 0x02 = byte 0x04
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 (nessuna corrispondenza)

Verdetto: PASS (solo corrispondenze di primo criterio)

Valutazione della corrispondenza per il pacchetto annuncio [C]

Descrizione Valore
Tipo di Active Directory del primo modello a cui trovare la corrispondenza 0x01
Lunghezza del primo criterio da associare 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 Non definito. L'annuncio non include dati con il tipo di Active Directory 0x01.
Tipo di secondo modello di Active Directory a cui trovare la corrispondenza 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da associare 0x06 - 0x02 = byte 0x04
Modello da trovare in corrispondenza della posizione 0x00 per 0xFF di tipo AD 0x00 0x06 0xFF 0xFF
Byte nella posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0xFF (MATCH!)

Verdetto: PASS (solo second pattern match)

Valutazione della corrispondenza per il pacchetto Annunci [D]

Descrizione Valore
Tipo di active directory del primo modello a cui corrispondere 0x01
Lunghezza del primo modello da corrispondere 0x03 - 0x02 = byte 0x01
Modello da trovare in corrispondenza della posizione 0x00 per 0x01 tipo AD 0x01
Byte nella posizione 0x00 per il tipo di Active Directory 0x01 0x02 (nessuna corrispondenza)
Tipo di active directory del secondo modello da trovare in corrispondenza 0xFF (dati specifici del produttore)
Lunghezza del secondo modello da trovare in corrispondenza 0x06 - 0x02 = byte 0x04
Modello da trovare in corrispondenza della posizione 0x00 per 0xFF di tipo AD 0x00 0x06 0xFF 0xFF
Byte nella posizione 0x00 per il tipo di Active Directory 0xFF 0x00 0x06 0xFF 0x01 (nessuna corrispondenza)

Verdetto: FAIL (nessun modello corrisponde)

Esempio: Monitoraggio annunci pubblicitari

In questo esempio viene illustrato il monitoraggio degli annunci RSSI. I valori RSSI per gli annunci ricevuti corrispondenti a una condizione specificata sono riportati di seguito.

Ore 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
Parametro Valore
RSSI_threshold_high -10db
RSSI_threshold_low -80dB
RSSI_threshold_low_time_interval 3 secondi
RSSI_sampling_period 2 secondi

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

L'annuncio RSSI è maggiore di RSSI_threshold_high alla volta 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 all'ora 5, la media degli RSSI pubblicitari ricevuti durante questo periodo (-23dB) viene propagata allo stack.

Quando il timer periodico scade all'ora 13, la media degli RSS pubblicitari ricevuti durante questo intervallo di tempo è inferiore a RSSI_threshold_low (-80dB). La media dell'annuncio RSSI (-85 dB) deve essere propagata all'host.

Quando RSSI_threshold_low_time_interval scade all'istante 15, un annuncio viene propagato all'host con RSSI di -85dB. Non vengono inviati altri annunci all'host in questo esempio.

Esempio: Monitoraggio degli annunci BAP da un dispositivo

Mentre è stato collegato con un accettatore CAP, ma non connesso, un host potrebbe monitorare gli annunci BAP da tale dispositivo.

Parametro Valore
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options Set bit 0; Bit 1 impostato se il dispositivo ha distribuito un IRK
Advertisement_report_filtering_options Bit 0, 1 e 2 set
Peer_device_address <address>
Peer_device_address_type <tipo di indirizzo>
Peer_device_IRK <IRK, se è impostato bit 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (lunghezza)
0x16 (Dati del servizio - UUID a 16 bit)
0x00 (byte iniziale)
0x4E (byte basso di ASCS UUID)
0x18 (byte elevato di ASCS UUID)

Esempio: Monitoraggio degli annunci CAP da un dispositivo

Durante il legame con un comandante CAP, ma non connesso, un host potrebbe monitorare gli annunci CAP da tale dispositivo.

Parametro Valore
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options Set bit 0; Bit 1 impostato se il dispositivo ha distribuito un IRK
Advertisement_report_filtering_options Bit 0, 1 e 2 set
Peer_device_address <address>
Peer_device_address_type <tipo di indirizzo>
Peer_device_IRK <IRK, se è impostato bit 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (lunghezza)
0x16 (Dati del servizio - UUID a 16 bit)
0x00 (byte iniziale)
0x53 (byte basso di CAS UUID)
0x18 (byte elevato di CAS UUID)

Diagramma di flusso: annuncio e filtro accettano filtri elenco

Questo diagramma di flusso fornisce un'implementazione del controller di esempio di filtro annunci pubblicitari e filtro accetta filtro elenco quando viene ricevuto un annuncio.

Un controller può implementare questa logica in modo diverso, purché l'host riceva una notifica dell'annuncio o HCI_VS_MSFT_LE_Monitor_Device_Event come specificato dal diagramma di flusso.

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

Diagramma sequenza: propagare la risposta di analisi associata all'annuncio

Diagramma sequenza: propagare la risposta di analisi associata all'annuncio

Questo diagramma di sequenza mostra una risposta di analisi propagata associata a un annuncio 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 eventi tra il controller e un determinato dispositivo. Si supponga che ci sia un annuncio A che soddisfa un filtro pubblicitario e un annuncio B che non soddisfa il filtro dell'annuncio.

Diagramma sequenza che mostra la risposta di propagazione dell'analisi HCI associata all'annuncio.