L'interface Host Controller Interface (HCI) est utilisée pour interagir avec un contrôleur Bluetooth.
Ce document fournit une liste des exigences HCI (Host Controller Interface) pour Bluetooth (BT) et Bluetooth Low Energy (BLE). L'objectif est que les fournisseurs de piles BT hôtes et de contrôleurs BT se conforment à ces exigences de plate-forme afin d'utiliser l'ensemble de fonctionnalités décrit ci-dessous.
Dans ce document, la spécification Bluetooth Core 5.2 est appelée "spécification". La spécification Bluetooth Core 5.2 est disponible sur le site Web de Bluetooth SIG, ainsi que d'autres documents adoptés.
Présentation générale de la conception
Fonctionnalités et configuration de la puce
En tant que plate-forme ouverte, Android dispose d'une matrice de versions logicielles, d'OEM, de fournisseurs, ainsi que de fonctionnalités de plate-forme et de chipset.
Pour gérer ce paysage varié et les migrations, une philosophie de conception permettant aux contrôleurs BT d'exposer leurs capacités (au-delà de la spécification Bluetooth Core 5.2 standard) est décrite dans ce document. La pile BT hôte peut ensuite utiliser ces capacités pour déterminer les fonctionnalités à activer.
Prendre en charge les normes ouvertes
L'un des objectifs d'Android est de prendre en charge les normes ouvertes après ratification dans une spécification Bluetooth. Si une fonctionnalité décrite ci-dessous devient disponible dans les méthodes HCI standards dans une future spécification Bluetooth, nous aurons tendance à faire de cette approche la méthode par défaut.
Fonctionnalités spécifiques aux fournisseurs
Commande spécifique au fournisseur : LE_Get_Vendor_Capabilities_Command
Champ de commande OpCode (OCF) : 0x153
| Paramètre de commande | Taille | Objectif |
|---|---|---|
| NA | Liste de paramètres de commande vide |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
max_advt_instances(Obsolète) |
1 octet |
Nombre d'instances d'annonces acceptées. Réservé après la version 0.98. Ce paramètre est obsolète dans la spécification des fonctionnalités Google v0.98 et versions ultérieures. Il est remplacé par la publicité étendue LE disponible dans la spécification BT version 5.0 et versions ultérieures. |
offloaded_resolution_of_private-address(Obsolète) |
1 octet |
Capacité de la puce BT du RPA. Si elle est prise en charge par une puce, elle doit être activée par l'hôte. 0 = Non compatible 1 = Compatible Réservé après la version 0.98. Ce paramètre est obsolète dans la spécification des fonctionnalités Google v0.98 et versions ultérieures. Il est remplacé par la fonctionnalité de confidentialité disponible dans la spécification BT version 4.2 et versions ultérieures. |
total_scan_results_storage |
2 octets | Espace de stockage pour les résultats d'analyse (en octets) |
max_irk_list_sz |
1 octet | Nombre d'entrées IRK acceptées dans le micrologiciel |
filtering_support |
1 octet |
Prise en charge du filtrage dans le contrôleur 0 = Non compatible 1 = Compatible |
max_filter |
1 octet | Nombre de filtres acceptés |
activity_energy_info_support |
1 octet |
Permet de générer des rapports sur les informations d'activité et d'énergie 0 = Non compatible 1 = Compatible |
version_supported |
2 octets |
Spécifie la version de la spécification des fonctionnalités Google acceptée byte[0] = numéro de version majeure byte[1] = numéro de version mineure v1.05 byte[0] = 0x01 byte[1] = 0x05 Fonctionnalités ajoutées dans les versions suivantes : v1.05 :
|
total_num_of_advt_tracked |
2 octets |
Nombre total d'annonceurs suivis à des fins de OnLost/OnFound
|
extended_scan_support |
1 octet | Prise en charge d'une fenêtre et d'un intervalle d'analyse étendus |
debug_logging_supported |
1 octet | Compatible avec la journalisation des informations de débogage binaires du contrôleur |
LE_address_generation_offloading_support(Obsolète) |
1 octet |
0 = Non compatible 1 = Compatible Réservé après la version 0.98. Ce paramètre est obsolète dans la spécification des fonctionnalités Google v0.98 et versions ultérieures. Il est remplacé par la fonctionnalité de confidentialité disponible dans la spécification BT version 4.2 et versions ultérieures. |
A2DP_source_offload_capability_mask |
4 octets |
Masques de bits pour les types de codecs compatibles Bit 0 : SBC Bit 1 : AAC Bit 2 : APTX Bit 3 : APTX HD Bit 4 : LDAC Les bits 5 à 31 sont réservés. |
bluetooth_quality_report_support |
1 octet |
Permet de signaler les événements liés à la qualité du Bluetooth 0 = Non compatible 1 = Compatible |
dynamic_audio_buffer_support |
4 octets |
Prise en charge du tampon audio dynamique dans le contrôleur Bluetooth Masques de bits pour les types de codecs compatibles Bit 0 : SBC Bit 1 : AAC Bit 2 : APTX Bit 3 : APTX HD Bit 4 : LDAC Les bits 5 à 31 sont réservés. |
a2dp_offload_v2_support |
1 octet |
Compatible avec les commandes de déchargement A2DP v2 dans le contrôleur Bluetooth (voir Démarrer le déchargement A2DP, Arrêter le déchargement A2DP) 0 = Non compatible 1 = Compatible |
iso_link_feedback_support |
1 octet |
Compatible avec l'événement ISO Link Feedback 0 = Non compatible 1 = Compatible |
sniff_offload_support |
1 octet |
Prend en charge les commandes de déchargement de reniflement dans un contrôleur Bluetooth 0 = Non compatible 1 = Compatible |
Résultats d'analyse par lot
L'un des objectifs de conception est d'améliorer la façon dont les notifications d'événement de réponse à l'analyse Bluetooth LE sont fournies à l'hôte, afin d'économiser de l'énergie dans l'hôte.
En réduisant la fréquence à laquelle le contrôleur avertit le processeur de l'application hôte d'analyser les résultats, le processeur de l'application hôte peut rester plus longtemps en veille/inactif. Cela réduit la consommation d'énergie de l'hôte. Le paramètre de retour total_scan_results_storage de LE_Get_Vendor_Capabilities_Command indique la capacité de la puce à stocker les résultats de l'analyse.
Cette fonctionnalité se concentre sur la gestion et la configuration de l'espace de stockage des résultats de l'analyse LE dans le contrôleur Bluetooth. Le stockage est utilisé pour regrouper temporairement les données publicitaires, ainsi que les données et métadonnées d'analyse reçues par le contrôleur, afin de les transmettre ultérieurement à l'hôte.
Le micrologiciel doit prendre en charge deux types de traitement par lot, qui peuvent être activés simultanément :
- Tronqué. Contient les éléments d'information suivants : {MAC, puissance d'émission, RSSI, code temporel}
- Complète. Contient les éléments d'information suivants : {MAC, puissance TX, RSSI, code temporel, données d'annonce, réponse à l'analyse}
LE_Batch_Scan_Command
OCF : 0x156
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Batch_Scan_opcode |
1 octet |
0x1 : activer une fonctionnalité spécifique au client 0x2 : définir les paramètres de stockage de l'analyse par lot 0x3 : définir les paramètres de l'analyse par lot 0x4 : lire les paramètres des résultats de l'analyse par lot |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande. L'activation de la fonctionnalité spécifique au client ne lance pas l'analyse.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Batch_Scan_opcode |
1 octet |
0x1 : activer une fonctionnalité spécifique au client 0x2 : définir les paramètres de stockage de l'analyse par lot 0x3 : définir les paramètres de l'analyse par lot 0x4 : lire les paramètres des résultats de l'analyse par lot |
LE_Batch_Scan_Command: Enable customer-specific feature
Sub OCF : 0x01
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
enable_customer_specific_feature_set |
1 octet |
0x01 : activer la fonctionnalité d'analyse par lot 0x00 : désactiver la fonctionnalité d'analyse par lot |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Batch_Scan_opcode |
1 octet |
0x1 : activer une fonctionnalité spécifique au client 0x2 : définir les paramètres de stockage de l'analyse par lot 0x3 : définir les paramètres de l'analyse par lot 0x4 : lire les paramètres des résultats de l'analyse par lot |
LE_Batch_Scan_Command: Set batch scan storage parameter subcommand
Sous-OCF : 0x02
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Batch_Scan_Full_Max |
1 octet |
Espace de stockage maximal (en %) alloué au style complet [Plage : 0-100] |
Batch_Scan_Truncated_Max |
1 octet |
Espace de stockage maximal (en %) alloué au style tronqué [Plage : 0-100] |
Batch_Scan_Notify_Threshold |
1 octet |
Configurez le niveau de notification (en %) pour chaque pool de stockage.
[Plage : 0-100] Si vous définissez la valeur sur 0, les notifications seront désactivées. Un événement HCI spécifique au fournisseur est généré (sous-événement de seuil de stockage dépassé) |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Batch_scan_opcode |
1 octet | 0x02 [Définir les paramètres d'analyse par lot] |
LE_Batch_Scan_Command : définir le sous-paramètre de l'analyse par lot
Sous-OCF : 0x03
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Batch_Scan_Mode |
1 octet |
0x00 – L'analyse par lot est désactivée 0x01 – Le mode tronqué est activé 0x02 – Le mode complet est activé 0x03 – Les modes tronqué et complet sont activés |
Duty_cycle_scan_window |
4 octets | Durée de l'analyse par lot (nombre de créneaux) |
Duty_cyle_scan_interval |
4 octets | Période d'intervalle d'analyse par lot (nombre de créneaux) |
own_address_type |
1 octet |
0x00 : adresse de l'appareil public 0x01 : adresse de l'appareil aléatoire |
Batch_scan_Discard_Rule |
1 octet |
0 : ignorer la publicité la plus ancienne 1 : ignorer la publicité avec le RSSI le plus faible |
Cette sous-commande lance l'analyse par lot, si elle est activée. Dans l'analyse tronquée, les résultats sont stockés sous forme tronquée, où la clé unique pour le style tronqué est {BD_ADDR, scan_interval}. Cela signifie qu'un seul BD_ADDR will sera enregistré pour chaque intervalle d'analyse. L'enregistrement à conserver pour le mode tronqué est le suivant : {BD_ADDR, puissance de transmission, RSSI, code temporel}
Lorsque le mode complet est activé, l'analyse active est utilisée et les réponses à l'analyse sont enregistrées. La clé unique du style "Complet" est {MAC, paquet publicitaire},
indépendamment de l'intervalle d'analyse. L'enregistrement à conserver pour le mode complet est {BD_ADDR, puissance de transmission, RSSI, code temporel, paquet publicitaire, réponse à l'analyse}. Dans le style "Complet", le même paquet AD, lorsqu'il est vu plusieurs fois à différents intervalles d'analyse, n'est enregistré qu'une seule fois. Toutefois, en mode tronqué, c'est la visibilité de BA_ADDR à différents intervalles d'analyse qui nous intéresse (une fois par intervalle d'analyse). Le RSSI est la valeur moyenne de tous les doublons d'une publicité unique au cours d'un intervalle d'analyse.
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Batch_scan_opcode |
1 octet | 0x03 [Définir les paramètres d'analyse par lot] |
LE_Batch_Scan_Command: Read batch scan results subcommand
Sub OCF : 0x04
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Batch_Scan_Data_read |
1 octet |
0x01 : données en mode tronqué 0x02 : données en mode complet |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande. Lorsque l'hôte émet cette commande, il est possible que tous les résultats du contrôleur ne tiennent pas dans un seul événement "Command Complete" (Commande terminée). L'hôte répète l'émission de cette commande jusqu'à ce que les résultats correspondants dans l'événement "Command Complete" indiquent 0 dans le nombre d'enregistrements, ce qui signifie que le contrôleur n'a plus d'enregistrements à communiquer à l'hôte. Chaque événement "Command Complete" peut contenir plusieurs enregistrements d'un seul type de données (complètes ou tronquées).
Les références temporelles du contrôleur et de l'hôte ne sont pas synchronisées. L'unité du code temporel est de 50 ms. La valeur du code temporel est basée sur le moment où l'hôte fournit Read_Batch_Scan_Results_Sub_cmd. Si l'heure d'arrivée d'une commande est T_c dans le micrologiciel, l'heure réelle à laquelle le code temporel a été enregistré dans le micrologiciel est T_fw. L'heure du rapport sera :
(T_c - T_fw). T_c et
T_fw sont dans le domaine temporel du micrologiciel. Cela permet à l'hôte de calculer depuis combien de temps l'événement s'est produit.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Batch_scan_opcode |
1 octet | 0x03 [Définir les paramètres d'analyse par lot] |
Batch_Scan_data_read |
1 octet | Identifie le format (tronqué ou complet) |
num_of_records |
1 octet | Nombre d'enregistrements de Batch_Scan_data_read |
format_of_data |
Variable |
Mode tronqué : Address[0]: 6 octets Address_Type[0]: 1 octet Tx_Pwr[0]: 1 octet RSSI[0] : 1 octet Timestamp[0]: 2 octets [plusieurs enregistrements ( num_of_records) au format ci-dessus]Mode complet : Address[0]: 6 octets Address_Type[0]: 1 octet Tx_Pwr[0]: 1 octet RSSI[0]: 1 octet Timestamp[0]: 2 octets Adv packet_len[0]: 1 octet Adv_packet[0]: Adv_packet_len octets Scan_data_resp_len[0]: 1 octet Scan_data_resp[0]: Scan_data_resp octets[plusieurs enregistrements au format ci-dessus ( num_of_records)]
|
Filtre de contenu des paquets publicitaires
Utilisez cette commande pour activer/désactiver/configurer le filtre de contenu des paquets publicitaires (APCF) dans le contrôleur. Les filtres APFC filtrent les rapports publicitaires dans le contrôleur, mais pas les annonces périodiques.
LE_APCF_Command
OCF : 0x157
| Paramètre de commande | Taille | Objectif |
|---|---|---|
APCF_opcode |
1 octet |
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 – Réservé pour une utilisation future 0xB0 ~ 0xDF – Réservé pour le fournisseur 0xE0 ~ 0xFE – Réservé pour une utilisation future 0xFF – APCF Read extended Features |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État du retour |
APCF_opcode |
1 octet |
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 – Réservé pour une utilisation future 0xB0 ~ 0xDF – Réservé pour le fournisseur 0xE0 ~ 0xFE – Réservé pour une utilisation future 0xFF – APCF Read extended Features |
LE_APCF_Command: Enable_sub_cmd
Sub OCF : 0x00
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_enable |
1 octet |
0x01 : activer la fonctionnalité APCF 0x00 : désactiver la fonctionnalité APCF |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x0 – APCF activé |
APCF_Enable |
1 octet | L'activation/désactivation est définie via APCF_enable. |
LE_APCF_Command: set_filtering_parameters_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer une spécification de filtre, ou d'effacer une liste de filtres pour le filtrage sur puce.
Sub OCF : 0x01
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 : ajouter 0x01 : supprimer 0x02 : effacer La suppression efface le filtre spécifique ainsi que les entrées de fonctionnalités associées dans les autres tables. "Effacer" efface tous les filtres et les entrées associées dans les autres tables. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_Feature_Selection |
2 octets |
Masques de bits pour les fonctionnalités sélectionnées : Bit 0 : défini pour activer le filtre d'adresse de diffusion Bit 1 : défini pour activer le filtre de modification des données de service Bit 2 : défini pour activer la vérification de l'UUID du service Bit 3 : défini pour activer la vérification de l'UUID de sollicitation du service Bit 4 : défini pour activer la vérification du nom local Bit 5 : défini pour activer la vérification des données du fabricant Bit 6 : défini pour activer la vérification des données de service Bit 7 : défini pour activer la vérification du service de découverte du transport Bit 8 : défini pour activer la vérification du type d'annonce |
APCF_List_Logic_Type |
2 octets |
Opération logique pour chaque sélection de caractéristiques (par position de bit) spécifiée dans APCF_Feature_Selection.
Valable uniquement lorsqu'une fonctionnalité est activée. Valeur de la position du bit : 0 : OR 1 : AND Si la logique "AND" est sélectionnée, un paquet ADV ne passera le filtre que s'il contient TOUTES les entrées de la liste. Si la logique "OU" est sélectionnée, un paquet ADV passera le filtre s'il contient l'une des entrées de la liste. |
APCF_Filter_Logic_Type |
1 octet |
0x00 : OR 0x01 : AND Remarque : Le type logique est N/A pour les trois premiers champs de APCF_Feature_Selection, qui est toujours une logique "AND". Elles ne s'appliquent qu'aux quatre champs (bit 3 à bit 6) de APCF_Feature_Selection.
|
rssi_high_thresh |
1 octet |
[en dBm] L'annonceur est considéré comme vu uniquement si le signal est supérieur au seuil haut du RSSI. Sinon, le micrologiciel doit se comporter comme s'il ne l'avait jamais vu. |
delivery_mode |
1 octet |
0x00 – immediate0x01 – on_found0x02 – batched
|
onfound_timeout |
2 octets |
Valide uniquement si delivery_mode est défini sur on_found.[en millisecondes] Temps pendant lequel le micrologiciel reste en veille et collecte des annonces supplémentaires avant de générer un rapport. |
onfound_timeout_cnt |
1 octet |
Valide uniquement si delivery_mode est défini sur on_found.[count] Si une publicité dans onFound reste dans le micrologiciel pendant
la durée onfound_timeout, elle collecte quelques
publicités et le nombre est vérifié. Si le nombre dépasse onfound_timeout_cnt, il est signalé OnFound immédiatement après.
|
rssi_low_thresh |
1 octet |
Valide uniquement si delivery_mode est défini sur on_found.[en dBm] Le paquet de l'annonceur est considéré comme non vu si le RSSI du paquet reçu n'est pas supérieur au seuil bas de RSSI. |
onlost_timeout |
2 octets |
Valide uniquement si delivery_mode est défini sur on_found.[en millisecondes] Si une publicité, après avoir été trouvée, n'est pas vue de manière continue pendant la période lost_timeout, elle sera immédiatement signalée comme perdue.
|
num_of_tracking_entries |
2 octets |
Valide uniquement si delivery_mode est défini sur on_found.[count] Nombre total d'annonceurs à suivre par filtre. |
Les valeurs RSSI doivent utiliser le complément à deux pour représenter les valeurs négatives.
L'hôte doit pouvoir configurer plusieurs filtres avec APCF_Application_Address_type défini sur 0x02 (pour toutes les adresses de diffuseur) afin de gérer différentes combinaisons de filtres.
Le filtrage, le traitement par lot et les rapports sont des concepts interdépendants. Chaque annonce et chaque réponse à l'analyse associée devront passer par tous les filtres, les uns après les autres. Les actions résultantes (delivery_mode) sont donc étroitement liées au filtrage. Les modes de diffusion sont les suivants : report_immediately, batch et onFound. La valeur OnLost est liée à OnFound dans le sens où elle suivra OnFound en cas de perte.
Ce flux de traitement décrit le modèle conceptuel :
Lorsqu'un frame d'annonce (ou de réponse à l'analyse) est reçu, il est appliqué à tous les filtres dans l'ordre séquentiel. Il est possible qu'une annonce puisse entraîner un signalement immédiat en fonction d'un filtre et un traitement par lot de la même annonce en raison d'une action de filtrage différente.
Les seuils de niveau RSSI (haut et bas) permettent de contrôler le moment où le frame est visible pour le traitement des filtres, même lorsqu'un paquet valide est reçu par le contrôleur. Si le mode de diffusion est défini sur "immédiat" ou "par lot", le RSSI d'un frame est pris en compte pour le traitement ultérieur du contrôleur. Différentes applications ont besoin de différents comportements de création de rapports et de traitement par lot. Cela permet à plusieurs applications de générer des rapports directs et/ou de regrouper des résultats dans le micrologiciel, simultanément. Par exemple, lorsqu'une analyse par lot est active à partir d'une application, puis qu'une analyse LE régulière est émise par une autre application. Avant l'émission d'une analyse par lot, le framework/l'application définit les filtres appropriés. Par la suite, lorsque la deuxième application émet une analyse régulière, le regroupement précédent se poursuit. Toutefois, en raison de l'analyse régulière, cela revient à ajouter conceptuellement un filtre nul (avec tous les filtres existants) à la commande d'analyse LE. Les paramètres de la commande d'analyse LE sont prioritaires lorsqu'ils sont actifs. Lorsque l'analyse LE régulière est désactivée, le contrôleur revient à une analyse par lot précédente, si elle existait.
Le mode de diffusion OnFound est basé sur les filtres configurés. Une combinaison qui déclenche la réussite de l'action d'un filtre est considérée comme l'entité à suivre pour onLost. L'événement correspondant est le sous-événement de suivi des annonces LE.
La transition OnFound/OnLost pour un filtre (si elle est activée) se présente comme suit :
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x01 – APCF Set Filtering Parameters |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées disponibles dans le tableau des filtres |
LE_APCF_Command: broadcast_address_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer une adresse d'annonceur, ou d'effacer la liste des adresses d'annonceurs pour le filtrage sur le chip.
Sous-OCF : 0x02
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 : Ajouter 0x01 : Supprimer 0x02 : Effacer Delete supprime l'adresse du diffuseur spécifiée dans le filtre spécifié. Clear effacera toutes les adresses de diffuseur dans le filtre spécifié. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_Broadcaster_Address |
6 octets | Adresse de l'appareil de 6 octets à ajouter ou à supprimer de la liste des adresses de diffusion |
APCF_Application_Address_type |
1 octet |
0x00 : Public 0x01 : Aléatoire 0x02 : NA (ignorer le type d'adresse) Pour filtrer les rapports publicitaires avec des types d'adresses d'identité (0x02, 0x03). Pour obtenir des rapports publicitaires avec les types d'adresses 0x02 et 0x03, définissez ce champ sur 0x02 : NA (ignorer le type d'adresse). |
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x02 : adresse du diffuseur APCF |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées libres dans la table des adresses de diffusion |
LE_APCF_Command: service_uuid_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer un UUID de service, ou d'effacer une liste d'UUID de service pour le filtrage sur puce.
Sous-OCF : 0x03
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 : ajouter 0x01 : supprimer 0x02 : effacer La suppression efface l'adresse UUID du service spécifié dans le filtre spécifié. Clear efface tous les UUID de service dans le filtre spécifié. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_UUID |
2,4,16 octets | UUID du service (16, 32 ou 128 bits) à ajouter ou à supprimer de la liste. |
APCF_UUID_MASK |
2,4,16 octets |
Masque UUID du service (16, 32 ou 128 bits) à ajouter à la liste.
Elle doit avoir la même longueur que APCF_UUID..
|
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x03 : UUID du service APCF |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées sans frais encore disponibles dans le tableau des UUID de service |
LE_APCF_Command: solicitation_uuid_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer un UUID de sollicitation, ou d'effacer une liste d'UUID de sollicitation pour le filtrage sur puce.
Sub OCF : 0x04
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 - Add 0x01 - Delete 0x02 - Clear Delete will delete the solicitation UUID address in the specified filter. Clear effacera tous les UUID de sollicitation dans le filtre spécifié. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_UUID |
2,4,16 octets | UUID de sollicitation (16, 32 ou 128 bits) à ajouter à la liste ou à en supprimer. |
APCF_UUID_MASK |
2,4,16 octets |
Masque UUID de sollicitation (16, 32 ou 128 bits) à ajouter à la liste. Elle doit avoir la même longueur que APCF_UUID.
|
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x04 : UUID de sollicitation APCF |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées sans frais encore disponibles dans le tableau des UUID de sollicitation |
LE_APCF_Command: local_name_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer une chaîne de nom local, ou d'effacer la liste des chaînes de nom local pour le filtrage sur puce.
Sous-OCF : 0x05
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 – Ajouter 0x01 – Supprimer 0x02 – Effacer Delete will delete the specified local name string in the specified filter. Clear effacera toutes les chaînes de noms locaux dans le filtre spécifié. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_LocName_Mandata_or_SerData |
Taille variable |
Chaîne de caractères pour le nom local. Remarques :
|
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x05 – Nom local de l'APCF |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées sans frais encore disponibles dans le tableau "Nom local" |
LE_APCF_Command: manf_data_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer une chaîne de données du fabricant, ou d'effacer la liste des chaînes de données du fabricant pour le filtrage sur puce.
Sous-OCF : 0x06
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 : ajouter 0x01 : supprimer 0x02 : effacer La suppression efface la chaîne de données du fabricant spécifiée dans le filtre spécifié. Clear will clear all the manufacturer data strings in the specified filter. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_LocName_Mandata_or_SerData |
Taille variable |
Chaîne de caractères pour les données du fabricant. Remarques :
|
APCF_ManData_Mask |
Taille variable |
Masque de données de fabrication à ajouter à la liste. Elle doit avoir la même longueur que APCF_LocName_or_ManData_or_SerData.
|
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x06 – Données du fabricant APCF |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées sans frais encore disponibles dans le tableau "Données du fabricant" |
LE_APCF_Command: service_data_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer une chaîne de données de service, ou d'effacer la liste des chaînes de données de service pour le filtrage sur le chip.
Sub-OCF : 0x07
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 : Ajouter 0x01 : Supprimer 0x02 : Effacer La suppression effacera la chaîne de données de service spécifiée dans le filtre spécifié. Clear efface toutes les chaînes de données de service dans le filtre spécifié. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_LocName_Mandata_or_SerData |
Taille variable |
Chaîne de caractères pour les données de service. Remarques :
|
APCF_LocName_Mandata_or_SerData_Mask |
Taille variable |
Masque de données de service à ajouter à la liste. Elle doit avoir la même longueur que APCF_LocName_or_ManData_or_SerData..
|
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x07 - Données de service APCF |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées sans frais encore disponibles pour le tableau "Données de service" |
LE_APCF_Command: ad_type_sub_cmd
Cette sous-commande permet d'ajouter ou de supprimer un type d'annonce, ou d'effacer une liste de types d'annonces pour le filtrage sur la puce. Utilisez read_extended_features_sub_cmd pour vérifier si cette commande est compatible ou non.
Lorsque APCF_AD_DATA_Length est défini sur 0, filtrez APCF_AD_TYPE sans
comparer les données AD et le masque de données AD.
Si la longueur des données du paquet ADV reçu dépasse AD_DATA_LENGTH, ne comparez que les AD_DATA_LENGTH premiers octets des données AD et ignorez les données restantes.
Sous-OCF : 0x09
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
APCF_Action |
1 octet |
0x00 : ajouter 0x01 : supprimer 0x02 : effacer L'option "Supprimer" supprime le type d'annonce spécifié dans le filtre indiqué. L'option "Effacer" efface tous les types d'annonces du filtre spécifié. |
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
APCF_AD_TYPE |
1 octet | Type d'annonce à ajouter ou à supprimer de la liste. Ignorer lorsque APCF_Action est défini sur 0x02 (Effacer) |
APCF_AD_DATA_Length |
1 octet |
0x00 : signifie que le contenu des données ne doit pas être filtré Ignorer lorsque APCF_Action est défini sur 0x02 (Effacer)
|
APCF_AD_DATA |
Taille variable |
Taille variable, basée sur APCF_AD_DATA_LengthIgnorer lorsque APCF_Action est défini sur 0x02 (Effacer) |
APCF_AD_DATA_MASK |
Taille variable |
Taille variable, basée sur APCF_AD_DATA_LengthIgnorer lorsque APCF_Action est défini sur 0x02 (Clair)La longueur doit être identique à celle de APCF_AD_DATA.
|
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0x09 : type d'annonce APCF |
APCF_Action |
1 octet | APCF_Action de la commande "Écho" |
APCF_AvailableSpaces |
1 octet | Nombre d'entrées sans frais encore disponibles dans le tableau "Type d'annonce" |
LE_APCF_Command: read_extended_features_sub_cmd
Cette sous-commande permet de lire les fonctionnalités APCF étendues.
Sous-OCF : 0xFF
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
| Non applicable | Paramètre de commande vide. |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
APCF_opcode |
1 octet | 0xFF : APCF_Read_Extended_Features |
APCF_extended_features |
2 octets |
Masques de bits pour les fonctionnalités étendues compatibles :
Valeur du bit
|
Commande d'informations sur l'activité et l'énergie du contrôleur
L'objectif de ces informations est de permettre aux fonctions de niveau supérieur du système hôte d'analyser l'ensemble des activités de tous les composants, y compris le contrôleur Bluetooth et son état macro, en parallèle avec ce qui se passe dans les applications et le framework. Pour ce faire, les informations suivantes sont requises de la pile BT et du contrôleur :
- Pile BT : indique l'état macro-opérationnel actuel du contrôleur.
- Micrologiciel : signaler les informations agrégées sur l'activité et l'énergie
États de macro de la pile hôte BT, tels qu'ils sont déterminés au niveau de l'utilisateur :
- Inactif : [page scan, LE advt, inquiry scan, LE scan]
- Scan : [paging/inquiry/trying to connect]
- Actif : [Lien ACL activé, lien SCO en cours, mode renifleur]
Les activités que le contrôleur suit tout au long de sa durée de vie sont le temps de transmission, le temps de réception, le temps d'inactivité et l'énergie totale consommée. Ils sont effacés lorsqu'ils sont lus par l'hôte.
LE_Get_Controller_Activity_Energy_Info
Il s'agit d'une commande spécifique au fournisseur.
OCF : 0x159
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
| NA | Paramètres de commande vides |
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
total_tx_time_ms |
4 octets | Temps total passé à effectuer des transactions |
total_rx_time_ms |
4 octets | Temps total passé à effectuer les exercices prescrits |
total_idle_time_ms |
4 octets | Temps total d'inactivité (états de faible consommation d'énergie hors sommeil) |
total_energy_used |
4 octets | Énergie totale utilisée [produit du courant (mA), de la tension (V) et du temps (ms)] |
Commande de paramètres d'analyse de l'ensemble étendu LE
Cette commande peut être utilisée pour activer une fenêtre et un intervalle d'analyse plus grands dans le contrôleur. Conformément à la spécification BT Core 5.2, une fenêtre et un intervalle d'analyse ont une limite supérieure de 10,24 secondes, ce qui entrave les intervalles d'analyse supérieurs à 10,24 secondes pour les applications.
Référence de base : spécification BT Core 5.2, page 2493 (commande LE Set Scan Parameters)
OCF : 0x15A
| Paramètre de commande | Taille | Objectif |
|---|---|---|
LE_Ex_Scan_Type |
1 octet |
0x00 : analyse passive. Aucun paquet SCAN_REQ ne doit être envoyé (par défaut).0x01 : analyse active. SCAN_REQ paquets peuvent être envoyés.
|
LE_Ex_Scan_Interval |
4 octets |
Défini comme l'intervalle de temps entre le début de la dernière analyse LE du contrôleur et le début de l'analyse LE suivante. Plage : de 0x0004 à 0x00FFFFFF Valeur par défaut : 0x0010 (10 ms) Temps = N * 0,625 ms Plage de temps : de 2,5 ms à 10 442,25 secondes |
LE_Ex_Scan_Window |
4 octets |
Durée de l'analyse LE. LE_Scan_Window doit être inférieur ou égal à LE_Scan_Interval.
Plage : 0x0004 à 0xFFFF Par défaut : 0x0010 (10 ms) Temps = N * 0,625 ms Plage de temps : 2,5 ms à 40,95 secondes |
Own_Address_Type |
1 octet |
0x00 : adresse publique de l'appareil (par défaut) 0x01 : adresse aléatoire de l'appareil |
LE_Ex_Scan_Filter_Policy |
0x00 : accepter tous les paquets publicitaires (par défaut). Les paquets publicitaires ciblés qui ne sont pas adressés à cet appareil doivent être ignorés. 0x01 : ignorer les paquets publicitaires des appareils ne figurant pas dans la liste blanche Liste uniquement. Les paquets publicitaires ciblés qui ne sont pas adressés à cet appareil doivent être ignorés. |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Commande "get controller debug info"
L'objectif de cet élément d'information est d'acquérir des informations de débogage du contrôleur par un hôte, sous forme binaire, pour le post-traitement et l'analyse. Cela permet de déboguer les problèmes sur le terrain et fournit aux ingénieurs une boîte à outils pour consigner les informations à analyser. Un contrôleur peut fournir les informations lorsqu'un hôte le demande via l'événement (sous-événement "Informations de débogage du contrôleur") ou de manière autonome lorsque le contrôleur le souhaite. Par exemple, vous pouvez l'utiliser pour signaler des informations sur l'état du micrologiciel, des informations sur le vidage sur erreur, des informations de journalisation, etc.
OCF : 0x15B
| Paramètre de commande | Taille | Objectif |
|---|---|---|
| N/A | Liste de paramètres de commande vide |
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Prise en charge du déchargement matériel A2DP
La fonctionnalité de déchargement A2DP prend en charge le déchargement du processus d'encodage audio A2DP vers un processeur audio associé au contrôleur BT. Le flux de données audio encodées passe directement du processeur audio au contrôleur BT sans l'intervention de l'hôte BT. L'hôte BT reste responsable de la configuration et du contrôle de la session A2DP. Deux versions des commandes sont disponibles. Les anciennes commandes avec les sous-codes OCF 0x01 à 0x02 ne sont compatibles qu'avec les codecs Open Source. Les versions avec Sub-OCF 0x03-0x04 sont indépendantes du codec configuré.
OCF : 0x15D
Démarrer le déchargement A2DP (ancienne méthode)
Sub OCF : 0x01
Utilisez cette commande à la fois pour configurer le processus de déchargement A2DP et pour démarrer le flux A2DP.
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Codec |
4 octets |
Spécifie le type de codec 0x01 : SBC 0x02 : AAC 0x04 : APTX 0x08 : APTX HD 0x10 : LDAC |
Max_Latency |
2 octets | Latence maximale autorisée (en ms). La valeur zéro désactive le vidage. |
SCMS-T_Enable |
2 octets |
Octet 0 : indicateur qui permet d'ajouter l'en-tête SCMS-T.
Octet 1 : valeur de l'en-tête SCMS-T, lorsqu'il est activé. |
Sampling_Frequency |
4 octets |
0x01 : 44 100 Hz 0x02 : 48 000 Hz 0x04 : 88 200 Hz 0x08 : 96 000 Hz |
Bits_Per_Sample |
1 octet |
0x01 : 16 bits par échantillon 0x02 : 24 bits par échantillon 0x04 : 32 bits par échantillon |
Channel_Mode |
1 octet |
0x01 : mono 0x02 : stéréo |
Encoded_Audio_Bitrate |
4 octets |
Débit audio encodé en bits par seconde. 0x00000000 : le débit audio n'est pas spécifié ni utilisé. 0x00000001 - 0x00FFFFFF - Débit audio encodé en bits par seconde. 0x01000000 – 0xFFFFFFFF : réservé. |
Connection_Handle |
2 octets | Handle de connexion de la connexion A2DP en cours de configuration |
L2CAP_Channel_ID |
2 octets | ID de canal L2CAP à utiliser pour cette connexion A2DP |
L2CAP_MTU_Size |
2 octets | Taille maximale de la MTU L2CAP contenant des paquets audio encodés |
Codec_Information |
32 octets |
Informations spécifiques au codec.
Codec SBC :
Reportez-vous aux éléments d'information spécifiques au codec SBC dans A2DP v1.3. Codec AAC :
Reportez-vous aux éléments d'information spécifiques au codec AAC dans A2DP v1.3 Codec LDAC :
Octets 0 à 3 : ID du fournisseur
Octets 4 et 5 : ID du codec
Octet 6 : index du débit binaire :
Octet 7 : mode canal LDAC Octets 8 à 31 : réservés Tous les autres codecs : Octets 0 à 31 : réservés |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Sub_Opcode |
1 octet | 0x01 : démarrer le déchargement A2DP |
Démarrer le déchargement A2DP
Sous-OCF : 0x03
Utilisez cette commande à la fois pour configurer le processus de déchargement A2DP et pour démarrer le flux A2DP.
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Connection Handle |
2 octets | Handle de la connexion HCI active |
L2CAP_Channel_ID |
2 octets | Identifiant du canal L2CAP ouvert pour le streaming A2DP |
Data_Path_Direction |
1 octet |
0x00 : sortie (source/fusion AVDTP) 0x01 : entrée (récepteur/séparation AVDTP) |
Peer_MTU |
2 octets | Taille maximale des paquets L2CAP, négociée avec le pair. |
CP_Enable_SCMS_T |
1 octet |
0x00 : désactiver l'en-tête de protection du contenu SCMS-T 0x01 : activer l'en-tête de protection du contenu SCMS-T |
CP_Header_SCMS_T |
1 octet |
Lorsque l'en-tête de protection du contenu SCMS-T est activé (CP_SCMS_T_Enable défini sur 0x01), il définit la valeur de l'en-tête qui précède le contenu audio (voir A2DP, section 3.2.1-2) tel que défini par la section 6.3.2 de Bluetooth Assigned Numbers.Ignoré lorsque la protection du contenu SCMS-T n'est pas activée. |
Vendor_Specific_Parameters_Length |
1 octet |
Longueur des paramètres spécifiques au fournisseur, comprise entre 0 et 128. La valeur 0 est utilisée lorsqu'aucun paramètre supplémentaire n'est fourni. |
Vendor_Specific_Parameters |
0 à 128 octets |
Paramètres spécifiques au fournisseur fournis par le HAL Bluetooth Audio,
CodecParameters.vendorSpecificParameters[].
|
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Sub_Opcode |
1 octet | 0x03 : démarrer le déchargement A2DP |
Arrêter le déchargement A2DP (ancienne méthode)
Sous-OCF : 0x02
Cette commande permet d'arrêter le flux de déchargement A2DP.
| Paramètre de commande | Taille | Objectif |
|---|---|---|
| N/A | Liste de paramètres de commande vide. |
Aucun paramètre n'est défini pour cette commande.
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Sub_Opcode |
1 octet | 0x02 : arrêter le déchargement A2DP |
Arrêter le déchargement A2DP
Sub OCF : 0x04
Cette commande permet d'arrêter le flux de déchargement A2DP.
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Connection Handle |
2 octets | Handle de la connexion HCI active |
L2CAP_Channel_ID |
2 octets | Identifiant du canal L2CAP ouvert pour le streaming A2DP |
Data_Path_Direction |
1 octet |
0x00 : sortie (source/fusion AVDTP) 0x01 : entrée (récepteur/séparation AVDTP) |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Sub_Opcode |
1 octet | 0x04 : arrêter le déchargement A2DP |
Commande de rapport sur la qualité du Bluetooth
La fonctionnalité de commande BT Quality Report lance le mécanisme dans le contrôleur Bluetooth pour signaler les événements de qualité Bluetooth à l'hôte. Vous pouvez activer quatre options :
- Mode de surveillance de la qualité : le contrôleur envoie régulièrement un sous-événement BQR lié à la qualité de la liaison à l'hôte.
- LSTO imminent : si aucun paquet n'est reçu de l'appareil BT connecté pendant plus de la moitié de la valeur du délai de supervision de la liaison (LSTO), le contrôleur signale un événement LSTO imminent à l'hôte.
- A2DP Audio Choppy : lorsque le contrôleur détecte des facteurs qui provoquent un son saccadé, il signale un événement A2DP Audio Choppy à l'hôte.
- (e)SCO Voice Choppy : lorsque le contrôleur détecte des facteurs qui provoquent une voix hachée, il signale un événement (e)SCO Voice Choppy à l'hôte.
- Inflammation de la racine : cet événement est envoyé par le contrôleur à la pile lorsque la HAL ou le contrôleur rencontrent une erreur fatale et doivent redémarrer le Bluetooth.
- Trace des messages LMP/LL : le contrôleur envoie au hôte le message LMP/LL de prise de contact avec l'appareil distant.
- Trace de planification Bluetooth multiprofil/coexistence : le contrôleur envoie au hôte ses informations de planification sur la gestion de plusieurs profils Bluetooth et de la coexistence sans fil dans la bande de fréquences 2,4 GHz.
- Mécanisme d'informations de débogage du contrôleur : lorsqu'il est activé, le contrôleur peut signaler de manière autonome des informations de journalisation de débogage à l'hôte via le sous-événement d'informations de débogage du contrôleur.
- LE Audio haché : lorsque le contrôleur détecte des facteurs qui provoquent un son haché, il signale un événement LE Audio haché à l'hôte.
-
Mode "Statistiques RF avancées" : le contrôleur transmet au système hôte des informations sur ses statistiques RF, ce qui permet deux cas d'utilisation :
- Rapports périodiques
- Déclencheurs d'événements (déclencheur d'événement de début/fin de flux et de qualité de la connexion).
- Le mécanisme de surveillance de l'état du contrôleur fournit à l'hôte des informations sur l'état via deux types d'événements : les rapports périodiques et les rapports déclenchés par des événements.
- BQR_Report_Action de la commande de rapport sur la qualité Bluetooth : l'hôte peut utiliser cette commande HCI pour obtenir une requête unique pour le mode de surveillance de la qualité, le mode de surveillance de l'énergie ou un mode de statistiques RF avancées.
OCF : 0x15E
| Paramètre de commande | Taille | Objectif |
|---|---|---|
BQR_Report_Action |
1 octet |
Action permettant d'ajouter / supprimer le reporting d'un ou plusieurs événements de qualité définis dans le paramètre BQR_Quality_Event_Mask, ou d'effacer tous les événements.
0x00 : ajouter
La suppression effacera les rapports sur les événements de qualité spécifiques. |
BQR_Quality_Event_Mask |
4 octets |
Masques de bits pour les rapports sur les événements de qualité sélectionnés.
Bit 0 : défini pour activer le mode de surveillance de la qualité. |
BQR_Minimum_Report_Interval |
2 octets |
Définissez l'intervalle de temps minimal pour le signalement des événements de qualité pour le ou les événements de qualité sélectionnés. Le micrologiciel du contrôleur ne doit pas signaler le prochain événement dans l'intervalle de temps défini. Le paramètre d'intervalle doit être respectif et dédié aux événements de qualité qui sont ajoutés.
Unité : ms |
BQR_Vendor_Specific_Quality_Event_Mask |
4 octets |
Masques de bits pour le signalement des événements qualité spécifiques au fournisseur sélectionné. Ce paramètre n'est valide que lorsque le bit 15 de BQR_Quality_Event_Mask est défini.
Bits 0 à 31 : réservés. |
BQR_Vendor_Specific_Trace_Mask |
4 octets |
Masques de bits pour le signalement de trace spécifique au fournisseur sélectionné. Ce paramètre n'est valide que lorsque le bit 31 de BQR_Quality_Event_Mask est défini.
Bits 0 à 31 : réservés. |
Report_interval_multiple |
4 octets |
Multiplicateur pour BQR_Minimum_Report_Interval. Lorsque cette valeur est supérieure ou égale à 1, l'intervalle de rapport BQR suit le format . Intervalle de rapport BQR = Intervalle de rapport BQR minimal x Multiple de l'intervalle de rapport. Le micrologiciel du contrôleur ne doit pas signaler le prochain événement dans l'intervalle de temps défini. Le paramètre d'intervalle est spécifiquement dédié aux événements de qualité ajoutés.
Unité : ms BQR_Report_Interval est supérieur à la capacité du contrôleur, celui-ci doit renvoyer la durée BQR_Report_Interval maximale à la fin de la commande.
|
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Current_Quality_Event_Mask |
4 octets |
Indique le paramètre actuel du masque de bits. Bit 0 : le mode de surveillance de la qualité est activé. Bit 1 : les rapports sur les événements de type "approche de la fin de la période de disponibilité" sont activés. Bit 2 : le signalement des événements audio saccadés A2DP est activé. Bit 3 : le signalement des événements de voix saccadée eSCO est activé. Bit 4 : la création de rapports sur les événements d'inflammation des racines est activée. Bit 5 : le mode de surveillance de l'énergie est activé. Bit 6 : les rapports sur les événements de saccades audio LE sont activés. Bit 7 : Événement d'échec de la connexion. Bit 8 : défini pour activer le déclencheur d'événement du mode Statistiques RF avancées. Bit 9 : défini pour activer le rapport périodique des statistiques RF avancées. Bit 10 : Définissez le déclencheur d'événement du mécanisme de surveillance de l'état du contrôleur sur "activé". Bit 11 : défini sur "enabled" (activé) pour que le mécanisme de surveillance de l'état du contrôleur génère des rapports périodiquement. Bits 12 à 14 : réservés. Bit 15 : le signalement d'événements de qualité spécifiques au fournisseur est activé. Bit 16 : la trace des messages LMP/LL est activée. Bit 17 : la trace de planification Bluetooth multilink/coex est activée. Bit 18 : le mécanisme d'informations de débogage du contrôleur est activé. Bit 19 : réservé aux informations de débogage du déchargement Bit 20 : déclencheur d'événement de vidage de l'historique UART Bit 21 à 30 : réservés. Bit 31 : la trace spécifique au fournisseur est activée. |
Current_Vendor_Specific_Quality_Event_Mask |
4 octets | Indique le paramètre actuel du masque de bits. |
Current_Vendor_Specific_Trace_Mask |
4 octets | Indique le paramètre actuel du masque de bits. |
BQR_Report_interval |
4 octets | Indique le paramètre actuel du masque de bits. |
Current_Vendor_Specific_Trace_Mask |
4 octets |
Paramètre BQR_Report_interval. Elle doit correspondre à la valeur minimale entre BQR_Minimum_Report_Interval * Report_interval_multiple et l'intervalle maximal accepté par le contrôleur. |
Commande de tampon audio dynamique
La mémoire tampon audio dynamique réduit les problèmes audio en modifiant la taille de la mémoire tampon audio dans le contrôleur Bluetooth en fonction de différents scénarios.
OCF : 0x15F
Obtenir la fonctionnalité de temps de mise en mémoire tampon audio
Sub OCF : 0x01
Utilisez cette commande pour obtenir la capacité de durée du tampon audio à partir du contrôleur Bluetooth.
| Paramètre de commande | Taille | Objectif |
|---|---|---|
| N/A | Liste de paramètres de commande vide |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Dynamic_Audio_Buffer_opcode |
1 octet | 0x01 – Obtenir la durée du tampon audio |
Audio_Codec_Type_Supported |
4 octets |
Masques de bits pour les types de codecs compatibles Bit 0 : SBC Bit 1 : AAC Bit 2 : APTX Bit 3 : APTX HD Bit 4 : LDAC Les bits 5 à 31 sont réservés. |
Audio_Codec_Buffer_Default_Time_For_Bit_0 |
2 octets |
Temps tampon par défaut du type de codec Bit 0 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 0 n'est pas pris en charge. Unité : ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 |
2 octets |
Durée maximale de la mémoire tampon du type de codec Bit 0 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 0 n'est pas pris en charge. Unité : ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 |
2 octets |
Temps tampon minimal du type de codec Bit 0 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 0 n'est pas pris en charge. Unité : ms |
Audio_Codec_Buffer_Default_Time_For_Bit_1 |
2 octets |
Temps tampon par défaut du type de codec Bit 1 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 1 n'est pas accepté. Unité : ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 |
2 octets |
Durée maximale de la mémoire tampon du type de codec Bit 1 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 1 n'est pas accepté. Unité : ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 |
2 octets |
Temps tampon minimal du type de codec Bit 1 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 1 n'est pas accepté. Unité : ms |
| ...... | ...... | ...... |
Audio_Codec_Buffer_Default_Time_For_Bit_31 |
2 octets |
Temps tampon par défaut du type de codec Bit 31 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 31 n'est pas accepté. Unité : ms |
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 |
2 octets |
Durée maximale de la mémoire tampon du type de codec Bit 31 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 31 n'est pas accepté. Unité : ms |
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 |
2 octets |
Temps tampon minimal du type de codec Bit 31 spécifié dans Audio_Codec_Type_Supported. Cette valeur doit être égale à 0 si le type de codec Bit 31 n'est pas accepté. Unité : ms |
Définir la durée du tampon audio
Sous-OCF : 0x02
Utilisez cette commande pour définir le temps de mise en mémoire tampon audio sur la manette Bluetooth.
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Audio_Codec_Buffer_Time |
2 octets |
Temps de mémoire tampon audio demandé pour le codec utilisé actuellement. Unité : ms |
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Dynamic_Audio_Buffer_opcode |
1 octet | 0x02 : définir la durée du tampon audio |
Audio_Codec_Buffer_Time |
2 octets |
Temps de mise en mémoire tampon audio actuel dans le contrôleur Bluetooth. Unité : ms |
Événement HCI (propre au fournisseur)
Dans certains cas, des événements HCI spécifiques au fournisseur sont requis. Reportez-vous à la figure 5.4 à la page 1897 de la spécification BT Core 5.2. Le paramètre d'événement 0 contiendra toujours le premier code de sous-événement, sur la base duquel le reste de l'événement HCI est décodé.
| Paramètre d'événement | Taille | Objectif |
|---|---|---|
HCI_vendor_specific_event_code |
1 octet | 0xFF |
sub_event_code |
1 octet | Un code de sous-événement aura une taille d'un octet, l'octet suivant immédiatement la longueur du paramètre dans le paquet d'événement HCI. |
Sous-événement "Seuil de stockage dépassé"
Cet événement indique que le seuil de stockage a été dépassé.
Code de sous-événement = 0x54
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
| Aucun |
Sous-événement de changement d'état de la publicité multiple LE
Cet événement indique qu'une instance publicitaire a changé d'état. Pour le moment, cet événement n'est utilisé que pour indiquer quelle instance publicitaire a été arrêtée à la suite d'une connexion.
Code du sous-événement = 0x55
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Advertising_instance |
1 octet |
Identifie l'instance publicitaire spécifique. Les valeurs valides sont comprises entre 0 et max_advt_instances-1.
|
State_Change_Reason |
1 octet | 0x00 : Connexion reçue |
Connection_handle |
2 octets |
Identifie la connexion qui a entraîné la désactivation de l'instance advt (0xFFFF si elle n'est pas valide)
|
Sous-événement de suivi des annonces LE
Cet événement indique quand un annonceur est trouvé ou perdu.
Code de sous-événement = 0x56
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
APCF_Filter_Index |
1 octet | Index du filtre (0, max_filter-1) |
Advertiser_State |
1 octet |
0x00 : Annonceur trouvé 0x01 : Annonceur perdu |
Advt_Info_Present |
1 octet |
0x00 : Informations sur l'annonceur (Advt_Info) présentes0x01 : Informations sur l'annonceur ( Advt_Info) absentes
|
Advertiser_Address |
6 octets | Adresse publique ou aléatoire |
Advertiser_Address_Type |
1 octet |
0x00 : adresse publique 0x01 : adresse aléatoire |
Advt_Info |
Tx_Pwr[0] : 1 octetRSSI[0] : 1 octetTimestamp[0] : 2 octetsAdv packet_len[0] : 1 octetAdv_packet[0] : Adv_packet_len octetsScan_data_resp_len[0] : 1 octetScan_data_resp[0] : Scan_data_resp octets
|
Sous-événement "Informations de débogage de la manette"
Cet événement est utilisé par un contrôleur pour fournir des informations de débogage binaires à un hôte.
Code de sous-événement = 0x57
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
debug_block_byte_offset_start |
2 octets | Déboguer le décalage d'octet du bloc depuis le début |
last_block |
1 octet |
0x00 : Plus de données de débogage présentes 0x01 : Dernier bloc binaire ; plus de données de débogage |
cur_pay_load_sz |
2 octets | Taille des blocs binaires dans un événement actuel |
Debug_Data |
Variable | Données de débogage de cur_payload_sz |
Sous-événement "Rapport sur la qualité du Bluetooth"
Cet événement indique l'un des éléments suivants : un événement lié à la qualité du Bluetooth s'est produit, le contrôleur a importé la trace du message LMP/LL et la trace de planification Bluetooth Multi-link/Coex, ou le contrôleur a dumpé les données d'informations de débogage.
Code de sous-événement = 0x58 [ID du rapport de qualité = 0x01 ~ 0x04, événement lié à la qualité de la connexion]
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Quality_Report_Id |
1 octet |
0x01 : Rapports sur la qualité en mode Moniteur. 0x02 : LSTO à venir. 0x03 : son A2DP haché. 0x04 : voix eSCO hachée. 0x05 ~ 0x06 : réservé. 0x07 : son LE saccadé. 0x08 : Échec de la connexion. 0x09 ~ 0xFF : réservé. |
Packet_Types |
1 octet |
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 : réservé 0x51 : paquet ISO 0x52 : 1M PHY 0x53 : 2M PHY 0x54 : Codec PHY S=2 0x55 : Codec PHY S=8 0x56 à 0xFF : réservé |
Connection_Handle |
2 octets | Handle de connexion ACL/(e)SCO/ISO. |
Connection_Role |
1 octet |
Rôle de l'utilisateur pour la connexion. 0x00 : Central 0x01 : Périphérique 0x02 ~ 0xFF : Réservé. |
TX_Power_Level |
1 octet |
Niveau de puissance de transmission actuel pour le Connection_Handle spécifié.
Cette valeur doit être identique à celle du contrôleur répondant à la commande HCI_Read_Transmit_Power_Level HCI. |
RSSI |
1 octet |
[en dBm]
Valeur de l'indication de l'intensité du signal reçu (RSSI) pour le Connection_Handle spécifié. |
SNR |
1 octet |
[en dB]
Valeur du rapport signal/bruit (SNR) pour le Connection_Handle spécifié. |
Unused_AFH_Channel_Count |
1 octet |
Indique le nombre de canaux inutilisés dans AFH_channel_map. 0x4F ~ 0xFF : réservé. |
AFH_Select_Unideal_Channel_Count |
1 octet |
Indique le nombre de canaux qui sont perturbés et de mauvaise qualité, mais qui sont toujours sélectionnés pour l'AFH. Le nombre minimal de canaux autorisé par la spécification Bluetooth est de 20. Ainsi, même si les 79 canaux sont perturbés et de mauvaise qualité, le contrôleur doit quand même choisir au moins 20 canaux pour l'AFH. |
LSTO |
2 octets |
Paramètre actuel du délai avant expiration de la supervision des liens. Time = N * 0.625 ms Time Range: 0.625 ms to 40.9 s |
Connection_Piconet_Clock |
4 octets |
Horloge Piconet pour le Connection_Handle spécifié. Cette valeur doit être identique à celle du contrôleur répondant à la commande HCI_Read_Clock HCI avec le paramètre "Which_Clock" défini sur 0x01 (horloge Piconet). Unité : N * 0,3125 ms (1 horloge Bluetooth) |
Retransmission_Count |
4 octets |
Nombre de retransmissions depuis le dernier événement. Ce nombre doit être réinitialisé après avoir été signalé à l'hôte. |
No_RX_Count |
4 octets |
Aucun nombre de RX depuis le dernier événement. Le nombre augmente lorsqu'aucun paquet n'est reçu à l'emplacement de créneau horaire prévu ou que le paquet reçu est corrompu. Ce nombre doit être réinitialisé après avoir été signalé à l'hôte. |
NAK_Count |
4 octets |
Nombre de NAK (accusés de réception négatifs) depuis le dernier événement. Ce nombre doit être réinitialisé après avoir été signalé à l'hôte. |
Last_TX_ACK_Timestamp |
4 octets |
Code temporel du dernier ACK TX. Elle est basée sur l'horloge Bluetooth du point central du piconet (CLK). Unité : N * 0,3125 ms (1 horloge Bluetooth) |
Flow_Off_Count |
4 octets |
Nombre de fois où le contrôleur a reçu un signal Flow-off (STOP) depuis le dernier événement. Ce nombre doit être réinitialisé après avoir été signalé à l'hôte. |
Last_Flow_On_Timestamp |
4 octets |
Code temporel de la dernière transmission (GO). Elle est basée sur l'horloge Bluetooth du point central du piconet (CLK). Unité : N * 0,3125 ms (1 horloge Bluetooth) |
Buffer_Overflow_Bytes |
4 octets |
[en octets]
Nombre de dépassements de mémoire tampon depuis le dernier événement. |
Buffer_Underflow_Bytes |
4 octets |
[en octets]
Nombre de sous-dépassements de mémoire tampon depuis le dernier événement. |
bdaddr |
6 octets | Adresse de l'appareil distant |
cal_failed_item_count |
1 octet | Nombre d'éléments pour lesquels le calibrage a échoué |
TX_Total_Packets |
4 octets | Nombre de paquets envoyés. |
TX_UnAcked_Packets |
4 octets |
Nombre de paquets qui ne reçoivent pas d'accusé de réception. Ce nombre est réinitialisé après le signalement à l'organisateur. |
TX_Flushed_Packets |
4 octets |
Nombre de paquets non envoyés par son point de vidage. Ce nombre est réinitialisé après le signalement à l'organisateur. |
TX_Last_Subevent_Packets |
4 octets |
Nombre de paquets que la couche Liaison transmet dans une PDU de données CIS lors du dernier sous-événement d'un événement CIS. Ce nombre est réinitialisé après le signalement à l'organisateur. La valeur est zéro si aucun lien valide n'est disponible. |
CRC_Error_Packets |
4 octets |
Nombre de paquets reçus avec une erreur CRC depuis le dernier événement. Ce nombre est réinitialisé après le signalement à l'organisateur. |
RX_Duplicate_Packets |
4 octets |
Nombre de paquets en double (retransmission) reçus depuis le dernier événement. Ce nombre est réinitialisé après le signalement à l'organisateur. |
RX_Unreceived_Packets |
4 octets |
Le nombre de paquets non reçus est identique au paramètre de la commande LE READ ISO Link Quality (voir la spécification Bluetooth Core version 5.4). Les flux associés sont CIS et BIS. Lorsque cette valeur est incrémentée, la couche Liaison ne reçoit pas de charge utile spécifique à son point de vidage (sur un CIS) ni à la fin de l'événement auquel elle est associée (sur un BIS ; voir la section 4.4.6.6, partie B, volume 6 de la spécification Bluetooth Core version 5.4). |
Coex_Info_Mask |
2 octets |
Bit 0 – CoexInvolvement : défini pour indiquer que des activités de coexistence sont probablement impliquées lorsque ce rapport est généré (par exemple, A2DP Chops et Approaching LSTO). Bit 1 : WL 2G Radio Active (Radio WLAN 2G active) : défini pour indiquer que la radio WLAN 2G est active. Bit 2 – WL 2G Connected : défini pour indiquer que la radio WLAN 2G est active et connectée. Bit 3 : radio WLAN 5G/6G active. Indique que la radio WLAN 5G/6G est active. Bits 4 à 15 : réservés |
| Paramètre spécifique au fournisseur | (longueur totale du paramètre : à déterminer) * octets | Pour que le fournisseur de contrôleur obtienne des paramètres plus spécifiques. |
Code du sous-événement = 0x58 [ID du rapport sur la qualité = 0x05, événement d'inflammation de la racine]
Cet événement indique que le HAL Bluetooth ou le contrôleur ont rencontré une erreur fatale et que la pile Bluetooth doit enregistrer cette situation et redémarrer. Le contrôleur doit envoyer un Root_Inflammation_Event à la pile Bluetooth avant d'envoyer le premier fragment des événements d'informations de débogage dans tous les cas.
Le paramètre Error_Code contient un code d'erreur signalé par HAL/Controller, ou 0 s'il s'agit d'une erreur spécifique au fournisseur du chipset. Vendor_Specific_Error_Code contient un code d'erreur spécifique au fournisseur du chipset provenant de HAL/Controller. Il doit être défini sur 0 si le paramètre Error_Code n'est pas défini sur 0. Les paramètres Error_Code et Vendor_Specific_Error_Code ne doivent pas être définis sur 0 en même temps.
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Quality_Report_Id |
1 octet |
0x00 ~ 0x04 : réservé. 0x05 : Inflammation des racines. 0x06 ~ 0xFF : réservé. |
Error_Code |
1 octet |
0x00 : le code d'erreur spécifique au fournisseur du chipset est inclus. 0x01 ~ 0xFF : une défaillance du contrôleur s'est produite. Pour obtenir la liste des codes d'erreur et de leurs descriptions, consultez la spécification Bluetooth [Vol 2], partie D, Codes d'erreur. |
Vendor_Specific_Error_Code |
1 octet |
0x00 : aucun code d'erreur spécifique au fournisseur du chipset n'est inclus. 0x01 ~ 0xFF : code d'erreur spécifique au fournisseur du chipset. |
| Paramètre spécifique au fournisseur | (Longueur totale du paramètre – 4) * octets | Pour que le fournisseur de contrôleur obtienne des paramètres plus spécifiques. |
Code de sous-événement = 0x58 [Quality_Report_Id = 0x06, événement du moniteur d'énergie]
Cet événement fournit un instantané de la consommation d'énergie et des états opérationnels du contrôleur Bluetooth sur une période spécifique. Cet événement aide les développeurs et les ingénieurs à analyser la façon dont le contrôleur gère l'alimentation, à identifier les activités qui consomment le plus d'énergie et à résoudre les problèmes liés à l'alimentation.
Les paramètres du rapport suivent des métriques clés, y compris :
- Consommation de courant moyenne : courant global utilisé par le contrôleur.
- Temps passé dans différents états : temps total (en millisecondes) passé par le contrôleur dans un état inactif (veille/basse consommation) par rapport à un état actif (connexion, transmission ou réception de données).
- Nombre de transitions d'état : nombre de fois où le contrôleur passe de l'état inactif à l'état actif.
- Temps passé dans des états radio spécifiques : métriques distinctes pour le temps passé en transmission (Tx) et en réception (Rx) pour les liens BR/EDR (Bluetooth Classic) et LE (Bluetooth à basse consommation).
- Niveaux de puissance de transmission moyens : puissance moyenne (en dBm) utilisée pour les transmissions sur les liaisons BR/EDR et LE.
- Activité détaillée de la chaîne : rapports sur le temps passé avec les chaînes de transmission ou de réception actives, en distinguant les opérations à une chaîne et à deux chaînes, ainsi que les amplificateurs de puissance internes (iPA) et externes (ePA).
- Temps d'analyse de l'activité : temps pendant lequel le contrôleur recherche activement des appareils BR/EDR et LE.
En examinant ces paramètres, les ingénieurs peuvent obtenir des informations sur l'efficacité énergétique du contrôleur et optimiser ses performances.
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Quality_Report_Id |
1 octet | 0x06 : Surveillance de la consommation d'énergie |
Average_Current_Consumption |
2 octets | [en mA] Consommation de courant moyenne de toutes les activités consommées par le contrôleur |
Idle_Total_Time (sommeil) |
4 octets | [en ms] Temps total passé en état d'inactivité (états de faible consommation d'énergie, veille). |
Idle_Sate_Enter_Count |
4 octets | Indique le nombre de fois où le contrôleur passe à l'état inactif. |
Active_Total_Time |
4 octets | [en ms] Temps total passé dans l'état actif (trafic de requête, de pagination, ACL/SCO/eSCO/BIS/CIS, traitement de toute tâche). |
Active_State_Enter_Count |
4 octets | Indique le nombre de fois où le contrôleur passe à l'état actif. |
BR_RDR_Tx_Total_Time |
4 octets | [en ms] Temps total dans l'état Tx(transmission pour le trafic ACL/SCO/eSCO) spécifique à BR/EDR. |
BR_RDR_Tx_State_Enter_Count |
4 octets | Indique le nombre de fois où le contrôleur entre dans l'état Tx spécifique à BR/EDR. |
BR_RDR_Tx_Average_Power_Level |
1 octet | [en dBm] Niveau de puissance de transmission moyen de toutes les liaisons BR/EDR |
BR_RDR_Rx_Total_Time |
4 octets | [en ms] Temps total passé dans l'état Rx (réception du trafic ACL/SCO/eSCO) spécifique à BR/EDR. |
BR_RDR_Rx_State_Enter_Count |
4 octets | [en ms] Indique le nombre de fois où le contrôleur entre dans l'état de réception spécifique BR/EDR. |
LE_Tx_Total_Time |
4 octets | [en ms] Durée totale dans l'état Tx (transmission pour le trafic ACL/BIS/CIS ou publicitaire LE) spécifique à LE. |
LE_Tx_State_Enter_Count |
4 octets | Indique le nombre de fois où le contrôleur entre dans l'état de réception spécifique BR/EDR. |
LE_Tx_Average_Power_Level |
1 octet | [en dBm] Niveau de puissance de transmission moyen de tous les liens LE. |
LE_Rx_Total_Time |
4 octets | [en ms] Temps total passé dans l'état Rx spécifique à LE (réception du trafic ACL/BIS/CIS ou du trafic de balayage LE). |
LE_Rx_State_Enter_Count |
4 octets | [en ms] Indique le nombre de fois où le contrôleur entre dans l'état Rx spécifique à LE. |
Report_Time_Duration (durée totale) |
4 octets | [en ms] Durée totale de collecte des informations liées à l'alimentation. |
RX_Active_One_Chain_Time |
4 octets | [en ms] Durée d'activité RX dans une chaîne |
RX_Active_Two_Chain_Time |
4 octets | [en ms] Durée de l'activité RX dans deux chaînes |
TX_iPA_Active_One_Chain_Time |
4 octets | [en ms] Durée d'activité TX interne dans une chaîne |
TX_iPA_Active_Two_Chain_Time |
4 octets | [en ms] Durée de l'activité TX interne dans deux chaînes |
TX_ePA_Active_One_Chain_Time |
4 octets | [en ms] Durée de l'activité TX externe dans une chaîne |
TX_ePA_Active_Two_Chain_Time |
4 octets | [en ms] Durée d'activité TX externe dans deux chaînes |
BREDR_RX_Active_Scan_total_Time |
4 octets | [en ms] Période (ms) sur le temps d'activité RX de l'analyse BR/EDR |
LE_RX_Active_Scan_total_Time |
4 octets | [en ms] Période (ms) sur le temps d'activité de réception du scan LE |
Code de sous-événement = 0x58 [Quality_Report_Id = 0x09~0x0A, événement de statistiques RF avancées]
L'événement "Statistiques avancées sur les radiofréquences Bluetooth" fournit des métriques de performances détaillées sur le comportement radio du contrôleur Bluetooth. L'événement peut être déclenché de deux manières :
- Par déclencheur (0x09) : un rapport ponctuel est envoyé en réponse à une commande spécifique.
- Par le moniteur (0x0A) : le contrôleur envoie régulièrement des rapports à un intervalle spécifié.
Les paramètres de l'événement sont essentiellement des compteurs de paquets qui suivent différents comportements radio sur une période spécifiée.
Métriques clés et leur objectif
- Statistiques sur la puissance de transmission : ces compteurs suivent les paquets envoyés à l'aide de différentes configurations d'alimentation, en distinguant les amplificateurs de puissance internes (iPA) et externes (ePA), ainsi que les différents modes de diversité d'antenne (Div) ou de beamforming (BF). Cela permet de déterminer les paramètres d'alimentation et d'antenne les plus fréquemment utilisés.
- Bins de l'indicateur d'intensité du signal reçu (RSSI) : ces paramètres classent les paquets reçus en fonction de l'intensité du signal. En fournissant un nombre de paquets dans des plages RSSI spécifiques (par exemple, moins de -90 dBm, de -70 à -75 dBm), le rapport donne une image claire de la qualité du lien. Un nombre élevé dans les bins de signaux "faibles" (par exemple, < -90 dBm) indique une mauvaise connexion.
- Delta RSSI : cette métrique mesure la différence d'intensité du signal entre les deux antennes de réception (le cas échéant). Les compteurs suivent le nombre de paquets dont le delta RSSI se trouve dans différentes plages. Un grand delta (par exemple, > 11 dBm) peut suggérer une interférence ou une obstruction physique, car une antenne reçoit un signal beaucoup plus fort que l'autre.
- Commutation d'antenne et retransmissions : le rapport indique la fréquence à laquelle le contrôleur commute entre les antennes et suit les paquets retransmis (ReTX). Un nombre élevé de retransmissions indique souvent une connexion faible ou peu fiable, qui nécessite de renvoyer les paquets.
- Qualité du canal : ces paramètres fournissent un résumé général de l'état des différents canaux de communication, en les classant comme "Bon", "Moyen", "Mauvais" ou "Très mauvais" en fonction de leur RSSI. Cela donne un aperçu immédiat de l'environnement RF.
- File d'attente de la mémoire tampon TX : cette section surveille le nombre de paquets en attente dans la mémoire tampon de transmission du contrôleur pour différents types de liens, tels que ACL (lien logique orienté connexion asynchrone), LECONN (connexion LE) et LEISOC (isochrone LE). Un nombre élevé de mémoires tampons peut indiquer un goulot d'étranglement ou un problème lié au flux de données de l'hôte vers le contrôleur.
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Quality_Report_Id |
1 octet | 0x09 : Avancer les statistiques RF par déclencheur 0x0A : Avancer les statistiques RF par moniteur |
Extension_info |
1 octet | Informations sur la version du BQR. 0x01 pour BQRv6 0x02 pour BQRv7 |
Report_Time_Period |
4 octets | Période pendant laquelle collecter les informations sur les performances. Unité : ms |
TX_Power_iPA_BF |
4 octets | Compteur de paquets de l'interface iPA BF |
TX_Power_ePA_BF |
4 octets | Compteur de paquets de l'ePA BF |
TX_Power_iPA_Div |
4 octets | Compteur de paquets de la division ePA |
TX_Power_ePA_Div |
4 octets | Compteur de paquets de la division ePA |
RSSI_chain_50 |
4 octets | Compteur de paquets de la chaîne RSSI > -50 dBm |
RSSI_chain_50_55 |
4 octets | Compteur de paquets de la chaîne RSSI entre -50 dBm et -55 dBm |
RSSI_chain_55_60 |
4 octets | Compteur de paquets de la chaîne RSSI entre -55 dBm et -60 dBm |
RSSI_chain_60_65 |
4 octets | Compteur de paquets de la chaîne RSSI entre -60 dBm et -65 dBm |
RSSI_chain_65_70 |
4 octets | Compteur de paquets de la chaîne RSSI entre -65 dBm et >-70 dBm |
RSSI_chain_70_75 |
4 octets | Compteur de paquets de la chaîne RSSI entre -70 dBm et >-75 dBm |
RSSI_chain_75_80 |
4 octets | Compteur de paquets de la chaîne RSSI entre -75 dBm et >-80 dBm |
RSSI_chain_80_85 |
4 octets | Compteur de paquets de la chaîne RSSI entre -80 dBm et >-85 dBm |
RSSI_chain_85_90 |
4 octets | Compteur de paquets de la chaîne RSSI entre -85 dBm et -90 dBm |
RSSI_chain_90 |
4 octets | Compteur de paquets de la chaîne RSSI < -90 dBm |
RSSI_delta_2 |
4 octets | Compteur de paquets avec un delta RSSI < 2 dBm |
RSSI_delta_2_5 |
4 octets | Compteur de paquets de delta RSSI entre 2 dBm et 5 dBm |
RSSI_delta_5_8 |
4 octets | Compteur de paquets de delta RSSI entre 5 dBm et 8 dBm |
RSSI_delta_8_11 |
4 octets | Compteur de paquets avec un delta RSSI compris entre 8 dBm et 11 dBm |
RSSI_delta_11 |
4 octets | Compteur de paquets avec un delta RSSI > 11 dBm |
Antenna_Switch_Count |
4 octets | Compteur de paquets de l'événement de commutation d'antenne |
ReTX_iPA_BF |
4 octets | Compteur de paquets ReTX_iPA_BF au cours de la dernière période |
ReTX_ePA_BF |
4 octets | Compteur de paquets ReTX_ePA_BF au cours de la dernière période |
ReTX_iPA_Div |
4 octets | Compteur de paquets ReTX_iPA_Div au cours de la dernière période |
ReTX_ePA_Div |
4 octets | Compteur de paquets ReTX_ePA_Div au cours de la dernière période |
Channel_count_Good |
1 octet | Nombre de canaux dont le RSSI se situe dans le bin 1 (<-90) |
Channel_count_OK |
1 octet | Nombre de canaux dont le RSSI se situe dans le bin 2 (de -90 à -76) |
Channel_count_Bad |
1 octet | Nombre de canaux dont le RSSI se situe dans le bin 3 (-76 à -50) |
Channel_count_VeryBad |
1 octet | Nombre de canaux dont le RSSI se situe dans le bin 4 (> -50) |
TX_buffer_Queue_Count |
4 octets | Compteur de l'état de la file d'attente du tampon de transmission du contrôleur au cours de la dernière période [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 |
Code de sous-événement = 0x58 [ID de rapport de qualité = 0x0B~0x0C, événement de surveillance de l'état du contrôleur]
L'événement de surveillance de l'état du contrôleur Bluetooth fournit un récapitulatif de l'état opérationnel du contrôleur. L'événement peut être déclenché de deux manières :
- Par déclencheur (0x09) : un rapport ponctuel est envoyé en réponse à une commande spécifique.
- Par le moniteur (0x0A) : le contrôleur envoie régulièrement des rapports à un intervalle spécifié.
L'événement de surveillance de l'état du contrôleur Bluetooth est un outil de diagnostic qui fournit un récapitulatif de l'état opérationnel du contrôleur. Cet événement fait partie du framework Bluetooth Quality Report (BQR) et est utilisé pour déboguer les problèmes de connectivité, de gestion de l'alimentation et de timing. Il peut être envoyé ponctuellement ou périodiquement pour assurer une surveillance continue.
Métriques clés et leur objectif
- Compteurs de paquets HCI : l'événement suit le nombre total de paquets envoyés de l'hôte au contrôleur et inversement. Ces compteurs sont essentiels pour déboguer les problèmes liés au transport de l'interface Host Controller Interface (HCI), qui est le canal de communication entre la pile logicielle et la puce du contrôleur Bluetooth.
- Longueurs des paquets : l'événement indique la longueur du dernier paquet HCI envoyé et reçu. Cela permet de vérifier que les données sont transmises correctement et qu'il n'y a pas de problèmes de taille inattendus.
- Nombre de signaux de réveil : le rapport inclut le nombre total de fois où les broches BT_Wake et HOST_Wake ont été activées. Ces signaux physiques sont essentiels pour la gestion de l'alimentation, car ils sont utilisés pour sortir les entités respectives des états de faible consommation d'énergie. La surveillance de ces nombres permet de déboguer les problèmes liés à l'alimentation, tels que les réveils inattendus ou les échecs de mise en veille.
- Codes temporels : l'événement fournit plusieurs codes temporels, y compris l'heure du dernier signal de réveil et de la dernière réinitialisation HCI. Ces codes temporels permettent de résoudre les problèmes liés au timing et fournissent un point de référence pour savoir quand certains événements se sont produits.
- Temporisateur Watchdog : un indicateur spécifique indique si l'événement a été généré comme avertissement précoce que le temporisateur Watchdog du contrôleur est sur le point d'expirer. Il s'agit d'une alerte critique en cas de blocage ou de dysfonctionnement potentiel de la manette.
- État de l'association : le rapport récapitule l'état actuel des connexions actives, y compris le nombre total de liens BR/EDR, LE et CIS (Connected Isochronous Stream). Il indique également si des liens SCO (Synchronous Connection-Oriented) sont actifs. Ces informations donnent un aperçu de la charge de connexion actuelle du contrôleur.
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Quality_Report_Id |
1 octet | 0xB~0xC 0x0B : rapports ponctuels ou déclenchés par un événement 0x0C : rapports périodiques. |
Packet_Count_Host_to_Controller |
4 octets | Nombre total de paquets envoyés de l'hôte au contrôleur via le transport HCI. Ce champ est utilisé pour déboguer les problèmes d'interface hôte-contrôleur (HCI, Host Controller Interface), par exemple UART. Comportement : les compteurs sont réinitialisés lorsque le contrôleur reçoit une réinitialisation HCI. |
Packet_Count_Controller_to_Host |
4 octets | Nombre total de paquets d'événements HCI envoyés à l'hôte. Ce champ est utilisé à des fins de débogage de l'IHC (par exemple, UART). Comportement : les compteurs sont réinitialisés lorsque le contrôleur reçoit une réinitialisation HCI. |
Last_Packet_Length_Host_to_Controller |
2 octets | Longueur du dernier paquet HCI envoyé à l'UART de l'hôte. Remarque : Longueur maximale des paquets HCI de 2 octets (inclut HCI, ACL, SCO et ISO) |
Last_Packet_Length_Controller_To_host |
2 octets | Longueur du dernier paquet HCI reçu de l'UART de l'hôte. Remarque : La longueur maximale des paquets HCI est de 2 octets (y compris HCI, ACL, SCO et ISO). |
Total_BT_Wake_Count |
4 octets | Nombre total d'assertions de broche BT_Wake par l'entité hôte. Ce champ sert d'outil de diagnostic pour déboguer les problèmes liés à l'alimentation. Comportement : les compteurs sont réinitialisés lorsque le contrôleur reçoit une réinitialisation HCI. |
Total_HOST_Wake_Count |
4 octets | Calcul agrégé des assertions de broche Host_Wake initiées par le contrôleur. Ce champ sert d'outil de diagnostic pour déboguer les problèmes liés à l'alimentation. Comportement : les compteurs sont réinitialisés lorsque le contrôleur reçoit une réinitialisation HCI. |
Last_BT_Wake_TimeStamp |
4 octets | Dernier code temporel lorsque l'hôte a activé le code BT_Wake.Ce champ est implémenté à des fins de débogage des problèmes d'alimentation. |
Last_HOST_Wake_TimeStamp |
4 octets | Code temporel le plus récent où le contrôleur a activé le code Host_Wake. Ce champ est utilisé pour déboguer les problèmes d'alimentation. |
Reset_Timestamp |
4 octets | Code temporel indiquant la fin de la réinitialisation HCI la plus récente. Ce champ est utilisé dans le seul but de faciliter la résolution des problèmes liés au timing. Il doit servir de point d'enregistrement initial par rapport auquel tous les autres éléments sont référencés. |
Current_Timestamp |
4 octets | Heure actuelle à laquelle cet événement est généré. Ce champ est utilisé pour résoudre les problèmes de décalage temporel. Il doit servir de point d'enregistrement du déclencheur auquel tous les autres éléments font référence. |
Is_WatchDog_Timer_About_To_Expire |
4 octets | Indicateur indiquant que cet événement d'état de santé est généré par le contrôleur en tant qu'avertissement précoce d'expiration du watchdog. Le code temporel actuel sert à indiquer l'heure à laquelle l'événement s'est produit. |
Coex_Status_Mask |
2 octets | Bit 0 : réservé |
Total_Links_BR_EDR_LE_Active |
1 octet | Nombre total de liens BR/EDR/LE à l'état actif. |
Total_Links_BR_EDR_Sniff |
1 octet | Nombre total de liens BR/EDR à l'état Sniff/Idle. |
Total_Links_CIS |
1 octet | Nombre total de liens de l'ISO. |
Is_SCO_Active |
1 octet | Indicateur permettant de vérifier si le lien SCO est actuellement activé. |
Code de sous-événement = 0x58 [ID de rapport de qualité = 0x11 ~ 0x13, événement lié au vidage du journal]
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Quality_Report_Id |
1 octet |
0x00 ~ 0x10 : réservé. 0x11 : trace des messages LMP/LL. 0x12 : trace de planification Bluetooth Multi-link/Coex. 0x13 : vidage des données d'informations de débogage du contrôleur. 0x14 ~ 0xFF : réservé. |
Connection_Handle |
2 octets | Handle de connexion. |
| Paramètre spécifique au fournisseur | (Longueur totale du paramètre – 4) * octets | Format spécifique au fournisseur de la trace de message LMP, trace de planification Bluetooth Multi-link/Coex et vidage des données d'informations de débogage du contrôleur. |
Sous-événement de commentaires sur le lien ISO
Code de sous-événement = 0x5C
Lorsqu'il est activé, cet événement doit être généré à chaque intervalle ISO.
Activation
L'activation s'effectue en sélectionnant le code fournisseurData_Path_ID 0x19 dans la commande standard HCI_LE_Setup_ISO_Data_Path.
La commande HCI_Configure_Data_Path avec Data_Path_ID défini sur 0x19 et Vendor_Specific_Config_Length défini sur 0 doit être acceptée, même si aucune action n'est attendue du contrôleur à la réception de cette commande.
Heure d'envoi
L'événement est émis du début d'un intervalle ISO (point d'ancrage CIG ou BIG) à l'intervalle ISO suivant. Le contrôleur indique le délai avec le début effectif de l'intervalle ISO à l'aide deAnchor_Point_Delay.
Synchronisation de la manette
Au début d'un intervalle ISO, le contrôleur calcule StreamSN en incrémentant la valeur actuelle de la valeurISO_Interval ÷ SDU_Interval configurée. Lors du premier intervalle, il est initialisé à 0.Ensuite, pour chaque paquet du FIFO ISO, les éléments suivants s'appliquent :
-
Le contrôleur calcule la différence d'encapsulation SNdiff entre les deux numéros de séquence :
SNdiff = (SDUSN - StreamSN + 0x10000) mod 0x10000 - Lorsque
(SNdiff + (FT-1) × ISO_Interval ÷ SDU_Interval) mod 0x10000 <= (FT-1) × ISO_Interval ÷ SDU_Interval:
Le paquet se trouve dans la fenêtre de retransmission. Il aurait dû être programmé pour la transmission à des intervalles précédents et est maintenant disponible pour la retransmission. Si ce n'est pas le cas (c'est-à-dire que la transmission n'a pas été planifiée), le fichier a été reçu en retard. Cela doit être signalé à l'hôte à l'aide deIn_Status. Ces paquets peuvent être supprimés ou programmés pour la transmission. Le choix est défini par l'implémentation. - Ou lorsque
SNdiff < ISO_Interval ÷ SDU_Interval:
Le paquet est programmé pour être transmis à partir de cet événement jusqu'à l'expiration du délai de vidage. - Ou lorsque
SNdiff >= ISO_Interval ÷ SDU_IntervaletSNdiff <= Max_Forward_Buffers:
Le paquet est dans le futur. Il sera transmis lors d'un événement ultérieur. Comme les paquets sont envoyés dans l'ordre, cette condition met fin à la recherche de paquets pour cet intervalle.
Les tampons utilisés par l'hôte ne sont pas communiqués au contrôleur, mais sont limités àMax_Forward_Buffers = 16. - Ou lorsqu'aucune des conditions ci-dessus n'est remplie :
Le paquet est supprimé, la limite de délai avant expiration du vidage est atteinte ou un paquet mal formé a été reçu.
| Paramètre de sous-événement | Taille | Objectif |
|---|---|---|
Connection_Handle |
2 octets |
Handle de connexion du CIS ou du BIS Plage : de 0x0000 à 0x0EFF |
Sequence_Number |
2 octets |
Numéro de séquence du flux, géré par le contrôleur. Initialisé à 0 lors de la création du CIS ou du BIS, et incrémenté du nombre d'unités de données de service (SDU) par intervalle isochrone ISO, défini sur ISO_interval ÷ SDU_Interval, à chaque intervalle ISO.
|
Anchor_Point_Delay |
2 octets |
Délai en microsecondes entre la génération de l'événement et le point d'ancrage BIG ou CIG effectif, ou le début de l'intervalle ISO.
Le code temporel du point d'ancrage effectif est défini par :Event generation time - Anchor_Point_Delay
Plage : de 0 à l'intervalle ISO en microsecondes |
In_Status |
2 octets |
État du tampon ISO du contrôleur Au début d'un intervalle ISO, chaque bit bi est défini lorsque l'unité de données de service (SDU) (Sequence_Number + i) mod 0x10000 est disponible. Lorsqu'elle n'est pas disponible, l'unité de données de service est identifiée comme Not received from the host.La valeur i est comprise entre 0 et ISO_Interval ÷ SDU_Interval - 1.
Pour les autres valeurs de i, les bits sont définis sur 0.
|
Tx_Status |
2 octets |
État de la transmission par rapport aux SDU avec numéros de séquence :(Sequence_Number - Flush_Timeout × ISO_Interval ÷ SDU_Interval + i + 0x10000)
mod 0x10000
Chaque bit bi est défini lorsque toutes les PDU de la SDU identifiée, par son numéro de séquence, ont été transmises et accusées de réception avec succès. La valeur i est comprise entre 0 et ISO_Interval ÷ SDU_Interval - 1.
Pour les autres valeurs de i, les bits sont définis sur 0.Dans un groupe de diffusion, la transmission est toujours censée être confirmée. |
Compatibilité multi-annonceur
Voici les objectifs de la compatibilité avec plusieurs annonceurs :
-
Possibilité de prendre en charge plusieurs annonces
(
max_advt_instances) - Différentes puissances de transmission pour permettre une portée variable
- Contenus publicitaires différents
- Une réponse personnalisée pour chaque annonceur
- Confidentialité (non traçable) pour chaque annonceur
- Connectable
Pour que cette spécification reste proche des normes existantes, les commandes spécifiques au fournisseur suivantes sont fournies. Elles sont dérivées de la spécification Bluetooth Core 4.1.
LE_Multi_Advt_Command
OCF : 0x154
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Multi_advt_opcode |
1 octet |
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
|
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Multi_advt_opcode |
1 octet |
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
Référence de base : spécification Bluetooth Core 4.1, page 964 (commande LE Set Advertising Parameter)
Sub OCF : 0x01
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Advertising_Interval_Min |
Par spécification | Par spécification |
Advertising_Interval_Max |
Par spécification | Par spécification |
Advertising_Type |
Par spécification | Par spécification |
Own_Address_Type |
Par spécification | Par spécification |
Own_Address |
Par spécification | Par spécification |
Direct_Address_Type |
Par spécification | Par spécification |
Direct_Address |
Par spécification | Par spécification |
Advertising_Channel_Map |
Par spécification | Par spécification |
Adverstising_Filter_Policy |
Par spécification | Par spécification |
Advertising_Instance |
1 octet | Spécifie l'applicabilité des paramètres ci-dessus à une instance. |
Tx_power |
1 octet |
Transmit_Power Unité : dBm (entier signé) Plage : de -70 à +20 |
Le paramètre Own_Address peut être une adresse configurée par l'hôte au moment de la configuration de cette instance multi-annonce. Cela permet d'avoir une adresse privée résolvable au moment de la transmission de la première balise. La publicité sur une instance continuera d'être diffusée, quelle que soit la connexion. La pile BT hôte peut émettre une commande pour démarrer la publicité sur une instance, après la connexion.
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande, comme spécifié dans la spécification Bluetooth Core 4.1, conformément à la commande ci-dessus. Le contrôleur répondra avec un code d'échec (paramètre non valide) si l'instance publicitaire ou les paramètres Tx_Power ne sont pas valides.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Multi_advt_opcode |
1 octet | 0x01 [Set_Advt_Param_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd
Référence de base : spécification Bluetooth Core 4.1, page 969 (commande de données publicitaires LE Set)
Sous-OCF : 0x02
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Advertising_Data_Length |
Par spécification | Par spécification |
Advertising_Data |
Par spécification | Par spécification |
Advertising_Instance |
1 octet | Spécifie l'applicabilité des paramètres ci-dessus à une instance. |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande, comme spécifié dans la spécification Bluetooth Core 4.1, conformément à la commande ci-dessus. Le contrôleur répondra avec un code d'échec si l'instance publicitaire ou les paramètres Tx_Power ne sont pas valides.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Multi_advt_opcode |
1 octet | 0x02 [Set_Advt_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd
Référence de base : spécification Bluetooth Core 4.1, page 970 (commande de données de réponse à l'analyse de l'ensemble LE)
Sous-OCF : 0x03
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Scan_Response_Data_Length |
Par spécification | Par spécification |
Scan_Response_Data |
Par spécification | Par spécification |
Advertising_Instance |
1 octet | Spécifie l'applicabilité des paramètres ci-dessus à une instance. |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande, comme spécifié dans la spécification Bluetooth Core 4.1, conformément à la commande ci-dessus. Le contrôleur répondra avec un code d'échec (paramètre non valide) si l'instance publicitaire ou les paramètres Tx_Power ne sont pas valides.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Multi_advt_opcode |
1 octet | 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd
Référence de base : spécification Bluetooth Core 4.1, page 963 (commande LE Set Random Address)
Sub OCF : 0x04
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
| Adresse aléatoire | Par spécification | Par spécification |
Advertising_Instance |
1 octet | Spécifie l'applicabilité des paramètres ci-dessus à une instance. |
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Multi_advt_opcode |
1 octet | 0x04 [Set_Random_Addr_Multi_Sub_Cmd] |
LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd
Référence de base : spécification Bluetooth Core 4.1, page 971 (commande LE Set Advertise Enable dans cette spécification de base)
OCF : 0x05
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Advertising_Enable |
1 octet | Une valeur de 1 signifie "activer". Toute autre valeur signifie "désactiver". |
Advertising_Instance |
1 octet | Spécifie l'applicabilité des paramètres ci-dessus à une instance. L'instance 0 correspond à une instance HCI standard. |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Multi_advt_opcode |
1 octet | 0x05 [Set_Advt_Enable_Multi_Sub_Cmd] |
Résolution déchargée d'adresse privée
Cette fonctionnalité résout une adresse privée dans le micrologiciel ou le matériel du contrôleur, ce qui offre les avantages suivants :
- Latence impliquée par l'hôte dans la résolution d'une adresse privée
- Économiser de l'énergie en évitant de réveiller l'hôte
LE_Set_RPA_Timeout
OCF : 0x15C
| Paramètre de commande | Taille | Objectif |
|---|---|---|
LE_local_IRK |
16 octets | Clé de résolution d'identité(IRK) de l'appareil local utilisée pour générer la ou les adresses aléatoires résolvables. |
tRPA_min |
2 octets |
Délai avant expiration minimal de la génération RPA en secondes. Le contrôleur doit générer de nouvelles adresses résolvables pour tout événement de publicité, d'analyse ou de connexion à partir de ce délai. Plage valide : 300-1800 |
tRPA_max |
2 octets |
Délai maximal de génération de l'automatisation des processus robotisés en secondes. Le contrôleur doit générer de nouvelles adresses résolvables pour tous les événements de publicité, d'analyse ou de connexion avant ou pendant ce délai. Plage valide : tRPA_min-1800
|
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet |
État de la commande. Valeurs d'état HCI suggérées : 0x00 : succès 0x01 : commande inconnue (si non acceptée) 0x12 : paramètres de commande non valides (si des paramètres sont en dehors de la plage donnée) |
LE_RPA_offload_Command
OCF : 0x155
| Paramètre de commande | Taille | Objectif |
|---|---|---|
RPA_offload_opcode |
1 octet |
0x1 : activer une fonctionnalité spécifique au client 0x2 : ajouter un IRK à la liste 0x3 : supprimer un IRK de la liste 0x4 : effacer la liste des IRK 0x5 : lire une entrée de la liste des IRK |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Event_RPA_offload_opcode |
1 octet |
0x1 : activer une fonctionnalité spécifique au client 0x2 : ajouter un IRK à la liste 0x3 : supprimer un IRK de la liste 0x4 : effacer la liste des IRK 0x5 : lire une entrée de la liste des IRK |
LE_RPA_offload: Enable_cust_specific_sub_Command
Sub OCF : 0x01
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
enable_customer_specific_feature_set |
1 octet |
0x01 : activer la fonctionnalité RPA déchargée 0x00 : désactiver la fonctionnalité RPA déchargée |
L'hôte doit activer le déchargement RPA en fonction des capacités du chipset. Reportez-vous à LE_Get_Vendor_Capabilities_Command.
Chaque puce peut avoir un max_irk_list_sz différent dans le micrologiciel.
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Event_cust_specific_feature_opcode |
1 octet | 0x01 [Activer une fonctionnalité spécifique au client] |
LE_RPA_offload: Add_IRK_to_list_sub_Command
Sous-OCF : 0x02
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
LE_IRK |
16 octets | LE IRK (1er octet LSB) |
Address_Type |
1 octet |
0 : Adresse publique 1 : Adresse aléatoire |
LE_Device_Address |
6 octets | Adresse publique ou aléatoire associée à l'IRK (octet 1 LSB) |
Un événement "Commande terminée" sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Event_cust_specific_feature_opcode |
1 octet | 0x02 [Ajouter l'IRK à la liste] |
LE_IrkList_AvailableSpaces |
1 octet | Entrées de la liste IRL disponibles après l'opération en cours |
LE_RPA_offload: Remove_IRK_to_list_sub_Command
Sous-OCF : 0x03
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
Address_Type |
1 octet |
0 : Adresse publique 1 : Adresse aléatoire |
LE_Device_Address |
6 octets | Adresse publique ou aléatoire associée à l'IRK |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Event_cust_specific_feature_opcode |
1 octet | 0x03 [Supprimer l'IRK de la liste] |
LE_IrkList_AvailableSpaces |
1 octet | Entrées de la liste IRL disponibles après l'opération en cours |
LE_RPA_offload: Clear_IRK_list_sub_Command
Sub OCF : 0x04
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
| Aucun |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Event_cust_specific_feature_opcode |
1 octet | 0x04 [Effacer la liste IRK] |
LE_IrkList_AvailableSpaces |
1 octet |
Entrées de la liste IRL disponibles après l'opération en cours [max_irk_list_sz]
|
LE_RPA_offload: Read_IRK_list_sub_Command
Sous-OCF : 0x05
| Paramètre de sous-commande | Taille | Objectif |
|---|---|---|
LE_read_IRK_list_entry-index |
1 octet | Index de la liste IRK [0, max_irk_list_sz-1] |
Un événement "Command Complete" (Commande terminée) sera généré pour cette commande.
| Paramètre de retour | Taille | Objectif |
|---|---|---|
Status |
1 octet | État "Commande terminée" |
Event_cust_specific_feature_opcode |
1 octet | 0x05 [Lire l'entrée de la liste IRK] |
LE_Read_IRK_List_entry |
1 octet | Index de l'IRK que l'hôte souhaite relire (la taille maximale de la liste IRK est de 32). |
LE_IRK |
16 octets | Valeur IRK |
Address_Type |
1 octet |
0 : Adresse publique 1 : Adresse aléatoire |
LE_Device_Address |
6 octets | Adresse publique ou aléatoire associée à l'IRK |
LE_Resolved_Private_Address |
6 octets | Adresse privée résolue actuelle de cet IRK |
Déchargement de l'analyse
La fonctionnalité Sniff Offload décharge la gestion du mode Sniff de la pile hôte Bluetooth vers le contrôleur Bluetooth. Cela permet au contrôleur de gérer le moment où le mode renifleur est activé/désactivé et d'appliquer des paramètres de renifleur et de sous-évaluation de renifleur configurables, tandis que l'hôte conserve le contrôle sur la sélection des paramètres en fonction des modifications de l'activité du profil Bluetooth.
États de l'analyse de l'offload
Cette section définit les états d'un contrôleur Bluetooth par rapport à la fonction Sniff Offload. Deux états globaux ont été définis pour identifier l'état d'un contrôleur Bluetooth par rapport à l'activation de la fonctionnalité Sniff Offload. Deux états spécifiques à la connexion ont été définis pour identifier l'état d'une connexion BR/EDR lorsque le contrôleur Bluetooth est à l'état "Sniff Offload Enabled" (Déchargement Sniff activé).
États globaux
Deux états globaux ont été définis pour identifier l'état d'un contrôleur Bluetooth par rapport à l'activation de la fonctionnalité Sniff Offload.
État de désactivation du déchargement de l'analyse
Par défaut, un contrôleur Bluetooth est considéré comme étant dans l'état "Sniff Offload Disabled" (Désactivation du déchargement de l'écoute reniflage). Le contrôleur Bluetooth est censé gérer les commandes HCI_Sniff_Mode, HCI_Exit_Sniff_Mode et HCI_Sniff_Subrating émises par un hôte Bluetooth. La manette Bluetooth doit également transférer les événements HCI_Mode_Change et HCI_Sniff_Subrating à un hôte Bluetooth, conformément au masque d'événement défini par l'hôte Bluetooth.
État d'activation du déchargement de l'analyse
Un contrôleur Bluetooth est considéré comme étant dans l'état "Sniff Offload Enabled" (Déchargement de reniflement activé) après avoir géré avec succès un "WriteSniffOffloadEnable" pour activer le déchargement de reniflement. Dans cet état, le contrôleur Bluetooth est censé transférer les événements HCI_Mode_Change et HCI_Sniff_Subrating à un hôte Bluetooth, comme décidé par une fonction AND logique du masque d'événement défini par l'hôte Bluetooth et les indicateurs de suppression d'événement.
États spécifiques à la connexion
Lorsqu'un contrôleur Bluetooth est à l'état "Sniff Offload Enabled" (Déchargement de l'écoute activé), chaque ACL actif peut se trouver dans l'un des deux états décrits ci-dessous.
État "En attente"
Une LCA est considérée comme étant dans l'état "Paramètres en attente" lorsque le contrôleur Bluetooth est dans l'état "Sniff Offload Enabled" (Sniff Offload activé), mais qu'une commande spécifique au fournisseur "WriteSniffOffloadParameters" n'a pas été émise au moins une fois par l'hôte Bluetooth pour la LCA actuelle.
État "Contrôle démarré"
Une LCA est considérée comme étant dans l'état "Contrôle démarré" lorsque le contrôleur Bluetooth est dans l'état "Sniff Offload Enabled" (Déchargement Sniff activé) et qu'une commande spécifique au fournisseur "WriteSniffOffloadParameters" a été émise au moins une fois par l'hôte Bluetooth pour la LCA actuelle.
WriteSniffOffloadEnable
OCF : 0x310
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Enable_Sniff_Offload |
1 octet | 0x00 : Désactiver 0x01 : Activer |
Subrating_Max_Latency |
2 octets | Le paramètre "Latence maximale" doit être utilisé pour calculer le sous-taux de reniflement maximal que l'appareil distant peut utiliser. Par défaut : latence T*sniff* = N × 0,625 ms (1 emplacement de bande de base) Plage : 0x0002 à 0xFFFE ; plage de temps : 1,25 ms à 40,9 s |
Subrating_Min_Remote_Timeout |
2 octets | Délai d'inactivité minimal du mode renifleur (T*sniff_mode_timeout*) que l'appareil distant peut utiliser Par défaut : 0x0000 Délai d'inactivité = N × 0,625 ms (1 slot de bande de base) Plage : 0x0000 à 0xFFFE Plage de temps : 0 s à 40,9 s |
Subrating_Min_Local_Timeout |
2 octets | Délai d'inactivité minimal du mode renifleur (T*sniff_mode_timeout*) que l'appareil local peut utiliser. Valeur par défaut : 0x0000 Délai d'expiration = N × 0,625 ms (1 emplacement de bande de base) Plage : 0x0000 à 0xFFFE Plage de temps : 0 s à 40,9 s |
Suppress_Mode_Change_Event |
1 octet | 0x00 : le contrôleur Bluetooth doit signaler l'événement HCI Mode_Change à l'hôte en fonction de la configuration définie dans la commande HCI_Set_Event_Mask. 0x01 : le contrôleur Bluetooth ne doit pas signaler l'événement HCI Mode_Change à l'hôte. |
Suppress_Sniff_Subrating_Event |
1 octet | 0x00 : le contrôleur Bluetooth doit signaler l'événement HCI Sniff_Subrating à l'hôte, sous réserve de la configuration définie dans la commande HCI_Set_Event_Mask. 0x01 : le contrôleur Bluetooth ne doit pas signaler l'événement HCI Sniff_Subrating à l'hôte. |
WriteSniffOffloadParameters
OCF : 0x311
| Paramètre de commande | Taille | Objectif |
|---|---|---|
Connection_Handle |
2 octets | Handle de connexion ACL BR/EDR de 16 bits. Plage : de 0x0000 à 0x0EFF |
Sniff_Max_Interval |
2 octets | – Plage définie par Bluetooth SIG, généralement utilisée pour passer en mode renifleur. Plage : de 0x0002 à 0xFFFE (seules les valeurs paires sont valides) Plage obligatoire : de 0x0006 à 0x0540 Temps = N × 0,625 ms Plage de temps : de 1,25 ms à 40,9 s – Cas particuliers 0x0000 : utilisé pour sélectionner le mode "Push-Active" Sniff-Offload. 0x0001 : utilisé pour sélectionner le mode Sniff-Offload "Prefer-Active". |
Sniff_Min_Interval |
2 octets | Plage : de 0x0002 à 0xFFFE (seules les valeurs paires sont valides) Plage obligatoire : de 0x0006 à 0x0540 Temps = N × 0,625 ms Plage de temps : de 1,25 ms à 40,9 s |
Sniff_Attempts |
2 octets | Nombre d'emplacements de réception de bande de base pour la tentative d'espionnage. Longueur = N × 1,25 ms Plage : 0x0001 à 0x7FFF Plage de temps : 1,25 ms à 40,9 s Plage obligatoire pour le contrôleur : 1 à T*sniff* ÷ 2 |
Sniff_Timeout |
2 octets | Nombre d'emplacements de réception de bande de base pour le délai d'expiration de l'analyse. Longueur = N × 1,25 ms Plage : 0x0000 à 0x7FFF Plage de temps : 0 ms à 40,9 s Plage obligatoire pour le contrôleur : 0 à 0x0028 |
Link_Inactivity_Timeout |
2 octets | Valeur du délai avant expiration en millisecondes. Le minuteur d'inactivité de la liaison a été démarré/réinitialisé à chaque transaction HCI-ACL. À l'expiration de ce minuteur, le contrôleur doit passer en mode Sniff. |
Subrating_Max_Latency |
2 octets | Le paramètre "Latence maximale" doit être utilisé pour calculer le sous-taux de reniflement maximal que l'appareil distant peut utiliser. Par défaut : latence T*sniff* = N × 0,625 ms (1 emplacement de bande de base) Plage : 0x0002 à 0xFFFE ; plage de temps : 1,25 ms à 40,9 s |
Subrating_Min_Remote_Timeout |
2 octets | Délai d'inactivité minimal du mode renifleur (T*sniff_mode_timeout*) que l'appareil distant peut utiliser Par défaut : 0x0000 Délai d'inactivité = N × 0,625 ms (1 slot de bande de base) Plage : 0x0000 à 0xFFFE Plage de temps : 0 s à 40,9 s |
Subrating_Min_Local_Timeout |
2 octets | Délai d'inactivité minimal du mode renifleur (T*sniff_mode_timeout*) que l'appareil local peut utiliser. Valeur par défaut : 0x0000 Délai d'expiration = N × 0,625 ms (1 emplacement de bande de base) Plage : 0x0000 à 0xFFFE Plage de temps : 0 s à 40,9 s |
Allow_Exit_Sniff_On_Rx |
1 octet | Indicateur permettant de contrôler la sortie du mode renifleur lors d'une transaction HCI-ACL de réception. 0x00 : Ne pas quitter le reniflement sur Rx. 0x01 : Quitter Sniff on Rx Receive-direction HCI-ACL est défini comme la transmission de paquets ACL du contrôleur à l'hôte via HCI. |
Allow_Exit_Sniff_On_Tx |
1 octet | Indicateur permettant de contrôler la sortie du mode renifleur lors d'une transaction HCI-ACL dans le sens de la transmission. 0x00 : Ne quittez pas le renifleur sur Tx. 0x01 : Exit Sniff on Tx Transmit-direction HCI-ACL est défini comme la transmission de paquets ACL de l'hôte au contrôleur via HCI. |