Freigeben über


Von Microsoft definierte Bluetooth HCI-Erweiterungen

Die Bluetooth Host-Controller Interface (HCI) gibt alle Interaktionen zwischen einem Host und einem Bluetooth-Funkcontroller an. Die Bluetooth-Spezifikationen ermöglichen vom Anbieter definierte HCI-Befehle und -Ereignisse, um eine nicht standardisierte Interaktion zwischen Hosts und Controllern zuzulassen. Microsoft definiert herstellerspezifische HCI-Befehle und -Ereignisse, die von Windows genutzt werden. Implementierer von Bluetooth-Controllern können diese Erweiterungen zum Implementieren spezieller Features verwenden.

Anforderungen

Die Bluetooth HCI-Befehle werden durch einen 16-Bit-Befehlscode identifiziert. Die Bluetooth-Organisation definiert Werte im Bereich 0x0000 bis 0xFBFF. Anbieter definieren Werte im Bereich 0xFC00 bis 0xFFFF, sodass 1024 verschiedene vom Anbieter zugewiesene Befehlscodes zulässig sind.

Der Anbieter muss den Wert des von Microsoft definierten Befehlscodes auswählen. Microsoft kann keinen Befehlscode auswählen und davon ausgehen, dass kein anderer Anbieter den Code für einen konkurrierenden Zweck verwendet. Es ist unsicher, einen anbieterspezifischen Befehl auszuweisen und vom Controller zu erwarten, dass er den Befehl zurückweisen wird, wenn er ihn nicht versteht. Der Controller kann den Befehl als destruktiven Vorgang interpretieren, z. B. das Aktualisieren der Firmware des Controllers.

Der Anbieter muss den gewählten Wert über eine andere Methode als den Controller kommunizieren. Microsoft gibt nicht an, wie der ausgewählte Code abgerufen werden soll.

Benachrichtigen des Windows Bluetooth-Stapels über den herstellerspezifischen Befehlscode

Der Windows Bluetooth-Stapel liest den herstellerspezifischen Befehlscode aus einem Registrierungsschlüssel, VsMsftOpCode.

Der VsMsftOpCode-Registrierungsschlüssel weist einen Typ von REG_DWORD auf, und die Schlüsseldaten sind der anbieterspezifische Opcode.

Um den anbieterspezifischen Opcode anzugeben, verwenden Sie die Anweisung AddReg unter DDInstall.HW im INF-Abschnitt des Treibers. Der Abschnitt „Registrierung hinzufügen“ sollte Folgendes enthalten:

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

Beispiel:

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

Von Microsoft definierte HCI-Befehle

HCI-Befehle Beschreibung
HCI_VS_MSFT_Read_Supported_Features Stellt eine Bitmap bereit, die beschreibt, welche von Microsoft definierten Features vom Controller unterstützt werden, und gibt das Präfix für die von Microsoft definierten Ereignisse an, die vom Controller zurückgegeben werden.
HCI_VS_MSFT_Monitor_Rssi Fordert den Controller auf, die gemessene Link-RSSI für eine bestimmte Verbindung zu überwachen und ein Ereignis zu generieren, wenn die gemessene Link-RSSI der Verbindung außerhalb der festgelegten Grenzen liegt.
HCI_VS_MSFT_Cancel_Monitor_Rssi Annuliert einen zuvor ausgestellten HCI_VS_MSFT_Monitor_Rssi-Befehl.
HCI_VS_MSFT_LE_Monitor_Advertisement Fordert an, dass der Controller die Überwachung für Ankündigungen startet, die in den angegebenen RSSI-Bereich fallen und auch andere Anforderungen erfüllen.
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Annuliert einen zuvor ausgestellten HCI_VS_MSFT_LE_Monitor_Advertisement -Befehl.
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Legt den Status der Ankündigungsfilter fest.
HCI_VS_MSFT_Read_Absolute_RSSI Liest den absoluten Received Signal Strength Indication-(RSSI-)Wert für eine BR/EDR-Verbindung vom Controller.

Von Microsoft definierte HCI-Befehle und Unterbefehle

Der Controller versteht, dass nur ein Microsoft-spezifischer HCI-Befehl vorhanden ist. Der Microsoft-spezifische Befehlssatz wird mit einem Opcode erweitert. Der erste Befehlsparameter für den von Microsoft definierten HCI-Befehl ist ein Opcode, der den Unterbefehl angibt.

Controller müssen HCI_VS_MSFT_Read_Supported_Features unterstützen, um andere Microsoft HCI-Unterbefehle zu unterstützen. Die Unterstützung für andere Befehle ist optional und hängt von den von HCI_VS_MSFT_Read_Supported_Features zurückgegebenen Werten ab. Windows sendet keine von Microsoft definierten Unterbefehle, es sei denn, der Controller gibt die Unterstützung für den Unterbefehl über eine Antwort auf HCI_VS_MSFT_Read_Supported_Features an.

HCI_VS_MSFT_Read_Supported_Features

HCI_VS_MSFT_Read_Supported_Features stellt eine Bitmap bereit, die beschreibt, welche von Microsoft definierten Features vom Controller unterstützt werden, und gibt das Präfix für die von Microsoft definierten Ereignisse an, die vom Controller zurückgegeben werden.

Der Controller muss diesen Befehl immer mit einem Command Completed-Ereignis abschließen.

Get-Help Code Befehlsparameter Rückgabeparameter
HCI_VS_MSFT_Read_Supported_Features Ausgewählter Basiscode Unterbefehl-Opcode Status,
Unterbefehl-Opcode,
Unterstützte Features,
Microsoft_event_prefix_length,
Microsoft_event_prefix

Command_parameters

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Unterbefehl-Opcode für HCI_VS_MSFT_Read_Supported_Features.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01 bis 0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Unterbefehl-Opcode für HCI_VS_MSFT_Read_Supported_Features.

Supported_features (8 Oktette):

Wert Parameterbeschreibung
0x00000000 00000001 Der Controller unterstützt das RSSI-Überwachungsfeature für BR/EDR-Verbindungen. Darüber hinaus unterstützt der Controller HCI_VS_MSFT_Read_Absolute_RSSI zum Lesen der absoluten RSSI-Metrik einer BR/EDR-Verbindung.
0x00000000 00000002 Der Controller unterstützt das RSSI-Überwachungsfeature für LE-Verbindungen.
0x00000000 00000004 Der Controller unterstützt die RSSI-Überwachung von veralteten LE-Ankündigungen.
0x00000000 00000008 Controller unterstützt die Ankündigungsüberwachung von veralteten LE-Ankündigungen.
0x00000000 00000010 Der Controller unterstützt die Überprüfung der Gültigkeit der öffentlichen X- und Y-Koordinaten auf der Kurve während des Prozesses für die sichere einfache Kopplung für P-192 und P-256.
Weitere Informationen finden Sie unter Bluetooth Core Specification Erratum 10734.
0x00000000 00000020 Der Controller unterstützt die kontinuierliche Ankündigungsüberwachung von LE-Ankündigungen, die gleichzeitig mit anderen Radioaktivitäten durchgeführt werden, unter Verwendung von HCI_VS_MSFT_LE_Monitor_Advertisement [v1].
0x00000000 00000040 Reserviert.
0x00000000 00000080 Der Controller unterstützt den AVDTP-Offload und und die in diesem Dokument beschriebenen HCI_VS_MSFT_Avdtp_*-Befehle.
0x00000000 00000100 Reserviert.
0x00000000 00000200 Reserviert.
0x00000000 00000400 Der Controller unterstützt HCI_VS_MSFT_LE_Monitor_Advertisement [v2]. Zusätzlich unterstützt der Controller die kontinuierliche Ankündigungsüberwachung von LE-Ankündigungen, die gleichzeitig mit anderen Radioaktivitäten durchgeführt werden, unter Verwendung von HCI_VS_MSFT_LE_Monitor_Advertisement [v2].
0xFFFFFFFF FFFFFF00 Bits, die für die zukünftige Definition reserviert sind. Muss Null sein.

Microsoft_event_prefix_length (1 Oktett):

Wert Parameterbeschreibung
0x00 zu 0x20 Die Anzahl der Bytes im Microsoft-Ereignispräfixfeld, wie in der zurückgegebenen Microsoft_event_prefix angegeben. Dies ist die Anzahl der Bytes konstanter Informationen am Anfang jedes von Microsoft festgelegten HCI-Ereignisses.

Microsoft_event_prefix (variable Länge):

Wert Parameterbeschreibung
Ereignispräfixwert Die konstanten Informationen, die am Anfang jedes von Microsoft definierten Ereignisses erwartet werden. Diese Informationen werden verwendet, um von Microsoft definierte Ereignisse von anderen benutzerdefinierten Ereignissen zu unterscheiden.

HCI_VS_MSFT_Monitor_Rssi

HCI_VS_MSFT_Monitor_Rssi fordert an, dass der Controller die Überwachung der gemessenen Link-RSSI für eine angegebene Verbindung startet und ein Ereignis generiert, wenn die gemessene Link-RSSI der Verbindung außerhalb der angegebenen Grenzen verläuft.

Get-Help Code Befehlsparameter Rückgabeparameter
HCI_VS_MSFT_Monitor_Rssi Ausgewählter Basiscode Unterbefehl-Opcode,
Connection_Handle,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period
Status,
Unterbefehl-Opcode

Der Controller benachrichtigt den Host des RSSI-Werts mit einem regelmäßig generierten Ereignis (basierend auf der RSSI_sampling_period). Die gemessene Link-RSSI muss dem absolute-Signalstärkewert des Empfängers in dBm für die BR/EDR-Verbindung sein.

Als Reaktion auf einen HCI_VS_MSFT_Monitor_Rssi-Befehl generiert der Controller ein Command Complete-Ereignis mit dem Status Null, falls der Controller mit der Überwachung beginnen kann, andernfalls einen Nichtzerostatus. Wenn der Statuswert ungleich Null ist, generiert der Controller kein HCI_VS_MSFT_Rssi_Event als Reaktion auf diesen Befehl.

Der Controller verweigert den Befehl, wenn ein anderer HCI_VS_MSFT_Monitor_Rssi Befehl mit demselben Connection_Handle aussteht oder wenn der angegebene Verbindungspunkt ungültig ist. Der Controller kann den Befehl auch aus anderen Gründen ablehnen, z. B. Ausschöpfung der Ressource.

Dieses Zustandsdiagramm zeigt die Übergangszustände auf dem Controller, wenn RSSI für eine Verbindung überwacht wird.

Zustandsdiagramm mit den Übergangszuständen auf dem Controller, wenn RSSI für eine Verbindung überwacht wird.

Der Controller erstellt ein HCI_VS_MSFT_Rssi_Event, wenn die empfangene RSSI größer oder gleich dem angegebenen RSSI_threshold_high ist. Nachdem dieses Ereignis generiert wurde, generiert der Controller kein neues HCI_VS_MSFT_Rssi_Event, um anzugeben, dass RSSI_threshold_high überschritten wurde, bis ein HCI_VS_MSFT_Rssi_Event generiert wird, das angibt, dass die RSSI unter RSSI_threshold_low gefallen ist.

Der Controller generiert ein HCI_VS_MSFT_Rssi_Event, wenn die empfangene RSSI gleich oder unter dem angegebenen RSSI_threshold_low über dem angegebenen RSSI_threshold_low_time_interval liegt. Nachdem dieses Ereignis generiert wurde, generiert der Controller kein neues HCI_VS_MSFT_Rssi_Event, um anzugeben, dass die RSSI unter den RSSI_threshold_low gefallen ist, bis ein HCI_VS_MSFT_Rssi_Event-Ereignis generiert wird, um anzugeben, dass RSSI_threshold_high erreicht oder überschritten wurde.

Liegt RSSI_sampling_period zwischen 0x01 und 0xFE, generiert der Controller regelmäßig ein HCI_VS_MSFT_Rssi_Event für jede RSSI_sampling_period. Dieses Ereignis enthält den Mittelwert der RSSI, der über die RSSI_sampling_period berechnet wird. Wenn die RSSI_sampling_period 0x00 oder 0xFF ist, benachrichtigt der Controller den Host nicht regelmäßig mit HCI_VS_MSFT_Rssi_Event.

Command_parameters

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x01 Der Unterbefehl-Opcode für HCI_VS_MSFT_Monitor_Rssi.

Connection_Handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Das Handle für die Verbindung, deren RSSI überwacht werden muss.

RSSI_threshold_high (1 Oktett):

Wert Parameterbeschreibung
0xXX Der maximal erwartete RSSI-Wert. Der Controller generiert ein Ereignis, wenn die beobachtete RSSI größer oder gleich diesem Wert wird.
Einheit: dBm
BR/EDR-Bereich: -128 bis 127 (signierte ganze Zahl)
LE-Bereich: -127 bis 20 (signierte ganze Zahl)

RSSI_threshold_low (1 Oktett):

Wert Parameterbeschreibung
0xXX Der erwartete RSSI-Mindestwert. Der Controller generiert ein Ereignis, wenn die beobachtete RSSI kleiner oder gleich diesem Wert wird.
Einheit: dBm
Obligatorischer BR/EDR-Bereich: -128 bis 127 (signierte ganze Zahl)
Obligatorischer LE-Bereich: -127 bis 20 (signierte ganze Zahl)

RSSI_threshold_low_time_interval (1 Oktett):

Wert Parameterbeschreibung
0x00 Reservierter Wert.
N = 0xXX Die Zeit in Sekunden, zu der der RSSI-Wert unter RSSI_threshold_low liegen soll, bevor ein HCI_VS_MSFT_Rssi_Event generiert wird.
Zeitraum = N * 1 Sekunde
Obligatorischer Bereich: 0x01 zu 0x3C

RSSI_sampling_period (1 Oktett):

Wert Parameterbeschreibung
0x00 Reservierter Wert.
N = 0xXX Das Samplingintervall in Millisekunden.
Zeitraum = N * 100 Millisekunden
Obligatorischer Bereich: 0x01 zu 0xFE
0xFF Reservierter Wert.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01 bis 0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.
0x07 Der Controller gibt Speicherkapazität überschritten zurück, wenn er nicht genügend Arbeitsspeicher zum Verarbeiten des Befehls hat.
Fehlercode Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x01 Der Unterbefehl-Opcode für HCI_VS_MSFT_Monitor_Rssi.

Ereignisse, die generiert werden, sofern sie nicht maskiert sind

Der Controller generiert umgehend ein Command Complete-Ereignis, wenn der Befehl HCI_VS_MSFT_Monitor_Rssi empfangen wird. Wenn das Command Complete-Ereignis den Status 0 zurückgibt, generiert der Controller eine HCI_VS_MSFT_Rssi_Event, wenn eine der folgenden Bedingungen auftritt.

  • Die beobachtete RSSI für das Gerät über RSSI_threshold_low_time_interval wird gleich oder kleiner dem angegebenen RSSI_threshold_low-Wert.
  • Die beobachtete RSSI für das Gerät wird größer oder gleich dem angegebenen RSSI_threshold_high-Wert.
  • Die RSSI_sampling_period ist gültig und der Samplingzeitraum läuft ab.

Der Controller sollte alle erforderlichen Bereinigungen ausführen, falls die Verbindung mit dem angegebenen Gerät verloren geht. In diesem Fall wird kein HCI_VS_MSFT_Cancel_Monitor_Rssi-Befehl an den Controller gesendet.

HCI_VS_MSFT_Cancel_Monitor_Rssi

HCI_VS_MSFT_Cancel_Monitor_Rssi bricht einen zuvor ausgestellten HCI_VS_MSFT_Monitor_Rssi-Befehl ab. Der Controller generiert umgehend ein Command Completed-Ereignis als Reaktion auf diesen Befehl.

Get-Help Code Befehlsparameter Rückgabeparameter
HCI_VS_MSFT_Cancel_Monitor_Rssi Ausgewählter Basiscode Unterbefehl-Opcode,
Connection_Handle
Status,
Unterbefehl-Opcode

Command_parameters

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x02 Der Unterbefehl-Opcode für HCI_VS_MSFT_Cancel_Monitor_Rssi.

Connection_Handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Das Handle für die Verbindung, deren RSSI abgebrochen werden muss.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01 bis 0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x02 Der Unterbefehl-Opcode für HCI_VS_MSFT_Cancel_Monitor_Rssi.

Ereignisse, die generiert werden, sofern sie nicht maskiert sind

Der Controller generiert ein Command Complete-Ereignis, wenn der Befehl HCI_VS_MSFT_Cancel_Monitor_RSSI empfangen wird.

HCI_VS_MSFT_LE_Monitor_Advertisement

HCI_VS_MSFT_LE_Monitor_Advertisement fordert an, dass der Controller die Überwachung für Ankündigungen startet, die innerhalb des angegebenen RSSI-Bereichs liegen und auch eine der folgenden Bedingungen erfüllen:

  • Ein angegebenes Muster kann mit dem empfangenen Ankündigungspaket abgeglichen werden.
  • Eine angegebene UUID kann mit dem empfangenen Ankündigungspaket abgeglichen werden.
  • Ein angegebener Identitätsauflösungsschlüssel (Identity Resolution Key, IRK) kann verwendet werden, um die private Adresse des Geräts aufzulösen, von dem das Ankündigungspaket stammt.
  • Eine angegebene Bluetooth-Adresse kann mit dem empfangenen Ankündigungspaket abgeglichen werden.

Der v2-Befehl ermöglicht es dem Host, einige der oben genannten Bedingungen mit Optionen für die Quelle der Ankündigung und das Ziel einer gerichteten Ankündigung zu kombinieren, um weiter zu verfeinern, welche Ankündigungen überwacht werden. Mit dem v2-Befehl kann der Host auch filtern, welche überwachten Ankündigungen bewirken, dass der Controller Ankündigungsberichte generiert.

Get-Help Code Befehlsparameter Rückgabeparameter
HCI_VS_MSFT_LE_Monitor_Advertisement [v2] Ausgewählter Basiscode 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,
<Bedingungsparameter>
Status,
Unterbefehl-Opcode,
Monitor_Handle
HCI_VS_MSFT_LE_Monitor_Advertisement [v1] Ausgewählter Basiscode Subcommand_opcode_v1,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Condition_type,
<Bedingungsparameter>
Status,
Unterbefehl-Opcode,
Monitor_Handle

Der Controller generiert als Reaktion auf diesen Befehl ein Command Complete-Ereignis. Der Statuswert sollte auf Null festgelegt werden, wenn der Controller mit der Überwachung beginnen kann, andernfalls ist der Statuswert ungleich Null. Wenn der Controller die RSSI-Überwachung für LE-Ankündigungen nicht unterstützt, werden die Parameterwerte vonRSSI_threshold_high, RSSI_threshold_low, RSSI_threshold_low_time_interval und RSSI_sampling_period ignoriert.

Dieses Zustandsdiagramm zeigt die Übergangszustände auf dem Controller, wenn RSSI für eine Ankündigung überwacht wird.

Zustandsdiagramm mit Übergangszuständen für HCI_VS_MSFT_LE_Monitor_Advertisement.

Der Controller beginnt mit der Überwachung einer Ankündigung nur dann, wenn die empfangene RSSI größer oder gleich RSSI_threshold_high für ein bestimmtes Gerät ist und die Monitor_options übereinstimmen (siehe unten). Der Controller erstellt ein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 1 und Monitor_handle auf das Handle für diese Bedingung festgelegt, um den Host darüber zu informieren, dass der Controller dieses bestimmte Gerät für die Bedingung überwacht. Darüber hinaus gibt der Controller den ersten Ankündigungsbericht einer überwachten Ankündigung nur dann an den Host weiter, wenn die Advertisement_report_filter_options übereinstimmen (siehe unten).

Die Monitor_options für einen Filter werden basierend auf der folgenden Logik (in Pseudocode) als Übereinstimmung betrachtet:

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)

Und für eine überwachte Ankündigung werden die Advertisement_report_filter_options basierend auf der folgenden Logik (in Pseudocode) als Übereinstimmung betrachtet:

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)

Der Controller muss die Überwachung der Bedingung beenden, wenn die RSSI der empfangenen Ankündigung entspricht oder unterRSSI_threshold_low über RSSI_threshold_low_interval für das bestimmte Gerät fällt. Der Controller erstellt ein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 0 festgelegt, um den Host darüber zu informieren, dass der Controller die Überwachung des jeweiligen Geräts für die Bedingung beendet hat. Nachdem der Controller die HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 0 festgelegt hat, darf der Controller keine weiteren Ankündigungspakete an den Host für das Gerät übertragen, bis er den Host benachrichtigt hat, dass die RSSI für das jeweilige Gerät auf oder über RSSI_threshold_high für die Bedingung gestiegen ist.

Darüber hinaus generiert der Controller ein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 0 festgelegt, um den Host darüber zu informieren, dass der Controller die Überwachung des Geräts für die Bedingung beendet hat, wenn das angegebene RSSI_threshold_low_time_interval abläuft, ohne das Ankündigungspakete vom Gerat erhalten werden. Wenn der Controller ein Gerät für eine bestimmte Bedingung überwacht, sind die folgenden Anweisungen wahr.

Unterstützt der Controller die RSSI-Überwachung erweiterter LE-Ankündigungen ohne Sampling, so verteilt der Controller anonyme Ankündigungspakete an den Host, wenn der RSSI-Wert für das Paket größer oder gleich RSSI_threshold_high ist. Anonyme Ankündigungen werden nicht nachverfolgt, und es wird kein HCI_VS_MSFT_LE_Monitor_Device_Event-Ereignis generiert.

Unterstützt der Controller die RSSI-Überwachung von LE-Ankündigungen ohne Sampling, so erstellt er einen abgeschnittenen Ankündigungsbericht, falls die empfangenen Fragmente der Ankündigung übereinstimmen, die gesamte Ankündigung jedoch nicht erfolgreich empfangen wurde.

Der Controller unterstützt mindestens 30 gleichzeitige Monitor_handles, mindestens 30 gleichzeitig nachverfolgte Geräte und mindestens 20 gleichzeitig nachverfolgte Duplikate. Der Controller muss auch in der Lage sein, einen kontinuierlichen LE-Scan mit 10 %-Arbeitszyklus durchzuführen.

Wenn die Adressauflösung im Controller aktiviert ist und der Host beabsichtigt, ein Remotegerät mit seinem IRK zu überwachen, das erfolgreich in der Auflösungsliste des Controllers gespeichert ist, stellt der Host die Peer_Identity_Address und Peer_Identity_Address_Type Parameter aus dem Listeneintrag des Remotegeräts als Peer_device_address bzw. Peer_device_address_type Parameter bereit.

RSSI_sampling_period Ältere Ankündigungen Erweiterte Ankündigungen (nicht anonym) Erweiterte Ankündigungen (anonym)
0x00 Der Controller verteilt alle empfangenen Ankündigungspakete für das Gerät für diese Bedingung an den Host, es sei denn, der Controller hat zuvor einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit aktivierter Option auf 0x00 erhalten. Der Controller gibt ein Ankündigungspaket an den Host weiter, auch wenn die empfangene RSSI kleiner oder gleich RSSI_threshold_low ist, solange RSSI_threshold_low_time_interval für das jeweilige Gerät für diese Bedingung nicht abgelaufen ist. Der RSSI-Wert dieses Ankündigungspakets ist der RSSI-Wert der empfangenen Ankündigung. Wenn der Controller die RSSI-Überwachung von erweiterten LE-Ankündigungen ohne Sampling unterstützt, gilt das gleiche Verhalten wie in der Spalte Ältere Ankündigungen, außer dass ein Ankündigungspaket als alle PDUs in der Ankündigungskette definiert ist. Unterstützt der Controller die RSSI-Überwachung von erweiterten LE-Ankündigungen ohne Sampling, so verteilt er alle empfangenen Ankündigungspakete an den Host für das Gerät für diese Bedingung, es sei denn, der Controller erhielt zuvor einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit aktivierter Option auf 0x00.
0x01 bis 0xFE Der Controller verteilt alle angegebenen älteren Ankündigungspakete an den Host jede angegebene RSSI_sampling_period, es sei denn, er hat vorher einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit aktivierter Option auf 0x00 erhalten. Der für die Anzeige angegebene RSSI-Wert ist der während dieses Samplingintervalls empfangene Mittelwert des RSSI-Werts. Wenn der Controller während des Samplingzeitraums kein Ankündigungspaket erhält, darf er keine Ankündigung an den Host weitergeben. Es ist möglich, dass RSSI_sampling_period kleiner als RSSI_threshold_low_time_interval ist und alle während der RSSI_sampling_period empfangenen Ankündigungs-RSSI unter RSSI_threshold_low liegen. Der Controller gibt die Ankündigung weiterhin mit dem Mittelwert des RSSI-Werts weiter, der während dieses Samplingintervalls empfangen wurde. Unterstützt der Controller die RSSI-Überwachung erweiterter Ankündigungen ohne Sampling, so verhält sich der Controller so, als ob die RSSI_sampling_period 0x00 war. Unterstützt der Controller die RSSI-Überwachung erweiterter Ankündigungen ohne Sampling, so verhält sich der Controller so, als ob die RSSI_sampling_period 0x00 war.
0xFF Der Controller darf keine weiteren Ankündigungspakete an den Host für das Gerät für die Bedingung fließen lassen, bis der Controller den Host benachrichtigt hat, dass die RSSI des jeweiligen Geräts unter RSSI_threshold_low für RSSI_threshold_low_time_interval für das jeweilige Gerät für diese Bedingung gefallen ist. Diese Benachrichtigung erfolgt durch das Generieren einer HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 0 festgelegt. Wenn der Controller die RSSI-Überwachung erweiterter LE-Ankündigungen ohne Sampling unterstützt, entspricht das Verhalten dem der Spalte Ältere Ankündigungen. Unterstützt der Controller die RSSI-Überwachung erweiterter Ankündigungen ohne Sampling, so verhält sich der Controller so, als ob die RSSI_sampling_period 0x00 war.

Wenn der Controller zuvor einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit aktivierter 0x00 erhalten hat, darf der Zeitgeber für den Samplingzeitraum nicht angehalten werden. Weitere Informationen finden Sie im Beispiel: HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable für Filter mit Samplingzeitraum. Wenn der Controller nicht duplizierte Ankündigungspakete von demselben Gerät empfängt, muss er jedes Ankündigungspaket auf die Übereinstimmung mit den Bedingungen prüfen, die auf dem Controller gespeichert sind.

Wenn der Controller ein Ankündigungspaket von einem Gerät empfängt, das mehreren Bedingungen entspricht, generiert er HCI_VS_MSFT_LE_Monitor_Device_Event für jede übereinstimmende Bedingung mit Monitor_handle festgelegt auf die Bedingung, mit der eine Übereinstimmung vorlag.

Wenn der Controller die RSSI-Werte nicht für alle Geräte überwachen kann, die der Bedingung entsprechen, überwacht er so viele Geräte wie möglich. Die Entscheidung darüber, welche Geräte überwacht werden sollen, hängt von den RSSI-Werten der empfangenen Ankündigung ab. Der Controller überwacht Geräte mit der größeren Signalstärke.

Wenn der Controller den Host über ein bestimmtes Gerät (A) benachrichtigt hat und es Geräte mit maximaler Hardwarekapazität überwacht, und wenn ein anderes Gerät (B) mit einem höheren RSSI-Wert in Reichweite kommt, benachrichtigt der Controller den Host darüber, dass er die Überwachung des Geräts (A) beendet hat, indem er ein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state festgelegt auf 0 generiert. Der Controller muss auch ein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 1 festlegen, um den Host darüber zu informieren, dass das Gerät (B) jetzt überwacht wird.

Bedingungstyp und Bedingungsparameter

Der Parameter Condition_type gibt an, ob der Parameter Bedingung ein Muster, UUID, IRK oder BD_ADDR angibt.

Wenn der Parameter Condition_type ein Muster angibt, enthält die Bedingung zwei Abschnitte, die die Anzahl der in der Bedingung vorhanden Muster sowie die Musterdaten enthalten.

Diagramm, das das Musterbedingungsdaten-Layout für HCI_VS_MSFT_LE_Monitor_Advertisement veranschaulicht.

Anzahl der Muster gibt die Anzahl der Muster an, die abgeglichen werden müssen.

Musterdaten haben das folgende Format.

  • Länge gibt die Länge dieses Musters an, einschließlich des Datentyps und des Startbyte des Musters.
  • AD-Typ gibt das AD-Typfeld an.
  • Start des Musters gibt die Startbyteposition des Musters unmittelbar nach AD-Typ an.
  • Muster weist eine Größe von (Length - 0x2) auf und ist das Muster, das für den angegebenen AD-Typ innerhalb des Ankündigungspakets vom angegebenen Startbyte abgeglichen werden soll.

Wenn mehrere Muster angegeben sind, stellt der Controller sicher, dass mindestens ein Muster mit der empfangenen Ankündigung übereinstimmt.

Wenn der Controller die RSSI-Überwachung von erweiterten LE-Ankündigungen ohne Sampling unterstützt:

  • Der Controller sucht nach dem Muster in den ersten 251 Oktetten der Hostankündigungsdaten und kann in den verbleibenden Oktetten der Hostankündigungsdaten suchen. Wenn der AD-Abschnitt über die ersten 251 Oktette der Hostankündigungsdaten hinausgeht, sucht der Controller im Teil des AD-Abschnitts, der sich in den ersten 251 Oktetten der Hostankündigungsdaten befindet, und kann in allen verbleibenden Oktetten der Hostankündigungsdaten suchen. Hinweis: Basierend auf der Fragmentierung durch den Ankündiger können sich die ersten 251 Oktette der Hostankündigungsdaten über die AdvData mehrerer Ankündigungs-PDUs erstrecken. Scanner sollten die Anzahl der nachfolgenden AuxPtrs begrenzen, um zu vermeiden, dass sie übermäßig lange Ketten von PDUs folgen.

  • Der Controller soll auf Basis einer Adresse pro Gerät pro Ankündigungsset nachverfolgen. Der Controller gibt ein HCI_VS_MSFT_LE_Monitor_Device_Event für jeden Ankündigungssatz weiter, der dem Muster entspricht, auch wenn die Ankündigung von derselben Geräteadresse stammt.

Wenn der Parameter Condition_type eine UUID angibt, enthält der Parameter Bedingung einen UUID-Typ und eine UUID. Der UUID-Typ gibt an, ob UUID 16-Bit, 32-Bit oder 128-Bit ist. Der Controller analysiert die Dienst-UUID des Ankündigungspakets, um auf die angegebene UUID zu überprüfen. Wenn der UUID-Typ als 0x01 definiert ist, analysiert der Controller die unvollständige Liste der 16-Bit-Dienst-UUIDs und die vollständige Liste der im Dienst UUID AD-Typ angegebenen 16-Bit-Dienst-UUIDs. Wenn der UUID-Typ als 0x02 definiert ist, analysiert der Controller die unvollständige Liste der 32-Bit-Dienst-UUIDs und die vollständige Liste der im Dienst UUID AD-Typ angegebenen 32-Bit-Dienst-UUIDs. Wenn der UUID-Typ als 0x03 definiert ist, analysiert der Controller die unvollständige Liste der 128-Bit-Dienst-UUIDs und die vollständige Liste der im Dienst UUID AD-Typ angegebenen 128-Bit-Dienst-UUIDs.

Wenn der Controller die RSSI-Überwachung von erweiterten LE-Ankündigungen ohne Sampling unterstützt:

  • Der Controller sucht nach der Dienst-UUID in den ersten 251 Oktetten der Hostankündigungsdaten und kann in den verbleibenden Oktetten der Hostankündigungsdaten suchen. Wenn der AD-Abschnitt über die ersten 251 Oktette der Hostankündigungsdaten hinausgeht, sucht der Controller im Teil des AD-Abschnitts, der sich in den ersten 251 Oktetten der Hostankündigungsdaten befindet, nach der Dienst-UUID, sowie in allen verbleibenden Oktetten der Hostankündigungsdaten. Hinweis: Basierend auf der Fragmentierung durch den Ankündiger können sich die ersten 251 Oktette der Hostankündigungsdaten über die AdvData mehrerer Ankündigungs-PDUs erstrecken. Scanner sollten die Anzahl der nachfolgenden AuxPtrs begrenzen, um zu vermeiden, dass sie übermäßig lange Ketten von PDUs folgen.

  • Der Controller soll auf Basis einer Adresse pro Gerät pro Ankündigungsset nachverfolgen. Der Controller gibt ein HCI_VS_MSFT_LE_Monitor_Device_Event für jeden Ankündigungsset weiter, der der Dienst-UUID entspricht, auch wenn die Ankündigung vom selben Gerät stammt.

Wenn der Condition_type-Parameter eine IRK angibt, enthält der Parameter Condition die IRK.

Wenn der Condition_type-Parameter eine Bluetooth-Adresse angibt, enthält der Condition-Parameter den Adresstyp und BD_ADDR.

Der Controller muss die auf den Bedingungen basierende Überwachung beibehalten, auch wenn das Scannen (Aktiv oder Passiv) aktiviert ist. Wenn das aktive Scannen aktiviert ist, wird die Scanantwort für eine Ankündigung, die einem Filter entspricht, an den Host weitergegeben.

Wenn der Controller einen HCI_VS_MSFT_LE_Monitor_Advertisement-Befehl erhält, wenn die Filter deaktiviert sind (aufgrund eines zuvor empfangenen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehls mit aktivierter Einstellung auf 0x00), akzeptiert der Controller den Befehl, falls möglich, legt ihn jedoch auf einen deaktivierten Zustand fest. Der Controller kann den Befehl auch aus anderen Gründen ablehnen, z. B. Ausschöpfung der Ressource.

Wenn alle Bits von Monitor_options klar sind, sollte der Controller den Fehlercode Ungültige HCI-Befehlsparameter (0x12) zurückgeben.

Wenn Bit 1 oder Bit 3 von Monitor_options festgelegt ist und Peer_device_IRK auf eine ungültige IRK bzw. keine der Bits von Monitor_options festgelegt ist, sollte der Controller den Fehlercode Ungültige HCI-Befehlsparameter (0x12) zurückgeben.

Wenn Bit 0 oder Bit 1 oder Bit 2 oder Bit 3 von Monitor_options festgelegt ist und Condition_type auf 0x03 oder 0x04 festgelegt ist, sollte der Controller den Fehlercode Ungültige HCI-Befehlsparameter (0x12) zurückgeben.

Wenn Bit 0 von Advertisement_report_filter_options festgelegt ist und RSSI_sampling_period einen anderen Wert als 0x00 aufweist, sollte der Controller den Fehlercode Ungültige HCI-Befehlsparameter (0x12) zurückgeben.

Fehlende Parameter

Wenn eine Version dieses Befehls ausgegeben wird, die nicht alle Parameter enthält, wird Folgendes verwendet:

Parameter Wert
Monitor_options Bit 5-Satz; alle anderen Bits werden gelöscht
Advertisement_report_filter_options Bits 1 und 2 set; alle anderen Bits werden gelöscht
Peer_device_IRK 0x0000000000000000 0000000000000000
Peer_device_address 0x000000000000
Peer_device_address_type 0x00

Command_parameters

Subcommand_opcode_v1 (1 Oktett):

Wert Parameterbeschreibung
0x03 Der Unterbefehl-Opcode für HCI_VS_MSFT_LE_Monitor_Advertisement [v1].

Subcommand_opcode_v2 (1 Oktett):

Wert Parameterbeschreibung
0x0F Der Unterbefehl-Opcode für HCI_VS_MSFT_LE_Monitor_Advertisement [v2].

RSSI_threshold_high (1 Oktett):

Wert Parameterbeschreibung
0xXX Der maximal erwartete RSSI-Wert. Der Controller generiert ein Ereignis, wenn die beobachtete RSSI größer oder gleich diesem Wert wird.
Einheit: dBm
Obligatorischer Bereich: -127 bis 20 (signierte ganze Zahl)

RSSI_threshold_low (1 Oktett):

Wert Parameterbeschreibung
0xXX Der erwartete RSSI-Mindestwert. Der Controller generiert ein Ereignis, wenn die beobachtete RSSI kleiner oder gleich diesem Wert wird.
Einheit: dBm
Obligatorischer Bereich: -127 bis 20 (signierte ganze Zahl)

RSSI_threshold_low_time_interval (1 Oktett):

Wert Parameterbeschreibung
0x00 Reservierter Wert.
N = 0xXX Die Zeit in Sekunden, zu der der RSSI-Wert unter RSSI_threshold_low liegen soll, bevor ein HCI_VS_MSFT_Rssi_Event generiert wird
Zeitraum = N * 1 Sekunde
Obligatorischer Bereich: 0x01 zu 0x3C.

RSSI_sampling_period (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Controller gibt alle empfangenen Ankündigungen an den Host weiter.
N = 0xXX Das Samplingintervall in Millisekunden.
Zeitraum = N * 100 Millisekunden.
Obligatorischer Bereich: 0x01 zu 0xFE
0xFF Der Controller gibt keine der empfangenen Ankündigungen an den Host weiter.

Monitor_options (1 Oktett):

Bitnummer Parameterbeschreibung
0 Der Controller überwacht Ankündigungs-PDUs, wenn AdvA oder seine aufgelöste Identitätsadresse mit Peer_device_address und Peer_device_address_type übereinstimmt und wenn TargetA nicht vorhanden ist oder, wenn sie vorhanden ist, die TargetA basierend auf der Scanfilterrichtlinie zulässig ist, wenn diese PDUs mit der in Condition_Type angegebenen Bedingung übereinstimmen.
1 Der Controller überwacht Ankündigungs-PDUs, bei denen AdvA mit Peer_device_IRK aufgelöst werden kann, und wenn TargetA nicht vorhanden ist. Wenn es vorhanden ist, ist TargetA basierend auf der Scanfilterrichtlinie zulässig, wenn diese PDUs mit der in Condition_Type angegebenen Bedingung übereinstimmen. Dieses Bit darf nicht festgelegt werden, wenn Link Layer Privacy im Controller verwendet wird.
2 Der Controller überwacht gerichtete Ankündigungs-PDUs, wenn die TargetA basierend auf der Scanfilterrichtlinie zulässig ist und AdvA oder seine aufgelöste Identitätsadresse mit Peer_device_address und Peer_device_address_type übereinstimmt. Dies ist unabhängig davon, ob die PDU mit der in Condition_Type angegebenen Bedingung übereinstimmt.
3 Der Controller überwacht gerichtete Ankündigungs-PDUs, wenn TargetA auf der Grundlage der Scanfilterrichtlinie zulässig ist und AdvA mit Peer_device_IRK aufgelöst werden kann. Dies ist unabhängig davon, ob die PDU mit der in Condition_Type angegebenen Bedingung übereinstimmt. Dieses Bit darf nicht festgelegt werden, wenn Link Layer Privacy im Controller verwendet wird.
4 Der Controller überwacht gerichtete Ankündigungs-PDUs, wenn TargetA basierend auf der Scanfilterrichtlinie zulässig ist, unabhängig vom Wert von Peer_device_address und Peer_device_address_type bzw. Peer_device_IRK und unabhängig davon, ob die PDU mit der in Condition_Type angegebenen Bedingung übereinstimmt.
5 Der Controller überwacht Ankündigungs-PDUs von jeder AdvA, bei der TargetA nicht vorhanden ist oder, sofern es vorhanden ist, TargetA basierend auf der Scanfilterrichtlinie zulässig ist, wenn diese PDUs mit der in Condition_Type angegebenen Bedingung übereinstimmen.
Alle anderen Bits Für die spätere Verwendung reserviert

Advertisement_report_filtering_options (1 Oktett):

Bitnummer Parameterbeschreibung
0 Filtert duplizierte Ankündigungs-PDUs. Dieses Bit wird nur festgelegt, wenn RSSI_sampling_period 0x00 ist.
1 Der Controller generiert HCI_LE_Advertising_Report- oder HCI_LE_Directed_Advertising_Report-Ereignisse bzw. HCI_LE_Extended_Advertising_Report-Ereignisse für ältere Ankündigungs-PDUs, wenn diese PDUs mit den angegebenen Monitor_options übereinstimmen.
2 Der Controller generiert HCI_LE_Extended_Advertising_Report-Ereignisse für erweiterte Ankündigungs-PDUs, wenn diese PDUs mit den angegebenen Monitor_options übereinstimmen.
3 Der Controller generiert HCI_LE_Advertising_Report- oder HCI_LE_Directed_Advertising_Report-Ereignisse bzw. HCI_LE_Extended_Advertising_Report-Ereignisse für gerichtete Ankündigungs-PDUs, wenn diese PDUs mit den angegebenen Monitor_options übereinstimmen.
Alle anderen Bits Für die spätere Verwendung reserviert

Peer_device_address (6 Oktetten):

Wert Parameterbeschreibung
0xXXXXXXXXXXXX Die abzugleichende öffentliche Geräteadresse oder zufällige Geräteadresse.

Peer_device_address_type (1 Oktett):

Wert Parameterbeschreibung
0x00 Öffentliche Geräteadresse
0x01 Zufällige Geräteadresse
Alle anderen Werte Für die spätere Verwendung reserviert

Peer_device_IRK (16 Oktetten):

Wert Parameterbeschreibung
0x0000000000000000 0000000000000000 Ungültige IRK. Darf kein Wert sein, wenn Monitor_options Bit 1 oder Monitor_options Bit 3 festgelegt ist.
0xXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX IRK des abzugleichenden Geräts. Peer_device_address und Peer_device_address_type werden aufgefüllt.

Condition_type (1 Oktett):

Wert Parameterbeschreibung
0x01 Die Bedingung ist ein Muster, das für die Ankündigung abgeglichen werden muss.
0x02 Die Bedingung ist ein UUID-Typ und eine UUID.
0x03 Die Bedingung ist die Auflösung einer IRK. Ausgeschlossen, wenn entweder Monitor_options Bit 0, 1, 2 oder 3 festgelegt ist.
0x04 Die Bedingung ist ein Bluetooth-Adresstyp und eine Bluetooth-Adresse. Ausgeschlossen, wenn entweder Monitor_options Bit 0, 1, 2 oder 3 festgelegt ist.

Bedingung: Die anwendbaren Felder für Bedingung hängen vom Wert von Condition_type ab. Weitere Informationen finden Sie im Abschnitt „Condition_type- und Bedingungsparameter“.

Number_of_patterns (1 Oktett):

Wert Parameterbeschreibung
0xXX Die Anzahl der im Pattern_data-Parameter angegebenen Muster.

Pattern_data (>3 Oktetten):

Wert Parameterbeschreibung
Length Länge dieses Musters.
Datentyp Datentyp des Ankündigungsabschnitts. Die Werte werden im Dokument „Bluetooth Assigned Numbers“ aufgeführt.
Startbyte Startposition des Musters, das für den angegebenen Datentyp abgeglichen werden soll.
Muster Muster, das abgeglichen werden soll (Länge – 0x2 Bytes).

UUID_type (1 Oktett):

Wert Parameterbeschreibung
0x01 Die UUID ist ein 16-Bit-Dienst.
0x02 Die UUID ist ein 32-Bit-Dienst.
0x03 Die UUID ist ein 128-Bit-Dienst.

UUID (2, 4 oder 16 Oktetten):

Wert Parameterbeschreibung
0xXXXX 2 Byte, wenn UUID_type 0x01 ist.
4 Byte, wenn UUID_type 0x02 ist.
16 Byte, wenn UUID_type 0x03 ist.

IRK (16 Oktetten):

Wert Parameterbeschreibung
0xXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX Die IRK, die zum Auflösen der privaten Adresse verwendet werden soll.

Address_type (1 Oktett):

Wert Parameterbeschreibung
0x00 Öffentliche Geräteadresse.
0x01 Zufällige Geräteadresse.
0x02 bis 0xFF Für die spätere Verwendung reservierte Werte.

BD_ADDR (6 Oktetten):

Wert Parameterbeschreibung
0xXXXXXXXXXXXX Die Bluetooth-Adresse des zu überwachenden Geräts.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x07 Der Controller gibt „Speicherkapazität überschritten“ zurück, wenn er nicht genügend Arbeitsspeicher zum Verarbeiten des Befehls hat.
Fehlercode Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x03 oder 0x0F Der Unterbefehl-Opcode für HCI_VS_MSFT_LE_Monitor_Advertisement [v1] oder HCI_VS_MSFT_LE_Monitor_Advertisement [v2], je nachdem, welcher Befehl übermittelt wurde.

Monitor_handle (1 Oktett):

Wert Parameterbeschreibung
0x00 bis 0xFF Das Handle für diese Regel. Dieses Handle wird als Parameter für HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement verwendet, um die Überwachung der Ankündigung abzubrechen.
Dieser Parameter ist nur gültig, wenn der Status 0x00 ist.

Ereignisse, die generiert werden, sofern sie nicht maskiert sind

Der Controller generiert ein Command Complete-Ereignis, wenn der Befehl HCI_VS_MSFT_LE_Monitor_Advertisement empfangen wird.

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement bricht einen zuvor ausgestellten HCI_VS_MSFT_LE_Monitor_Advertisement-Befehl ab.

Get-Help Code Befehlsparameter Rückgabeparameter
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Ausgewählter Basiscode Unterbefehl-Opcode,
Monitor_handle
Status,
Unterbefehl-Opcode

Der Controller generiert umgehend ein Command Completed-Ereignis als Reaktion auf diesen Befehl.

Command_parameters

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x04 Der Unterbefehl-Opcode für HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Connection_Handle (1 Oktett):

Wert Parameterbeschreibung
0xXX Das Handle für den Filter, der abgebrochen wird.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x07 Der Controller gibt „Speicherkapazität überschritten“ zurück, wenn er nicht genügend Arbeitsspeicher zum Verarbeiten des Befehls hat.
Fehlercode Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x04 Der Unterbefehl-Opcode für HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Ereignisse, die generiert werden, sofern sie nicht maskiert sind

Der Controller generiert ein Command Complete-Ereignis, wenn der Befehl HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement empfangen wird.

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable legt den Status der Ankündigungsfilter fest.

Get-Help Code Befehlsparameter Rückgabeparameter
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Ausgewählter Basiscode Unterbefehl-Opcode,
Aktivieren
Status,
Unterbefehl-Opcode

Wenn Enable auf 0x00 festgelegt ist, gibt der Controller empfangene Ankündigungen basierend auf vorhandenen Filterakzeptanzlisten-Einstellungen an den Host weiter. Der Controller überwacht weiterhin die derzeit überwachten Geräte und generiert ein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 0 festgelegt, wenn das Gerät nicht mehr überwacht wird. Der Controller muss ein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state auf 1 festlegen, wenn ein neues Gerät überwacht wird. Der Host kann HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable mit Enable auf 0x01 festlegen, um alle Filterbedingungen erneut zu aktivieren.

Wenn Enable auf 0x01 festgelegt ist, aktiviert dieser Befehl alle Filter, die mit einem zuvor ausgestellten HCI_VS_MSFT_LE_Monitor_Advertisement-Befehl festgelegt wurden. Der Controller lehnt einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl ab, wenn der Filterzustand dadurch nicht umgeschaltet wird:

  • Der Controller muss einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit Enable festgelegt auf 0x01 ablehnen, wenn er zuvor einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit Enable festgelegt auf 0x01 erhalten hat.
  • Der Controller muss den HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit Enable festgelegt auf 0x00 ablehnen, wenn er zuvor einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit Enable festgelegt auf 0x00 erhalten hat.

Der Standardzustand des Werbefilters ist deaktiviert. Dieser Zustand entspricht dem Controller, der zuvor einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mit Enable festgelegt auf 0x00 empfängt. Der Controller generiert umgehend ein Command Completed-Ereignis als Reaktion auf diesen Befehl.

Command_parameters

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x05 Der Unterbefehl-Opcode für HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Enable (1 Oktett):

Wert Parameterbeschreibung
0x00 Stellt das Verhalten der aktuellen Filterakzeptanzliste wieder her, führt aber die Überwachung von Geräten basierend auf der Bedingung aus HCI_VS_MSFT_LE_Monitor_Advertisement-Befehlen fort.
0x01 Aktiviert alle ausgestellten HCI_VS_MSFT_LE_Monitor_Advertisement-Befehle auf dem Controller.

Return_parameter

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x0C Der Controller muss Command Disallowed zurückgeben, wenn der Controller den Befehl abgelehnt hat, da er zuvor einen HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable-Befehl mitEnable auf denselben Wert wie diesen Befehl festgelegt hat.
Fehlercode Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x05 Der Unterbefehl-Opcode für HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Ereignisse, die generiert werden, sofern sie nicht maskiert sind

Der Controller generiert ein Command Complete-Ereignis, wenn der Befehl HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable empfangen wird.

HCI_VS_MSFT_Read_Absolute_RSSI

HCI_VS_MSFT_Read_Absolute_RSSI liest den absoluten RSSI-Wert (Received Signal Strength Indication) für eine BR/EDR-Verbindung vom Controller.

Get-Help Code Befehlsparameter Rückgabeparameter
HCI_VS_MSFT_Read_Absolute_RSSI Ausgewählter Basiscode Unterbefehl-Opcode,
Connection_Handle
Status,
Unterbefehl-Opcode,
Connection_Handle,
RSSI

Ein Verbindungshandle wird sowohl als Befehl als auch als Rückgabeparameter bereitgestellt, um die ACL-Verbindung zu identifizieren, deren RSSI gelesen wird. Die RSSI-Metrik ist die absolute Empfängersignalstärke in dBm mit bis zu ± 6 dB Genauigkeit. Wenn die RSSI nicht gelesen werden kann, muss die RSSI-Metrik auf 127 festgelegt werden. Der Controller muss diesen Befehl immer mit einem Command Completed-Ereignis abschließen.

Command_parameters

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x06 Der Unterbefehl-Opcode für HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Das Handle für die BR/EDR-Verbindung, deren RSSI gelesen werden muss.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01 bis 0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x06 Der Unterbefehl-Opcode für HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Das Handle für die BR/EDR-Verbindung, deren RSSI gelesen wurde.

RSSI (1 Oktett):

Wert Parameterbeschreibung
N = 0xXX Der RSSI-Wert für die BR/EDR-Verbindung.
Einheit: dBm
Obligatorischer Bereich: -128 bis 127 (signierte ganze Zahl)

Ereignisse, die generiert werden, sofern sie nicht maskiert sind

Der Controller generiert ein Command Complete-Ereignis, wenn der Befehl HCI_VS_MSFT_Read_Absolute_RSSI abgeschlossen ist.

Von Microsoft definierte Bluetooth HCI-Ereignisse

Alle von Microsoft definierten Bluetooth HCI-Ereignisse sind vom Anbieter definierte Ereignisse und verwenden den Ereigniscode 0xFF. Die Ereignisdaten für Microsoft-Ereignisse beginnen immer mit einer konstanten Zeichenfolge von Bytes, um die von Microsoft definierten Ereignisse von anderen Anbieter-definierten Ereignissen zu unterscheiden. Die Länge und der Wert der Konstantenzeichenfolge werden vom Controllerimplementierer definiert und als Reaktion auf HCI_VS_MSFT_Read_Supported_Features zurückgegeben.

HCI-Ereignis Beschreibung
HCI_VS_MSFT_Rssi_Event HCI_VS_MSFT_RSSI_Event gibt an, dass ein HCI_VS_MSFT_Monitor_Rssi-Befehl abgeschlossen ist.
HCI_VS_MSFT_LE_Monitor_Device_Event HCI_VS_MSFT_LE_Monitor_Device_Event gibt an, dass der Controller entweder gestartet oder die Überwachung eines Bluetooth LE-Geräts beendet hat.

HCI_VS_MSFT_RSSI_Event

HCI_VS_MSFT_RSSI_Event gibt an, dass ein HCI_VS_MSFT_Monitor_Rssi-Befehl abgeschlossen ist. Wenn der Status-Parameter Null ist, wurde der Befehl abgeschlossen, da der RSSI-Wert für das Remotegerät in einen Wert außerhalb des angegebenen Bereichs geändert wurde. Wenn der Status-Parameter nicht null ist, wurde der Befehl abgeschlossen, da der RSSI-Wert der Verbindung nicht mehr überwacht werden kann.

Ereignis Event Code Microsoft-Ereigniscode Ereignisparameter
HCI_VS_MSFT_RSSI_Event 0xFF 0x01 Event_prefix,
Microsoft_event_code,
Status,
Connection_Handle,
RSSI

Event_parameters

Event_prefix (variable Größe):

Wert Parameterbeschreibung
Ereignispräfix Das Ereignispräfix, das dieses Ereignis als „Microsoft-definiert“ kennzeichnet. Die Größe und der Wert werden vom Befehl HCI_VS_MSFT_Read_Supported_Features zurückgegeben.

Microsoft_event_code (1 Oktett):

Wert Parameterbeschreibung
0x01 Der Ereigniscode für HCI_VS_MSFT_RSSI_Event.

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Erfolg. Der RSSI-Wert der Verbindung hat eine der folgenden Bedingungen erfüllt. Die RSSI hat RSSI_threshold_high erreicht oder überschritten.
Die RSSI hat RSSI_threshold_low erreicht oder ist unter diesen gefallen, und zwar innerhalb von RSSI_threshold_low_time_interval Sekunden.
Die RSSI_sampling_period ist abgelaufen, und dieses Ereignis wurde generiert, um den Host des RSSI-Werts zu benachrichtigen.
0x01 bis 0xFF Fehler. Der RSSI-Wert der Verbindung kann nicht mehr überwacht werden. Der Fehlercode ist in der Regel einer der Codes, die beschreiben, warum die zugrunde liegende ACL-Verbindung verloren gegangen ist.

Connection_Handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Das Handle für die Verbindung, deren RSSI überwacht werden muss.

RSSI (1 Oktett):

Wert Parameterbeschreibung
0xXX Der gemessene Link-RSSI-Wert für die Verbindung.
Einheit: dBm
BR/EDR-Bereich: -128 bis 127 (signierte ganze Zahl)
LE-Bereich: -127 bis 20 (signierte ganze Zahl)

HCI_VS_MSFT_LE_Monitor_Device_Event

HCI_VS_MSFT_LE_Monitor_Device_Event gibt an, dass der Controller entweder gestartet oder die Überwachung eines Bluetooth LE-Geräts beendet hat.

Wenn der Wert des Parameters Monitor_state 1 ist, hat der Controller begonnen, das Bluetooth-Gerät mit dem angegebenen BD_ADDR zu überwachen. Wenn der Wert des Parameters Monitor_state 0 ist, hat der Controller die Überwachung des Bluetooth-Geräts mit dem angegebenen BD_ADDR gestoppt.

Ereignis Event Code Microsoft-Ereigniscode Ereignisparameter
HCI_VS_MSFT_LE_Monitor_Device_Event 0xFF 0x02 Event_prefix,
Microsoft_event_code,
Address_type,
BD_ADDR,
Monitor_handle,
Monitor_state

Der Controller darf kein HCI_VS_MSFT_LE_Monitor_Device_Event mit dem ParameterMonitor_state festgelegt auf 0 generieren, wenn er noch kein HCI_VS_MSFT_LE_Monitor_Device_Event mit Monitor_state festgelegt auf 1 generiert hat.

Event_parameters

Event_prefix (variable Größe):

Wert Parameterbeschreibung
Ereignispräfix Das Ereignispräfix, das dieses Ereignis als „Microsoft-definiert“ kennzeichnet. Die Größe und der Wert werden vom Befehl HCI_VS_MSFT_Read_Supported_Features zurückgegeben.

Microsoft_event_code (1 Oktett):

Wert Parameterbeschreibung
0x02 Der Ereigniscode für HCI_VS_MSFT_LE_Monitor_Device_Event.

Address_type (1 Oktett):

Wert Parameterbeschreibung
0x00 Öffentliche Geräteadresse.
0x01 Zufällige Geräteadresse.
0x02 bis 0xFF Für die spätere Verwendung reservierte Werte.

BD_ADDR (6 Oktetten):

Wert Parameterbeschreibung
0xXXXXXXXXXXXX Die Bluetooth-Adresse des Geräts.

Monitor_handle (1 Oktett):

Wert Parameterbeschreibung
0xXX Das Handle für den Filter, der für den Befehl HCI_VS_MSFT_LE_Monitor_Advertisement angegeben wurde.

Monitor_state (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Controller hat die Überwachung des durch BD_ADDR und Monitor_handle angegebenen Geräts beendet.
0x01 Der Controller hat die Überwachung des durch BD_ADDR und Monitor_handle angegebenen Geräts gestartet.

Microsoft-definierte AVDTP-HCI-Befehle

Die folgenden AVDTP-HCI-Befehle bieten Unterstützung für das A2DP-Offload des Audio-Sidebands. Weitere Informationen finden Sie unter A2DP-Offload des Audio-Sidebands.

HCI AVDTP-Befehle Beschreibung
HCI_VS_MSFT_Avdtp_Capabilities_Configuration Konfiguriert die Audiotransportschnittstelle und gibt Codec-Funktionen des Bluetooth-Controllers zurück. Dabei handelt es sich um eine Liste von Codec-Informationsblöcken.
HCI_VS_MSFT_Avdtp_Open Ordnet AVDTP-Offloadressourcen innerhalb des Controllers zu und konfiguriert sie.
HCI_VS_MSFT_Avdtp_Start Beginnt mit dem Audiostreaming vom Audiotransport an übertragene AVDTP-Medienpakete.
HCI_VS_MSFT_Avdtp_Suspend Beendet die von HCI_VS_MSFT_Avdtp_Start initiierte Streamingaktivität.
HCI_VS_MSFT_Avdtp_Close Gibt die von HCI_VS_MSFT_Avdtp_Open zugeordneten AVDTP-Ressourcen frei.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

HCI_VS_MSFT_Avdtp_Capabilities_Configuration konfiguriert die Audiotransportschnittstelle und gibt Codec-Funktionen des Bluetooth-Controllers zurück. Dabei handelt es sich um eine Liste von Codec-Informationsblöcken. Jeder Codec-Informationsblock beschreibt einen unterstützten Codec.

Einige der folgenden Parameter sind Arrays von Strukturen mit variabler Länge, daher wird davon ausgegangen, dass alle diese Parameter immer noch in einen HCI-Befehl und in ein entsprechendes HCI-Ereignis passen.

Command_parameters

External_codec_count (1 Oktett):

Wert Parameterbeschreibung
0x00-0xFF Die Anzahl der folgenden Codec_capability-Blöcke.

External_codec_capability (variable Länge):

Wert Parameterbeschreibung
Codec-Funktionsblock Ein Codec-Funktionsinformationsblock, wie in den Codec-Funktionsinformationen beschrieben. Dies beschreibt einen einzelnen Codec, der von einem an die Audioschnittstelle angeschlossenen Gerät unterstützt wird.

Diese Datenstruktur wird External_codec_count Mal wiederholt.

Audio_interface_parameter_count (1 Oktett):

Wert Parameterbeschreibung
0x00-0xFF Die Anzahl der nachfolgenden Audio_interface_parameters.

Audio_interface_parameter (variable Länge)

Wert Parameterbeschreibung
Audio-Schnittstellenparameter Ein Parameter für die Audioschnittstelle, wie oben beschrieben, wird von dem mit der Audioschnittstelle verbundenen Gerät festgelegt.

Diese Datenstruktur wird Audio_interface_parameter_count Mal wiederholt.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01-0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode _ (1 Oktett):

Wert Parameterbeschreibung
0x07 Der Unterbefehl-Opcode für HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Internal_codec_count (1 Oktett):

Wert Parameterbeschreibung
0x00-0xFF Die Anzahl der nachfolgenden internal_codec_capability-Blöcke.

Internal_codec_capability (variable Länge):

Wert Parameterbeschreibung
Codec-Funktionsblock Ein Codec-Funktionsinformationsblock, wie in A2DP-Offload des Audio-Sidebands beschrieben. Dies beschreibt einen einzelnen Codec, der vom Bluetooth-Controller unterstützt wird.

Diese Datenstruktur wird internal_codec_count Mal wiederholt.

Audio_interface_parameter_count (1 Oktett):

Wert Parameterbeschreibung
0x00-0xFF Die Anzahl der nachfolgenden Audio_interface_parameters.

Audio_interface_parameter (variable Länge)

Wert Parameterbeschreibung
Audio-Schnittstellenparameter Ein Audioschnittstellenparameter wie oben beschrieben. Die Hostsoftware übergibt diesen Parameter an das Gerät, das mit der Audioschnittstelle verbunden ist.

Diese Datenstruktur wird Audio_interface_parameter_count Mal wiederholt.

HCI_VS_MSFT_Avdtp_Open

Ordnet AVDTP-Offloadressourcen innerhalb des Controllers zu und konfiguriert sie.

Einige der folgenden Parameter sind Arrays von Strukturen mit variabler Länge, daher wird davon ausgegangen, dass alle diese Parameter immer noch in einen HCI-Befehl und in ein entsprechendes HCI-Ereignis passen.

Command_parameters

Connection_handle (2 Oktette)

Wert Parameterbeschreibung
0xXXXX Ermittelt den AVDTP-Medien-L2CAP-Kanal, der mit dem Remote-Gerät verbunden ist.

L2cap_destination_cid (2 Oktette)

Wert Parameterbeschreibung
0xXXXX L2CAP-Ziel-CID des AVDTP-Medienkanals

L2cap_mtu (2 Oktette)

Wert Parameterbeschreibung
0xXXXX L2CAP AVDTP Medienkanal MTU

Configured_codec_capability (variable Länge):

Wert Parameterbeschreibung
Codec-Funktionsblock Ein Codec-Funktionsinformationsblock, wie in A2DP-Offload des Audio-Sidebands beschrieben. Dies beschreibt den Codec, der für die AVDTP-Medien konfiguriert ist.

Audio_interface_parameter_count (1 Oktett):

Wert Parameterbeschreibung
0x00-0xFF Die Anzahl der nachfolgenden Audio_interface_parameters.

Audio_interface_parameter (variable Länge)

Wert Parameterbeschreibung
Audio-Schnittstellenparameter Ein Audioschnittstellenparameter wie oben beschrieben. Das mit der Audioschnittstelle verbundene Gerät gibt diese Parameter für eine bestimmte Streaminstanz an.

Diese Datenstruktur wird Audio_interface_parameter_count Mal wiederholt.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01-0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x08 Der Unterbefehl-Opcode für HCI_VS_MSFT_Avdtp_Open.

Avdtp_offload_handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Identifiziert die Ressource, die für den verlagerten Stream zugeordnet wurde.

Audio_interface_parameter_count (1 Oktett):

Wert Parameterbeschreibung
0x00-0xFF Die Anzahl der nachfolgenden Audio_interface_parameters.

Audio_interface_parameter (variable Länge)

Wert Parameterbeschreibung
Audio-Schnittstellenparameter Ein Audioschnittstellenparameter wie oben beschrieben. Die Hostsoftware übergibt diesen Parameter an das Gerät, das mit der Audioschnittstelle für die Streaminstanz verbunden ist.

Diese Datenstruktur wird Audio_interface_parameter_count Mal wiederholt.

HCI_VS_MSFT_Avdtp_Start

Dieser Befehl startet das Audiostreaming vom Audiotransport an übertragene AVDTP-Medienpakete. Nach dem Ausführen dieses Befehls beginnt der Bluetooth-Controller mit der folgenden Aktivität.

  • Empfängt Audiodaten vom Audiotransport
  • Wenn sich der Encoder im Bluetooth-Controller befindet, codiert er die vom Audiotransport empfangenen Daten, um codierte Frames zu erzeugen.
  • Wenn sich der Encoder im Audio-DSP befindet, extrahiert er codierte Frames aus dem Audiotransport
  • Stellt codierte Frames in AVDTP-Mediennutzlasten zusammen
  • Erstellt und überträgt AVDTP-Medienpakete, die die Mediennutzlasten enthalten

Command_parameters

Avdtp_offload_handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Identifiziert die Ressource, die für den verlagerten Stream zugeordnet wurde.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01-0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x09 Der Unterbefehl-Opcode für HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Beendet die von HCI_VS_MSFT_Avdtp_Start initiierte Streamingaktivität.

Command_parameters

Avdtp_offload_handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Identifiziert die Ressource, die für den verlagerten Stream zugeordnet wurde

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01-0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x0A Der Unterbefehl-Opcode für HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Gibt die von HCI_VS_MSFT_Avdtp_Open zugeordneten AVDTP-Ressourcen frei.

Command_parameters

Avdtp_offload_handle (2 Oktette):

Wert Parameterbeschreibung
0xXXXX Hinweis: Dieser Wert ist nach Abschluss dieses Befehls nicht mehr gültig.

Return_parameters

Status (1 Oktett):

Wert Parameterbeschreibung
0x00 Der Befehl wurde erfolgreich ausgeführt.
0x01-0xFF Fehler bei Befehl. Details finden Sie unter Fehlercodes in der Bluetooth Core-Spezifikation.

Subcommand_opcode (1 Oktett):

Wert Parameterbeschreibung
0x0B Der Unterbefehl-Opcode für HCI_VS_MSFT_Avdtp_Close.
Wert Parameterbeschreibung
0x00
0x01 Der Controller hat die Überwachung des durch BD_ADDR und Monitor_handle angegebenen Geräts gestartet.

Anhang

Dieser Abschnitt enthält Microsoft-definierte Bluetooth HCI-Erweiterungsbeispiele und Diagramme.

Beispiel: Abgleichsmuster für HCI_VS_MSFT_LE_Monitor_Advertisement

Dieses Beispiel zeigt einen empfangenen HCI_VS_MSFT_LE_Monitor_Advertisement-Befehl und die Auswertungen von drei verschiedenen Ankündigungspaketen für die Befehlsparameter.

Der Befehl HCI_VS_MSFT_LE_Monitor_Advertisement. Der Befehl HCI_VS_MSFT_LE_Monitor_Advertisement wird vom Controller empfangen und enthält die folgenden Parameter.

Parameter Wert Hinweise
Unterbefehl-Opcode 0x03 Unterbefehl-Opcode für HCI_VS_MSFT_LE_Monitor_Advertisement [v2]
RSSI_threshold_high 0x01 1dB
RSSI_threshold_low 0xCE -50dB
RSSI_threshold_low_time_interval 0x05 5 Sekunden
RSSI_sampling_period 0xFF Kein Sampling
Condition_type 0x01 Bedingung
Condition 0x02 Zwei Muster sollten abgeglichen werden
0x03 Länge des ersten Musters, einschließlich AD-Typ und Startposition
0x01 AD-Typ
0x00 Startposition nach dem AD-Typ
0x01 Erstes abzugleichendes Muster
0x06 Länge des zweiten Musters, einschließlich AD-Typ und Startposition
0xFF AD-Typ (herstellerspezifische Daten)
0x00 Startposition nach dem AD-Typ
0x00 Zweites abzugleichendes Muster
0x06
0xFF
0xFF

Der Controller empfängt dann die folgenden Ankündigungspakete.

  • Ankündigungspaket [A]

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

  • Ankündigungspaket [B]

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

  • Ankündigungspaket [C]

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

  • Ankündigungspaket [D]

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

Auswerten der Übereinstimmung für Ankündigungspaket [A]

Beschreibung Wert
AD-Typ des ersten abzugleichenden Musters 0x01
Länge des ersten abzugleichenden Musters 0x03 - 0x02 = 0x01 Byte
Muster, das an Position 0x00 für AD-Typ 0x01 abgeglichen werden soll 0x01
Bytes an Position 0x00 für den AD-Typ 0x01 0x01 (MATCH!)
AD-Typ des zweiten abzugleichenden Musters 0xFF (herstellerspezifische Daten)
Länge des zweiten abzugleichenden Musters 0x06 - 0x02 = 0x04 Bytes
Muster, das an Position 0x00 für AD-Typ 0xFF abgeglichen werden soll 0x00 0x06 0xFF 0xFF
Bytes an Position 0x00 für den AD-Typ 0xFF 0x00 0x06 0xFF 0xFF (MATCH!)

Bewertung: PASS (beide Muster stimmen überein)

Auswerten der Übereinstimmung für Ankündigungspaket [B]

Beschreibung Wert
AD-Typ des ersten abzugleichenden Musters 0x01
Länge des ersten abzugleichenden Musters 0x03 - 0x02 = 0x01 Byte
Muster, das an Position 0x00 für AD-Typ 0x01 abgeglichen werden soll 0x01
Bytes an Position 0x00 für den AD-Typ 0x01 0x01 (MATCH!)
AD-Typ des zweiten abzugleichenden Musters 0xFF (herstellerspezifische Daten)
Länge des zweiten abzugleichenden Musters 0x06 - 0x02 = 0x04 Bytes
Muster, das an Position 0x00 für AD-Typ 0xFF abgeglichen werden soll 0x00 0x06 0xFF 0xFF
Bytes an Position 0x00 für den AD-Typ 0xFF 0x00 0x06 0xFF (no match)

Bewertung: PASS (nur erstes Muster stimmt überein)

Auswerten der Übereinstimmung für Ankündigungspaket [C]

Beschreibung Wert
AD-Typ des ersten abzugleichenden Musters 0x01
Länge des ersten abzugleichenden Musters 0x03 - 0x02 = 0x01 Byte
Muster, das an Position 0x00 für AD-Typ 0x01 abgeglichen werden soll 0x01
Bytes an Position 0x00 für den AD-Typ 0x01 Nicht definiert. Die Ankündigung enthält keine Daten mit AD-Typ 0x01.
AD-Typ des zweiten abzugleichenden Musters 0xFF (herstellerspezifische Daten)
Länge des zweiten abzugleichenden Musters 0x06 - 0x02 = 0x04 Bytes
Muster, das an Position 0x00 für AD-Typ 0xFF abgeglichen werden soll 0x00 0x06 0xFF 0xFF
Bytes an Position 0x00 für den AD-Typ 0xFF 0x00 0x06 0xFF 0xFF (MATCH!)

Bewertung: PASS (nur zweites Muster stimmt überein)

Auswerten der Übereinstimmung für Ankündigungspaket [D]

Beschreibung Wert
AD-Typ des ersten abzugleichenden Musters 0x01
Länge des ersten abzugleichenden Musters 0x03 - 0x02 = 0x01 Byte
Muster, das an Position 0x00 für AD-Typ 0x01 abgeglichen werden soll 0x01
Bytes an Position 0x00 für den AD-Typ 0x01 0x02 (no match)
AD-Typ des zweiten abzugleichenden Musters 0xFF (herstellerspezifische Daten)
Länge des zweiten abzugleichenden Musters 0x06 - 0x02 = 0x04 Bytes
Muster, das an Position 0x00 für AD-Typ 0xFF abgeglichen werden soll 0x00 0x06 0xFF 0xFF
Bytes an Position 0x00 für den AD-Typ 0xFF 0x00 0x06 0xFF 0x01 (no match)

Bewertung: FAIL (keins der Muster stimmt überein)

Beispiel: Ankündigungsüberwachung

In diesem Beispiel wird die Überwachung von RSSI-Ankündigungen veranschaulicht. Die RSSI-Werte für empfangene Ankündigungen, die einer angegebenen Bedingung entsprechen, werden unten angezeigt.

Zeit (in Sekunden) 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 Wert
RSSI_threshold_high -10dB
RSSI_threshold_low -80dB
RSSI_threshold_low_time_interval 3 Sekunden
RSSI_sampling_period 2 Sekunden

Diagramm, in dem die Ankündigungsüberwachung mit den RSSI-Werten im Zeitverlauf angezeigt wird.

Die Ankündigungs-RSSI liegt über RSSI_threshold_high zum Zeitpunkt 3. Der periodische Timer für das Sampling beginnt zum Zeitpunkt 3. Alle 2 Sekunden läuft der periodische Timer ab, und der durchschnittliche RSSI-Wert der empfangenen Ankündigung wird an den Stapel weitergegeben.

Wenn der periodische Timer zum Zeitpunkt 5 abläuft, wird der Mittelwert der ankündigungsbasierten RSSIs, die während dieser Zeit (-23dB) empfangen wurden, an den Stapel weitergegeben.

Wenn der periodische Timer zum Zeitpunkt 13 abläuft, liegt der Mittelwert der während dieses Zeitraums empfangenen RSSIs unter RSSI_threshold_low (-80dB). Der Mittelwert der Ankündigungs-RSSI (-85 dB) sollte an den Host weitergegeben werden.

Wenn RSSI_threshold_low_time_interval zum Zeitpunkt 15 abläuft, wird eine Ankündigung mit RSSI von -85dB an den Host weitergegeben. In diesem Beispiel werden keine weiteren Ankündigungen an den Host gesendet.

Beispiel: Überwachen von BAP-Ankündigungen von einem Gerät

Wenn eine Bindung zwischen einem Host und einem CAP Acceptor besteht, sie aber nicht verbunden sind, könnte dieser Host BAP-Ankündigungen von diesem Gerät überwachen.

Parameter Wert
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 festgelegt; Bit 1 festgelegt, wenn das Gerät eine IRK verteilt hat
Advertisement_report_filtering_options Bit 0, 1 und 2 festgelegt
Peer_device_address <address>
Peer_device_address_type <Adresstyp>
Peer_device_IRK <IRK, wenn Bit 1 festgelegt ist>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (Länge)
0x16 (Dienstdaten – 16-Bit-UUID)
0x00 (Startbyte)
0x4E (niederwertiges Byte von ASCS UUID)
0x18 (höherwertiges Byte von ASCS UUID)

Beispiel: Überwachen von CAP-Ankündigungen von einem Gerät

Wenn eine Bindung zwischen einem Host und einem CAP Commander besteht, sie aber nicht verbunden sind, könnte dieser Host CAP-Ankündigungen von diesem Gerät überwachen.

Parameter Wert
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 festgelegt; Bit 1 festgelegt, wenn das Gerät eine IRK verteilt hat
Advertisement_report_filtering_options Bit 0, 1 und 2 festgelegt
Peer_device_address <address>
Peer_device_address_type <Adresstyp>
Peer_device_IRK <IRK, wenn Bit 1 festgelegt ist>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (Länge)
0x16 (Dienstdaten – 16-Bit-UUID)
0x00 (Startbyte)
0x53 (niederwertiges Byte von CAS UUID)
0x18 (höherwertiges Byte von CAS UUID)

Flussdiagramm: Filtern der Ankündigungen und der Filterakzeptanzliste

Dieses Flussdiagramm stellt eine Beispiel-Controllerimplementierung der Ankündigungsfilterung und Filterakzeptanzlisten-Filterung bereit, wenn eine Ankündigung empfangen wird.

Ein Controller kann diese Logik anders implementieren, solange der Host über die Ankündigung oder HCI_VS_MSFT_LE_Monitor_Device_Event benachrichtigt wird, wie im Flussdiagramm angegeben.

Flussdiagramm, das den Filterprozess der Microsoft HCI-Erweiterung zeigt.

Sequenzdiagramm: Weitergabe der Scanantwort, die der Ankündigung zugeordnet ist

Sequenzdiagramm: Weitergabe der Scanantwort, die der Ankündigung zugeordnet ist

Dieses Sequenzdiagramm zeigt eine Scanantwort, die mit einer Ankündigung verknüpft ist, die einen Ankündigungsfilter erfüllt, wenn aktives Scannen aktiviert ist. Dieses Diagramm zeigt nur die erwartete Abfolge von Ereignissen zwischen Controller und Host und zeigt keine Ereignisse zwischen dem Controller und einem bestimmten Gerät an. Angenommen, es gibt eine Ankündigung A, die einen Anzeigenfilter erfüllt, und eine Ankündigung B, die den Anzeigenfilter nicht erfüllt.

Sequenzdiagramm, das die HCI-Scan-Antwort in Verbindung mit der Ankündigung zeigt.