Die Host Controller Interface (HCI) wird für die Interaktion mit einem Bluetooth-Controller verwendet.
In diesem Dokument finden Sie eine Liste der HCI-Anforderungen für Bluetooth (BT) und Bluetooth Low Energy (BLE). Ziel ist es, dass Anbieter von Host-BT-Stacks und BT-Controllern diese Plattformanforderungen erfüllen, um die unten beschriebenen Funktionen nutzen zu können.
In diesem Dokument wird die Bluetooth Core 5.2-Spezifikation als „Spezifikation“ bezeichnet. Die Bluetooth 5.2-Kernspezifikation ist zusammen mit anderen übernommenen Dokumenten auf der Bluetooth SIG-Website verfügbar.
Allgemeine Designübersicht
Chipfunktionen und ‑konfiguration
Als offene Plattform bietet Android eine Matrix aus Softwareversionen, OEMs, Anbietern sowie Plattform- und Chipfunktionen.
Um die unterschiedlichen Anforderungen zu erfüllen und Migrationen zu verwalten, wird in diesem Dokument eine Designphilosophie beschrieben, die es BT-Controllern ermöglicht, ihre Funktionen (über die Standard-Bluetooth Core 5.2-Spezifikation hinaus) zu nutzen. Der Host-BT-Stack kann diese Funktionen dann verwenden, um zu bestimmen, welche Funktionen aktiviert werden sollen.
Offene Standards unterstützen
Ein Ziel von Android ist es, offene Standards nach der Ratifizierung in einer Bluetooth-Spezifikation zu unterstützen. Wenn eine unten beschriebene Funktion in einer zukünftigen Bluetooth-Spezifikation in Standard-HCI-Methoden verfügbar wird, werden wir diesen Ansatz wahrscheinlich zum Standard machen.
Anbieterspezifische Funktionen
Anbieterspezifischer Befehl: LE_Get_Vendor_Capabilities_Command
OpCode Command Field (OCF): 0x153
| Befehlsparameter | Größe | Zweck |
|---|---|---|
| NA | Leere Liste der Befehlsparameter |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
max_advt_instances(Eingestellt) |
1 Oktett |
Anzahl der unterstützten Anzeigeninstanzen. Ab Version 0.98 reserviert. Dieser Parameter ist in der Google-Funktionsspezifikation v0.98 und höher zugunsten von LE Extended Advertising (erweiterte LE-Werbung) verworfen, die in der BT-Spezifikation Version 5.0 und höher verfügbar ist. |
offloaded_resolution_of_private-address(Eingestellt) |
1 Oktett |
BT-Chip-Funktion von RPA. Wenn ein Chip unterstützt wird, muss er vom Host aktiviert werden. 0 = Nicht möglich 1 = Möglich Ab Version 0.98 reserviert. Dieser Parameter wird in der Google-Funktionsspezifikation v0.98 und höher zugunsten der Datenschutzfunktion eingestellt, die in der BT-Spezifikationsversion 4.2 und höher verfügbar ist. |
total_scan_results_storage |
2 Oktette | Speicher für Scanergebnisse in Byte |
max_irk_list_sz |
1 Oktett | Anzahl der in der Firmware unterstützten IRK-Einträge |
filtering_support |
1 Oktett |
Unterstützung für das Filtern im Controller 0 = Nicht unterstützt 1 = Unterstützt |
max_filter |
1 Oktett | Anzahl der unterstützten Filter |
activity_energy_info_support |
1 Oktett |
Unterstützt die Berichterstellung von Aktivitäts- und Energieinformationen 0 = Nicht möglich 1 = Möglich |
version_supported |
2 Oktette |
Gibt die Version der unterstützten Google-Funktionsspezifikation an byte[0] = Hauptnummer byte[1] = Nebennummer v1.05 byte[0] = 0x01 byte[1] = 0x05 Funktionserweiterungen in den folgenden Versionen: v1.05:
|
total_num_of_advt_tracked |
2 Oktette |
Gesamtzahl der Werbetreibenden, die für OnLost/OnFound-Zwecke erfasst werden
|
extended_scan_support |
1 Oktett | Unterstützt ein erweitertes Scanfenster und ‑intervall |
debug_logging_supported |
1 Oktett | Unterstützt die Protokollierung binärer Debugging-Informationen vom Controller |
LE_address_generation_offloading_support(Eingestellt) |
1 Oktett |
0 = Nicht unterstützt 1 = Unterstützt Ab Version 0.98 reserviert. Dieser Parameter wird in der Google-Funktionsspezifikation v0.98 und höher zugunsten der Datenschutzfunktion eingestellt, die in der BT-Spezifikationsversion 4.2 und höher verfügbar ist. |
A2DP_source_offload_capability_mask |
4 Oktette |
Bitmasken für unterstützte Codec-Typen Bit 0 – SBC Bit 1 – AAC Bit 2 – APTX Bit 3 – APTX HD Bit 4 – LDAC Bit 5–31 sind reserviert |
bluetooth_quality_report_support |
1 Oktett |
Unterstützt die Meldung von Bluetooth-Qualitätsereignissen 0 = Nicht möglich 1 = Möglich |
dynamic_audio_buffer_support |
4 Oktette |
Unterstützt dynamischen Audio-Puffer im Bluetooth-Controller Bitmasken für unterstützte Codec-Typen Bit 0: SBC Bit 1: AAC Bit 2: APTX Bit 3: APTX HD Bit 4: LDAC Bit 5–31 sind reserviert |
a2dp_offload_v2_support |
1 Oktett |
Unterstützt A2DP-Offload-v2-Befehle im Bluetooth-Controller (siehe A2DP-Offload starten, A2DP-Offload beenden) 0 = Nicht unterstützt 1 = Unterstützt |
iso_link_feedback_support |
1 Oktett |
Unterstützt das Ereignis ISO Link Feedback 0 = Nicht unterstützt 1 = Unterstützt |
sniff_offload_support |
1 Oktett |
Unterstützt Sniff Offload-Befehle in einem Bluetooth-Controller 0 = Nicht unterstützt 1 = Unterstützt |
Batch-Scanergebnisse
Ein Designziel ist es, die Benachrichtigungen über das Bluetooth LE Scan Response-Ereignis an den Host zu optimieren, um Strom auf dem Host zu sparen.
Wenn der Controller den Host-App-Prozessor seltener über Scanergebnisse benachrichtigt, kann der Host-App-Prozessor länger im Leerlauf-/Ruhezustand bleiben. Dadurch wird der Stromverbrauch des Hosts reduziert. Der Rückgabeparameter total_scan_results_storage von LE_Get_Vendor_Capabilities_Command gibt die Chipfunktion zum Speichern von Scanergebnissen an.
Diese Funktion konzentriert sich auf die Verwaltung und Konfiguration des Speichers für LE-Scanergebnisse im Bluetooth-Controller. Der Speicher wird verwendet, um Werbedaten und Scandaten sowie Metadaten, die vom Controller empfangen werden, vorübergehend zu bündeln und später an den Host zu senden.
Die Firmware muss zwei Arten von Batching unterstützen, die gleichzeitig verwendet werden können:
- Abgeschnitten. Enthält die folgenden Informationselemente: {MAC, TX Power, RSSI, Timestamp}
- Vollständig Enthält die folgenden Informationselemente: {MAC, TX Power, RSSI, Timestamp, Adv Data, Scan Response}
LE_Batch_Scan_Command
OCF: 0x156
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Batch_Scan_opcode |
1 Oktett |
0x1 – Kundenspezifische Funktion aktivieren 0x2 – Batch-Scan-Speicherparameter festlegen 0x3 – Batch-Scan-Parameter festlegen 0x4 – Batch-Scan-Ergebnisparameter lesen |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert. Durch Aktivieren der kundenspezifischen Funktion wird der Scan nicht gestartet.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Batch_Scan_opcode |
1 Oktett |
0x1 – Kundenspezifische Funktion aktivieren 0x2 – Batch-Scan-Speicherparameter festlegen 0x3 – Batch-Scan-Parameter festlegen 0x4 – Batch-Scan-Ergebnisparameter lesen |
LE_Batch_Scan_Command: Kundenspezifische Funktion aktivieren
Untergeordneter OCF: 0x01
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
enable_customer_specific_feature_set |
1 Oktett |
0x01 – Batch-Scan-Funktion aktivieren 0x00 – Batch-Scan-Funktion deaktivieren |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Batch_Scan_opcode |
1 Oktett |
0x1 – Kundenspezifische Funktion aktivieren 0x2 – Batch-Scan-Speicherparameter festlegen 0x3 – Batch-Scan-Parameter festlegen 0x4 – Batch-Scan-Ergebnisparameter lesen |
LE_Batch_Scan_Command: Unterbefehl zum Festlegen des Speicherparameters für den Batch-Scan
Untergeordneter OCF: 0x02
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Batch_Scan_Full_Max |
1 Oktett |
Maximaler Speicherplatz (in %), der dem vollständigen Stil zugewiesen wird [Bereich: 0–100] |
Batch_Scan_Truncated_Max |
1 Oktett |
Maximaler Speicherplatz (in %), der dem gekürzten Stil zugewiesen wird [Bereich: 0–100] |
Batch_Scan_Notify_Threshold |
1 Oktett |
Richte den Benachrichtigungsgrad (in %) für den einzelnen Speicherpool ein.
[Bereich: 0–100] Wenn du den Wert auf 0 setzt, werden Benachrichtigungen deaktiviert. Anbieterspezifisches HCI-Ereignis wird generiert (Unterereignis „Speichergrenzwert überschritten“) |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Batch_scan_opcode |
1 Oktett | 0x02 [Set Batch Scan parameters] |
LE_Batch_Scan_Command: Unterbefehl zum Festlegen des Batch-Scan-Parameters
Untergeordneter OCF: 0x03
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Batch_Scan_Mode |
1 Oktett |
0x00 – Batch-Scan ist deaktiviert 0x01 – Der gekürzte Modus ist aktiviert 0x02 – Der vollständige Modus ist aktiviert 0x03 – Der gekürzte und der vollständige Modus sind aktiviert |
Duty_cycle_scan_window |
4 Oktette | Scanzeit für Batch-Scan (Anzahl der Slots) |
Duty_cyle_scan_interval |
4 Oktette | Batch-Scanintervallzeitraum (Anzahl der Slots) |
own_address_type |
1 Oktett |
0x00 – Öffentliche Geräteadresse 0x01 – Zufällige Geräteadresse |
Batch_scan_Discard_Rule |
1 Oktett |
0 – Älteste Anzeige verwerfen 1 – Anzeige mit dem schwächsten RSSI verwerfen |
Mit diesem Unterbefehl wird das Batch-Scannen gestartet, sofern es aktiviert ist. Beim gekürzten Scan werden die Ergebnisse in gekürzter Form gespeichert. Der eindeutige Schlüssel für „Truncated style“ ist {BD_ADDR, scan_interval}. Das bedeutet, dass für jedes Scanintervall nur ein BD_ADDR will erfasst wird. Der Datensatz, der im gekürzten Modus beibehalten werden soll, ist der folgende: {BD_ADDR,
Tx Power, RSSI, Timestamp}
Wenn der vollständige Modus aktiviert ist, wird der aktive Scan verwendet und Scan-Antworten werden aufgezeichnet. Der eindeutige Schlüssel für den Stil „Vollständig“ ist „{MAC, Ad packet}“, unabhängig vom Scanintervall. Der Datensatz, der für den vollständigen Modus beibehalten werden soll, ist {BD_ADDR, Tx Power, RSSI, Timestamp, Ad packet, Scan Response}. Im Full-Stil wird dasselbe AD-Paket, wenn es in verschiedenen Scanintervallen mehrmals gesehen wird, nur einmal aufgezeichnet. Im gekürzten Modus ist jedoch die Sichtbarkeit von BA_ADDR in verschiedenen Scanintervallen von Interesse (einmal pro Scanintervall). Der RSSI ist der Durchschnittswert aller Duplikate einer eindeutigen Werbung innerhalb eines Scanintervalls.
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Batch_scan_opcode |
1 Oktett | 0x03 [Set Batch Scan Parameters] |
LE_Batch_Scan_Command: Unterbefehl zum Lesen von Batch-Scanergebnissen
Unter-OCF: 0x04
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Batch_Scan_Data_read |
1 Oktett |
0x01 – Daten im abgeschnittenen Modus 0x02 – Daten im vollständigen Modus |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert. Wenn der Host diesen Befehl ausgibt, passen möglicherweise nicht alle Ergebnisse im Controller in ein Command Complete-Ereignis. Der Host wiederholt die Ausführung dieses Befehls, bis die entsprechenden Ergebnisse im Ereignis „Command Complete“ (Befehl abgeschlossen) 0 in der Anzahl der Datensätze angeben. Das bedeutet, dass der Controller keine weiteren Datensätze mehr an den Host senden muss. Jedes „Command Complete“-Ereignis kann mehrere Datensätze mit nur einem Datentyp (vollständig oder gekürzt) enthalten.
Die Zeitreferenzen von Controller und Host sind nicht synchronisiert. Die Einheit des Zeitstempels ist 50 ms. Der Wert des Zeitstempels basiert darauf, wann der Host die Read_Batch_Scan_Results_Sub_cmd angegeben hat. Wenn die Ankunftszeit eines Befehls in der Firmware T_c ist, ist die tatsächliche Zeit, zu der der Zeitstempel in der Firmware erfasst wurde, T_fw. Der Berichtszeitraum ist:
(T_c – T_fw). T_c und
T_fw sind im Zeitbereich der Firmware. So kann der Host berechnen, wie lange das Ereignis her ist.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Batch_scan_opcode |
1 Oktett | 0x03 [Set Batch Scan parameters] |
Batch_Scan_data_read |
1 Oktett | Gibt das Format an (gekürzt oder vollständig). |
num_of_records |
1 Oktett | Anzahl der Datensätze von Batch_Scan_data_read |
format_of_data |
Variable |
Gekürzter Modus: Address[0]: 6 Oktette Address_Type[0]: 1 Oktett Tx_Pwr[0]: 1 Oktett RSSI[0] : 1 Oktett Timestamp[0]: 2 Oktette [mehrere Datensätze ( num_of_records) mit dem oben genannten Format]Vollständiger Modus: Address[0]: 6 Oktette Address_Type[0]: 1 Oktett Tx_Pwr[0]: 1 Oktett RSSI[0]: 1 Oktett Timestamp[0]: 2 Oktette Adv packet_len[0]: 1 Oktett Adv_packet[0]: Adv_packet_len Oktette Scan_data_resp_len[0]: 1 Oktett Scan_data_resp[0]: Scan_data_resp Oktette[mehrere Datensätze mit dem oben genannten Format ( num_of_records)]
|
Inhaltsfilter für Werbepakete
Damit können Sie den Advertising Packet Content Filter (APCF) im Controller aktivieren, deaktivieren oder einrichten. APCF-Filter filtern Werbeberichte im Controller, aber nicht periodische Werbung.
LE_APCF_Command
OCF: 0x157
| Befehlsparameter | Größe | Zweck |
|---|---|---|
APCF_opcode |
1 Oktett |
0x00 – APCF Enable 0x01 – APCF Set Filtering parameters 0x02 – APCF Broadcaster Address 0x03 – APCF Service UUID 0x04 – APCF Service Solicitation UUID 0x05 – APCF Local Name 0x06 – APCF Manufacturer Data 0x07 – APCF Service Data 0x08 – APCF Transport Discovery Service 0x09 – APCF AD Type Filter 0x10 – 0xAF – Für zukünftige Verwendung reserviert 0xB0 – 0xDF – Für Anbieter reserviert 0xE0 – 0xFE – Für zukünftige Verwendung reserviert 0xFF – APCF Read extended Features |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Retourenstatus |
APCF_opcode |
1 Oktett |
0x00 – APCF Enable 0x01 – APCF Set Filtering parameters 0x02 – APCF Broadcaster Address 0x03 – APCF Service UUID 0x04 – APCF Service Solicitation UUID 0x05 – APCF Local Name 0x06 – APCF Manufacturer Data 0x07 – APCF Service Data 0x08 – APCF Transport Discovery Service 0x09 – APCF AD Type Filter 0x10 – 0xAF – Für zukünftige Verwendung reserviert 0xB0 – 0xDF – Für Anbieter reserviert 0xE0 – 0xFE – Für zukünftige Verwendung reserviert 0xFF – APCF Read extended Features |
LE_APCF_Command: Enable_sub_cmd
Sub-OCF: 0x00
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_enable |
1 Oktett |
0x01 – APCF-Funktion aktivieren 0x00 – APCF-Funktion deaktivieren |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x0 – APCF aktivieren |
APCF_Enable |
1 Oktett | Aktivieren/Deaktivieren über APCF_enable |
LE_APCF_Command: set_filtering_parameters_sub_cmd
Mit diesem Unterbefehl können Sie eine Filterspezifikation hinzufügen oder löschen oder eine Filterliste für die On-Chip-Filterung leeren.
Untergeordneter OCF: 0x01
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Beim Löschen wird der jeweilige Filter zusammen mit den zugehörigen Feature-Einträgen in anderen Tabellen gelöscht. Mit „Löschen“ werden alle Filter und zugehörigen Einträge in anderen Tabellen gelöscht. |
APCF_Filter_Index |
1 Oktett | Filter index (0, max_filter-1) |
APCF_Feature_Selection |
2 Oktette |
Bitmasken für die ausgewählten Funktionen: Bit 0: Aktiviert den Broadcast-Adressfilter Bit 1: Aktiviert den Filter für Änderungen an Dienstdaten Bit 2: Aktiviert die Prüfung der Dienst-UUID Bit 3: Aktiviert die Prüfung der Dienst-Solicitation-UUID Bit 4: Aktiviert die Prüfung des lokalen Namens Bit 5: Aktiviert die Prüfung der Herstellerdaten Bit 6: Aktiviert die Prüfung der Dienstdaten Bit 7: Aktiviert die Prüfung des Transport Discovery Service Bit 8: Aktiviert die Prüfung des Anzeigentyps |
APCF_List_Logic_Type |
2 Oktette |
Logischer Vorgang für jede Merkmalsauswahl (pro Bitposition), die in APCF_Feature_Selection angegeben ist.
Nur gültig, wenn eine Funktion aktiviert ist. Bitpositionswert: 0: ODER 1: UND Wenn die UND-Logik ausgewählt ist, wird ein ADV-Paket nur dann durch den Filter geleitet, wenn es ALLE Einträge in der Liste enthält. Wenn die ODER-Logik ausgewählt ist, wird ein ADV-Paket vom Filter durchgelassen, wenn es einen der Einträge in der Liste enthält. |
APCF_Filter_Logic_Type |
1 Oktett |
0x00: ODER 0x01: UND Hinweis: Der Logiktyp ist für die ersten drei Felder von APCF_Feature_Selection, die immer die UND-Logik verwenden, nicht verfügbar. Sie gelten nur für die vier Felder (Bit 3 bis Bit 6) von APCF_Feature_Selection.
|
rssi_high_thresh |
1 Oktett |
[in dBm] Die Anzeige wird nur dann als gesehen betrachtet, wenn das Signal über dem hohen RSSI-Schwellenwert liegt. Andernfalls muss sich die Firmware so verhalten, als hätte sie das Ereignis nie gesehen. |
delivery_mode |
1 Oktett |
0x00 – immediate0x01 – on_found0x02 – batched
|
onfound_timeout |
2 Oktette |
Nur gültig, wenn delivery_mode on_found ist.[in milliseconds] Zeit, die die Firmware benötigt, um zusätzliche Anzeigen zu erfassen, bevor sie einen Bericht sendet. |
onfound_timeout_cnt |
1 Oktett |
Nur gültig, wenn delivery_mode on_found ist.[count] Wenn eine Anzeige in onFound für die Dauer von onfound_timeout in der Firmware verbleibt, werden einige Anzeigen erfasst und die Anzahl wird geprüft. Wenn die Anzahl onfound_timeout_cnt überschreitet, wird sie sofort danach gemeldet.OnFound
|
rssi_low_thresh |
1 Oktett |
Nur gültig, wenn delivery_mode on_found ist.[in dBm] Das Werbetreibendenpaket wird als nicht gesehen betrachtet, wenn der RSSI des empfangenen Pakets nicht über dem niedrigen RSSI-Grenzwert liegt. |
onlost_timeout |
2 Oktette |
Nur gültig, wenn delivery_mode on_found ist.[in milliseconds] If an advertisement, after being found, is not seen contiguously for the lost_timeout period, it will immediately be reported
lost.
|
num_of_tracking_entries |
2 Oktette |
Nur gültig, wenn delivery_mode on_found ist.[count] Gesamtzahl der Werbetreibenden, die pro Filter erfasst werden sollen. |
Für RSSI-Werte muss das Zweierkomplement verwendet werden, um negative Werte darzustellen.
Der Host muss in der Lage sein, mehrere Filter mit APCF_Application_Address_type auf 0x02 (für alle Broadcaster-Adressen) zu konfigurieren, um verschiedene Filterkombinationen zu verwalten.
Filterung, Batching und Berichterstellung sind miteinander verbundene Konzepte. Jede Anzeige und die zugehörige Scan-Antwort muss alle Filter nacheinander durchlaufen. Die resultierenden Aktionen (delivery_mode) sind daher eng mit der Filterung verbunden. Die Bereitstellungsmodi sind report_immediately, batch und onFound. Der Wert OnLost bezieht sich auf OnFound in dem Sinne, dass er nach OnFound kommt, wenn er verloren geht.
Dieser Verarbeitungsablauf stellt das konzeptionelle Modell dar:
Wenn ein Frame für eine Anzeige (oder eine Scanantwort) empfangen wird, wird er in serieller Reihenfolge auf alle Filter angewendet. Es ist möglich, dass eine Anzeige aufgrund eines Filters sofort gemeldet wird, während dieselbe Anzeige aufgrund eines anderen Filters in einem Batch verarbeitet wird.
Mit den RSSI-Pegelschwellen (hoch und niedrig) können Sie steuern, wann der Frame für die Filterverarbeitung sichtbar ist, auch wenn ein gültiges Paket vom Controller empfangen wird. Wenn der Bereitstellungsmodus auf „Sofort“ oder „Batch“ festgelegt ist, wird der RSSI eines Frames für die weitere Verarbeitung durch den Controller berücksichtigt. Für verschiedene Apps sind unterschiedliche Berichts- und Batching-Verhaltensweisen erforderlich. Dadurch können mehrere Apps gleichzeitig direkt Berichte erstellen und/oder Ergebnisse in der Firmware zusammenfassen. Ein Beispiel ist ein Fall, in dem ein Batch-Scan von einer App aktiv ist und später ein regulärer LE-Scan von einer anderen App ausgegeben wird. Bevor ein Batch-Scan ausgegeben wird, legt das Framework/die App entsprechende Filter fest. Wenn die zweite App später einen regulären Scan ausführt, wird die Batch-Verarbeitung fortgesetzt. Aufgrund des regelmäßigen Scans ist es jedoch so, als würde dem LE-Scanbefehl konzeptionell ein Nullfilter (zusammen mit allen vorhandenen Filtern) hinzugefügt. Die Parameter des LE-Scanbefehls haben Vorrang, wenn sie aktiv sind. Wenn der reguläre LE-Scan deaktiviert ist, wird der Controller auf einen vorherigen Batch-Scan zurückgesetzt, sofern dieser vorhanden war.
Der OnFound-Zustellungsmodus basiert auf konfigurierten Filtern. Eine Kombination, die die Aktion eines Filters auslöst, gilt als die zu verfolgende Einheit für onLost. Das entsprechende Ereignis ist das untergeordnete Ereignis „LE Advt tracking“.
Der OnFound/OnLost-Übergang für einen Filter (falls aktiviert) sieht so aus:
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x01 – APCF Set Filtering Parameters |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der verfügbaren Einträge in der Filtertabelle |
LE_APCF_Command: broadcast_address_sub_cmd
Mit diesem Unterbefehl wird eine Werbetreibendenadresse hinzugefügt oder gelöscht oder die Liste der Werbetreibendenadressen für die On-Chip-Filterung gelöscht.
Untergeordnetes OCF: 0x02
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Mit „Löschen“ wird die angegebene Broadcaster-Adresse im angegebenen Filter gelöscht. Mit „Clear“ werden alle Broadcaster-Adressen im angegebenen Filter gelöscht. |
APCF_Filter_Index |
1 Oktett | Filter index (0, max_filter-1) |
APCF_Broadcaster_Address |
6 Oktett | 6‑Byte-Geräteadresse, die der Liste der Broadcaster-Adressen hinzugefügt oder daraus gelöscht werden soll |
APCF_Application_Address_type |
1 Oktett |
0x00: Öffentlich 0x01: Zufällig 0x02: Nicht zutreffend (Adressentyp ignorieren) Zum Filtern von Werbeberichten mit Identitätsadressentypen (0x02, 0x03). Wenn Sie Werbeberichte mit den Adresstypen 0x02 und 0x03 abrufen möchten, legen Sie dieses Feld auf 0x02 fest: NA (Adresstyp ignorieren). |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x02 – APCF-Broadcaster-Adresse |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der noch verfügbaren kostenlosen Einträge in der Tabelle „Broadcast Address“ |
LE_APCF_Command: service_uuid_sub_cmd
Mit diesem Unterbefehl wird eine Dienst-UUID hinzugefügt oder gelöscht oder eine Dienst-UUID-Liste für die On-Chip-Filterung gelöscht.
Untergeordneter OCF: 0x03
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Mit „Löschen“ wird die angegebene Dienst-UUID-Adresse im angegebenen Filter gelöscht. Mit „Clear“ werden alle Dienst-UUIDs im angegebenen Filter gelöscht. |
APCF_Filter_Index |
1 Oktett | Filterindex (0, max_filter–1) |
APCF_UUID |
2,4,16 Oktett | Die Dienst-UUID (16‑Bit, 32‑Bit oder 128‑Bit) zum Hinzufügen oder Löschen aus der Liste. |
APCF_UUID_MASK |
2,4,16 Oktett |
Die Dienst-UUID-Maske (16 Bit, 32 Bit oder 128 Bit), die der Liste hinzugefügt werden soll.
Es muss dieselbe Länge wie APCF_UUID. haben.
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x03 – APCF-Dienst-UUID |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der noch verfügbaren kostenlosen Einträge in der Tabelle „Service-UUID“ |
LE_APCF_Command: solicitation_uuid_sub_cmd
Mit diesem Unterbefehl können Sie eine Aufforderungs-UUID hinzufügen oder löschen oder eine Liste von Aufforderungs-UUIDs für die On-Chip-Filterung löschen.
Unter-OCF: 0x04
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Beim Löschen wird die Aufforderungs-UUID-Adresse im angegebenen Filter gelöscht. Mit „Clear“ werden alle UUIDs für Anfragen im angegebenen Filter gelöscht. |
APCF_Filter_Index |
1 Oktett | Filterindex (0, max_filter–1) |
APCF_UUID |
2,4,16 Oktett | Die Solicitation-UUID (16‑Bit, 32‑Bit oder 128‑Bit), die der Liste hinzugefügt oder daraus gelöscht werden soll. |
APCF_UUID_MASK |
2,4,16 Oktett |
Die Solicitation-UUID-Maske (16‑Bit, 32‑Bit oder 128‑Bit), die der Liste hinzugefügt werden soll. Es sollte dieselbe Länge wie APCF_UUID haben.
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x04 – APCF-Anfrage-UUID |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der noch verfügbaren kostenlosen Einträge in der Tabelle mit der Aufforderungs-UUID |
LE_APCF_Command: local_name_sub_cmd
Mit diesem Unterbefehl können Sie einen lokalen Namen hinzufügen oder löschen oder die Liste der lokalen Namen für die On-Chip-Filterung löschen.
Unter-OCF: 0x05
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Beim Löschen wird der angegebene lokale Namensstring im angegebenen Filter gelöscht. Mit „Clear“ werden alle lokalen Namensstrings im angegebenen Filter gelöscht. |
APCF_Filter_Index |
1 Oktett | Filterindex (0, max_filter–1) |
APCF_LocName_Mandata_or_SerData |
Variable Größe |
Ein String für den lokalen Namen. Hinweise:
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x05 – APCF Local Name |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der noch verfügbaren kostenlosen Einträge in der Tabelle „Lokaler Name“ |
LE_APCF_Command: manf_data_sub_cmd
Mit diesem Unterbefehl kann ein Herstellerdatenstring hinzugefügt oder gelöscht oder die Liste der Herstellerdatenstrings für die On-Chip-Filterung gelöscht werden.
Sub-OCF: 0x06
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Mit „Löschen“ wird der angegebene Herstellerdatenstring im angegebenen Filter gelöscht. Mit „Clear“ werden alle Herstellerdatenstrings im angegebenen Filter gelöscht. |
APCF_Filter_Index |
1 Oktett | Filterindex (0, max_filter–1) |
APCF_LocName_Mandata_or_SerData |
Variable Größe |
Eine Zeichenfolge für Herstellerdaten. Hinweise:
|
APCF_ManData_Mask |
Variable Größe |
Die Maske für Herstellerdaten, die der Liste hinzugefügt werden soll. Sie sollte dieselbe Länge wie APCF_LocName_or_ManData_or_SerData haben.
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x06 – APCF Manufacturer Data |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der noch verfügbaren kostenlosen Einträge in der Tabelle „Herstellerdaten“ |
LE_APCF_Command: service_data_sub_cmd
Mit diesem Unterbefehl können Sie einen Dienstdatenstring hinzufügen oder löschen oder die Liste der Dienstdatenstrings für die On-Chip-Filterung löschen.
Untergeordneter OCF: 0x07
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Mit „Löschen“ wird der angegebene Dienstdatenstring im angegebenen Filter gelöscht. Mit „Clear“ werden alle Dienstdaten-Strings im angegebenen Filter gelöscht. |
APCF_Filter_Index |
1 Oktett | Filterindex (0, max_filter–1) |
APCF_LocName_Mandata_or_SerData |
Variable Größe |
Eine Zeichenfolge für Dienstdaten. Hinweise:
|
APCF_LocName_Mandata_or_SerData_Mask |
Variable Größe |
Die Dienstdatenmaske, die der Liste hinzugefügt werden soll. Es muss dieselbe Länge wie APCF_LocName_or_ManData_or_SerData. haben.
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x07 – APCF-Dienstdaten |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der noch verfügbaren kostenlosen Einträge für die Tabelle „Dienstdaten“ |
LE_APCF_Command: ad_type_sub_cmd
Mit diesem Unterbefehl können Sie einen AD-Typ hinzufügen oder löschen oder die Liste der AD-Typen für die On-Chip-Filterung löschen. Verwenden Sie read_extended_features_sub_cmd, um zu prüfen, ob dieser Befehl unterstützt wird.
Wenn APCF_AD_DATA_Length = 0 ist, wird APCF_AD_TYPE gefiltert, ohne AD-Daten und AD-Datenmaske zu vergleichen.
Wenn die Datenlänge des empfangenen ADV-Pakets AD_DATA_LENGTH überschreitet, vergleiche nur die ersten AD_DATA_LENGTH Bytes der AD-Daten und ignoriere die restlichen Daten.
Unter-OCF: 0x09
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
APCF_Action |
1 Oktett |
0x00 – Hinzufügen 0x01 – Löschen 0x02 – Leeren Mit „Löschen“ wird der angegebene Anzeigentyp im angegebenen Filter gelöscht. Mit „Clear“ werden alle Anzeigentypen im angegebenen Filter gelöscht. |
APCF_Filter_Index |
1 Oktett | Filterindex (0, max_filter–1) |
APCF_AD_TYPE |
1 Oktett | Der Anzeigentyp zum Hinzufügen oder Löschen aus der Liste. Ignorieren, wenn APCF_Action = 0x02 (Clear) |
APCF_AD_DATA_Length |
1 Oktett |
0x00: Dateninhalte nicht filtern Ignorieren, wenn APCF_Action = 0x02 (Clear)
|
APCF_AD_DATA |
Variable Größe |
Variable Größe, basierend auf APCF_AD_DATA_LengthWird ignoriert, wenn APCF_Action = 0x02 (Löschen) |
APCF_AD_DATA_MASK |
Variable Größe |
Variable Größe, basierend auf APCF_AD_DATA_LengthWird ignoriert, wenn APCF_Action = 0x02 (Clear)Muss dieselbe Länge wie APCF_AD_DATA haben.
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0x09 – APCF-Anzeigentyp |
APCF_Action |
1 Oktett | Gib APCF_Action als Antwort auf den Befehl aus. |
APCF_AvailableSpaces |
1 Oktett | Anzahl der noch verfügbaren kostenlosen Einträge in der Tabelle „Anzeigentyp“ |
LE_APCF_Command: read_extended_features_sub_cmd
Mit diesem Unterbefehl werden erweiterte APCF-Funktionen gelesen.
Untergeordneter OCF: 0xFF
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
| Nicht zutreffend | Der Befehlsparameter ist leer. |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
APCF_opcode |
1 Oktett | 0xFF – APCF_Read_Extended_Features |
APCF_extended_features |
2 Oktett |
Bitmasken für unterstützte erweiterte Funktionen:
Wert des Bits
|
Befehl für Controller-Aktivität und Energieinformationen
Ziel dieser Informationen ist es, dass übergeordnete Hostsystemfunktionen die Gesamtaktivitäten aller Komponenten analysieren können, einschließlich des BT-Controllers und seines Makrozustands, in Verbindung mit dem, was in den Apps und im Framework passiert. Dazu sind die folgenden Informationen vom BT-Stack und vom Controller erforderlich:
- BT-Stack: Melden des aktuellen Makrobetriebszustands des Controllers
- Firmware: Zusammengefasste Aktivitäts- und Energiedaten melden
Makrozustände des BT-Host-Stacks, die auf Nutzerebene bestimmt werden:
- Im Leerlauf: [Seitenscan, LE-Werbung, Anfragescan, LE-Scan]
- Scan: [Paging/Anfrage/Verbindungsversuch]
- Aktiv: [ACL-Verbindung aktiv, SCO-Verbindung läuft, Sniff-Modus]
Der Controller erfasst während seines Lebenszyklus die Sendezeit, die Empfangszeit, die Leerlaufzeit und den gesamten Energieverbrauch. Sie werden gelöscht, wenn sie vom Host gelesen werden.
LE_Get_Controller_Activity_Energy_Info
Dies ist ein anbieterspezifischer Befehl.
OCF: 0x159
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
| NA | Leere Befehlsparameter |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
total_tx_time_ms |
4 Oktette | Gesamtzeit für die Durchführung von Transaktionen |
total_rx_time_ms |
4 Oktette | Gesamtzeit für Rx |
total_idle_time_ms |
4 Oktette | Gesamtzeit im Leerlauf (Energiesparmodi ohne Schlaf) |
total_energy_used |
4 Oktette | Gesamtenergieverbrauch [Produkt aus Strom (mA), Spannung (V) und Zeit (ms)] |
Befehl für LE-Scanparameter für erweiterten Satz
Mit diesem Befehl kann ein größeres Scanfenster und ‑intervall im Controller aktiviert werden. Gemäß der BT Core 5.2-Spezifikation haben Scanfenster und ‑intervalle eine Obergrenze von 10,24 Sekunden, was Scanintervalle über 10,24 Sekunden für Apps erschwert.
Grundlegende Referenz: BT Core 5.2 Specification, Seite 2493 (LE Set Scan Parameters Command)
OCF: 0x15A
| Befehlsparameter | Größe | Zweck |
|---|---|---|
LE_Ex_Scan_Type |
1 Oktett |
0x00 – Passives Scannen. Es werden keine SCAN_REQ-Pakete gesendet (Standard).0x01 – Aktives Scannen. Es werden möglicherweise SCAN_REQ Pakete gesendet.
|
LE_Ex_Scan_Interval |
4 Oktette |
Definiert als das Zeitintervall vom Beginn des letzten LE-Scans des Controllers bis zum Beginn des nachfolgenden LE-Scans. Bereich: 0x0004 bis 0x00FFFFFF Standard: 0x0010 (10 ms) Zeit = N × 0,625 ms Zeitbereich: 2,5 ms bis 10.442,25 Sekunden |
LE_Ex_Scan_Window |
4 Oktette |
Die Dauer des LE-Scans. LE_Scan_Window muss kleiner oder gleich LE_Scan_Interval sein.
Bereich: 0x0004 bis 0xFFFF Standard: 0x0010 (10 ms) Zeit = N × 0,625 ms Zeitbereich: 2,5 ms bis 40,95 Sekunden |
Own_Address_Type |
1 Oktett |
0x00 – Öffentliche Geräteadresse (Standard) 0x01 – Zufällige Geräteadresse |
LE_Ex_Scan_Filter_Policy |
0x00 – Alle Werbepakete annehmen (Standard). Direkte Werbepakete, die nicht für dieses Gerät bestimmt sind, müssen ignoriert werden. 0x01 – Werbepakete von Geräten, die nicht auf der Zulassungsliste stehen, ignorieren Nur Liste. Pakete für Direktwerbung, die nicht für dieses Gerät bestimmt sind, müssen ignoriert werden. |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Befehl zum Abrufen von Controller-Debugging-Informationen
Ziel dieses Informationselements ist es, Controller-Debugging-Informationen von einem Host in binärer Form für die Nachbearbeitung und Analyse zu erhalten. So können Probleme vor Ort behoben werden und Entwickler erhalten ein Toolkit zum Protokollieren von Informationen für die Analyse. Ein Verantwortlicher kann die Informationen auf Anfrage eines Hosts über das Ereignis (Unterereignis „Controller Debug Info“) oder autonom bereitstellen, wenn er dies wünscht. Beispiele für Anwendungsfälle sind das Melden von Informationen zum Firmwarestatus, Informationen zum Absturz-Dump, Protokollierungsinformationen usw.
OCF: 0x15B
| Befehlsparameter | Größe | Zweck |
|---|---|---|
| – | Leere Liste von Befehlsparametern |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Unterstützung für A2DP-Hardware-Offload
Die A2DP-Offload-Funktion unterstützt das Auslagern der A2DP-Audio-Codierung an einen Audioprozessor, der an den BT-Controller angeschlossen ist. Der codierte Audio-Datenstream wird direkt vom Audioprozessor an den Bluetooth-Controller übergeben, ohne dass der Bluetooth-Host beteiligt ist. Der BT-Host ist weiterhin für die Konfiguration und Steuerung der A2DP-Sitzung verantwortlich. Es gibt zwei Versionen der Befehle. Die alten Befehle mit Sub-OCF 0x01–0x02 unterstützen nur Open-Source-Codecs. Die Versionen mit Sub-OCF 0x03–0x04 sind unabhängig vom konfigurierten Codec.
OCF: 0x15D
A2DP-Offload starten (alt)
Untergeordneter OCF: 0x01
Mit diesem Befehl konfigurieren Sie sowohl den A2DP-Offload-Prozess als auch den A2DP-Stream.
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Codec |
4 Oktette |
Gibt den Codec-Typ an. 0x01 – SBC 0x02 – AAC 0x04 – APTX 0x08 – APTX HD 0x10 – LDAC |
Max_Latency |
2 Oktette | Maximal zulässige Latenz (in ms). Ein Wert von null deaktiviert das Leeren. |
SCMS-T_Enable |
2 Oktette |
Byte 0: Flag, das das Hinzufügen des SCMS-T-Headers ermöglicht.
Oktett 1: Wert für den SCMS-T-Header, wenn er aktiviert ist. |
Sampling_Frequency |
4 Oktette |
0x01 – 44.100 Hz 0x02 – 48.000 Hz 0x04 – 88.200 Hz 0x08 – 96.000 Hz |
Bits_Per_Sample |
1 Oktett |
0x01 – 16 Bits pro Sample 0x02 – 24 Bits pro Sample 0x04 – 32 Bits pro Sample |
Channel_Mode |
1 Oktett |
0x01 – Mono 0x02 – Stereo |
Encoded_Audio_Bitrate |
4 Oktette |
Die codierte Audiobitrate in Bits pro Sekunde. 0x00000000: Die Audio-Bitrate ist nicht angegeben oder wird nicht verwendet. 0x00000001 – 0x00FFFFFF: Bitrate des codierten Audiosignals in Bits pro Sekunde. 0x01000000 – 0xFFFFFFFF – Reserviert. |
Connection_Handle |
2 Oktette | Verbindungs-Handle der konfigurierten A2DP-Verbindung |
L2CAP_Channel_ID |
2 Oktette | L2CAP-Channel-ID, die für diese A2DP-Verbindung verwendet werden soll |
L2CAP_MTU_Size |
2 Oktette | Maximale Größe der L2CAP-MTU mit codierten Audiopaketen |
Codec_Information |
32 Oktette |
Codec-spezifische Informationen.
SBC-Codec:
Informationen zu SBC-Codec-spezifischen Informationselementen finden Sie in A2DP v1.3. AAC-Codec:
Informationselemente für den AAC-Codec in A2DP v1.3 LDAC-Codec:
Oktet 0–3: Anbieter-ID
Oktett 4–5: Codec-ID
6. Oktett: Bitratenindex:
Oktett 7: LDAC-Kanalmodus Oktette 8–31: reserviert Alle anderen Codecs: Oktetts 0–31: reserviert |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Sub_Opcode |
1 Oktett | 0x01 – A2DP-Offload starten |
A2DP-Offload starten
Untergeordneter OCF: 0x03
Mit diesem Befehl konfigurieren Sie sowohl den A2DP-Offload-Prozess als auch den A2DP-Stream.
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Connection Handle |
2 Oktette | Handle der aktiven HCI-Verbindung |
L2CAP_Channel_ID |
2 Oktette | Kennung des für das A2DP-Streaming geöffneten L2CAP-Kanals |
Data_Path_Direction |
1 Oktett |
0x00 – Ausgabe (AVDTP-Quelle/Merge) 0x01 – Eingabe (AVDTP-Senke/Split) |
Peer_MTU |
2 Oktette | Die maximale Größe von L2CAP-Paketen, die mit dem Peer ausgehandelt wurde. |
CP_Enable_SCMS_T |
1 Oktett |
0x00 – SCMS-T-Header für Inhaltsschutz deaktivieren 0x01 – SCMS-T-Header für Inhaltsschutz aktivieren |
CP_Header_SCMS_T |
1 Oktett |
Wenn der SCMS-T-Inhaltsschutz-Header aktiviert ist (CP_SCMS_T_Enable auf 0x01 gesetzt), wird der Headerwert definiert, der dem Audioinhalt vorangestellt ist (siehe A2DP, Abschnitt 3.2.1–2), wie in Bluetooth Assigned Numbers, Abschnitt 6.3.2, definiert.Wird ignoriert, wenn der SCMS‑T-Inhaltsschutz nicht aktiviert ist. |
Vendor_Specific_Parameters_Length |
1 Oktett |
Länge der anbieterspezifischen Parameter im Bereich von 0 bis 128. Der Wert 0 wird verwendet, wenn keine zusätzlichen Parameter angegeben sind. |
Vendor_Specific_Parameters |
0–128 Oktette |
Anbieterspezifische Parameter, die von der Bluetooth Audio HAL bereitgestellt werden,
CodecParameters.vendorSpecificParameters[].
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Sub_Opcode |
1 Oktett | 0x03 – A2DP-Offload starten |
A2DP-Offload beenden (Legacy)
Untergeordneter OCF: 0x02
Mit diesem Befehl wird der A2DP-Offload-Stream beendet.
| Befehlsparameter | Größe | Zweck |
|---|---|---|
| – | Leere Liste der Befehlsparameter. |
Für diesen Befehl sind keine Parameter definiert.
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Sub_Opcode |
1 Oktett | 0x02 – A2DP-Offload beenden |
A2DP-Offload beenden
Unter-OCF: 0x04
Mit diesem Befehl wird der A2DP-Offload-Stream beendet.
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Connection Handle |
2 Oktette | Handle der aktiven HCI-Verbindung |
L2CAP_Channel_ID |
2 Oktette | Kennung des für das A2DP-Streaming geöffneten L2CAP-Kanals |
Data_Path_Direction |
1 Oktett |
0x00 – Ausgabe (AVDTP-Quelle/Merge) 0x01 – Eingabe (AVDTP-Senke/Split) |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Sub_Opcode |
1 Oktett | 0x04 – A2DP-Offload beenden |
Befehl für Bluetooth-Qualitätsbericht
Mit dem Befehl „BT Quality Report“ wird der Mechanismus im Bluetooth-Controller gestartet, um Bluetooth-Qualitätsereignisse an den Host zu melden. Sie können vier Optionen aktivieren:
- Qualitätsüberwachungsmodus: Der Controller sendet regelmäßig ein BQR-Unterereignis, das sich auf die Linkqualität bezieht, an den Host.
- LSTO wird erreicht: Wenn länger als die Hälfte des LSTO-Werts (Link Supervision TimeOut) keine Pakete vom verbundenen Bluetooth-Gerät empfangen werden, meldet der Controller dem Host ein „Approaching LSTO“-Ereignis.
- A2DP-Audio ruckelt: Wenn der Controller Faktoren erkennt, die zu ruckelndem Audio führen, meldet er ein A2DP-Audio-ruckelt-Ereignis an den Host.
- (e)SCO Voice Choppy: Wenn der Controller Faktoren erkennt, die zu einer abgehackten Sprachausgabe führen, meldet er dem Host das Ereignis „(e)SCO Voice Choppy“.
- Root-Entzündung: Dieses Ereignis wird vom Controller an den Stack gesendet, wenn im HAL oder im Controller ein schwerwiegender Fehler auftritt und Bluetooth neu gestartet werden muss.
- LMP-/LL-Nachrichtentrace: Der Controller sendet die LMP-/LL-Nachricht, die mit dem Remote-Gerät per Handshake ausgetauscht wird, an den Host.
- Bluetooth-Multi-Profile-/Coex-Scheduling-Trace: Der Controller sendet seine Scheduling-Informationen zur Verarbeitung mehrerer Bluetooth-Profile und zur drahtlosen Koexistenz im 2,4-GHz-Band an den Host.
- Mechanismus für Controller-Debug-Informationen: Wenn diese Option aktiviert ist, kann der Controller dem Host autonom Debug-Logging-Informationen über das Unterereignis „Controller-Debug-Informationen“ melden.
- LE Audio Choppy: Wenn der Controller Faktoren erkennt, die zu abgehackten Audioinhalten führen, meldet er dem Host das Ereignis „LE Audio Choppy“.
-
Erweiterter RF-Statistikmodus: Der Controller meldet seine Informationen zu RF-Statistiken an den Host und unterstützt zwei Anwendungsfälle für Berichte:
- Regelmäßige Berichte
- Ereignistrigger (Stream-Start/-Stopp und Linkqualität).
- Der Mechanismus zur Überwachung des Controllerstatus stellt dem Host statusbezogene Informationen über zwei Arten von Ereignissen zur Verfügung: regelmäßige Berichte und ereignisgesteuerte Berichte.
- BQR_Report_Action des Bluetooth Quality Report-Befehls: Der Host kann diesen HCI-Befehl verwenden, um eine einmalige Abfrage für den Qualitätsüberwachungsmodus, den Energiemonitormodus oder einen erweiterten HF-Statistikmodus zu erhalten.
OCF: 0x15E
| Befehlsparameter | Größe | Zweck |
|---|---|---|
BQR_Report_Action |
1 Oktett |
Aktion zum Hinzufügen / Löschen von Berichten zu Qualitätsereignissen, die im Parameter „BQR_Quality_Event_Mask“ festgelegt sind, oder zum Löschen aller Berichte.
0x00 – Hinzufügen
Durch das Löschen werden bestimmte Berichte zu Qualitätsereignissen entfernt. |
BQR_Quality_Event_Mask |
4 Oktette |
Bitmasken für die ausgewählte Meldung von Qualitätsereignissen.
Bit 0: Legen Sie diesen Wert fest, um den Qualitätsüberwachungsmodus zu aktivieren. |
BQR_Minimum_Report_Interval |
2 Oktette |
Definieren Sie das Mindestzeitintervall für die Meldung von Qualitätsereignissen für die ausgewählten Qualitätsereignisse. Die Controller-Firmware sollte das nächste Ereignis nicht innerhalb des definierten Zeitintervalls melden. Die Intervalleinstellung muss für die hinzuzufügenden Qualitätsereignisse spezifisch sein.
Einheit: ms |
BQR_Vendor_Specific_Quality_Event_Mask |
4 Oktette |
Bitmasken für die ausgewählte anbieterspezifische Meldung von Qualitätsereignissen. Dieser Parameter ist nur gültig, wenn Bit 15 von BQR_Quality_Event_Mask festgelegt ist.
Bit 0 bis 31: Reserviert. |
BQR_Vendor_Specific_Trace_Mask |
4 Oktette |
Bitmasken für die ausgewählte anbieterspezifische Tracing-Berichterstellung. Dieser Parameter ist nur gültig, wenn Bit 31 von BQR_Quality_Event_Mask festgelegt ist.
Bit 0 bis 31: Reserviert. |
Report_interval_multiple |
4 Oktette |
Der Multiplikator für BQR_Minimum_Report_Interval. Wenn dieser Wert >= 1 ist, folgt das BQR-Berichtsintervall dem Format . BQR-Berichtsintervall = BQR_Minimum_Report_Interval × Report_interval_multiple. Die Controller-Firmware darf das nächste Ereignis nicht innerhalb des definierten Zeitintervalls melden. Die Intervalleinstellung ist speziell für die hinzugefügten Qualitätsereignisse vorgesehen.
Einheit: ms BQR_Report_Interval größer als die Fähigkeit des Controllers ist, muss der Controller nach Abschluss des Befehls die maximale BQR_Report_Interval-Zeit zurückgeben.
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Current_Quality_Event_Mask |
4 Oktette |
Gibt die aktuelle Bitmaskeneinstellung an. Bit 0: Der Qualitätsüberwachungsmodus ist aktiviert. Bit 1: Berichte über bevorstehende LSTO-Ereignisse sind aktiviert. Bit 2: Die Berichterstellung für das Ereignis „A2DP Audio Choppy“ ist aktiviert. Bit 3: Die Berichterstellung für das Ereignis „(e)SCO Voice Choppy“ ist aktiviert. Bit 4: Die Berichterstellung für Ereignisse mit Wurzelentzündung ist aktiviert. Bit 5: Der Energiemonitoring-Modus ist aktiviert. Bit 6: Die Berichterstellung für LE-Audio-Stotterereignisse ist aktiviert. Bit 7: Ereignis „Verbindungsaufbau fehlgeschlagen“. Bit 8: Legen Sie diesen Wert fest, um den Ereignistrigger für den erweiterten RF-Statistikmodus zu aktivieren. Bit 9: Legen Sie diesen Wert fest, um die regelmäßige Berichterstellung von erweiterten RF-Statistiken zu aktivieren. Bit 10: Auf „Aktiviert“ gesetzt, um den Ereignistrigger für den Mechanismus zur Überwachung des Controllerstatus zu aktivieren. Bit 11: Auf „Aktiviert“ gesetzt, damit der Mechanismus zur Überwachung des Controllerstatus regelmäßig Berichte erstellt. Bit 12 bis 14: Reserviert. Bit 15: Die Meldung von anbieterspezifischen Qualitätsereignissen ist aktiviert. Bit 16: LMP/LL-Nachrichten-Trace ist aktiviert. Bit 17: Der Trace für die Bluetooth-Multi-Link-/Coex-Planung ist aktiviert. Bit 18: Der Mechanismus für Controller-Debug-Informationen ist aktiviert. Bit 19: Für das Offloaden von Debugging-Informationen reserviert Bit 20: UART-Verlaufsdump-Ereignistrigger Bit 21–30: Reserviert. Bit 31: Anbieterspezifische Ablaufverfolgung ist aktiviert. |
Current_Vendor_Specific_Quality_Event_Mask |
4 Oktette | Gibt die aktuelle Bitmaskeneinstellung an. |
Current_Vendor_Specific_Trace_Mask |
4 Oktette | Gibt die aktuelle Bitmaskeneinstellung an. |
BQR_Report_interval |
4 Oktette | Gibt die aktuelle Bitmaskeneinstellung an. |
Current_Vendor_Specific_Trace_Mask |
4 Oktette |
Die Einstellung von BQR_Report_interval. Er muss der Mindestwert zwischen BQR_Minimum_Report_Interval * Report_interval_multiple oder dem maximalen unterstützten Intervall des Controllers sein. |
Befehl für dynamischen Audio-Puffer
Der dynamische Audio-Puffer reduziert Audiofehler, indem die Größe des Audio-Puffers im Bluetooth-Controller je nach Szenario angepasst wird.
OCF: 0x15F
Funktion für Audio-Pufferzeit nutzen
Untergeordneter OCF: 0x01
Mit diesem Befehl können Sie die Audio-Pufferzeitfunktion vom Bluetooth-Controller abrufen.
| Befehlsparameter | Größe | Zweck |
|---|---|---|
| – | Leere Liste der Befehlsparameter |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Dynamic_Audio_Buffer_opcode |
1 Oktett | 0x01 – Audio-Pufferzeit abrufen |
Audio_Codec_Type_Supported |
4 Oktette |
Bitmasken für die unterstützten Codec-Typen Bit 0 – SBC Bit 1 – AAC Bit 2 – APTX Bit 3 – APTX HD Bit 4 – LDAC Bit 5–31 sind reserviert |
Audio_Codec_Buffer_Default_Time_For_Bit_0 |
2 Oktette |
Standardpufferzeit des Bit 0-Codec-Typs, der in Audio_Codec_Type_Supported angegeben ist. Dieser Wert muss 0 sein, wenn der Bit 0-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 |
2 Oktette |
Maximale Pufferzeit des Bit 0-Codec-Typs, der in Audio_Codec_Type_Supported angegeben ist. Dieser Wert muss 0 sein, wenn der Bit 0-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 |
2 Oktette |
Minimale Pufferzeit des Bit 0-Codec-Typs, der in Audio_Codec_Type_Supported angegeben ist. Dieser Wert muss 0 sein, wenn der Bit 0-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio_Codec_Buffer_Default_Time_For_Bit_1 |
2 Oktette |
Standardpufferzeit des in Audio_Codec_Type_Supported angegebenen Bit 1-Codec-Typs. Dieser Wert muss 0 sein, wenn der Bit 1-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 |
2 Oktette |
Maximale Pufferzeit des Bit 1-Codec-Typs, der in Audio_Codec_Type_Supported angegeben ist. Dieser Wert muss 0 sein, wenn der Bit 1-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 |
2 Oktette |
Minimale Pufferzeit des Bit 1-Codec-Typs, der in Audio_Codec_Type_Supported angegeben ist. Dieser Wert muss 0 sein, wenn der Bit 1-Codec-Typ nicht unterstützt wird. Einheit: ms |
| ...... | ...... | ...... |
Audio_Codec_Buffer_Default_Time_For_Bit_31 |
2 Oktette |
Standardpufferzeit des in Audio_Codec_Type_Supported angegebenen Bit 31-Codec-Typs. Dieser Wert muss 0 sein, wenn der Bit 31-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 |
2 Oktette |
Maximale Pufferzeit des in Audio_Codec_Type_Supported angegebenen Codec-Typs „Bit 31“. Dieser Wert muss 0 sein, wenn der Bit 31-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 |
2 Oktette |
Mindestpufferzeit des in Audio_Codec_Type_Supported angegebenen Bit 31-Codec-Typs. Dieser Wert muss 0 sein, wenn der Bit 31-Codec-Typ nicht unterstützt wird. Einheit: ms |
Audio-Pufferzeit festlegen
Untergeordnetes OCF: 0x02
Verwenden Sie diesen Befehl, um die Audio-Pufferzeit für den Bluetooth-Controller festzulegen.
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Audio_Codec_Buffer_Time |
2 Oktette |
Angefragte Audio-Pufferzeit für den aktuell verwendeten Codec. Einheit: ms |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Dynamic_Audio_Buffer_opcode |
1 Oktett | 0x02 – Audio-Pufferzeit festlegen |
Audio_Codec_Buffer_Time |
2 Oktette |
Aktuelle Audio-Pufferzeit im Bluetooth-Controller. Einheit: ms |
HCI-Ereignis (anbieterspezifisch)
In einigen Fällen sind anbieterspezifische HCI-Ereignisse erforderlich. Weitere Informationen finden Sie in Abbildung 5.4 auf Seite 1897 der BT Core 5.2-Spezifikation. Ereignisparameter 0 enthält immer den ersten Unterereigniscode, anhand dessen der Rest des HCI-Ereignisses decodiert wird.
| Ereignisparameter | Größe | Zweck |
|---|---|---|
HCI_vendor_specific_event_code |
1 Oktett | 0xFF |
sub_event_code |
1 Oktett | Ein Unterereigniscode hat eine Größe von 1 Oktett, dem Byte, das unmittelbar auf die Parameterlänge im HCI-Ereignispaket folgt. |
Unterereignis für Überschreitung des Speichergrenzwerts
Dieses Ereignis gibt an, dass der Speichergrenzwert überschritten wurde.
Unterereigniscode = 0x54
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
| Keine |
Unterereignis für Statusänderung bei mehreren Anzeigen von Rechtseinheiten
Dieses Ereignis gibt an, dass sich der Status einer Werbeinstanz geändert hat. Derzeit wird dieses Ereignis nur verwendet, um anzugeben, welche Werbeinstanz aufgrund einer Verbindung beendet wurde.
Unterereigniscode = 0x55
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Advertising_instance |
1 Oktett |
Gibt die spezifische Werbeinstanz an. Gültige Werte sind 0 bis max_advt_instances–1.
|
State_Change_Reason |
1 Oktett | 0x00: Verbindung empfangen |
Connection_handle |
2 Oktette |
Gibt die Verbindung an, die dazu geführt hat, dass die advt-Instanz deaktiviert wurde (0xFFFF, wenn ungültig).
|
Unterereignis für das Tracking von LE-Werbung
Dieses Ereignis gibt an, wann ein Werbetreibender gefunden oder verloren wurde.
Unterereigniscode = 0x56
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
APCF_Filter_Index |
1 Oktett | Filterindex (0, max_filter–1) |
Advertiser_State |
1 Oktett |
0x00: Werbetreibender gefunden 0x01: Werbetreibender nicht mehr gefunden |
Advt_Info_Present |
1 Oktett |
0x00: Werbetreibendeninformationen (Advt_Info) vorhanden0x01: Werbetreibendeninformationen ( Advt_Info) nicht vorhanden
|
Advertiser_Address |
6 Oktette | Öffentliche oder zufällige Adresse |
Advertiser_Address_Type |
1 Oktett |
0x00: Öffentliche Adresse 0x01: Zufällige Adresse |
Advt_Info |
Tx_Pwr[0]: 1 OktettRSSI[0]: 1 OktettTimestamp[0]: 2 OktetteAdv packet_len[0]: 1 OktettAdv_packet[0]: Adv_packet_len OktetteScan_data_resp_len[0]: 1 OktettScan_data_resp[0]: Scan_data_resp Oktette
|
Unterereignis „Controller-Debugging-Informationen“
Dieses Ereignis wird von einem Controller verwendet, um binäre Debugging-Informationen an einen Host zu senden.
Subevent-Code = 0x57
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
debug_block_byte_offset_start |
2 Oktette | Byte-Offset des Blocks vom Start aus debuggen |
last_block |
1 Oktett |
0x00: Weitere Debugging-Daten vorhanden 0x01: Letzter binärer Block; keine weiteren Debugging-Daten |
cur_pay_load_sz |
2 Oktette | Binärblockgröße in einem aktuellen Ereignis |
Debug_Data |
Variable | Debug-Daten von cur_payload_sz |
Unterereignis „Bluetooth Quality Report“
Dieses Ereignis weist auf eines der folgenden Szenarien hin: Es ist ein Bluetooth-Qualitätsereignis aufgetreten, der Controller hat den LMP/LL-Nachrichten-Trace und den Bluetooth-Multi-Link-/Coex-Planungs-Trace hochgeladen oder der Controller hat Debug-Informationen ausgegeben.
Unterereigniscode = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, Ereignis in Bezug auf die Linkqualität]
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Quality_Report_Id |
1 Oktett |
0x01: Qualitätsberichte zum Monitormodus. 0x02: LSTO wird erreicht. 0x03: A2DP-Audio abgehackt. 0x04: (e)SCO Voice Choppy. 0x05 – 0x06: Reserviert. 0x07: LE-Audio abgehackt. 0x08: Verbindungsfehler. 0x09 – 0xFF: Reserviert. |
Packet_Types |
1 Oktett |
0x01: ID 0x02: NULL 0x03: POLL 0x04: FHS 0x05: HV1 0x06: HV2 0x07: HV3 0x08: DV 0x09: EV3 0x0A: EV4 0x0B: EV5 0x0C: 2-EV3 0x0D: 2-EV5 0x0E: 3-EV3 0x0F: 3-EV5 0x10: DM1 0x11: DH1 0x12: DM3 0x13: DH3 0x14: DM5 0x15: DH5 0x16: AUX1 0x17: 2-DH1 0x18: 2-DH3 0x19: 2-DH5 0x1A: 3-DH1 0x1B: 3-DH3 0x1C: 3-DH5 0x1D – 0x50: Reserviert 0x51: ISO-Paket 0x52: 1M PHY 0x53: 2M PHY 0x54: Codec PHY S=2 0x55: Codec PHY S=8 0x56 – 0xFF: Reserviert |
Connection_Handle |
2 Oktette | ACL/(e)SCO/ISO-Verbindungs-Handle. |
Connection_Role |
1 Oktett |
Die Rolle, die für die Verbindung ausgeführt wird. 0x00: Central 0x01: Peripheral 0x02 – 0xFF: Reserved. |
TX_Power_Level |
1 Oktett |
Aktueller Sendestrompegel für den angegebenen Connection_Handle.
Dieser Wert muss mit dem Wert übereinstimmen, den der Controller als Antwort auf den HCI-Befehl HCI_Read_Transmit_Power_Level zurückgibt. |
RSSI |
1 Oktett |
[in dBm]
RSSI-Wert (Received Signal Strength Indication) für den angegebenen Connection_Handle. |
SNR |
1 Oktett |
[in dB]
Signal-Rausch-Verhältnis (SNR) für den angegebenen Connection_Handle. |
Unused_AFH_Channel_Count |
1 Oktett |
Gibt die Anzahl der nicht verwendeten Channels in AFH_channel_map an. 0x4F – 0xFF: Reserviert. |
AFH_Select_Unideal_Channel_Count |
1 Oktett |
Gibt die Anzahl der Kanäle an, die gestört sind und eine schlechte Qualität haben, aber trotzdem für AFH ausgewählt wurden. Die Mindestanzahl der von der Bluetooth-Spezifikation zulässigen Kanäle beträgt 20. Selbst wenn also alle 79 Kanäle gestört sind und eine schlechte Qualität aufweisen, muss der Controller mindestens 20 Kanäle für AFH auswählen. |
LSTO |
2 Oktette |
Aktuelle Einstellung für das Zeitlimit für die Link-Aufsicht. Zeit = N × 0,625 ms Zeitbereich: 0,625 ms bis 40,9 s |
Connection_Piconet_Clock |
4 Oktette |
Piconet-Takt für den angegebenen Connection_Handle. Dieser Wert muss mit dem Wert übereinstimmen, den der Controller als Antwort auf den HCI-Befehl HCI_Read_Clock mit dem Parameter „Which_Clock“ von 0x01 (Piconet Clock) zurückgibt. Einheit: N × 0,3125 ms (1 Bluetooth-Takt) |
Retransmission_Count |
4 Oktette |
Die Anzahl der Neuübertragungen seit dem letzten Ereignis. Diese Anzahl wird nach der Meldung an den Host zurückgesetzt. |
No_RX_Count |
4 Oktette |
Seit dem letzten Ereignis wurde keine RX-Anzahl erfasst. Der Zähler wird erhöht, wenn im geplanten Zeitfenster kein Paket empfangen wird oder das empfangene Paket beschädigt ist. Diese Anzahl wird nach der Meldung an den Host zurückgesetzt. |
NAK_Count |
4 Oktette |
Anzahl der NAKs (Negative Acknowledge) seit dem letzten Ereignis. Diese Anzahl wird nach der Meldung an den Host zurückgesetzt. |
Last_TX_ACK_Timestamp |
4 Oktette |
Zeitstempel der letzten TX ACK. Sie basiert auf der Bluetooth-Uhr des Piconet-Zentrums (CLK). Einheit: N × 0,3125 ms (1 Bluetooth-Takt) |
Flow_Off_Count |
4 Oktette |
Die Anzahl der Flow-off-Signale (STOP), die der Controller seit dem letzten Ereignis empfangen hat. Diese Anzahl wird nach der Meldung an den Host zurückgesetzt. |
Last_Flow_On_Timestamp |
4 Oktette |
Zeitstempel der letzten Weiterleitung (GO). Sie basiert auf der Bluetooth-Uhr des Piconet-Zentrums (CLK). Einheit: N × 0,3125 ms (1 Bluetooth-Takt) |
Buffer_Overflow_Bytes |
4 Oktette |
[in Byte]
Anzahl der Pufferüberläufe seit dem letzten Ereignis. |
Buffer_Underflow_Bytes |
4 Oktette |
[in Byte]
Anzahl der Pufferunterläufe seit dem letzten Ereignis. |
bdaddr |
6 Oktette | Adresse des Remote-Geräts |
cal_failed_item_count |
1 Oktett | Anzahl der Elemente, bei denen die Kalibrierung fehlgeschlagen ist |
TX_Total_Packets |
4 Oktette | Die Anzahl der gesendeten Pakete. |
TX_UnAcked_Packets |
4 Oktette |
Die Anzahl der Pakete, für die keine Bestätigung empfangen wird. Dieser Zähler wird nach der Meldung an den Host zurückgesetzt. |
TX_Flushed_Packets |
4 Oktette |
Die Anzahl der Pakete, die nicht vom Flush-Punkt gesendet werden. Dieser Zähler wird nach der Meldung an den Host zurückgesetzt. |
TX_Last_Subevent_Packets |
4 Oktette |
Die Anzahl der Pakete, die die Link Layer in der letzten Unterveranstaltung eines CIS-Ereignisses in einer CIS-Daten-PDU überträgt. Dieser Zähler wird nach der Meldung an den Host zurückgesetzt. Der Wert ist null, wenn kein gültiger Wert für den Link vorhanden ist. |
CRC_Error_Packets |
4 Oktette |
Die Anzahl der empfangenen Pakete mit CRC-Fehler seit dem letzten Ereignis. Dieser Zähler wird nach der Meldung an den Host zurückgesetzt. |
RX_Duplicate_Packets |
4 Oktette |
Die Anzahl der doppelten (erneut übertragenen) Pakete, die seit dem letzten Ereignis empfangen wurden. Dieser Zähler wird nach der Meldung an den Host zurückgesetzt. |
RX_Unreceived_Packets |
4 Oktette |
Die Anzahl der nicht empfangenen Pakete entspricht dem Parameter des Befehls „LE READ ISO Link Quality“ (siehe Bluetooth Core Specification Version 5.4). Die zugehörigen Streams sind CIS und BIS. Wenn dieser Wert erhöht wird, empfängt die Link Layer bis zum Flush-Punkt (bei einem CIS) oder am Ende des zugehörigen Ereignisses (bei einem BIS; siehe Bluetooth Core Specification Version 5.4, Vol. 6, Part B, Section 4.4.6.6) keine bestimmte Nutzlast. |
Coex_Info_Mask |
2 Oktette |
Bit 0 – CoexInvolvement: Wird festgelegt, um anzugeben, dass bei der Generierung dieses Berichts der Verdacht besteht, dass Coex-Aktivitäten beteiligt sind (z. B. A2DP-Chops und Annäherung an LSTO). Bit 1 – WL 2G Radio Active (WL 2G-Funk aktiv): Wird festgelegt, um anzugeben, dass der WL 2G-Funk aktiv ist. Bit 2 – WL 2G Connected: Wird festgelegt, um anzugeben, dass das WLAN-2G-Funkmodul aktiv und verbunden ist. Bit 3 – WL 5G/6G Radio Active (WL 5G/6G-Funk aktiv): Wird festgelegt, um anzugeben, dass das WLAN 5G/6G-Funkgerät aktiv ist. Bit 4–15 – Reserviert |
| Anbieterspezifischer Parameter | (Gesamtlänge des Parameters – noch festzulegen) * Oktette | Damit der Controlleranbieter weitere anbieterspezifische Parameter erhält. |
Unterereigniscode = 0x58 [Quality_Report_Id = 0x05, Root Inflammation event]
Dieses Ereignis weist darauf hin, dass in der Bluetooth-HAL oder im Controller ein schwerwiegender Fehler aufgetreten ist. Der Bluetooth-Stack muss diese Situation aufzeichnen und neu starten. Der Controller muss in jedem Fall ein Root_Inflammation_Event an den Bluetooth-Stack senden, bevor er das erste Fragment der Debug-Info-Ereignisse sendet.
Der Parameter „Error_Code“ enthält einen Fehlercode, der von HAL/Controller gemeldet wird. Er ist „0“, wenn es sich um einen chipset-anbieterspezifischen Fehler handelt. Der „Vendor_Specific_Error_Code“ enthält einen chipset-anbieterspezifischen Fehlercode aus HAL/Controller. Er sollte auf 0 gesetzt werden, wenn der Parameter „Error_Code“ nicht 0 ist. Die Parameter „Error_Code“ und „Vendor_Specific_Error_Code“ dürfen nicht beide 0 sein.
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Quality_Report_Id |
1 Oktett |
0x00 – 0x04: Reserviert. 0x05: Wurzelentzündung. 0x06 – 0xFF: Reserviert. |
Error_Code |
1 Oktett |
0x00: Der chipsatzspezifische Fehlercode des Anbieters ist enthalten. 0x01 – 0xFF: Es ist ein Controller-Fehler aufgetreten. Eine Liste der Fehlercodes und Beschreibungen finden Sie in der Bluetooth-Spezifikation [Band 2], Teil D, Fehlercodes. |
Vendor_Specific_Error_Code |
1 Oktett |
0x00: Es ist kein chipsatzanbieterspezifischer Fehlercode enthalten. 0x01 – 0xFF: Chipsatzanbieterspezifischer Fehlercode. |
| Anbieterspezifischer Parameter | (Parametergesamtlänge – 4) * Oktette | Damit der Controlleranbieter weitere anbieterspezifische Parameter erhält. |
Unterereigniscode = 0x58 [Quality_Report_Id = 0x06, Energy monitor event]
Dieses Ereignis bietet einen Überblick über den Stromverbrauch und die Betriebsstatus des Bluetooth-Controllers über einen bestimmten Zeitraum. Mit diesem Ereignis können Entwickler und Techniker analysieren, wie der Controller die Stromversorgung verwaltet, ermitteln, welche Aktivitäten am meisten Energie verbrauchen, und Probleme im Zusammenhang mit der Stromversorgung beheben.
Mit den Parametern im Bericht werden wichtige Messwerte erfasst, darunter:
- Durchschnittlicher aktueller Verbrauch:Der vom Controller verwendete Gesamtstrom.
- Zeit in verschiedenen Status:Die Gesamtzeit (in Millisekunden), die der Controller in einem inaktiven (Ruhe-/Energiespar-)Status im Vergleich zu einem aktiven Status (Verbinden, Senden oder Empfangen von Daten) verbringt.
- Anzahl der Statusübergänge:Die Anzahl der Male, die der Controller zwischen Leerlauf- und Aktivstatus wechselt.
- Zeit in bestimmten Funkstatus:Separate Messwerte für die Zeit, die mit dem Senden (Tx) und Empfangen (Rx) verbracht wurde, sowohl für BR/EDR- (Bluetooth Classic) als auch für LE-Verbindungen (Bluetooth Low Energy).
- Durchschnittliche Sendeleistungspegel:Die durchschnittliche Leistung (in dBm), die für Übertragungen über BR/EDR- und LE-Verbindungen verwendet wird.
- Detaillierte Informationen zur Chain-Aktivität:Berichte zur Zeit, die mit aktiven Sende- oder Empfangschains verbracht wurde, mit Unterscheidung zwischen Ein-Chain- und Zwei-Chain-Vorgängen sowie zwischen internen (iPA) und externen (ePA) Leistungsverstärkern.
- Scan activity time (Zeit für Scanaktivität): Die Zeit, die der Controller mit dem aktiven Scannen nach BR/EDR- und LE-Geräten verbringt.
Durch die Analyse dieser Parameter können Ingenieure die Energieeffizienz des Controllers besser verstehen und seine Leistung optimieren.
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Quality_Report_Id |
1 Oktett | 0x06: Energieüberwachung |
Average_Current_Consumption |
2 Oktette | [in mA] Durchschnittlicher Stromverbrauch aller vom Controller ausgeführten Aktivitäten |
Idle_Total_Time (Schlaf) |
4 Oktette | [in ms] Total time in the idle (low power states, sleep) state. |
Idle_Sate_Enter_Count |
4 Oktette | Gibt an, wie oft der Controller in den Leerlaufzustand wechselt. |
Active_Total_Time |
4 Oktette | [in ms] Gesamtdauer im aktiven Status (Anfrage-, Paging-, ACL-/SCO-/eSCO-/BIS-/CIS-Traffic, Verarbeitung von Aufgaben). |
Active_State_Enter_Count |
4 Oktette | Gibt an, wie oft der Controller in die aktiven Status wechselt. |
BR_RDR_Tx_Total_Time |
4 Oktette | [in ms] Total time in the BR/EDR specific Tx(Transmitting for ACL/SCO/eSCO traffic)state. |
BR_RDR_Tx_State_Enter_Count |
4 Oktette | Gibt an, wie oft der Controller in den BR/EDR-spezifischen Tx-Zustand wechselt. |
BR_RDR_Tx_Average_Power_Level |
1 Oktett | [in dBm] Durchschnittlicher Tx-Leistungspegel aller BR/EDR-Verbindungen |
BR_RDR_Rx_Total_Time |
4 Oktette | [in ms] Total time in the BR/EDR specific Rx (Receiving from ACL/SCO/eSCO traffic) state. |
BR_RDR_Rx_State_Enter_Count |
4 Oktette | [in ms] Gibt an, wie oft der Controller in den BR/EDR-spezifischen Empfangszustand wechselt. |
LE_Tx_Total_Time |
4 Oktette | [in ms] Gesamtzeit im LE-spezifischen Übertragungsstatus (Übertragung für ACL/BIS/CIS oder LE-Werbe-Traffic). |
LE_Tx_State_Enter_Count |
4 Oktette | Gibt an, wie oft der Controller in den BR/EDR-spezifischen Empfangszustand wechselt. |
LE_Tx_Average_Power_Level |
1 Oktett | [in dBm] Durchschnittlicher Tx-Leistungspegel aller LE-Verbindungen. |
LE_Rx_Total_Time |
4 Oktette | [in ms] Total time in the LE specific Rx (Receiving from either ACL/BIS/CIS or LE scanning traffic) state. |
LE_Rx_State_Enter_Count |
4 Oktette | [in ms] Gibt an, wie oft der Controller in den LE-spezifischen Empfangszustand wechselt. |
Report_Time_Duration (Gesamtzeit) |
4 Oktette | [in ms] Die Gesamtdauer für das Erfassen von Informationen zum Stromverbrauch. |
RX_Active_One_Chain_Time |
4 Oktette | [in ms] The time duration of RX active in one chain |
RX_Active_Two_Chain_Time |
4 Oktette | [in ms] The time duration of RX active in two chain |
TX_iPA_Active_One_Chain_Time |
4 Oktette | [in ms] The time duration of internal TX active in one chain |
TX_iPA_Active_Two_Chain_Time |
4 Oktette | [in ms] The time duration of internal TX active in two chain |
TX_ePA_Active_One_Chain_Time |
4 Oktette | [in ms] The time duration of external TX active in one chain |
TX_ePA_Active_Two_Chain_Time |
4 Oktette | [in ms] Die Zeitdauer der externen TX, die in zwei Chains aktiv ist |
BREDR_RX_Active_Scan_total_Time |
4 Oktette | [in ms] Zeitraum (ms) für die aktive Empfangszeit des BR/EDR-Scans |
LE_RX_Active_Scan_total_Time |
4 Oktette | [in ms] Zeitraum (ms) für die aktive Zeit des LE-Scan-Empfangs |
Unterereigniscode = 0x58 [Quality_Report_Id = 0x09~0x0A, Ereignis für erweiterte RF-Statistiken]
Das Ereignis „Bluetooth Advanced RF (Radio Frequency) Stats“ (Bluetooth-Statistiken zu erweiterten Funkfrequenzen) enthält detaillierte Leistungsmesswerte zum Funkverhalten des Bluetooth-Controllers. Das Ereignis kann auf zwei Arten ausgelöst werden:
- Nach Trigger (0x09): Als Reaktion auf einen bestimmten Befehl wird ein einmaliger Bericht gesendet.
- Nach Monitor (0x0A): Der Controller sendet in regelmäßigen Abständen Berichte.
Die Parameter des Ereignisses sind im Grunde Paketzähler, mit denen verschiedene Funkverhaltensweisen über einen bestimmten Zeitraum hinweg erfasst werden.
Wichtige Messwerte und ihr Zweck
- Statistiken zur Sendeleistung:Diese Zähler erfassen Pakete, die mit verschiedenen Leistungskonfigurationen gesendet werden. Dabei wird zwischen internen (iPA) und externen (ePA) Leistungsverstärkern sowie verschiedenen Antennendiversity- (Div) oder Beamforming-Modi (BF) unterschieden. So lässt sich ermitteln, welche Leistungs- und Antenneneinstellungen am häufigsten verwendet werden.
- RSSI-Bereiche (Received Signal Strength Indicator):Mit diesen Parametern werden empfangene Pakete anhand ihrer Signalstärke kategorisiert. Durch die Angabe der Anzahl der Pakete in bestimmten RSSI-Bereichen (z.B. unter -90 dBm, -70 bis -75 dBm) gibt der Bericht ein klares Bild der Verbindungsqualität. Eine hohe Anzahl in den Signalbereichen für „schwach“ (z. B. < –90 dBm) weist auf eine schlechte Verbindung hin.
- RSSI-Delta:Dieser Messwert gibt die Differenz der Signalstärke zwischen den beiden Empfangsantennen an (falls zutreffend). Zähler erfassen, wie viele Pakete ein RSSI-Delta in verschiedenen Bereichen haben. Ein großes Delta (z.B. >11 dBm) kann auf Störungen oder eine physische Behinderung hinweisen, da eine Antenne ein viel stärkeres Signal empfängt als die andere.
- Antennenumschaltung und erneute Übertragungen:Im Bericht wird gezählt, wie oft der Controller zwischen Antennen wechselt, und es werden neu übertragene (ReTX-)Pakete erfasst. Eine hohe Anzahl von erneuten Übertragungen deutet oft auf eine schwache oder unzuverlässige Verbindung hin, bei der Pakete noch einmal gesendet werden müssen.
- Channelqualität:Diese Parameter bieten eine allgemeine Zusammenfassung des Zustands verschiedener Kommunikationskanäle und kategorisieren sie anhand ihres RSSI als „Gut“, „OK“, „Schlecht“ oder „Sehr schlecht“. So erhalten Sie sofort einen Überblick über die HF-Umgebung.
- TX-Pufferwarteschlange:In diesem Abschnitt wird die Anzahl der Pakete überwacht, die im Übertragungspuffer des Controllers für verschiedene Linktypen wie ACL (Asynchronous Connection-oriented Logical Link), LECONN (LE Connection) und LEISOC (LE Isochronous) warten. Hohe Pufferzahlen können auf einen Engpass oder ein Problem mit dem Datenfluss vom Host zum Controller hinweisen.
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Quality_Report_Id |
1 Oktett | 0x09: Advance RF Stats By Trigger 0x0A: Advance RF Stats By Monitor |
Extension_info |
1 Oktett | BQR-Versionsinformationen. 0x01 für BQRv6 0x02 für BQRv7 |
Report_Time_Period |
4 Oktette | Der Zeitraum, in dem Leistungsdaten erfasst werden. Einheit: ms |
TX_Power_iPA_BF |
4 Oktette | Paketzähler von iPA BF |
TX_Power_ePA_BF |
4 Oktette | Paketzähler des ePA BF |
TX_Power_iPA_Div |
4 Oktette | Paketzähler der ePA-Abteilung |
TX_Power_ePA_Div |
4 Oktette | Paketzähler der ePA-Abteilung |
RSSI_chain_50 |
4 Oktette | Paketzähler der RSSI-Kette > -50 dBm |
RSSI_chain_50_55 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -50 dBm und >-55 dBm |
RSSI_chain_55_60 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -55 dBm und >-60 dBm |
RSSI_chain_60_65 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -60 dBm und >-65 dBm |
RSSI_chain_65_70 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -65 dBm und >-70 dBm |
RSSI_chain_70_75 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -70 dBm und >-75 dBm |
RSSI_chain_75_80 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -75 dBm und >-80 dBm |
RSSI_chain_80_85 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -80 dBm und >-85 dBm |
RSSI_chain_85_90 |
4 Oktette | Paketzähler der RSSI-Kette zwischen -85 dBm und >-90 dBm |
RSSI_chain_90 |
4 Oktette | Paketzähler der RSSI-Kette < -90 dBm |
RSSI_delta_2 |
4 Oktette | Paketzähler für RSSI-Delta < 2 dBm |
RSSI_delta_2_5 |
4 Oktette | Paketzähler für RSSI-Delta zwischen 2 dBm und 5 dBm |
RSSI_delta_5_8 |
4 Oktette | Paketzähler für RSSI-Delta zwischen 5 dBm und 8 dBm |
RSSI_delta_8_11 |
4 Oktette | Paketzähler für RSSI-Delta zwischen 8 dBm und 11 dBm |
RSSI_delta_11 |
4 Oktette | Paketzähler für RSSI-Delta > 11 dBm |
Antenna_Switch_Count |
4 Oktette | Paketzähler des Antennenumschaltvorgangs |
ReTX_iPA_BF |
4 Oktette | Paketzähler von ReTX_iPA_BF im letzten Zeitraum |
ReTX_ePA_BF |
4 Oktette | Paketzähler von ReTX_ePA_BF im letzten Zeitraum |
ReTX_iPA_Div |
4 Oktette | Paketzähler von ReTX_iPA_Div im letzten Zeitraum |
ReTX_ePA_Div |
4 Oktette | Paketzähler von ReTX_ePA_Div im letzten Zeitraum |
Channel_count_Good |
1 Oktett | Anzahl der Channels, deren RSSI in Bin 1 (< –90) fällt |
Channel_count_OK |
1 Oktett | Anzahl der Kanäle, deren RSSI in Bin-2 (-90 ~ -76) liegt |
Channel_count_Bad |
1 Oktett | Anzahl der Channels, deren RSSI in Bin 3 (-76 bis -50) liegt |
Channel_count_VeryBad |
1 Oktett | Anzahl der Channels, deren RSSI in Bin 4 (> –50) fällt |
TX_buffer_Queue_Count |
4 Oktette | Zähler für den Status des Pufferwarteschlangen-Controllers TX-Puffer im letzten Zeitraum [0:3] ACL_1 [4:7] ACL_2 [8:11] LECONN_1 [12:15] LECONN_2 [16:19] LEISOC_1 [20:23] LEISOC_2 [24:27] LEBroadcast [28:31] rsvd |
Unterereigniscode = 0x58 [Quality_Report_Id = 0x0B~0x0C, Controller Health Monitoring event]
Das Ereignis „Bluetooth Controller Health Monitoring“ bietet eine Zusammenfassung des Betriebsstatus des Controllers. Das Ereignis kann auf zwei Arten ausgelöst werden:
- Nach Trigger (0x09): Als Reaktion auf einen bestimmten Befehl wird ein einmaliger Bericht gesendet.
- Nach Monitor (0x0A): Der Controller sendet in einem angegebenen Intervall regelmäßig Berichte.
Das Ereignis „Bluetooth Controller Health Monitoring“ ist ein Diagnosetool, das eine Zusammenfassung des Betriebsstatus des Controllers bietet. Dieses Ereignis ist Teil des Bluetooth Quality Report (BQR)-Frameworks und wird zum Debuggen von Verbindungs-, Energieverwaltungs- und Timing-Problemen verwendet. Er kann als einmaliger Bericht oder regelmäßig gesendet werden, um eine kontinuierliche Überwachung zu ermöglichen.
Wichtige Messwerte und ihr Zweck
- HCI-Paketzähler:Das Ereignis erfasst die Gesamtzahl der Pakete, die vom Host zum Controller und umgekehrt gesendet werden. Diese Zähler sind wichtig, um Probleme mit dem HCI-Transport (Host Controller Interface) zu beheben. Das ist der Kommunikationskanal zwischen dem Softwarestack und dem Bluetooth-Controller-Chip.
- Paketlängen:Das Ereignis meldet die Länge des letzten gesendeten und empfangenen HCI-Pakets. So lässt sich überprüfen, ob Daten korrekt übertragen werden und ob es keine unerwarteten Probleme mit der Größe gibt.
- Anzahl der Aktivierungssignale:Der Bericht enthält die Gesamtzahl der Assertions der Pins BT_Wake und HOST_Wake. Diese physischen Signale sind für die Energieverwaltung von entscheidender Bedeutung, da sie verwendet werden, um die jeweiligen Einheiten aus dem Energiesparmodus zu reaktivieren. Wenn Sie diese Zähler im Blick behalten, können Sie Probleme im Zusammenhang mit dem Stromverbrauch beheben, z. B. unerwartete Aktivierungen oder Fehler beim Wechsel in den Ruhemodus.
- Zeitstempel:Das Ereignis enthält mehrere Zeitstempel, darunter die Zeit des letzten Wecksignals und des letzten HCI-Resets. Diese Zeitstempel helfen bei der Fehlerbehebung von zeitbezogenen Problemen und bieten einen Referenzpunkt dafür, wann bestimmte Ereignisse aufgetreten sind.
- Watchdog-Timer:Ein bestimmtes Flag gibt an, ob das Ereignis als Frühwarnung generiert wurde, dass der Watchdog-Timer des Controllers bald abläuft. Dies ist eine wichtige Warnung vor möglichen Controller-Fehlfunktionen oder dem Einfrieren des Controllers.
- Link Status (Linkstatus): Der Bericht fasst den aktuellen Status aktiver Verbindungen zusammen, einschließlich der Gesamtzahl der BR/EDR-, LE- und CIS-Links (Connected Isochronous Stream). Außerdem wird angezeigt, ob SCO-Verbindungen (Synchronous Connection-Oriented) aktiv sind. Diese Informationen geben einen Überblick über die aktuelle Verbindungslast des Controllers.
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Quality_Report_Id |
1 Oktett | 0xB~0xC 0x0B: Einmalige oder ereignisgesteuerte Berichte 0x0C: Regelmäßige Berichte. |
Packet_Count_Host_to_Controller |
4 Oktette | Gesamtzahl der Pakete, die vom Host über den HCI-Transport an den Controller gesendet werden. Dieses Feld wird zum Debuggen von HCI-Problemen (z. B. UART) verwendet. Verhalten: Die Zähler werden zurückgesetzt, wenn der Controller ein HCI-Reset empfangen hat. |
Packet_Count_Controller_to_Host |
4 Oktette | Gesamtzahl der an den Host gesendeten HCI-Ereignispakete. Dieses Feld wird zur Fehlerbehebung bei HCI verwendet (z.B. UART) auftreten. Verhalten: Die Zähler werden zurückgesetzt, wenn der Controller ein HCI-Reset empfangen hat. |
Last_Packet_Length_Host_to_Controller |
2 Oktette | Länge des letzten HCI-Pakets, das an den Host-UART gesendet wurde. Hinweis: Die maximale HCI-Paketlänge beträgt 2 Oktette (HCI, ACL, SCO, ISO). |
Last_Packet_Length_Controller_To_host |
2 Oktette | Länge des letzten HCI-Pakets, das vom Host-UART empfangen wurde. Hinweis: Die maximale Länge des HCI-Pakets beträgt 2 Oktets (einschließlich HCI, ACL, SCO, ISO). |
Total_BT_Wake_Count |
4 Oktette | Die Gesamtzahl der BT_Wake-Pin-Assertions durch die Host-Entität. Dieses Feld dient als Diagnosetool zur Behebung von Problemen im Zusammenhang mit der Stromversorgung. Verhalten: Die Zähler werden zurückgesetzt, wenn der Controller ein HCI-Reset empfangen hat. |
Total_HOST_Wake_Count |
4 Oktette | Aggregierte Berechnung der vom Controller initiierten Host_Wake-Pin-Assertions. Dieses Feld dient als Diagnosetool zur Behebung von Problemen im Zusammenhang mit der Stromversorgung. Verhalten: Die Zähler werden zurückgesetzt, wenn der Controller ein HCI-Reset empfangen hat. |
Last_BT_Wake_TimeStamp |
4 Oktette | Zeitstempel des letzten Zeitpunkts, zu dem der Host den BT_Wake-Pin aktiviert hat.Dieses Feld wird zur Fehlerbehebung bei Stromversorgungsproblemen verwendet. |
Last_HOST_Wake_TimeStamp |
4 Oktette | Der letzte Zeitstempel, zu dem der Controller den Host_Wake-Pin aktiviert hat. Dieses Feld wird zur Behebung von Stromversorgungsproblemen verwendet. |
Reset_Timestamp |
4 Oktette | Zeitstempel, der angibt, wann der letzte HCI-Reset abgeschlossen wurde. Dieses Feld wird ausschließlich verwendet, um die Behebung von zeitbezogenen Problemen zu erleichtern. Sie sollte als erster Aufzeichnungspunkt dienen, auf den sich alle anderen Elemente beziehen. |
Current_Timestamp |
4 Oktette | Die aktuelle Zeit, zu der dieses Ereignis generiert wird. Dieses Feld wird verwendet, um Zeitabweichungen zu beheben. Sie sollte als Trigger-Aufnahmepunkt dienen, auf den sich alle anderen Elemente beziehen. |
Is_WatchDog_Timer_About_To_Expire |
4 Oktette | Flag, das angibt, dass dieses Ereignis zum Gesundheitsstatus vom Controller als Frühwarnung vor dem Ablauf des Watchdogs generiert wird. Der aktuelle Zeitstempel gibt den Zeitpunkt des Auftretens an. |
Coex_Status_Mask |
2 Oktette | Bit 0 – Reserviert |
Total_Links_BR_EDR_LE_Active |
1 Oktett | Gesamtzahl der BR/EDR/LE-Verbindungen im Status „Aktiv“. |
Total_Links_BR_EDR_Sniff |
1 Oktett | Gesamtzahl der BR/EDR-Verbindungen im Sniff-/Leerlaufstatus. |
Total_Links_CIS |
1 Oktett | Gesamtzahl der Links in der ISO. |
Is_SCO_Active |
1 Oktett | Anzeige, die angibt, ob die SCO-Verbindung derzeit aktiviert ist. |
Unterereigniscode = 0x58 [Quality_Report_Id = 0x11 – 0x13, Ereignis im Zusammenhang mit Log-Dump]
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Quality_Report_Id |
1 Oktett |
0x00 – 0x10: Reserviert. 0x11: LMP/LL-Nachrichtentrace. 0x12: Bluetooth-Multi-Link-/Coex-Planungs-Trace. 0x13: Controller-Debugging-Informationen. 0x14 – 0xFF: Reserviert. |
Connection_Handle |
2 Oktette | Verbindungs-Handle. |
| Anbieterspezifischer Parameter | (Parametergesamtlänge – 4) * Oktette | Anbieterspezifisches Format des LMP-Nachrichtentrace, Bluetooth-Multi-Link-/Coex-Scheduling-Trace und Controller-Debug-Informationen-Dump. |
Unterereignis „ISO Link Feedback“
Unterereigniscode = 0x5C
Wenn dieses Ereignis aktiviert ist, muss es während jedes ISO-Intervalls generiert werden.
Aktivierung
Die Aktivierung erfolgt durch Auswahl des AnbietercodesData_Path_ID 0x19 im Standardbefehl HCI_LE_Setup_ISO_Data_Path.
Der HCI_Configure_Data_Path-Befehl mit Data_Path_ID auf 0x19 und Vendor_Specific_Config_Length auf 0 muss akzeptiert werden, auch wenn vom Controller nach dem Empfang dieses Befehls keine Aktion erwartet wird.
Zeitpunkt der Auslösung
Das Ereignis wird ab dem Beginn eines ISO-Intervalls (CIG- oder BIG-Ankerpunkt) bis zum folgenden ISO-Intervall ausgegeben. Der Controller gibt die Verzögerung mit dem effektiven Beginn des ISO-Intervalls mitAnchor_Point_Delay an.
Controller-Synchronisierung
Zu Beginn eines ISO-Intervalls berechnet der Controller StreamSN, indem er den aktuellen Wert um den konfiguriertenISO_Interval ÷ SDU_Interval erhöht. Im ersten Intervall wird er auf 0 initialisiert.Für jedes Paket im ISO-FIFO gilt Folgendes:
-
Der Controller berechnet die Differenz SNdiff zwischen den beiden Sequenznummern:
SNdiff = (SDUSN - StreamSN + 0x10000) mod 0x10000 - Wenn
(SNdiff + (FT-1) × ISO_Interval ÷ SDU_Interval) mod 0x10000 <= (FT-1) × ISO_Interval ÷ SDU_Interval:
Das Paket befindet sich im Fenster für die erneute Übertragung. Sie sollte in früheren Intervallen zur Übertragung geplant gewesen sein und ist jetzt für die erneute Übertragung verfügbar. Wenn das nicht der Fall ist (die Übertragung wurde nicht geplant), wurde die Sendung zu spät empfangen. Dies muss dem Host mit demIn_Statussignalisiert werden. Solche Pakete können verworfen oder für die Übertragung geplant werden. Die Auswahl ist implementierungsdefiniert. - Oder wenn
SNdiff < ISO_Interval ÷ SDU_Interval:
Das Paket wird ab diesem Ereignis bis zum Ablauf des Flush-Time-outs für die Übertragung geplant. - Oder wenn
SNdiff >= ISO_Interval ÷ SDU_IntervalundSNdiff <= Max_Forward_Buffers:
Das Paket liegt in der Zukunft und wird mit einem nachfolgenden Ereignis übertragen. Da die Pakete in der richtigen Reihenfolge gesendet werden, wird die Suche nach Paketen für dieses Intervall durch diese Bedingung beendet.
Die vom Host verwendeten Puffer werden dem Controller nicht mitgeteilt, sind aber aufMax_Forward_Buffers = 16begrenzt. - Oder wenn keine der oben genannten Bedingungen erfüllt ist:
Das Paket wird verworfen, das Flush-Zeitlimit wird erreicht oder ein fehlerhaftes Paket wurde empfangen.
| Parameter für untergeordnete Ereignisse | Größe | Zweck |
|---|---|---|
Connection_Handle |
2 Oktette |
Verbindungs-Handle des CIS oder BIS Bereich: 0x0000 bis 0x0EFF |
Sequence_Number |
2 Oktette |
Sequenznummer des Streams, die vom Controller verwaltet wird. Wird beim Erstellen des CIS oder BIS auf 0 initialisiert und bei jedem ISO-Intervall um die Anzahl der SDUs durch das synchrone ISO-Intervall erhöht, das als ISO_interval ÷ SDU_Interval definiert ist.
|
Anchor_Point_Delay |
2 Oktette |
Verzögerung in Mikrosekunden zwischen der Generierung des Ereignisses und dem effektiven BIG- oder CIG-Ankerpunkt oder dem Beginn des ISO-Intervalls.
Der effektive Ankerpunkt-Zeitstempel wird so definiert:Event generation time - Anchor_Point_Delay
Bereich: 0 bis ISO-Intervall in Mikrosekunden |
In_Status |
2 Oktette |
Controller-ISO-Pufferstatus Zu Beginn eines ISO-Intervalls wird jedes Bit bi festgelegt, wenn die SDU (Sequence_Number + i) mod 0x10000 verfügbar ist. Wenn sie nicht verfügbar ist, wird die SDU als Not received from the host identifiziert.Der Wert i liegt zwischen 0 und ISO_Interval ÷ SDU_Interval - 1.
Für andere Werte von i werden die Bits auf 0 gesetzt.
|
Tx_Status |
2 Oktette |
Übertragungsstatus in Bezug auf die SDUs mit Sequenznummern:(Sequence_Number - Flush_Timeout × ISO_Interval ÷ SDU_Interval + i + 0x10000)
mod 0x10000
Jedes Bit bi wird festgelegt, wenn alle PDUs der identifizierten SDU anhand ihrer Sequenznummer erfolgreich übertragen und bestätigt wurden. Der Wert i liegt zwischen 0 und ISO_Interval ÷ SDU_Interval - 1.
Für andere Werte von i werden die Bits auf 0 gesetzt.In einer Broadcast-Gruppe muss die Übertragung immer bestätigt werden. |
Unterstützung mehrerer Werbetreibender
Die Ziele der Unterstützung mehrerer Werbetreibender sind:
-
Unterstützung mehrerer Anzeigen
(
max_advt_instances) - Unterschiedliche Sendeleistungen für unterschiedliche Reichweiten
- Unterschiedliche Werbeinhalte
- Individuelle Antwort für jeden Werbetreibenden
- Datenschutz (nicht nachverfolgbar) für jeden Werbetreibenden
- Verbindbar
Damit diese Spezifikation an bestehende Standards angelehnt ist, werden die folgenden anbieterspezifischen Befehle bereitgestellt. Sie basieren auf der Bluetooth 4.1-Spezifikation.
LE_Multi_Advt_Command
OCF: 0x154
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Multi_advt_opcode |
1 Oktett |
0x01 – Set_Advt_Param_Multi_Sub_Cmd0x02 – Set_Advt_Data_Multi_Sub_Cmd0x03 – Set_Scan_Resp_Data_Multi_Sub_Cmd0x04 – Set_Random_Addr_Multi_Sub_Cmd0x05 – Set_Advt_Enable_Multi_Sub_Cmd
|
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Multi_advt_opcode |
1 Oktett |
0x01 – Set_Advt_Param_Multi_Command0x02 – Set_Advt_Data_Multi_Command0x03 – Set_Scan_Resp_Data_Multi_Command0x04 – Set_Random_Addr_Multi_Command0x05 – Set_Advt_Enable_Multi_Command
|
LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd
Grundlegende Referenz: Bluetooth Core 4.1 Specification, Seite 964 (LE Set Advertising Parameter Command)
Untergeordneter OCF: 0x01
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Advertising_Interval_Min |
Pro Spezifikation | Pro Spezifikation |
Advertising_Interval_Max |
Pro Spezifikation | Pro Spezifikation |
Advertising_Type |
Pro Spezifikation | Pro Spezifikation |
Own_Address_Type |
Pro Spezifikation | Pro Spezifikation |
Own_Address |
Pro Spezifikation | Pro Spezifikation |
Direct_Address_Type |
Pro Spezifikation | Pro Spezifikation |
Direct_Address |
Pro Spezifikation | Pro Spezifikation |
Advertising_Channel_Map |
Pro Spezifikation | Pro Spezifikation |
Adverstising_Filter_Policy |
Pro Spezifikation | Pro Spezifikation |
Advertising_Instance |
1 Oktett | Gibt an, ob die oben genannten Parameter für eine Instanz gelten. |
Tx_power |
1 Oktett |
Transmit_Power Einheit: dBm (Ganzzahl mit Vorzeichen) Bereich: -70 bis +20 |
Der Parameter Own_Address kann eine vom Host konfigurierte Adresse sein, wenn diese Multi-Anzeigen-Instanz eingerichtet wird. Dadurch ist es möglich, dass zum Zeitpunkt der Übertragung des ersten Beacons eine auflösbare private Adresse vorhanden ist. Anzeigen auf einer Instanz werden unabhängig von der Verbindung weiterhin ausgeliefert. Der Host-BT-Stack kann nach der Verbindung einen Befehl zum Starten der Werbung auf einer Instanz ausgeben.
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert, wie in der Bluetooth Core 4.1-Spezifikation angegeben. Der Controller antwortet mit einem Fehlercode (ungültiger Parameter), wenn die Werbeinstanz oder die Tx_Power-Parameter ungültig sind.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Multi_advt_opcode |
1 Oktett | 0x01 [Set_Advt_Param_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd
Grundlegende Referenz: Bluetooth Core 4.1 Specification, Seite 969 (LE Set Advertising Data Command)
Untergeordnetes OCF: 0x02
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Advertising_Data_Length |
Pro Spezifikation | Pro Spezifikation |
Advertising_Data |
Pro Spezifikation | Pro Spezifikation |
Advertising_Instance |
1 Oktett | Gibt an, ob die oben genannten Parameter für eine Instanz gelten. |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert, wie in der Bluetooth Core 4.1-Spezifikation angegeben. Der Controller antwortet mit einem Nicht-Erfolgscode, wenn die Werbeinstanz oder die Tx_Power-Parameter ungültig sind.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Multi_advt_opcode |
1 Oktett | 0x02 [Set_Advt_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd
Grundlegende Referenz: Bluetooth Core 4.1 Specification, Seite 970 (LE Set Scan Response Data Command)
Untergeordneter OCF: 0x03
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Scan_Response_Data_Length |
Pro Spezifikation | Pro Spezifikation |
Scan_Response_Data |
Pro Spezifikation | Pro Spezifikation |
Advertising_Instance |
1 Oktett | Gibt an, ob die oben genannten Parameter für eine Instanz gelten. |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert, wie in der Bluetooth Core 4.1-Spezifikation angegeben. Der Controller antwortet mit einem Fehlercode (ungültiger Parameter), wenn die Werbeinstanz oder die Tx_Power-Parameter ungültig sind.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Multi_advt_opcode |
1 Oktett | 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd
Grundlegende Referenz: Bluetooth Core 4.1 Specification, Seite 963 (LE Set Random Address Command)
Unter-OCF: 0x04
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
| Zufällige Adresse | Pro Spezifikation | Pro Spezifikation |
Advertising_Instance |
1 Oktett | Gibt an, ob die oben genannten Parameter für eine Instanz gelten. |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Multi_advt_opcode |
1 Oktett | 0x04 [Set_Random_Addr_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd
Grundlegende Referenz: Bluetooth Core 4.1 Specification, Seite 971 (LE Set Advertise Enable Command in dieser Core-Spezifikation)
OCF: 0x05
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Advertising_Enable |
1 Oktett | Ein Wert von 1 bedeutet „aktivieren“. Jeder andere Wert bedeutet „Deaktivieren“. |
Advertising_Instance |
1 Oktett | Gibt an, ob die oben genannten Parameter für eine Instanz gelten. Instanz 0 steht für eine Standard-HCI-Instanz. |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Multi_advt_opcode |
1 Oktett | 0x05 [Set_Advt_Enable_Multi_Sub_Cmd] |
Ausgelagerte Auflösung privater Adressen
Diese Funktion löst eine private Adresse in der Controller-Firmware oder ‑Hardware auf und bietet folgende Vorteile:
- Latenz, die mit dem Host bei der Auflösung einer privaten Adresse verbunden ist
- Strom sparen, indem der Host nicht aktiviert wird
LE_Set_RPA_Timeout
OCF: 0x15C
| Befehlsparameter | Größe | Zweck |
|---|---|---|
LE_local_IRK |
16 Oktett | Der lokale Geräte-IRK, der zum Generieren der zufälligen auflösbaren Adresse(n) verwendet wird. |
tRPA_min |
2 Oktette |
Das minimale Zeitlimit für die RPA-Generierung in Sekunden. Der Controller muss für alle Werbe-, Scan- und Verbindungsereignisse nach diesem Zeitlimit neue auflösbare Adressen generieren. Gültiger Bereich: 300–1.800 |
tRPA_max |
2 Oktette |
Die maximale Zeitüberschreitung für die RPA-Generierung in Sekunden. Der Controller muss vor Ablauf dieses Zeitlimits neue auflösbare Adressen für alle Werbe-, Scan- und Verbindungsereignisse generieren. Gültiger Bereich: tRPA_min–1800
|
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett |
Der Status des Befehls. Vorgeschlagene HCI-Statuswerte: 0x00 Erfolg 0x01 Unbekannter Befehl (falls nicht unterstützt) 0x12 Ungültige Befehlsparameter (falls Parameter außerhalb des angegebenen Bereichs liegen) |
LE_RPA_offload_Command
OCF: 0x155
| Befehlsparameter | Größe | Zweck |
|---|---|---|
RPA_offload_opcode |
1 Oktett |
0x1 – Kundenspezifische Funktion aktivieren 0x2 – IRK der Liste hinzufügen 0x3 – IRK aus der Liste entfernen 0x4 – IRK-Liste löschen 0x5 – IRK-Listeneintrag lesen |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Event_RPA_offload_opcode |
1 Oktett |
0x1 – Kundenspezifische Funktion aktivieren 0x2 – IRK der Liste hinzufügen 0x3 – IRK aus der Liste entfernen 0x4 – IRK-Liste löschen 0x5 – IRK-Listeneintrag lesen |
LE_RPA_offload: Enable_cust_specific_sub_Command
Untergeordneter OCF: 0x01
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
enable_customer_specific_feature_set |
1 Oktett |
0x01 – Ausgelagerte RPA-Funktion aktivieren 0x00 – Ausgelagerte RPA-Funktion deaktivieren |
Die RPA-Auslagerung muss vom Host basierend auf den Chipfunktionen aktiviert werden. Weitere Informationen finden Sie unter LE_Get_Vendor_Capabilities_Command.
Jeder Chip kann eine unterschiedliche max_irk_list_sz in der Firmware haben.
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Event_cust_specific_feature_opcode |
1 Oktett | 0x01 [Kundenspezifische Funktion aktivieren] |
LE_RPA_offload: Add_IRK_to_list_sub_Command
Untergeordnetes OCF: 0x02
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
LE_IRK |
16 Oktette | LE IRK (1. Byte LSB) |
Address_Type |
1 Oktett |
0: Öffentliche Adresse 1: Zufällige Adresse |
LE_Device_Address |
6 Oktette | Öffentliche oder zufällige Adresse, die dem IRK zugeordnet ist (1. Byte LSB) |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Event_cust_specific_feature_opcode |
1 Oktett | 0x02 [Add IRK to the list] |
LE_IrkList_AvailableSpaces |
1 Oktett | Verfügbare IRL-Listeneinträge nach dem aktuellen Vorgang |
LE_RPA_offload: Remove_IRK_to_list_sub_Command
Untergeordneter OCF: 0x03
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
Address_Type |
1 Oktett |
0: Öffentliche Adresse 1: Zufällige Adresse |
LE_Device_Address |
6 Oktette | Öffentliche oder zufällige Adresse, die mit dem IRK verknüpft ist |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Event_cust_specific_feature_opcode |
1 Oktett | 0x03 [Remove IRK from the list] |
LE_IrkList_AvailableSpaces |
1 Oktett | Verfügbare IRL-Listeneinträge nach dem aktuellen Vorgang |
LE_RPA_offload: Clear_IRK_list_sub_Command
Unter-OCF: 0x04
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
| Keine |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Event_cust_specific_feature_opcode |
1 Oktett | 0x04 [Clear IRK List] |
LE_IrkList_AvailableSpaces |
1 Oktett |
Verfügbare IRL-Listeneinträge nach dem aktuellen Vorgang [max_irk_list_sz]
|
LE_RPA_offload: Read_IRK_list_sub_Command
Unter-OCF: 0x05
| Unterbefehlsparameter | Größe | Zweck |
|---|---|---|
LE_read_IRK_list_entry-index |
1 Oktett | Index der IRK-Liste [0, max_irk_list_sz-1] |
Für diesen Befehl wird ein „Command Complete“-Ereignis generiert.
| Rückgabeparameter | Größe | Zweck |
|---|---|---|
Status |
1 Oktett | Status „Befehl abgeschlossen“ |
Event_cust_specific_feature_opcode |
1 Oktett | 0x05 [Read IRK List Entry] |
LE_Read_IRK_List_entry |
1 Oktett | Index des IRK, das der Host zurücklesen möchte (die maximale IRK-Listengröße beträgt 32). |
LE_IRK |
16 Oktette | IRK-Wert |
Address_Type |
1 Oktett |
0: Öffentliche Adresse 1: Zufällige Adresse |
LE_Device_Address |
6 Oktette | Öffentliche oder zufällige Adresse, die mit dem IRK verknüpft ist |
LE_Resolved_Private_Address |
6 Oktette | Aktuelle aufgelöste, auflösbare private Adresse dieses IRK |
Sniff Offload
Die Funktion „Sniff Offload“ lagert die Verwaltung des Sniff-Modus vom Bluetooth-Host-Stack auf den Bluetooth-Controller aus. Dadurch kann der Controller das Timing für den Eintritt in den und den Austritt aus dem Sniff-Modus verwalten und konfigurierbare Sniff- und Sniff-Unterbewertungsparameter anwenden, während der Host die Kontrolle über die Parameterauswahl basierend auf Änderungen der Bluetooth-Profilaktivität behält.
Sniff Offload-Status
In diesem Abschnitt werden die Status eines Bluetooth-Controllers in Bezug auf die Funktion „Sniff Offload“ definiert. Es wurden zwei globale Status definiert, um den Status eines Bluetooth-Controllers in Bezug auf die Aktivierung von Sniff Offload zu identifizieren. Es wurden zwei verbindungsspezifische Status definiert, um den Status einer BR/EDR-Verbindung zu identifizieren, wenn sich der Bluetooth-Controller im Status „Sniff Offload Enabled“ befindet.
Globale Status
Es wurden zwei globale Status definiert, um den Status eines Bluetooth-Controllers in Bezug auf die Aktivierung von Sniff Offload zu identifizieren.
Status „Sniff Offload Disabled“ (Sniff Offload deaktiviert)
Ein Bluetooth-Controller befindet sich standardmäßig im Status „Sniff Offload Disabled“. Es wird erwartet, dass der Bluetooth-Controller die Befehle HCI_Sniff_Mode, HCI_Exit_Sniff_Mode und HCI_Sniff_Subrating verarbeitet, die von einem Bluetooth-Host ausgegeben werden. Der Bluetooth-Controller muss die Ereignisse HCI_Mode_Change und HCI_Sniff_Subrating auch an einen Bluetooth-Host weiterleiten, wie durch die vom Bluetooth-Host festgelegte Ereignismaske festgelegt.
Status der Aktivierung von Sniff Offload
Ein Bluetooth-Controller befindet sich im Status „Sniff Offload Enabled“, nachdem er erfolgreich einen „WriteSniffOffloadEnable“-Befehl zur Aktivierung von Sniff Offload verarbeitet hat. In diesem Zustand wird erwartet, dass der Bluetooth-Controller die Ereignisse „HCI_Mode_Change“ und „HCI_Sniff_Subrating“ an einen Bluetooth-Host weiterleitet, wie durch eine logische AND-Funktion der vom Bluetooth-Host festgelegten Ereignismaske und der Event Suppression Flags (Flags zur Unterdrückung von Ereignissen) entschieden wird.
Verbindungsspezifische Status
Wenn sich ein Bluetooth-Controller im Status „Sniff Offload Enabled“ befindet, kann sich jeder aktive ACL in einem der beiden unten beschriebenen Status befinden.
Status „Ausstehend“ für Parameter
Eine ACL hat den Status „Ausstehende Parameter“, wenn sich der Bluetooth-Controller im Status „Sniff Offload Enabled“ befindet, aber der Bluetooth-Host für die aktuelle ACL noch nicht mindestens einmal den anbieterspezifischen Befehl „WriteSniffOffloadParameters“ ausgegeben hat.
Status „Kontrollgruppe: Gestartet“
Eine ACL befindet sich im Status „Control-Started“, wenn sich der Bluetooth-Controller im Status „Sniff Offload Enabled“ befindet und der Bluetooth-Host für die aktuelle ACL mindestens einmal den anbieterspezifischen Befehl „WriteSniffOffloadParameters“ ausgegeben hat.
WriteSniffOffloadEnable
OCF: 0x310
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Enable_Sniff_Offload |
1 Oktett | 0x00 : Deaktivieren 0x01 : Aktivieren |
Subrating_Max_Latency |
2 Oktette | Der Parameter „Maximale Latenz“ wird verwendet, um die maximale Sniff-Subrate zu berechnen, die das Remote-Gerät verwenden darf. Standard: T*sniff* Latency = N × 0,625 ms (1 Baseband-Slot) Bereich: 0x0002 bis 0xFFFE Zeitbereich: 1,25 ms bis 40,9 s |
Subrating_Min_Remote_Timeout |
2 Oktette | Mindest-Timeout für den Sniff-Modus (T*sniff_mode_timeout*), das das Remote-Gerät verwenden darf Standard: 0x0000 Timeout = N × 0,625 ms (1 Baseband-Slot) Bereich: 0x0000 bis 0xFFFE Zeitbereich: 0 s bis 40,9 s |
Subrating_Min_Local_Timeout |
2 Oktette | Mindest-Timeout für den Sniff-Modus (T*sniff_mode_timeout*), das das lokale Gerät verwenden darf. Standard: 0x0000 Timeout = N × 0,625 ms (1 Baseband-Slot) Bereich: 0x0000 bis 0xFFFE Zeitbereich: 0 s bis 40,9 s |
Suppress_Mode_Change_Event |
1 Oktett | 0x00 : Der Bluetooth-Controller meldet das HCI-Ereignis „Mode_Change“ an den Host, sofern die im Befehl „HCI_Set_Event_Mask“ festgelegte Konfiguration dies zulässt. 0x01 : Der Bluetooth-Controller meldet das HCI-Ereignis „Mode_Change“ nicht an den Host. |
Suppress_Sniff_Subrating_Event |
1 Oktett | 0x00 : Der Bluetooth-Controller muss das HCI-Sniff_Subrating-Ereignis an den Host melden, sofern die im Befehl „HCI_Set_Event_Mask“ festgelegte Konfiguration dies vorsieht. 0x01 : Der Bluetooth-Controller darf das HCI-Sniff_Subrating-Ereignis nicht an den Host melden. |
WriteSniffOffloadParameters
OCF: 0x311
| Befehlsparameter | Größe | Zweck |
|---|---|---|
Connection_Handle |
2 Oktette | 16-Bit-BR/EDR-ACL-Verbindungs-Handle. Bereich: 0x0000 bis 0x0EFF |
Sniff_Max_Interval |
2 Oktette | – Von Bluetooth SIG definierter Bereich, der normalerweise für den Eintritt in den Sniff-Modus verwendet wird. Bereich: 0x0002 bis 0xFFFE; nur gerade Werte sind gültig. Erforderlicher Bereich: 0x0006 bis 0x0540. Zeit = N × 0,625 ms. Zeitbereich: 1,25 ms bis 40,9 s. Sonderfälle: 0x0000: Wird verwendet, um den Sniff-Offload-Modus „Push-Active“ auszuwählen. 0x0001 : Wird verwendet, um den Sniff-Offload-Modus „Prefer-Active“ (Aktiv bevorzugen) auszuwählen. |
Sniff_Min_Interval |
2 Oktette | Bereich: 0x0002 bis 0xFFFE; nur gerade Werte sind gültig. Erforderlicher Bereich: 0x0006 bis 0x0540 Zeit = N × 0,625 ms Zeitbereich: 1,25 ms bis 40,9 s |
Sniff_Attempts |
2 Oktette | Anzahl der Baseband-Empfangsslots für den Sniff-Versuch. Länge = N × 1,25 ms Bereich: 0x0001 bis 0x7FFF Zeitraum: 1,25 ms bis 40,9 s Erforderlicher Bereich für Controller: 1 bis T*sniff* ÷ 2 |
Sniff_Timeout |
2 Oktette | Anzahl der Baseband-Empfangsslots für Sniff-Timeout. Länge = N × 1,25 ms Bereich: 0x0000 bis 0x7FFF Zeitraum: 0 ms bis 40,9 s Pflichtbereich für Controller: 0 bis 0x0028 |
Link_Inactivity_Timeout |
2 Oktette | Zeitlimit in Millisekunden. Der Link_Inactivity-Timer wird bei jeder HCI-ACL-Transaktion gestartet/zurückgesetzt. Nach Ablauf dieses Timers muss der Controller den Eintritt in den Sniff-Modus einleiten. |
Subrating_Max_Latency |
2 Oktette | Der Parameter „Maximale Latenz“ wird verwendet, um die maximale Sniff-Subrate zu berechnen, die das Remote-Gerät verwenden darf. Standard: T*sniff* Latency = N × 0,625 ms (1 Baseband-Slot) Bereich: 0x0002 bis 0xFFFE Zeitbereich: 1,25 ms bis 40,9 s |
Subrating_Min_Remote_Timeout |
2 Oktette | Mindest-Timeout für den Sniff-Modus (T*sniff_mode_timeout*), das das Remote-Gerät verwenden darf Standard: 0x0000 Timeout = N × 0,625 ms (1 Baseband-Slot) Bereich: 0x0000 bis 0xFFFE Zeitbereich: 0 s bis 40,9 s |
Subrating_Min_Local_Timeout |
2 Oktette | Mindest-Timeout für den Sniff-Modus (T*sniff_mode_timeout*), das das lokale Gerät verwenden darf. Standard: 0x0000 Timeout = N × 0,625 ms (1 Baseband-Slot) Bereich: 0x0000 bis 0xFFFE Zeitbereich: 0 s bis 40,9 s |
Allow_Exit_Sniff_On_Rx |
1 Oktett | Flagge zur Steuerung des Beendens des Sniff-Modus bei einer HCI-ACL-Transaktion in Empfangsrichtung. 0x00 : Sniffing bei Empfang nicht beenden. 0x01 : Beenden des Sniffing bei Empfang von HCI-ACL in Rx-Richtung. HCI-ACL ist als ACL-Paketübertragung vom Controller zum Host über HCI definiert. |
Allow_Exit_Sniff_On_Tx |
1 Oktett | Flag zum Steuern des Beendens des Sniff-Modus bei einer HCI-ACL-Transaktion in Senderichtung. 0x00 : Sniff-Vorgang bei Tx nicht beenden. 0x01 : Beenden des Sniffing bei der Übertragungsrichtung „Tx“. HCI-ACL ist als ACL-Paketübertragung vom Host zum Controller über HCI definiert. |