Requisiti HCI

L'interfaccia Host Controller Interface (HCI) viene utilizzata per interagire con un controller Bluetooth.

Questo documento fornisce un elenco dei requisiti HCI per Bluetooth (BT) e Bluetooth Low Energy (BLE). L'obiettivo è che i fornitori di stack BT host e i fornitori di controller BT rispettino questi requisiti della piattaforma per utilizzare il set di funzionalità descritto di seguito.

Questo documento fa riferimento alla specifica Bluetooth Core 5.2 come "specifica". La specifica Bluetooth Core 5.2 è disponibile sul sito web di Bluetooth SIG insieme ad altri documenti adottati.

Panoramica generale del design

Funzionalità e configurazione del chip

In quanto piattaforma aperta, Android ha una matrice di versioni software, OEM, fornitori e funzionalità di piattaforma e chip.

Per gestire il panorama variabile e le migrazioni, in questo documento viene descritta una filosofia di progettazione che consente ai controller BT di esporre le proprie funzionalità (oltre alla specifica Bluetooth Core 5.2 standard). Lo stack BT dell'host può quindi utilizzare queste funzionalità per determinare quali funzionalità attivare.

Supportare gli standard aperti

Uno degli obiettivi di Android è supportare gli standard aperti dopo la ratifica in una specifica Bluetooth. Se una funzionalità descritta di seguito diventa disponibile nei metodi HCI standard in una futura specifica Bluetooth, propenderemo per rendere questo approccio quello predefinito.

Funzionalità specifiche del fornitore

Comando specifico del fornitore: LE_Get_Vendor_Capabilities_Command

Campo comando OpCode (OCF): 0x153

Parametro comando Dimensioni Finalità
NA Elenco di parametri di comando vuoto

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
max_advt_instances
(Obsoleto)
1 ottetto Numero di istanze di pubblicità supportate.

Riservato dopo la versione 0.98.
Questo parametro è ritirato nella specifica delle funzionalità di Google v0.98 e successive a favore della pubblicità estesa LE disponibile nella specifica BT versione 5.0 e successive.
offloaded_resolution_of_private-address
(Obsoleto)
1 ottetto Funzionalità del chip BT di RPA.
Se supportato da un chip, deve essere attivato dall'host.
0 = Non in grado
1 = In grado

Riservato dopo la versione 0.98.
Questo parametro è ritirato nella specifica delle funzionalità di Google versione 0.98 e successive a favore della funzionalità Privacy disponibile nella specifica BT versione 4.2 e successive.
total_scan_results_storage 2 ottetti Spazio di archiviazione per i risultati della scansione in byte
max_irk_list_sz 1 ottetto Numero di voci IRK supportate nel firmware
filtering_support 1 ottetto Supporto del filtro nel controller
0 = Non supportato
1 = Supportato
max_filter 1 ottetto Numero di filtri supportati
activity_energy_info_support 1 ottetto Supporta la generazione di report su attività e informazioni sull'energia
0 = Non in grado
1 = In grado
version_supported 2 ottetti Specifica la versione della specifica delle funzionalità di Google supportata
byte[0] = Numero principale
byte[1] = Numero secondario

v1.05
byte[0] = 0x01
byte[1] = 0x05

Aggiunte di funzionalità nelle seguenti versioni:
v1.05:
  • iso_link_feedback_support
  • BQRv7
  • sniff_offload_support
V1.04:
  • BQRv6
total_num_of_advt_tracked 2 ottetti Numero totale di inserzionisti monitorati per scopi di OnLost/OnFound
extended_scan_support 1 ottetto Supporta intervalli e finestre di scansione estesi
debug_logging_supported 1 ottetto Supporta la registrazione delle informazioni di debug binario dal controller
LE_address_generation_offloading_support
(Obsoleto)
1 ottetto 0 = Non supportato
1 = Supportato

Riservato dopo la versione 0.98.
Questo parametro è ritirato nella specifica delle funzionalità di Google versione 0.98 e successive a favore della funzionalità Privacy disponibile nella specifica BT versione 4.2 e successive.
A2DP_source_offload_capability_mask 4 ottetti Maschere di bit per i tipi di codec supportati
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 sono riservati
bluetooth_quality_report_support 1 ottetto Supporta la generazione di report sugli eventi relativi alla qualità del Bluetooth
0 = Non in grado
1 = In grado
dynamic_audio_buffer_support 4 ottetti Supporta il buffer audio dinamico nel controller Bluetooth
Maschere di bit per i tipi di codec supportati
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 sono riservati
a2dp_offload_v2_support 1 ottetto Supporta i comandi di offload A2DP v2 nel controller Bluetooth (vedi Avvia offload A2DP, Arresta offload A2DP)
0 = Non supportato
1 = Supportato
iso_link_feedback_support 1 ottetto Supporta l'evento ISO Link Feedback
0 = Non supportato
1 = Supportato
sniff_offload_support 1 ottetto Supporta i comandi di offload di sniffing in un controller Bluetooth
0 = Non supportato
1 = Supportato

Risultati dell'analisi batch

Uno degli obiettivi di progettazione è migliorare la modalità di invio delle notifiche dell'evento di risposta alla scansione Bluetooth LE all'host, in modo da risparmiare energia nell'host.

Riducendo la frequenza con cui il controller notifica al processore dell'app host di eseguire la scansione dei risultati, il processore dell'app host può rimanere più a lungo inattivo/inattivo. In questo modo si riduce il consumo energetico nell'host. Il parametro di ritorno total_scan_results_storage di LE_Get_Vendor_Capabilities_Command indica la capacità del chip di archiviare i risultati della scansione.

Questa funzionalità si concentra sulla gestione e sulla configurazione dell'impianto di archiviazione dei risultati della scansione LE nel controller Bluetooth. Lo spazio di archiviazione viene utilizzato per raggruppare temporaneamente i dati pubblicitari e analizzare i dati e i metadati che vengono ricevuti dal controller per la successiva consegna all'host.

Il firmware deve supportare due tipi di batch, che possono essere attivati contemporaneamente:

  • Troncato. Contiene i seguenti elementi informativi: {MAC, TX Power, RSSI, Timestamp}
  • Completo. Contiene i seguenti elementi informativi: {MAC, TX Power, RSSI, Timestamp, Adv Data, Scan Response}

LE_Batch_Scan_Command

OCF: 0x156

Parametro comando Dimensioni Finalità
Batch_Scan_opcode 1 ottetto 0x1 - Enable customer-specific feature
0x2 - Set Batch Scan Storage parameters
0x3 - Set Batch Scan parameters
0x4 - Read Batch Scan Result parameters

Per questo comando verrà generato un evento Command Complete. L'attivazione della funzionalità specifica per il cliente non avvia la scansione.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Batch_Scan_opcode 1 ottetto 0x1 - Enable customer-specific feature
0x2 - Set Batch Scan Storage parameters
0x3 - Set Batch Scan parameters
0x4 - Read Batch Scan Result parameters

LE_Batch_Scan_Command: Enable customer-specific feature

Sub OCF: 0x01

Parametro del sottocomando Dimensioni Finalità
enable_customer_specific_feature_set 1 ottetto 0x01 - Enable Batch Scan feature
0x00 - Disable Batch Scan feature

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Batch_Scan_opcode 1 ottetto 0x1 - Enable customer-specific feature
0x2 - Set Batch Scan Storage parameters
0x3 - Set Batch Scan parameters
0x4 - Read Batch Scan Result parameters

LE_Batch_Scan_Command: Set batch scan storage parameter subcommand

Sub OCF: 0x02

Parametro del sottocomando Dimensioni Finalità
Batch_Scan_Full_Max 1 ottetto Spazio di archiviazione massimo (in %) allocato allo stile completo
[Intervallo: 0-100]
Batch_Scan_Truncated_Max 1 ottetto Spazio di archiviazione massimo (in %) allocato allo stile troncato
[Intervallo: 0-100]
Batch_Scan_Notify_Threshold 1 ottetto Imposta il livello di notifica (in %) per il singolo pool di archiviazione
[Intervallo: 0-100]
L'impostazione su 0 disattiva la notifica. Viene generato un evento HCI specifico del fornitore (evento secondario di violazione della soglia di archiviazione)

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Batch_scan_opcode 1 ottetto 0x02 [Set Batch Scan parameters]

LE_Batch_Scan_Command: Set batch scan parameter subcommand

Sub OCF: 0x03

Parametro del sottocomando Dimensioni Finalità
Batch_Scan_Mode 1 ottetto 0x00 – La scansione batch è disattivata
0x01 – La modalità troncata è attivata
0x02 – La modalità completa è attivata
0x03 – La modalità troncata e la modalità completa sono attive
Duty_cycle_scan_window 4 ottetti Tempo di scansione della scansione batch (numero di slot)
Duty_cyle_scan_interval 4 ottetti Intervallo di scansione batch (numero di slot)
own_address_type 1 ottetto 0x00 - Indirizzo dispositivo pubblico
0x01 - Indirizzo dispositivo casuale
Batch_scan_Discard_Rule 1 ottetto 0 - Discard oldest advertisement
1 - Discard advertisement with weakest RSSI

Questo comando secondario avvierà la scansione batch, se abilitata. Nella scansione troncata, i risultati vengono memorizzati in forma troncata, dove la chiave univoca per Truncated style = {BD_ADDR, scan_interval}. Ciò significa che può essere registrato un solo BD_ADDR will per ogni intervallo di scansione. Il record da conservare per la modalità troncata è il seguente: {BD_ADDR, Tx Power, RSSI, Timestamp}

Quando la modalità Completa è abilitata, verrà utilizzata la scansione attiva e le risposte alla scansione verranno registrate. La chiave univoca dello stile completo = {MAC, pacchetto annuncio}, indipendentemente dall'intervallo di scansione. Il record da conservare per la modalità Completa è {BD_ADDR, Tx Power, RSSI, Timestamp, Ad packet, Scan Response}. Nello stile Completo, lo stesso pacchetto AD, se visualizzato più volte in intervalli di scansione diversi, viene registrato una sola volta. Tuttavia, in modalità troncata, l'interesse è rivolto alla visibilità di BA_ADDR in diversi intervalli di scansione (una volta per intervallo di scansione). L'RSSI è il valore medio di tutti i duplicati di una pubblicità univoca all'interno di un intervallo di scansione.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Batch_scan_opcode 1 ottetto 0x03 [Set Batch Scan Parameters]

LE_Batch_Scan_Command: Read batch scan results subcommand

Sub OCF: 0x04

Parametro del sottocomando Dimensioni Finalità
Batch_Scan_Data_read 1 ottetto 0x01 - Truncated mode data
0x02 - Full mode data

Per questo comando verrà generato un evento Command Complete. Quando l'host emette questo comando, tutti i risultati nel controller potrebbero non rientrare in un unico evento Command Complete. L'host ripeterà l'emissione di questo comando finché i risultati corrispondenti nell'evento Command Complete non indicheranno 0 nel numero di record, il che indica che il controller non ha più record da comunicare all'host. Ogni evento Command Complete può contenere più record di un solo tipo di dati (completi o troncati).

I riferimenti temporali del controller e dell'host non sono sincronizzati. L'unità di tempo del timestamp è 50 ms. Il valore del timestamp si basa sul momento in cui Read_Batch_Scan_Results_Sub_cmd viene fornito dall'host. Se l'ora di arrivo di un comando è T_c nel firmware, l'ora effettiva in cui è stato acquisito il timestamp nel firmware è T_fw. Il momento del report sarà: (T_c - T_fw). T_c e T_fw si trovano nel dominio temporale del firmware. In questo modo l'host può calcolare quanto tempo fa si è verificato l'evento.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Batch_scan_opcode 1 ottetto 0x03 [Set Batch Scan parameters]
Batch_Scan_data_read 1 ottetto Identifica il formato (troncato o completo)
num_of_records 1 ottetto Numero di record di Batch_Scan_data_read
format_of_data Variabile Modalità troncata:
Address[0]: 6 octets
Address_Type[0]: 1 octet
Tx_Pwr[0]: 1 octet
RSSI[0] : 1 octet
Timestamp[0]: 2 octets
[multiple records (num_of_records) with above format]

Modalità completa:
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
[multiple records with above format (num_of_records)]

Filtro dei contenuti del pacchetto pubblicitario

Utilizza questa opzione per attivare/disattivare/configurare il filtro dei contenuti dei pacchetti pubblicitari (APCF) nel controller. APCF filtra i report pubblicitari nel controller, ma non filtra la pubblicità periodica.

LE_APCF_Command

OCF: 0x157

Parametro comando Dimensioni Finalità
APCF_opcode 1 ottetto 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 - Reserved for future use
0xB0 ~ 0xDF - Reserved for vendor
0xE0 ~ 0xFE - Reserved for future use
0xFF - APCF Read extended Features

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato del reso
APCF_opcode 1 ottetto 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 - Reserved for future use
0xB0 ~ 0xDF - Reserved for vendor
0xE0 ~ 0xFE - Reserved for future use
0xFF - APCF Read extended Features

LE_APCF_Command: Enable_sub_cmd

Sub OCF: 0x00

Parametro del sottocomando Dimensioni Finalità
APCF_enable 1 ottetto 0x01 - Enable APCF feature
0x00 - Disable APCF feature

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x0 - APCF Enable
APCF_Enable 1 ottetto L'attivazione/disattivazione viene impostata tramite APCF_enable

LE_APCF_Command: set_filtering_parameters_sub_cmd

Questo comando secondario viene utilizzato per aggiungere o eliminare una specifica di filtro o cancellare un elenco di filtri per il filtraggio on-chip.

Sub OCF: 0x01

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete will clear the specific filter along with associated feature entries in other tables.
Cancella tutti i filtri e le voci associate in altre tabelle.
APCF_Filter_Index 1 ottetto Indice del filtro (0, max_filter-1)
APCF_Feature_Selection 2 ottetti Maschere di bit per le funzionalità selezionate:
Bit 0: impostato per abilitare il filtro dell'indirizzo di trasmissione
Bit 1: impostato per abilitare il filtro Modifica dati servizio
Bit 2: impostato per abilitare il controllo UUID servizio
Bit 3: impostato per abilitare il controllo UUID richiesta servizio
Bit 4: impostato per abilitare il controllo del nome locale
Bit 5: impostato per abilitare il controllo dei dati del produttore
Bit 6: impostato per abilitare il controllo dei dati del servizio
Bit 7: impostato per abilitare il controllo del servizio di rilevamento del trasporto
Bit 8: impostato per abilitare il controllo del tipo di annuncio
APCF_List_Logic_Type 2 ottetti Operazione logica per ogni selezione di funzionalità (per posizione bit) specificata in APCF_Feature_Selection.
Valido solo quando una funzionalità è abilitata.
Valore della posizione del bit:
0: OR
1: AND
Se è selezionata la logica "AND", un pacchetto ADV supererà il filtro solo se contiene TUTTE le voci dell'elenco.
Se è selezionata la logica "OR", un pacchetto ADV supererà il filtro se contiene una qualsiasi delle voci dell'elenco.
APCF_Filter_Logic_Type 1 ottetto 0x00: OR
0x01: AND
Nota: il tipo di logica è N/A per i primi tre campi di APCF_Feature_Selection, che è sempre la logica "AND". Sono applicabili solo ai quattro campi (bit 3 - bit 6) di APCF_Feature_Selection.
rssi_high_thresh 1 ottetto [in dBm]
L'inserzionista viene considerato visto solo se il segnale è superiore alla soglia alta RSSI. In caso contrario, il firmware deve comportarsi come se non l'avesse mai visto.
delivery_mode 1 ottetto 0x00 - immediate
0x01 - on_found
0x02 - batched
onfound_timeout 2 ottetti Valido solo se delivery_mode è on_found.
[in millisecondi]
Tempo necessario al firmware per rimanere attivo e raccogliere ulteriori annunci prima di generare report.
onfound_timeout_cnt 1 ottetto Valido solo se delivery_mode è on_found.
[count]
Se una pubblicità in onFound rimane nel firmware per la durata di onfound_timeout, raccoglierà alcune pubblicità e il conteggio viene verificato. Se il conteggio supera onfound_timeout_cnt, viene segnalato OnFound immediatamente dopo.
rssi_low_thresh 1 ottetto Valido solo se delivery_mode è on_found.
[in dBm]
Il pacchetto dell'inserzionista viene considerato non visto se l'RSSI del pacchetto ricevuto non supera la soglia bassa dell'RSSI.
onlost_timeout 2 ottetti Valido solo se delivery_mode è on_found.
[in millisecondi]
Se una pubblicità, dopo essere stata trovata, non viene visualizzata in modo continuo per il periodo lost_timeout, verrà immediatamente segnalata come persa.
num_of_tracking_entries 2 ottetti Valido solo se delivery_mode è on_found.
[count]
Numero totale di inserzionisti da monitorare per filtro.

I valori RSSI devono utilizzare il complemento a 2 per rappresentare i valori negativi.

L'host deve essere in grado di configurare più filtri con APCF_Application_Address_type impostato su 0x02 (per tutti gli indirizzi di emittente) per gestire varie combinazioni di filtri.

Il filtraggio, il raggruppamento e la generazione di report sono concetti interconnessi. Ogni pubblicità e la relativa risposta alla scansione dovranno superare tutti i filtri, uno dopo l'altro. Pertanto, le azioni risultanti (delivery_mode) sono strettamente correlate al filtro. Le modalità di invio sono le seguenti: report_immediately, batch e onFound. Il valore di OnLost è correlato a OnFound nel senso che verrà dopo OnFound quando viene perso.

Questo flusso di elaborazione mostra il modello concettuale:

Quando viene ricevuto un frame di pubblicità (o di risposta alla scansione), viene applicato a tutti i filtri in ordine seriale. È possibile che una pubblicità possa causare la generazione immediata di report in base a un filtro e il raggruppamento dello stesso a causa di un'azione di filtro diversa.

Le soglie del livello RSSI (alto e basso) consentono di controllare quando il frame è visibile per l'elaborazione dei filtri, anche quando il controller riceve un pacchetto valido. Se la modalità di pubblicazione è impostata su immediata o batch, l'RSSI di un frame viene preso in considerazione per l'ulteriore elaborazione del controller. App diverse richiedono comportamenti di batch e report diversi. Ciò consente a più app di avere report diretti e/o raggruppamento dei risultati nel firmware contemporaneamente. Un esempio è un caso in cui una scansione batch è attiva da un'app e successivamente viene emessa una scansione LE normale da un'altra app. Prima dell'emissione di una scansione batch, il framework/l'app imposta i filtri appropriati. In un secondo momento, quando la seconda app esegue una scansione regolare, il batch precedente continua. Tuttavia, a causa della scansione regolare, è come aggiungere concettualmente un filtro nullo (insieme a tutti i filtri esistenti) insieme al comando di scansione LE. I parametri del comando di scansione LE hanno la precedenza quando sono attivi. Quando la scansione LE regolare è disattivata, il controller ripristina una scansione batch precedente, se esisteva.

La modalità di pubblicazione OnFound si basa sui filtri configurati. Una combinazione che attiva l'azione di un filtro viene considerata l'entità da monitorare per onLost. L'evento corrispondente è l'evento secondario di monitoraggio della pubblicità LE.

La transizione OnFound/OnLost per un filtro (se abilitato) sarà simile alla seguente:

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x01 - APCF Set Filtering Parameters
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci disponibili nella tabella dei filtri

LE_APCF_Command: broadcast_address_sub_cmd

Questo comando secondario viene utilizzato per aggiungere o eliminare l'indirizzo di un inserzionista o per cancellare l'elenco degli indirizzi degli inserzionisti per il filtraggio on-chip.

Sub OCF: 0x02

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete will delete the specified broadcaster address in the specified filter.
Cancella cancella tutti gli indirizzi di emittente nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice del filtro (0, max_filter-1)
APCF_Broadcaster_Address 6 ottetti Indirizzo del dispositivo di 6 byte da aggiungere o eliminare dall'elenco degli indirizzi del broadcaster
APCF_Application_Address_type 1 ottetto 0x00: Pubblico
0x01: Casuale
0x02: NA (ignora il tipo di indirizzo)
Per filtrare i report pubblicitari con tipi di indirizzo identità (0x02, 0x03). Per ottenere report pubblicitari con i tipi di indirizzo 0x02 e 0x03, imposta questo campo su 0x02: NA (ignora il tipo di indirizzo).

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x02 - APCF Broadcaster Address
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci senza costi ancora disponibili nella tabella Indirizzo di trasmissione

LE_APCF_Command: service_uuid_sub_cmd

Questo comando secondario viene utilizzato per aggiungere o eliminare un UUID del servizio o per cancellare un elenco di UUID del servizio per il filtro on-chip.

Sub OCF: 0x03

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete will delete the specified service UUID address in the specified filter.
Cancella cancella tutti gli UUID del servizio nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice del filtro (0, max_filter-1)
APCF_UUID 2,4,16 ottetti L'UUID del servizio (16 bit, 32 bit o 128 bit) da aggiungere o eliminare dall'elenco.
APCF_UUID_MASK 2,4,16 ottetti La maschera UUID del servizio (16 bit, 32 bit o 128 bit) da aggiungere all'elenco. Deve avere la stessa lunghezza di APCF_UUID.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x03 - APCF Service UUID
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci senza costi ancora disponibili nella tabella UUID servizio

LE_APCF_Command: solicitation_uuid_sub_cmd

Questo comando secondario viene utilizzato per aggiungere o eliminare un UUID di richiesta o per cancellare un elenco di UUID di richiesta per il filtro on-chip.

Sub OCF: 0x04

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete will delete the solicitation UUID address in the specified filter.
Cancella tutti gli UUID di richiesta nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice del filtro (0, max_filter-1)
APCF_UUID 2,4,16 ottetti L'UUID della richiesta (16 bit, 32 bit o 128 bit) da aggiungere o eliminare dall'elenco.
APCF_UUID_MASK 2,4,16 ottetti La maschera UUID della richiesta (16 bit, 32 bit o 128 bit) da aggiungere all'elenco. Deve avere la stessa lunghezza di APCF_UUID.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x04 - APCF Solicitation UUID
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci senza costi ancora disponibili nella tabella UUID della richiesta

LE_APCF_Command: local_name_sub_cmd

Questo comando secondario viene utilizzato per aggiungere o eliminare una stringa di nome locale o per cancellare l'elenco di stringhe di nomi locali per il filtraggio on-chip.

Sub OCF: 0x05

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete eliminerà la stringa del nome locale specificata nel filtro specificato.
Cancella cancella tutte le stringhe di nomi locali nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice del filtro (0, max_filter-1)
APCF_LocName_Mandata_or_SerData Dimensione variabile Una stringa di caratteri per il nome locale.

Note:
  • Al momento, il numero massimo di caratteri in una stringa di nome locale è 29
  • Non applicabile quando l'azione è "Cancella" (0x2)

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x05 - APCF Local Name
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci senza costi ancora disponibili nella tabella Nome locale

LE_APCF_Command: manf_data_sub_cmd

Questo comando secondario viene utilizzato per aggiungere o eliminare una stringa di dati del produttore o per cancellare l'elenco delle stringhe di dati del produttore per il filtraggio on-chip.

Sub OCF: 0x06

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete eliminerà la stringa di dati del produttore specificata nel filtro specificato.
Cancella cancella tutte le stringhe di dati del produttore nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice filtro (0, max_filter-1)
APCF_LocName_Mandata_or_SerData Dimensione variabile Una stringa di caratteri per i dati del produttore.

Note:
  • Al momento, il numero massimo di caratteri in una stringa di nome locale è 29
  • Non applicabile quando l'azione è "Cancella" (0x2)
APCF_ManData_Mask Dimensione variabile La maschera dei dati di produzione da aggiungere all'elenco. Deve avere la stessa lunghezza di APCF_LocName_or_ManData_or_SerData.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x06 - APCF Manufacturer Data
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci senza costi ancora disponibili nella tabella Dati del produttore

LE_APCF_Command: service_data_sub_cmd

Questo sottocomando viene utilizzato per aggiungere o eliminare una stringa di dati del servizio o per cancellare l'elenco delle stringhe di dati del servizio per il filtraggio on-chip.

Sub OCF: 0x07

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete eliminerà la stringa di dati del servizio specificata nel filtro specificato.
Cancella cancella tutte le stringhe di dati del servizio nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice filtro (0, max_filter-1)
APCF_LocName_Mandata_or_SerData Dimensione variabile Una stringa di caratteri per i dati di servizio.

Note:
  • Al momento, il numero massimo di caratteri in una stringa di nome locale è 29
  • Non applicabile quando l'azione è "Cancella" (0x2)
APCF_LocName_Mandata_or_SerData_Mask Dimensione variabile La maschera dei dati del servizio da aggiungere all'elenco. Deve avere la stessa lunghezza di APCF_LocName_or_ManData_or_SerData.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x07 - APCF Service Data
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci senza costi ancora disponibili per la tabella Dati del servizio

LE_APCF_Command: ad_type_sub_cmd

Questo comando secondario viene utilizzato per aggiungere o eliminare un tipo di annuncio o per cancellare un elenco di tipi di annuncio per il filtraggio on-chip. Utilizza read_extended_features_sub_cmd per verificare se questo comando è supportato o meno.
Quando APCF_AD_DATA_Length è 0, filtra APCF_AD_TYPE senza confrontare i dati AD e la maschera dei dati AD. Se la lunghezza dei dati del pacchetto ADV ricevuto supera AD_DATA_LENGTH, confronta solo i primi AD_DATA_LENGTH byte di AD Data e ignora i dati rimanenti.

Sub OCF: 0x09

Parametro del sottocomando Dimensioni Finalità
APCF_Action 1 ottetto 0x00 - Add
0x01 - Delete
0x02 - Clear
Delete elimina il tipo di annuncio specificato nel filtro specificato.
Cancella tutti i tipi di annunci nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice filtro (0, max_filter-1)
APCF_AD_TYPE 1 ottetto Il tipo di annuncio da aggiungere all'elenco o da eliminare dall'elenco. Ignora quando APCF_Action è 0x02 (Cancella)
APCF_AD_DATA_Length 1 ottetto 0x00: non filtrare i contenuti dei dati
Ignora quando APCF_Action è 0x02 (Cancella)
APCF_AD_DATA Dimensione variabile Dimensioni variabili, in base a APCF_AD_DATA_Length
Ignora quando APCF_Action è 0x02 (Cancella)
APCF_AD_DATA_MASK Dimensione variabile Dimensioni variabili, in base a APCF_AD_DATA_Length
Ignora quando APCF_Action è 0x02 (Cancella)
Deve avere la stessa lunghezza di APCF_AD_DATA.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0x09 - APCF AD Type
APCF_Action 1 ottetto Comando di risposta APCF_Action
APCF_AvailableSpaces 1 ottetto Numero di voci senza costi ancora disponibili nella tabella Tipo di annuncio

LE_APCF_Command: read_extended_features_sub_cmd

Questo comando secondario viene utilizzato per leggere le funzionalità APCF estese.

Sub OCF: 0xFF

Parametro del sottocomando Dimensioni Finalità
Non applicabile Parametro del comando vuoto.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
APCF_opcode 1 ottetto 0xFF - APCF_Read_Extended_Features
APCF_extended_features 2 ottetti

Maschere di bit per le funzionalità estese supportate:

  • Bit 0: Supporta il filtro del servizio di rilevamento del trasporto
  • Bit 1: Supporta il filtro Tipo di annuncio
  • Bit 2 ~15: riservati per uso futuro

Valore del bit

  • 0 = Non supportato
  • 1 = Supportato

Comando per l'attività e le informazioni sull'energia del controller

Lo scopo di queste informazioni è consentire alle funzioni di livello superiore del sistema host di analizzare le attività totali di tutti i componenti, inclusi il controller BT e il relativo macrostato, in combinazione con ciò che accade nelle app e nel framework. A questo scopo, sono necessarie le seguenti informazioni dallo stack BT e dal controller:

  • BT stack: Reporting the current macro-operational state of the controller
  • Firmware: report su attività aggregate e informazioni sull'energia

Stati della macro dello stack host BT, determinati a livello di utente:

  • Idle: [page scan, LE advt, inquiry scan, LE scan]
  • Scansione: [paging/inquiry/trying to connect]
  • Attivo: [link ACL attivo, link SCO in corso, modalità di sniffing]

Le attività che il controller tiene traccia durante il suo ciclo di vita sono il tempo di trasmissione, il tempo di ricezione, il tempo di inattività e l'energia totale consumata. Vengono cancellati quando vengono letti dall'host.

LE_Get_Controller_Activity_Energy_Info

Questo è un comando specifico del fornitore.

OCF: 0x159

Parametro del sottocomando Dimensioni Finalità
NA Empty command params

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
total_tx_time_ms 4 ottetti Tempo totale di esecuzione della transazione
total_rx_time_ms 4 ottetti Tempo totale di esecuzione della prescrizione
total_idle_time_ms 4 ottetti Tempo totale inattivo (stati di basso consumo non di sonno)
total_energy_used 4 ottetti Energia totale utilizzata [prodotto di corrente (mA), tensione (V) e tempo (ms)]

Comando LE extended set scan parameters

Questo comando può essere utilizzato per attivare una finestra di scansione e un intervallo più ampi nel controller. In base alla specifica BT Core 5.2, una finestra di scansione e un intervallo hanno un limite superiore di 10,24 secondi, il che ostacola intervalli di scansione superiori a 10,24 secondi per le app.

Riferimento di base: BT Core 5.2 Specification, pagina 2493 (LE Set Scan Parameters Command)

OCF: 0x15A

Parametro del comando Dimensioni Finalità
LE_Ex_Scan_Type 1 ottetto 0x00 - Scansione passiva. Non verranno inviati pacchetti SCAN_REQ (impostazione predefinita).
0x01 - Active scanning. Potrebbero essere inviati pacchetti SCAN_REQ.
LE_Ex_Scan_Interval 4 ottetti Definito come l'intervallo di tempo dall'inizio dell'ultima scansione LE del controller all'inizio della scansione LE successiva.
Intervallo: da 0x0004 a 0x00FFFFFF
Valore predefinito: 0x0010 (10 ms)
Tempo = N * 0,625 ms
Intervallo di tempo: da 2,5 ms a 10442,25 secondi
LE_Ex_Scan_Window 4 ottetti La durata della scansione LE. LE_Scan_Window deve essere inferiore o uguale a LE_Scan_Interval.
Intervallo: da 0x0004 a 0xFFFF
Valore predefinito: 0x0010 (10 ms)
Tempo = N * 0,625 ms
Intervallo di tempo: da 2,5 ms a 40,95 secondi
Own_Address_Type 1 ottetto 0x00 - Indirizzo dispositivo pubblico (impostazione predefinita)
0x01 - Indirizzo dispositivo casuale
LE_Ex_Scan_Filter_Policy 0x00 - Accetta tutti i pacchetti pubblicitari (impostazione predefinita). I pacchetti pubblicitari indirizzati che non sono indirizzati a questo dispositivo devono essere ignorati.
0x01 - Ignore advertisement packets from devices not in the White List Only list. I pacchetti pubblicitari indirizzati che non sono indirizzati a questo dispositivo verranno ignorati.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato

Ottieni comando per le informazioni di debug del controller

L'obiettivo di questo elemento informativo è acquisire informazioni di debug del controller da un host, in formato binario, per l'analisi e il post-elaborazione. In questo modo è possibile eseguire il debug dei problemi sul campo e fornire agli ingegneri un toolkit per registrare le informazioni per l'analisi. Un titolare del trattamento può fornire le informazioni quando richieste da un host tramite l'evento (evento secondario Controller Debug Info) o autonomamente quando desiderato dal titolare del trattamento. Esempi di utilizzo potrebbero essere la segnalazione di informazioni sullo stato del firmware, informazioni sul dump degli arresti anomali, informazioni di logging e così via.

OCF: 0x15B

Parametro comando Dimensioni Finalità
N/D Elenco di parametri di comando vuoto

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato

Supporto dell'offload hardware A2DP

La funzionalità di offload A2DP supporta l'offload del processo di codifica audio A2DP a un processore audio collegato al controller BT. Il flusso di dati audio codificati passa direttamente dal processore audio al controller BT senza il coinvolgimento dell'host BT. L'host BT è ancora responsabile della configurazione e del controllo della sessione A2DP. Sono disponibili due versioni dei comandi. I comandi legacy con Sub OCF 0x01-0x02 supportano solo i codec open source. Le versioni con Sub-OCF 0x03-0x04 sono indipendenti dal codec configurato.

OCF: 0x15D

Avvia offload A2DP (legacy)

Sub OCF: 0x01

Utilizza questo comando sia per configurare il processo di offload A2DP sia per avviare lo stream A2DP.

Parametro comando Dimensioni Finalità
Codec 4 ottetti Specifica il tipo di codec
0x01 - SBC
0x02 - AAC
0x04 - APTX
0x08 - APTX HD
0x10 - LDAC
Max_Latency 2 ottetti Latenza massima consentita (in ms). Un valore pari a zero disabilita lo svuotamento.
SCMS-T_Enable 2 ottetti Ottetto 0: flag che consente l'aggiunta dell'intestazione SCMS-T.
  • 0x00 - Intestazione SCMS-T non inclusa.
  • 0x01 - Intestazione SCMS-T inclusa.

Ottetto 1: valore dell'intestazione SCMS-T, se è abilitata.

Sampling_Frequency 4 ottetti 0x01 - 44100 Hz
0x02 - 48000 Hz
0x04 - 88200 Hz
0x08 - 96000 Hz
Bits_Per_Sample 1 ottetto 0x01 - 16 bit per campione
0x02 - 24 bit per campione
0x04 - 32 bit per campione
Channel_Mode 1 ottetto 0x01 - Mono
0x02 - Stereo
Encoded_Audio_Bitrate 4 ottetti La velocità in bit dell'audio codificato al secondo.
0x00000000 - La velocità in bit dell'audio non è specificata / non utilizzata.
0x00000001 - 0x00FFFFFF - Velocità in bit dell'audio codificato in bit al secondo.
0x01000000 - 0xFFFFFFFF - Riservato.
Connection_Handle 2 ottetti Handle di connessione della connessione A2DP in fase di configurazione
L2CAP_Channel_ID 2 ottetti ID canale L2CAP da utilizzare per questa connessione A2DP
L2CAP_MTU_Size 2 ottetti Dimensione massima dell'MTU L2CAP contenente pacchetti audio codificati
Codec_Information 32 ottetti Informazioni specifiche sul codec.

Codec SBC:

Fai riferimento agli elementi informativi specifici del codec SBC in A2DP v1.3.
Ottetto 0: lunghezza blocco | Subbanda | Metodo di allocazione
Ottetto 1: valore minimo di bitpool
Ottetto 2: valore massimo di bitpool
Ottetto 3: frequenza di campionamento | modalità canale
Ottetti 4-31: riservati

Codec AAC:

Fai riferimento agli elementi informativi specifici del codec AAC in A2DP v1.3
Ottetto 0: tipo di oggetto
Ottetto 1; b7: VBR
Ottetti 2-31: riservati

Codec LDAC:

Ottetto 0-3: ID fornitore
0x0000012D

Ottetti 4-5: ID codec
0x00AA - LDAC
Tutti gli altri valori sono riservati

Ottetto 6: indice del bitrate:
0x00 - Alto
0x01 - Medio
0x02 - Basso
0x03 - 0x7E - Riservato
0x7F - ABR (Adaptive Bit Rate)
0x80 - 0xFF - Riservato

Ottetto 7: LDAC Channel Mode
0x01 - Stereo
0x02 - Dual
0x04 - Mono
Altri valori sono riservati

Ottetto 8-31: riservato

Tutti gli altri codec:

Ottetto 0-31: riservato

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Sub_Opcode 1 ottetto 0x01 - Avvia offload A2DP

Avvia offload A2DP

Sub OCF: 0x03

Utilizza questo comando sia per configurare il processo di offload A2DP sia per avviare lo stream A2DP.

Parametro comando Dimensioni Finalità
Connection Handle 2 ottetti Handle della connessione HCI attiva
L2CAP_Channel_ID 2 ottetti Identificatore del canale L2CAP aperto per lo streaming A2DP
Data_Path_Direction 1 ottetto 0x00 - Output (origine/unione AVDTP)
0x01 - Input (sink/divisione AVDTP)
Peer_MTU 2 ottetti Dimensione massima dei pacchetti L2CAP, negoziata con il peer.
CP_Enable_SCMS_T 1 ottetto 0x00 - Disattiva l'intestazione di protezione dei contenuti SCMS-T
0x01 - Attiva l'intestazione di protezione dei contenuti SCMS-T
CP_Header_SCMS_T 1 ottetto Quando l'intestazione di protezione dei contenuti SCMS-T è attivata (CP_SCMS_T_Enable impostato su 0x01), definisce il valore dell'intestazione che precede i contenuti audio (fai riferimento ad A2DP, sezioni 3.2.1-2) come definito da Bluetooth Assigned Numbers, sezione 6.3.2.
Ignorato quando la protezione dei contenuti SCMS-T non è abilitata.
Vendor_Specific_Parameters_Length 1 ottetto Lunghezza dei parametri specifici del fornitore, compresa tra 0 e 128.
Il valore 0 viene utilizzato quando non vengono forniti parametri aggiuntivi.
Vendor_Specific_Parameters 0-128 ottetti Parametri specifici del fornitore forniti da Bluetooth Audio HAL, CodecParameters.vendorSpecificParameters[].

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Sub_Opcode 1 ottetto 0x03 - Start A2DP offload

Interrompi l'offload A2DP (legacy)

Sub OCF: 0x02

Questo comando viene utilizzato per interrompere lo stream di offload A2DP.

Parametro comando Dimensioni Finalità
N/D Elenco di parametri di comando vuoto.

Per questo comando non sono definiti parametri.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Sub_Opcode 1 ottetto 0x02 - Stop A2DP offload

Interrompi offload A2DP

Sub OCF: 0x04

Questo comando viene utilizzato per interrompere lo stream di offload A2DP.

Parametro comando Dimensioni Finalità
Connection Handle 2 ottetti Handle della connessione HCI attiva
L2CAP_Channel_ID 2 ottetti Identificatore del canale L2CAP aperto per lo streaming A2DP
Data_Path_Direction 1 ottetto 0x00 - Output (origine/unione AVDTP)
0x01 - Input (sink/divisione AVDTP)

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Sub_Opcode 1 ottetto 0x04 - Interrompi offload A2DP

Comando Report sulla qualità del Bluetooth

La funzionalità del comando BT Quality Report avvia il meccanismo nel controller Bluetooth per segnalare gli eventi di qualità Bluetooth all'host. Puoi attivare quattro opzioni:

  • Modalità di monitoraggio della qualità: il controller invia periodicamente un evento secondario BQR correlato alla qualità del collegamento all'host.
  • Avvicinamento a LSTO: se non vengono ricevuti pacchetti dal dispositivo BT collegato per un periodo di tempo superiore alla metà del valore di Link Supervision TimeOut (LSTO), il controller segnala all'host un evento di avvicinamento a LSTO.
  • Audio A2DP discontinuo: quando il controller rileva fattori che causano un audio discontinuo, il controller segnala un evento Audio A2DP discontinuo all'host.
  • (e)SCO Voice Choppy: quando il controller rileva fattori che causano una voce disturbata, segnala un evento (e)SCO Voice Choppy all'host.
  • Root Inflammation: questo evento viene inviato dal controller allo stack quando l'HAL o il controller rileva un errore irreversibile e deve riavviare il Bluetooth.
  • Trace LMP/LL: il controller invia il messaggio LMP/LL handshake con il dispositivo remoto all'host.
  • Traccia di pianificazione Bluetooth Multi-profile/Coex: il controller invia all'host le informazioni di pianificazione sulla gestione di più profili Bluetooth e della coesistenza wireless nella banda a 2,4 GHz.
  • Meccanismo di informazioni di debug del controller: se abilitato, il controller può segnalare autonomamente le informazioni di logging di debug tramite l'evento secondario di informazioni di debug del controller all'host.
  • LE Audio Choppy: quando il controller rileva fattori che causano un audio frammentato, segnala un evento LE Audio Choppy all'host.
  • Modalità Statistiche RF avanzate: il controller invia all'host le informazioni relative alle statistiche RF, supportando due casi d'uso dei report:
    • Report periodici
    • Attivatori di eventi (avvio/interruzione dello stream e attivatore di eventi di qualità del collegamento).
  • Il meccanismo di monitoraggio dell'integrità del controller fornisce all'host informazioni relative all'integrità tramite due tipi di eventi: report periodici e report attivati da eventi.
  • BQR_Report_Action del comando Bluetooth Quality Report: l'host può utilizzare questo comando HCI per ottenere una query una tantum per la modalità di monitoraggio della qualità, la modalità di monitoraggio del consumo energetico o una modalità di statistiche RF avanzate.

OCF: 0x15E

Parametro comando Dimensioni Finalità
BQR_Report_Action 1 ottetto Azione per aggiungere / eliminare la generazione di report sugli eventi di qualità impostati nel parametro BQR_Quality_Event_Mask o cancellare tutto.

0x00 - Add
0x01 - Delete
0x02 - Clear
0x03 - One time query

L'eliminazione cancellerà i report relativi a eventi di qualità specifici.
Clear cancella tutti i report sugli eventi di qualità (il parametro BQR_Quality_Event_Mask può essere ignorato).

BQR_Quality_Event_Mask 4 ottetti Maschere di bit per la segnalazione degli eventi di qualità selezionati.

Bit 0: impostalo per attivare la modalità di monitoraggio della qualità.
Bit 1: impostato per attivare l'evento Approaching LSTO (per ACL/(e)SCO/ISO).
Bit 2: impostato per attivare l'evento A2DP Audio Choppy.
Bit 3: impostato per attivare l'evento Voce eSCO intermittente.
Bit 4: impostato per attivare l'evento di infiammazione della radice.
Bit 5: impostato per abilitare la modalità di monitoraggio del consumo energetico.
Bit 6: impostato per attivare l'evento di interruzione dell'audio LE.
Bit 7: impostato per attivare l'evento di errore di connessione.
Bit 8: impostato per attivare l'attivazione dell'evento della modalità Statistiche RF avanzate.
Bit 9: impostato per attivare il report periodico sulle statistiche RF avanzate.
Bit 10: impostato per attivare l'evento di attivazione del meccanismo di monitoraggio dello stato di integrità del controller. (aggiunto in BQRv7)
Bit 11: impostato per attivare la segnalazione periodica del meccanismo di monitoraggio dell'integrità del controller. (aggiunto in BQRv7)
Bit 12 ~ 14: riservati.
Bit 15: impostato per attivare gli eventi di qualità specifici del fornitore.
Bit 16: impostato per attivare la traccia dei messaggi LMP/LL.
Bit 17: impostato per abilitare la traccia della pianificazione di Bluetooth Multi-link/Coex.
Bit 18: impostato per attivare il meccanismo di informazioni di debug del controller.
Bit 19: riservato alle informazioni di debug dell'offload.
Bit 20: trigger evento di dump della cronologia UART. (aggiunto in BQRv7)
Bit 21 ~ 30: riservati.
Bit 31: impostato per attivare la traccia specifica del fornitore.

BQR_Minimum_Report_Interval 2 ottetti Definisci l'intervallo di tempo minimo per la generazione di report sugli eventi di qualità per gli eventi di qualità selezionati. Il firmware del controller non deve segnalare l'evento successivo entro l'intervallo di tempo definito. L'impostazione dell'intervallo deve essere rispettiva e dedicata agli eventi di qualità che vengono aggiunti.

Unità: ms
Valore predefinito: 0 (nessuna limitazione per l'intervallo).
Intervallo: 0 ~ 65535 ms

BQR_Vendor_Specific_Quality_Event_Mask 4 ottetti Maschere di bit per la segnalazione di eventi di qualità specifici del fornitore selezionato.
Questo parametro è valido solo quando è impostato il bit 15 di BQR_Quality_Event_Mask.

Bit 0-31: riservati.

BQR_Vendor_Specific_Trace_Mask 4 ottetti Maschere di bit per la generazione di report di traccia specifici del fornitore selezionato.
Questo parametro è valido solo quando è impostato il bit 31 di BQR_Quality_Event_Mask.

Bit 0-31: riservati.

Report_interval_multiple 4 ottetti Il moltiplicatore per BQR_Minimum_Report_Interval. Quando questo valore è >= 1, l'intervallo del report BQR segue il formato
Intervallo del report BQR = BQR_Minimum_Report_Interval x Report_interval_multiple.
Il firmware del controller non deve segnalare l'evento successivo entro l'intervallo di tempo definito. L'impostazione dell'intervallo è dedicata specificamente agli eventi di qualità aggiunti.

Unità: ms
Valore predefinito: 1
Intervallo: 0 ~ 4294967295 (0: è uguale a 1)

Nota: se l'impostazione di BQR_Report_Interval è maggiore della capacità del controller, quest'ultimo deve restituire il tempo massimo di BQR_Report_Interval al completamento del comando.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Current_Quality_Event_Mask 4 ottetti Indica l'impostazione della maschera di bit corrente.
Bit 0: la modalità di monitoraggio della qualità è abilitata.
Bit 1: il reporting sugli eventi di avvicinamento alla fine del periodo di archiviazione è attivato.
Bit 2: è abilitata la segnalazione di eventi audio A2DP intermittenti.
Bit 3: è attivata la generazione di report sugli eventi di voce eSCO intermittente.
Bit 4: è attivata la generazione di report sugli eventi di infiammazione della radice.
Bit 5: la modalità di monitoraggio dell'energia è abilitata.
Bit 6: è attivata la segnalazione di eventi di audio LE intermittente.
Bit 7: evento di connessione non riuscita.
Bit 8: impostato per attivare l'attivazione dell'evento della modalità Statistiche RF avanzate.
Bit 9: impostato per abilitare la generazione periodica di report sulle statistiche RF avanzate.
Bit 10: impostato per attivare l'evento del meccanismo di monitoraggio dello stato del controller.
Bit 11: impostato su enabled controller health monitoring mechanism periodically report.
Bit 12 ~ 14: riservati.
Bit 15: la generazione di report sugli eventi di qualità specifici del fornitore è abilitata.
Bit 16: la traccia dei messaggi LMP/LL è abilitata.
Bit 17: la traccia di pianificazione Bluetooth Multi-link/Coex è abilitata.
Bit 18: il meccanismo delle informazioni di debug del controller è abilitato.
Bit 19: riservato alle informazioni di debug dell'offload
Bit 20: trigger dell'evento di dump della cronologia UART
Bit 21-30: riservati.
Bit 31: la traccia specifica del fornitore è attivata.
Current_Vendor_Specific_Quality_Event_Mask 4 ottetti Indica l'impostazione della maschera di bit corrente.
Current_Vendor_Specific_Trace_Mask 4 ottetti Indica l'impostazione della maschera di bit corrente.
BQR_Report_interval 4 ottetti Indica l'impostazione della maschera di bit corrente.
Current_Vendor_Specific_Trace_Mask 4 ottetti L'impostazione di BQR_Report_interval. Deve essere il valore minimo tra BQR_Minimum_Report_Interval * Report_interval_multiple o l'intervallo di supporto massimo del controller.

Comando per il buffer audio dinamico

Il buffer audio dinamico riduce i problemi audio modificando le dimensioni del buffer audio nel controller Bluetooth in base a vari scenari.

OCF: 0x15F

Ottenere la funzionalità di tempo di buffer audio

Sub OCF: 0x01

Utilizza questo comando per ottenere la funzionalità di tempo di buffer audio dal controller Bluetooth.

Parametro comando Dimensioni Finalità
N/D Elenco di parametri di comando vuoto

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Dynamic_Audio_Buffer_opcode 1 ottetto 0x01 - Get audio buffer time
Audio_Codec_Type_Supported 4 ottetti Maschere di bit per i tipi di codec supportati
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 sono riservati
Audio_Codec_Buffer_Default_Time_For_Bit_0 2 ottetti Tempo di buffer predefinito del tipo di codec Bit 0 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 0 non è supportato.
Unità: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 2 ottetti Tempo di buffer massimo del tipo di codec Bit 0 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 0 non è supportato.
Unità: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 2 ottetti Tempo di buffer minimo del tipo di codec Bit 0 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 0 non è supportato.
Unità: ms
Audio_Codec_Buffer_Default_Time_For_Bit_1 2 ottetti Tempo di buffer predefinito del tipo di codec Bit 1 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 1 non è supportato.
Unità: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 2 ottetti Tempo di buffer massimo del tipo di codec Bit 1 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 1 non è supportato.
Unità: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 2 ottetti Tempo di buffer minimo del tipo di codec Bit 1 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 1 non è supportato.
Unità: ms
...... ...... ......
Audio_Codec_Buffer_Default_Time_For_Bit_31 2 ottetti Tempo di buffer predefinito del tipo di codec Bit 31 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 31 non è supportato.
Unità: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 2 ottetti Tempo di buffer massimo del tipo di codec Bit 31 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 31 non è supportato.
Unità: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 2 ottetti Tempo di buffer minimo del tipo di codec Bit 31 specificato in Audio_Codec_Type_Supported.
Questo valore deve essere 0 se il tipo di codec Bit 31 non è supportato.
Unità: ms

Impostare il tempo del buffer audio

Sub OCF: 0x02

Utilizza questo comando per impostare il tempo del buffer audio sul controller Bluetooth.

Parametro comando Dimensioni Finalità
Audio_Codec_Buffer_Time 2 ottetti Tempo di buffer audio richiesto per il codec attualmente utilizzato.
Unità: ms

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Dynamic_Audio_Buffer_opcode 1 ottetto 0x02 - Set audio buffer time
Audio_Codec_Buffer_Time 2 ottetti Tempo di buffer audio attuale nel controller Bluetooth.
Unità: ms

Evento HCI (specifico del fornitore)

In alcuni casi sono necessari eventi HCI specifici del fornitore. Consulta la figura 5.4 a pagina 1897 della specifica BT Core 5.2. Il parametro evento 0 conterrà sempre il primo codice subevento, in base al quale viene decodificato il resto dell'evento HCI.

Parametro evento Dimensioni Finalità
HCI_vendor_specific_event_code 1 ottetto 0xFF
sub_event_code 1 ottetto Un codice subevento avrà una dimensione di 1 ottetto, il byte immediatamente successivo alla lunghezza del parametro nel pacchetto di eventi HCI.

Evento secondario di superamento della soglia di spazio di archiviazione

Questo evento indica che la soglia di archiviazione è stata superata.

Codice subevento = 0x54

Parametro subevent Dimensioni Finalità
Nessuno

Evento secondario di modifica dello stato di più pubblicità LE

Questo evento indica che un'istanza pubblicitaria ha cambiato stato. Al momento, questo evento viene utilizzato solo per indicare quale istanza pubblicitaria è stata interrotta a seguito di una connessione.

Subevent code = 0x55

Parametro subevento Dimensioni Finalità
Advertising_instance 1 ottetto Identifica l'istanza pubblicitaria specifica
I valori validi sono da 0 a max_advt_instances-1
State_Change_Reason 1 ottetto 0x00: Connessione ricevuta
Connection_handle 2 ottetti Identifica la connessione che ha causato la disattivazione dell'istanza advt (0xFFFF se non valida)

Evento secondario di monitoraggio della pubblicità LE

Questo evento indica quando un inserzionista viene trovato o perso.

Codice evento secondario = 0x56

Parametro subevent Dimensioni Finalità
APCF_Filter_Index 1 ottetto Indice filtro (0, max_filter-1)
Advertiser_State 1 ottetto 0x00: Inserzionista trovato
0x01: Inserzionista perso
Advt_Info_Present 1 ottetto 0x00: Informazioni sull'inserzionista (Advt_Info) presenti
0x01: Informazioni sull'inserzionista (Advt_Info) non presenti
Advertiser_Address 6 ottetti Indirizzo pubblico o casuale
Advertiser_Address_Type 1 ottetto 0x00: Indirizzo pubblico
0x01: Indirizzo casuale
Advt_Info Tx_Pwr[0]: 1 ottetto
RSSI[0]: 1 ottetto
Timestamp[0]: 2 ottetti
Adv packet_len[0]: 1 ottetto
Adv_packet[0]: Adv_packet_len ottetti
Scan_data_resp_len[0]: 1 ottetto
Scan_data_resp[0]: Scan_data_resp ottetti

Evento secondario delle informazioni di debug del controller

Questo evento viene utilizzato da un controller per fornire informazioni di debug binarie a un host.

Codice subevento = 0x57

Parametro subevent Dimensioni Finalità
debug_block_byte_offset_start 2 ottetti Offset in byte del blocco di debug dall'inizio
last_block 1 ottetto 0x00: Sono presenti altri dati di debug
0x01: Ultimo blocco binario; non sono presenti altri dati di debug
cur_pay_load_sz 2 ottetti Dimensione del blocco binario in un evento corrente
Debug_Data Variabile Dati di debug di cur_payload_sz

Evento secondario del report sulla qualità del Bluetooth

Questo evento indica che si è verificato uno dei seguenti casi: si è verificato un evento di qualità Bluetooth, il controller ha caricato la traccia del messaggio LMP/LL e la traccia di pianificazione Bluetooth Multi-link/Coex oppure il controller ha scaricato i dati delle informazioni di debug.

Parametro subevent Dimensioni Finalità
Quality_Report_Id 1 ottetto 0x01: Report sulla qualità in modalità di monitoraggio.
0x02: Avvicinamento alla fine del periodo di validità del token.
0x03: A2DP Audio Choppy.
0x04: (e)SCO Voice Choppy.
0x05 ~ 0x06: riservato.
0x07: LE audio choppy.
0x08: Connessione non riuscita.
0x09 ~ 0xFF: riservato.
Packet_Types 1 ottetto 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: Reserved
0x51: ISO packet
0x52: 1M PHY
0x53: 2M PHY
0x54: Codec PHY S=2
0x55: Codec PHY S=8
0x56 ~ 0xFF: Reserved
Connection_Handle 2 ottetti Handle di connessione ACL/(e)SCO/ISO.
Connection_Role 1 ottetto Esecuzione del ruolo per la connessione.
0x00: Centrale
0x01: Periferico
0x02 ~ 0xFF: Riservato.
TX_Power_Level 1 ottetto Livello di potenza di trasmissione attuale per l'handle di connessione specificato.

Questo valore deve essere uguale a quello del controller che risponde al comando HCI_Read_Transmit_Power_Level HCI.

RSSI 1 ottetto [in dBm]

Valore dell'indicatore di intensità del segnale ricevuto (RSSI) per l'handle di connessione specificato.
Questo valore deve essere un valore assoluto dell'intensità del segnale del ricevitore.
Intervallo: da -127 a +20

SNR 1 ottetto [in dB]

Valore del rapporto segnale/rumore (SNR) per l'handle di connessione specificato.
Il controller deve fornire l'SNR medio di tutti i canali utilizzati dal collegamento.

Unused_AFH_Channel_Count 1 ottetto Indica il numero di canali inutilizzati in AFH_channel_map.
0x4F ~ 0xFF: riservato.
AFH_Select_Unideal_Channel_Count 1 ottetto Indica il numero di canali che subiscono interferenze e hanno una qualità scadente, ma sono comunque selezionati per AFH.
Il numero minimo di canali consentito dalla specifica Bluetooth è 20, quindi anche se tutti i 79 canali sono soggetti a interferenze e hanno una qualità scadente, il controller deve comunque scegliere almeno 20 canali per AFH.
LSTO 2 ottetti Impostazione attuale del timeout della supervisione dei link.
Tempo = N * 0,625 ms
Intervallo di tempo: da 0,625 ms a 40,9 s
Connection_Piconet_Clock 4 ottetti Piconet Clock per Connection_Handle specificato.
Questo valore deve essere uguale a quello del controller che risponde al comando HCI_Read_Clock HCI con il parametro "Which_Clock" di 0x01 (Piconet Clock).
Unità: N * 0,3125 ms (1 orologio Bluetooth)
Retransmission_Count 4 ottetti Il numero di ritrasmissioni dall'ultimo evento.
Questo conteggio verrà reimpostato dopo la segnalazione all'organizzatore.
No_RX_Count 4 ottetti Nessun conteggio RX dall'ultimo evento.
Il conteggio aumenta quando non viene ricevuto alcun pacchetto nello slot temporale pianificato o il pacchetto ricevuto è danneggiato.
Questo conteggio verrà reimpostato dopo la segnalazione all'organizzatore.
NAK_Count 4 ottetti Conteggio NAK (Negative Acknowledge) dall'ultimo evento.
Questo conteggio verrà reimpostato dopo la segnalazione all'organizzatore.
Last_TX_ACK_Timestamp 4 ottetti Timestamp dell'ultimo ACK TX. Si basa sull'orologio Bluetooth del piconet centrale (CLK).
Unità: N * 0,3125 ms (1 orologio Bluetooth)
Flow_Off_Count 4 ottetti Il numero di volte in cui il controller riceve Flow-off (STOP) dall'ultimo evento.
Questo conteggio verrà reimpostato dopo la segnalazione all'organizzatore.
Last_Flow_On_Timestamp 4 ottetti Timestamp dell'ultimo riporto (GO). Si basa sull'orologio Bluetooth del piconet centrale (CLK).
Unità: N * 0,3125 ms (1 orologio Bluetooth)
Buffer_Overflow_Bytes 4 ottetti [in Byte]

Conteggio degli overflow del buffer dall'ultimo evento.
Il controller conta il numero di byte di dati eliminati.
Questo conteggio verrà reimpostato dopo la segnalazione all'organizzatore.

Buffer_Underflow_Bytes 4 ottetti [in Byte]

Conteggio dell'underflow del buffer dall'ultimo evento.
Questo conteggio verrà reimpostato dopo la segnalazione all'organizzatore.

bdaddr 6 ottetti Indirizzo del dispositivo remoto
cal_failed_item_count 1 ottetto Il conteggio degli elementi per cui la calibrazione non è riuscita
TX_Total_Packets 4 ottetti Il numero di pacchetti inviati.
TX_UnAcked_Packets 4 ottetti Il numero di pacchetti che non ricevono un riconoscimento.
Questo conteggio viene reimpostato dopo la segnalazione all'organizzatore.
TX_Flushed_Packets 4 ottetti Il numero di pacchetti che non vengono inviati dal punto di scarico.
Questo conteggio viene reimpostato dopo la segnalazione all'organizzatore.
TX_Last_Subevent_Packets 4 ottetti Il numero di pacchetti che il livello di collegamento trasmette una PDU di dati CIS nell'ultimo subevento di un evento CIS.
Questo conteggio viene reimpostato dopo la segnalazione all'organizzatore.
Il valore è zero se non esiste un valore valido per il link.
CRC_Error_Packets 4 ottetti Il numero di pacchetti ricevuti con errore CRC dall'ultimo evento.
Questo conteggio viene reimpostato dopo la segnalazione all'organizzatore.
RX_Duplicate_Packets 4 ottetti Il numero di pacchetti duplicati (ritrasmissione) ricevuti dall'ultimo evento.
Questo conteggio viene reimpostato dopo la segnalazione all'organizzatore.
RX_Unreceived_Packets 4 ottetti Il numero di pacchetti non ricevuti è uguale al parametro del comando LE READ ISO Link Quality (vedi la specifica di base di Bluetooth versione 5.4). I flussi associati sono CIS e BIS.
Quando questo valore viene incrementato, il livello di collegamento non riceve un payload specifico dal punto di scaricamento (su un CIS) o alla fine dell'evento a cui è associato (su un BIS; vedi la specifica di base di Bluetooth versione 5.4, volume 6, parte B, sezione 4.4.6.6).
Coex_Info_Mask 2 ottetti Bit 0 - CoexInvolvement: impostato per indicare che si sospetta che le attività di coesistenza siano coinvolte quando viene generato questo report (ad esempio, A2DP Chops e Approaching LSTO).
Bit 1 - WL 2G Radio Active: impostato per indicare che la radio WLAN 2G è attiva.
Bit 2 - WL 2G Connected: impostato per indicare che la radio WLAN 2G è attiva e connessa.
Bit 3 - WL 5G/6G Radio Active: impostato per indicare che la radio WLAN 5G/6G è attiva.
Bit 4-15 - Riservati
Parametro specifico del fornitore (lunghezza totale del parametro - TBD) * ottetti Per consentire al fornitore del controller di ottenere parametri più specifici.

Subevent code = 0x58 [Quality_Report_Id = 0x05, Root Inflammation event]

Questo evento indica che l'HAL Bluetooth o il controller ha rilevato un errore irreversibile e che lo stack Bluetooth deve registrare questa situazione e riavviarsi. Il controller deve inviare un evento Root_Inflammation_Event allo stack Bluetooth prima di inviare il primo frammento degli eventi di informazioni di debug in qualsiasi caso.

Il parametro Error_Code contiene un codice di errore segnalato da HAL/Controller, 0 se si tratta di un errore specifico del fornitore del chipset. Il Vendor_Specific_Error_Code contiene un codice di errore specifico del fornitore del chipset di HAL/Controller. Deve essere impostato su 0 se il parametro Error_Code non è 0. I parametri Error_Code e Vendor_Specific_Error_Code non devono essere entrambi 0.

Parametro subevent Dimensioni Finalità
Quality_Report_Id 1 ottetto 0x00 ~ 0x04: Riservato.
0x05: Infiammazione della radice.
0x06 ~ 0xFF: riservato.
Error_Code 1 ottetto 0x00: È incluso il codice di errore specifico del fornitore del chipset.
0x01 ~ 0xFF: Si è verificato un errore del controller. Consulta la specifica Bluetooth [Vol 2] Parte D, Codici di errore per un elenco di codici di errore e descrizioni.
Vendor_Specific_Error_Code 1 ottetto 0x00: Non è incluso alcun codice di errore specifico del fornitore del chipset.
0x01 ~ 0xFF: codice di errore specifico del fornitore del chipset.
Parametro specifico del fornitore (Lunghezza totale del parametro - 4) * ottetti Per consentire al fornitore del controller di ottenere parametri più specifici.

Codice evento secondario = 0x58 [Quality_Report_Id = 0x06, evento di monitoraggio dell'energia]

Questo evento fornisce uno snapshot del consumo energetico e degli stati operativi del controller Bluetooth in un periodo di tempo specifico. Questo evento aiuta gli sviluppatori e gli ingegneri ad analizzare il modo in cui il controller gestisce l'alimentazione, a identificare le attività che consumano più energia e a risolvere i problemi relativi all'alimentazione.

I parametri nel report monitorano le metriche chiave, tra cui:

  • Consumo medio di corrente:la corrente complessiva utilizzata dal controller.
  • Tempo trascorso in stati diversi:il tempo totale (in millisecondi) trascorso dal controller in uno stato inattivo (sospensione/basso consumo) rispetto a uno stato attivo (connessione, trasmissione o ricezione di dati).
  • Conteggi delle transizioni di stato:il numero di volte in cui il controller passa dallo stato inattivo a quello attivo.
  • Tempo trascorso in stati radio specifici:metriche separate per il tempo trascorso a trasmettere (Tx) e ricevere (Rx) per i link BR/EDR (Bluetooth Classic) e LE (Bluetooth Low Energy).
  • Livelli di potenza di trasmissione medi:la potenza media (in dBm) utilizzata per le trasmissioni sui link BR/EDR e LE.
  • Attività dettagliata della catena: report sul tempo trascorso con le catene di trasmissione o ricezione attive, che distinguono tra operazioni a una catena e a due catene e tra amplificatori di potenza interni (iPA) ed esterni (ePA).
  • Tempo di attività di scansione:il tempo che il controller trascorre a cercare attivamente dispositivi BR/EDR e LE.

Esaminando questi parametri, gli ingegneri possono ottenere informazioni sull'efficienza energetica del controller e ottimizzarne le prestazioni.

Parametro subevent Dimensioni Finalità
Quality_Report_Id 1 ottetto 0x06: Monitoraggio energia
Average_Current_Consumption 2 ottetti [in mA] Consumo medio di corrente di tutte le attività consumate dal controller
Idle_Total_Time (sonno) 4 ottetti [in ms] Tempo totale nello stato di inattività (stati di basso consumo energetico, sospensione).
Idle_Sate_Enter_Count 4 ottetti Indica il numero di volte in cui il controller entra nello stato inattivo.
Active_Total_Time 4 ottetti [in ms] Tempo totale nello stato attivo (interrogazione, paging, traffico ACL/SCO/eSCO/BIS/CIS, elaborazione di qualsiasi attività).
Active_State_Enter_Count 4 ottetti Indica il numero di volte in cui il controller entra negli stati attivi.
BR_RDR_Tx_Total_Time 4 ottetti [in ms] Tempo totale nello stato Tx(trasmissione per traffico ACL/SCO/eSCO) specifico per BR/EDR.
BR_RDR_Tx_State_Enter_Count 4 ottetti Indica il numero di volte in cui il controller entra nello stato di trasmissione specifico BR/EDR.
BR_RDR_Tx_Average_Power_Level 1 ottetto [in dBm] Livello di potenza di trasmissione medio di tutti i link BR/EDR
BR_RDR_Rx_Total_Time 4 ottetti [in ms] Tempo totale nello stato Rx (ricezione dal traffico ACL/SCO/eSCO) specifico per BR/EDR.
BR_RDR_Rx_State_Enter_Count 4 ottetti [in ms] Indica il numero di volte in cui il controller entra nello stato di ricezione specifico BR/EDR.
LE_Tx_Total_Time 4 ottetti [in ms] Tempo totale nello stato Tx (trasmissione per traffico pubblicitario ACL/BIS/CIS o LE) specifico per LE.
LE_Tx_State_Enter_Count 4 ottetti Indica il numero di volte in cui il controller entra nello stato di ricezione specifico BR/EDR.
LE_Tx_Average_Power_Level 1 ottetto [in dBm] Livello di potenza di trasmissione medio di tutti i link LE.
LE_Rx_Total_Time 4 ottetti [in ms] Tempo totale nello stato Rx (ricezione da ACL/BIS/CIS o traffico di scansione LE) specifico di LE.
LE_Rx_State_Enter_Count 4 ottetti [in ms] Indica quante volte il controller entra nello stato Rx specifico per LE
Report_Time_Duration (tempo totale) 4 ottetti [in ms] La durata totale per raccogliere le informazioni relative all'alimentazione.
RX_Active_One_Chain_Time 4 ottetti [in ms] La durata di RX attivo in una catena
RX_Active_Two_Chain_Time 4 ottetti [in ms] La durata di RX attiva in due catene
TX_iPA_Active_One_Chain_Time 4 ottetti [in ms] La durata dell'attività TX interna in una catena
TX_iPA_Active_Two_Chain_Time 4 ottetti [in ms] La durata della transazione interna attiva in due catene
TX_ePA_Active_One_Chain_Time 4 ottetti [in ms] La durata dell'TX esterna attiva in una catena
TX_ePA_Active_Two_Chain_Time 4 ottetti [in ms] La durata di tempo della TX esterna attiva in due catene
BREDR_RX_Active_Scan_total_Time 4 ottetti [in ms] Periodo di tempo (ms) durante il tempo di attività RX della scansione BR/EDR
LE_RX_Active_Scan_total_Time 4 ottetti [in ms] Periodo di tempo (ms) per il tempo di attività RX della scansione LE

Codice evento secondario = 0x58 [Quality_Report_Id = 0x09~0x0A, evento statistiche RF avanzate]

L'evento Bluetooth Advanced RF (Radio Frequency) Stats fornisce metriche dettagliate sul rendimento del comportamento radio del controller Bluetooth. L'evento può essere attivato in due modi:

  • Per trigger (0x09): viene inviato un report una tantum in risposta a un comando specifico.
  • Per monitor (0x0A): il controller invia periodicamente report a un intervallo specificato.

I parametri dell'evento sono essenzialmente contatori di pacchetti che monitorano vari comportamenti della radio in un periodo di tempo specificato.

Metriche chiave e loro scopo
  • Statistiche sulla potenza di trasmissione:questi contatori monitorano i pacchetti inviati utilizzando diverse configurazioni di alimentazione, distinguendo tra amplificatori di potenza interni (iPA) ed esterni (ePA) e varie modalità di diversità dell'antenna (Div) o beamforming (BF). In questo modo è possibile determinare quali impostazioni di alimentazione e antenna vengono utilizzate più spesso.
  • Bin di indicatore di intensità del segnale ricevuto (RSSI):questi parametri classificano i pacchetti ricevuti in base all'intensità del segnale. Fornendo un conteggio dei pacchetti all'interno di intervalli RSSI specifici (ad es. meno di -90 dBm, da -70 a -75 dBm), il report fornisce un quadro chiaro della qualità del collegamento. Un numero elevato nei bin "debole" (ad esempio < -90 dBm) indica una connessione scadente.
  • Delta RSSI:questa metrica misura la differenza di intensità del segnale tra le due antenne di ricezione (se applicabile). I contatori tengono traccia del numero di pacchetti con un delta RSSI all'interno di intervalli diversi. Un delta elevato (ad es. >11 dBm) può suggerire interferenze o un'ostruzione fisica, in quanto un'antenna riceve un segnale molto più forte dell'altra.
  • Commutazione dell'antenna e ritrasmissioni:il report conteggia la frequenza con cui il controller passa da un'antenna all'altra e tiene traccia dei pacchetti ritrasmessi (ReTX). Un numero elevato di ritrasmissioni spesso indica una connessione debole o inaffidabile, che richiede il reinvio dei pacchetti.
  • Qualità del canale:questi parametri forniscono un riepilogo generale dello stato dei diversi canali di comunicazione, classificandoli come "Buono", "Sufficiente", "Scarso" o "Molto scarso" in base al loro RSSI. In questo modo, puoi avere una panoramica immediata dell'ambiente RF.
  • Coda del buffer TX:questa sezione monitora il numero di pacchetti in attesa nel buffer di trasmissione del controller per diversi tipi di link, ad esempio ACL (Asynchronous Connection-oriented Logical link), LECONN (LE Connection) e LEISOC (LE Isochronous). Un numero elevato di buffer può indicare un collo di bottiglia o un problema con il flusso di dati dall'host al controller.
Parametro subevento Dimensioni Finalità
Quality_Report_Id 1 ottetto 0x09: Advance RF Stats By Trigger
0x0A: Advance RF Stats By Monitor
Extension_info 1 ottetto Informazioni sulla versione di BQR.
0x01 per BQRv6
0x02 per BQRv7
Report_Time_Period 4 ottetti Il periodo di tempo per raccogliere le informazioni sul rendimento. Unità: ms
TX_Power_iPA_BF 4 ottetti Contatore pacchetti di iPA BF
TX_Power_ePA_BF 4 ottetti Contatore pacchetti di ePA BF
TX_Power_iPA_Div 4 ottetti Contatore pacchetti della divisione ePA
TX_Power_ePA_Div 4 ottetti Contatore pacchetti della divisione ePA
RSSI_chain_50 4 ottetti Contatore pacchetti della catena RSSI > -50 dBm
RSSI_chain_50_55 4 ottetti Contatore di pacchetti della catena RSSI tra -50 dBm e >-55 dBm
RSSI_chain_55_60 4 ottetti Contatore di pacchetti della catena RSSI tra -55 dBm e >-60 dBm
RSSI_chain_60_65 4 ottetti Contatore di pacchetti della catena RSSI tra -60 dBm e >-65 dBm
RSSI_chain_65_70 4 ottetti Contatore di pacchetti della catena RSSI tra -65 dBm e > -70 dBm
RSSI_chain_70_75 4 ottetti Contatore di pacchetti della catena RSSI tra -70 dBm e > -75 dBm
RSSI_chain_75_80 4 ottetti Contatore di pacchetti della catena RSSI tra -75 dBm e >-80 dBm
RSSI_chain_80_85 4 ottetti Contatore di pacchetti della catena RSSI tra -80 dBm e >-85 dBm
RSSI_chain_85_90 4 ottetti Contatore di pacchetti della catena RSSI tra -85 dBm e >-90 dBm
RSSI_chain_90 4 ottetti Contatore pacchetti della catena RSSI < -90 dBm
RSSI_delta_2 4 ottetti Contatore di pacchetti di delta RSSI < 2 dBm
RSSI_delta_2_5 4 ottetti Contatore di pacchetti del delta RSSI tra 2 dBm e 5 dBm
RSSI_delta_5_8 4 ottetti Contatore di pacchetti del delta RSSI tra 5 dBm e 8 dBm
RSSI_delta_8_11 4 ottetti Contatore di pacchetti del delta RSSI tra 8 dBm e 11 dBm
RSSI_delta_11 4 ottetti Contatore pacchetti di delta RSSI > 11 dBm
Antenna_Switch_Count 4 ottetti Contatore di pacchetti dell'evento di commutazione dell'antenna
ReTX_iPA_BF 4 ottetti Contatore di pacchetti di ReTX_iPA_BF nell'ultimo periodo di tempo
ReTX_ePA_BF 4 ottetti Contatore di pacchetti di ReTX_ePA_BF nell'ultimo periodo di tempo
ReTX_iPA_Div 4 ottetti Contatore di pacchetti di ReTX_iPA_Div nell'ultimo periodo di tempo
ReTX_ePA_Div 4 ottetti Contatore di pacchetti di ReTX_ePA_Div nell'ultimo periodo di tempo
Channel_count_Good 1 ottetto Numero di canali il cui RSSI rientra nel bin 1 (<-90)
Channel_count_OK 1 ottetto Numero di canali il cui RSSI rientra nel bin 2 (-90~-76)
Channel_count_Bad 1 ottetto Numero di canali il cui RSSI rientra nel bin 3 (-76~-50)
Channel_count_VeryBad 1 ottetto Numero di canali il cui RSSI rientra nel bin 4 (> -50)
TX_buffer_Queue_Count 4 ottetti Contatore dello stato della coda del buffer - buffer TX del controller nell'ultimo periodo di tempo [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

Codice subevento = 0x58 [Quality_Report_Id = 0x0B~0x0C, evento di monitoraggio dell'integrità del controller]

L'evento di monitoraggio dell'integrità del controller Bluetooth fornisce un riepilogo dello stato operativo del controller. L'evento può essere attivato in due modi:

  • Per trigger (0x09): viene inviato un report una tantum in risposta a un comando specifico.
  • Per monitor (0x0A): il controller invia periodicamente report a un intervallo specificato.

L'evento di monitoraggio dell'integrità del controller Bluetooth è uno strumento diagnostico che fornisce un riepilogo dello stato operativo del controller. Questo evento fa parte del framework del report sulla qualità del Bluetooth (BQR) e viene utilizzato per il debug di problemi di connettività, gestione dell'alimentazione e temporizzazione. Può essere inviato come report una tantum o periodicamente per fornire un monitoraggio continuo.

Metriche chiave e loro scopo
  • Contatori pacchetti HCI:l'evento monitora il numero totale di pacchetti inviati dall'host al controller e viceversa. Questi contatori sono essenziali per il debug dei problemi relativi al trasporto dell'interfaccia del controller host (HCI), ovvero il canale di comunicazione tra lo stack software e il chip del controller Bluetooth.
  • Lunghezze pacchetti:l'evento segnala la lunghezza dell'ultimo pacchetto HCI inviato e ricevuto. In questo modo, puoi verificare che i dati vengano trasmessi correttamente e che non si verifichino problemi di dimensioni imprevisti.
  • Conteggi segnale di riattivazione:il report include il numero totale di volte in cui sono stati attivati i pin BT_Wake e HOST_Wake. Questi segnali fisici sono fondamentali per la gestione dell'alimentazione, in quanto vengono utilizzati per riattivare le rispettive entità dagli stati di basso consumo energetico. Il monitoraggio di questi conteggi aiuta a eseguire il debug dei problemi relativi all'alimentazione, come riattivazioni impreviste o mancato ingresso in modalità Sospensione.
  • Timestamp:l'evento fornisce diversi timestamp, tra cui l'ora dell'ultimo segnale di riattivazione e dell'ultimo ripristino HCI. Questi timestamp aiutano a risolvere i problemi relativi alla sincronizzazione e forniscono un punto di riferimento per il momento in cui si sono verificati determinati eventi.
  • Timer watchdog:un flag specifico indica se l'evento è stato generato come avviso tempestivo che il timer watchdog del controller sta per scadere. Questo è un avviso critico per potenziali blocchi o malfunzionamenti del controller.
  • Stato collegamento:il report riepiloga lo stato attuale delle connessioni attive, incluso il conteggio totale dei collegamenti BR/EDR, LE e CIS (Connected Isochronous Stream). Indica anche se sono attivi link SCO (Synchronous Connection-Oriented). Queste informazioni forniscono un'istantanea del carico di connessione attuale del controller.
Parametro subevento Dimensioni Finalità
Quality_Report_Id 1 ottetto 0xB~0xC
0x0B: report una tantum o attivati da eventi
0x0C: report periodici.
Packet_Count_Host_to_Controller 4 ottetti Conteggio totale dei pacchetti inviati dall'host al controller tramite il trasporto HCI. Questo campo viene utilizzato per il debug dei problemi HCI (ad esempio UART). Comportamento: i contatori vengono reimpostati quando il controller ha ricevuto il ripristino HCI.
Packet_Count_Controller_to_Host 4 ottetti Conteggio totale dei pacchetti di eventi HCI inviati all'host. Questo campo viene utilizzato a scopo di debug dell'interfaccia uomo-macchina (ad es. UART). Comportamento: i contatori vengono reimpostati quando il controller ha ricevuto il ripristino HCI.
Last_Packet_Length_Host_to_Controller 2 ottetti Lunghezza dell'ultimo pacchetto HCI inviato a Host UART. Nota: lunghezza massima pacchetto HCI 2 ottetti (inclusi HCI, ACL, SCO, ISO)
Last_Packet_Length_Controller_To_host 2 ottetti Lunghezza dell'ultimo pacchetto HCI ricevuto dalla UART host. Nota: lunghezza massima pacchetto HCI 2 ottetti (inclusi HCI, ACL, SCO, ISO)
Total_BT_Wake_Count 4 ottetti Il conteggio aggregato delle asserzioni del pin BT_Wake da parte dell'entità host. Questo campo funge da strumento diagnostico per il debug dei problemi relativi all'alimentazione. Comportamento: i contatori vengono reimpostati quando il controller ha ricevuto il ripristino HCI.
Total_HOST_Wake_Count 4 ottetti Calcolo aggregato delle asserzioni del pin Host_Wake avviate dal controller. Questo campo funge da strumento diagnostico per il debug dei problemi relativi all'alimentazione. Comportamento: i contatori vengono reimpostati quando il controller ha ricevuto il ripristino HCI.
Last_BT_Wake_TimeStamp 4 ottetti Ultimo timestamp in cui l'host ha asserito il pin BT_Wake.Questo campo è implementato per il debug dei problemi di alimentazione.
Last_HOST_Wake_TimeStamp 4 ottetti Il timestamp più recente in cui il controller ha attivato il pin Host_Wake. Questo campo viene utilizzato per eseguire il debug dei problemi di alimentazione.
Reset_Timestamp 4 ottetti Timestamp che indica il completamento dell'ultimo ripristino dell'interfaccia uomo-computer. Questo campo viene utilizzato esclusivamente per facilitare la risoluzione dei problemi relativi alla sincronizzazione. Deve fungere da punto di registrazione iniziale rispetto al quale vengono referenziati tutti gli altri elementi.
Current_Timestamp 4 ottetti L'ora attuale in cui viene generato questo evento. Questo campo viene utilizzato per risolvere i problemi relativi alle discrepanze di sincronizzazione. Deve fungere da punto di registrazione del trigger a cui fanno riferimento tutti gli altri elementi.
Is_WatchDog_Timer_About_To_Expire 4 ottetti Flag per indicare che questo evento di stato di integrità viene generato dal controller come avviso anticipato di scadenza del watchdog. Il timestamp corrente serve a indicare l'ora di occorrenza.
Coex_Status_Mask 2 ottetti Bit 0 - Riservato
Total_Links_BR_EDR_LE_Active 1 ottetto Il numero totale di link BR/EDR/LE nello stato Attivo.
Total_Links_BR_EDR_Sniff 1 ottetto Conteggio totale dei link BR/EDR nello stato Sniff/Idle.
Total_Links_CIS 1 ottetto Numero totale di link dell'ISO.
Is_SCO_Active 1 ottetto Indicatore per verificare se il link SCO è attualmente attivo.
Parametro subevent Dimensioni Finalità
Quality_Report_Id 1 ottetto 0x00 ~ 0x10: Riservato.
0x11: LMP/LL message trace.
0x12: Traccia di pianificazione Bluetooth Multi-link/Coex.
0x13: Dump dei dati delle informazioni di debug del controller.
0x14 ~ 0xFF: Riservato.
Connection_Handle 2 ottetti Handle di connessione.
Parametro specifico del fornitore (Lunghezza totale del parametro - 4) * ottetti Formato specifico del fornitore della traccia dei messaggi LMP, traccia della pianificazione Bluetooth Multi-link/Coex e dump dei dati di debug del controller.

Codice evento secondario = 0x5C

Se attivato, questo evento deve essere generato durante ogni intervallo ISO.

Attivazione
L'attivazione viene eseguita selezionando il codice fornitore Data_Path_ID 0x19 nel comando standard HCI_LE_Setup_ISO_Data_Path. Il comando HCI_Configure_Data_Path con Data_Path_ID impostato su 0x19 e Vendor_Specific_Config_Length impostato su 0, deve essere accettato, anche se non è prevista alcuna azione da parte del controller alla ricezione di questo comando.
Punto temporale di invio
L'evento viene emesso dall'inizio di un intervallo ISO (punto di ancoraggio CIG o BIG) fino all' intervallo ISO successivo. Il controller indica il ritardo con l'inizio effettivo dell'intervallo ISO utilizzando Anchor_Point_Delay.
Sincronizzazione del controller
All'inizio di un intervallo ISO, il controller calcola StreamSN incrementando il valore corrente in base al ISO_Interval ÷ SDU_Interval configurato; nel primo intervallo, il valore viene inizializzato a 0.
Quindi, per ogni pacchetto nel FIFO ISO, si applica quanto segue:
  • Il controller calcola la differenza di wrapping SNdiff tra i due numeri di sequenza:
    SNdiff = (SDUSN - StreamSN + 0x10000) mod 0x10000
  • Quando (SNdiff + (FT-1) × ISO_Interval ÷ SDU_Interval) mod 0x10000 <= (FT-1) × ISO_Interval ÷ SDU_Interval:
    Il pacchetto si trova nella finestra di ritrasmissione. Avrebbe dovuto essere programmato per la trasmissione a intervalli precedenti ed è ora disponibile per la ritrasmissione. Se non è questo il caso (non è stata pianificata la trasmissione), la fattura è stata ricevuta in ritardo. Questo deve essere segnalato all'host utilizzando In_Status. Questi pacchetti possono essere eliminati o programmati per la trasmissione; la scelta è definita dall'implementazione.
  • O quando SNdiff < ISO_Interval ÷ SDU_Interval:
    Il pacchetto è pianificato per la trasmissione da questo evento fino al timeout di svuotamento.
  • O quando SNdiff >= ISO_Interval ÷ SDU_Interval e SNdiff <= Max_Forward_Buffers:
    Il pacchetto è futuro; verrà trasmesso con un evento successivo. Poiché i pacchetti vengono inviati in ordine, questa condizione termina la ricerca di pacchetti per questo intervallo.
    I buffer utilizzati dall'host non vengono comunicati al controller, ma sono limitati a Max_Forward_Buffers = 16.
  • O quando nessuna delle condizioni precedenti è soddisfatta:
    Il pacchetto viene eliminato, viene raggiunto il limite di timeout di svuotamento o è stato ricevuto un pacchetto con errori di formato.

Parametro subevento Dimensioni Finalità
Connection_Handle 2 ottetti Handle di connessione del CIS o del BIS
Intervallo: da 0x0000 a 0x0EFF
Sequence_Number 2 ottetti Numero di sequenza dello stream, gestito dal controller.

Inizializzato su 0 quando viene creato il CIS o il BIS e incrementato del numero di SDU in base all'intervallo isocrono ISO, definito come ISO_interval ÷ SDU_Interval, a ogni intervallo ISO.
Anchor_Point_Delay 2 ottetti Ritardo in microsecondi tra la generazione dell'evento e il punto di ancoraggio BIG o CIG effettivo o l'inizio dell'intervallo ISO. Il timestamp del punto di ancoraggio effettivo è definito da:
Event generation time - Anchor_Point_Delay

Intervallo: da 0 all'intervallo ISO in microsecondi
In_Status 2 ottetti Stato del buffer ISO del controller

All'inizio di un intervallo ISO, ogni bit bi viene impostato quando l'SDU (Sequence_Number + i) mod 0x10000 è disponibile. Quando non è disponibile, l'SDU viene identificata come Not received from the host.

Il valore i va da 0 a ISO_Interval ÷ SDU_Interval - 1. Per gli altri valori di i, i bit sono impostati su 0.
Tx_Status 2 ottetti Stato della trasmissione, rispetto alle SDU con numeri di sequenza:
(Sequence_Number - Flush_Timeout × ISO_Interval ÷ SDU_Interval + i + 0x10000) mod 0x10000

Ogni bit bi viene impostato quando tutte le PDU dell'SDU identificata, in base al numero di sequenza, sono state trasmesse e confermate correttamente.

Il valore i va da 0 a ISO_Interval ÷ SDU_Interval - 1. Per gli altri valori di i, i bit sono impostati su 0.
In un gruppo di trasmissione, la trasmissione deve sempre essere riconosciuta.

Supporto multi-inserzionista

Gli obiettivi del supporto multi-inserzionista sono i seguenti:

  • Possibilità di supportare più pubblicità (max_advt_instances)
  • Diverse potenze di trasmissione per consentire una portata variabile
  • Contenuti pubblicitari diversi
  • Una risposta personalizzata per ogni inserzionista
  • Privacy (non tracciabile) per ogni inserzionista
  • Collegabile

Per mantenere questa specifica vicina agli standard esistenti, vengono forniti i seguenti comandi specifici del fornitore. Derivano dalla specifica Bluetooth Core 4.1.

LE_Multi_Advt_Command

OCF: 0x154

Parametro comando Dimensioni Finalità
Multi_advt_opcode 1 ottetto 0x01 - Set_Advt_Param_Multi_Sub_Cmd
0x02 - Set_Advt_Data_Multi_Sub_Cmd
0x03 - Set_Scan_Resp_Data_Multi_Sub_Cmd
0x04 - Set_Random_Addr_Multi_Sub_Cmd
0x05 - Set_Advt_Enable_Multi_Sub_Cmd

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Multi_advt_opcode 1 ottetto 0x01 - Set_Advt_Param_Multi_Command
0x02 - Set_Advt_Data_Multi_Command
0x03 - Set_Scan_Resp_Data_Multi_Command
0x04 - Set_Random_Addr_Multi_Command
0x05 - Set_Advt_Enable_Multi_Command

LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd

Riferimento di base: Bluetooth Core 4.1 Specification, pagina 964 (LE Set Advertising Parameter Command)

Sub OCF: 0x01

Parametro del sottocomando Dimensioni Finalità
Advertising_Interval_Min Per specifica Per specifica
Advertising_Interval_Max Per specifica Per specifica
Advertising_Type Per specifica Per specifica
Own_Address_Type Per specifica Per specifica
Own_Address Per specifica Per specifica
Direct_Address_Type Per specifica Per specifica
Direct_Address Per specifica Per specifica
Advertising_Channel_Map Per specifica Per specifica
Adverstising_Filter_Policy Per specifica Per specifica
Advertising_Instance 1 ottetto Specifica l'applicabilità dei parametri precedenti a un'istanza
Tx_power 1 ottetto Transmit_Power
Unità: in dBm (numero intero con segno)
Intervallo: da -70 a +20

Il parametro Own_Address potrebbe essere un indirizzo configurato dall'host al momento della configurazione di questa istanza multi-annuncio. In questo modo, è possibile avere un indirizzo privato risolvibile al momento della trasmissione del primo beacon. La pubblicità su un'istanza continuerà indipendentemente dalla connessione. Lo stack BT host potrebbe inviare un comando per avviare la pubblicità su un'istanza dopo la connessione.

Per questo comando verrà generato un evento Command Complete come specificato nella specifica Bluetooth Core 4.1, in base al comando precedente. Il controller risponderà con un codice di errore (parametro non valido) se l'istanza pubblicitaria o i parametri Tx_Power non sono validi.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Multi_advt_opcode 1 ottetto 0x01 [Set_Advt_Param_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd

Riferimento di base: specifica Bluetooth Core 4.1, pagina 969 (LE Set Advertising Data Command)

Sub OCF: 0x02

Parametro del sottocomando Dimensioni Finalità
Advertising_Data_Length Per specifica Per specifica
Advertising_Data Per specifica Per specifica
Advertising_Instance 1 ottetto Specifica l'applicabilità dei parametri precedenti a un'istanza

Per questo comando verrà generato un evento Command Complete come specificato nella specifica Bluetooth Core 4.1, in base al comando precedente. Il controller risponderà con un codice di errore se l'istanza pubblicitaria o i parametri Tx_Power non sono validi.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Multi_advt_opcode 1 ottetto 0x02 [Set_Advt_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd

Riferimento di base: specifica Bluetooth Core 4.1, pagina 970 (LE Set Scan Response Data Command)

Sub OCF: 0x03

Parametro del sottocomando Dimensioni Finalità
Scan_Response_Data_Length Per specifica Per specifica
Scan_Response_Data Per specifica Per specifica
Advertising_Instance 1 ottetto Specifica l'applicabilità dei parametri precedenti a un'istanza

Per questo comando verrà generato un evento Command Complete come specificato nella specifica Bluetooth Core 4.1, in base al comando precedente. Il controller risponderà con un codice non riuscito (parametro non valido) se l'istanza pubblicitaria o i parametri Tx_Power non sono validi.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Multi_advt_opcode 1 ottetto 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd

Riferimento di base: Bluetooth Core 4.1 Specification, pagina 963 (LE Set Random Address Command)

Sub OCF: 0x04

Parametro del sottocomando Dimensioni Finalità
Indirizzo casuale Per specifica Per specifica
Advertising_Instance 1 ottetto Specifica l'applicabilità dei parametri precedenti a un'istanza

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Multi_advt_opcode 1 ottetto 0x04 [Set_Random_Addr_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd

Riferimento di base: Bluetooth Core 4.1 Specification, pagina 971 (LE Set Advertise Enable Command in that core specification)

OCF: 0x05

Parametro del sottocomando Dimensioni Finalità
Advertising_Enable 1 ottetto Un valore pari a 1 indica l'attivazione. Qualsiasi altro valore indica la disattivazione.
Advertising_Instance 1 ottetto Specifica l'applicabilità dei parametri precedenti a un'istanza. L'istanza 0 indica un'istanza HCI standard.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Multi_advt_opcode 1 ottetto 0x05 [Set_Advt_Enable_Multi_Sub_Cmd]

Risoluzione dell'indirizzo privato scaricata

Questa funzionalità risolve un indirizzo privato nel firmware o nell'hardware del controller, il che offre i seguenti vantaggi:

  • Latenza coinvolta nell'host per la risoluzione di un indirizzo privato
  • Risparmiare energia evitando di riattivare l'host

LE_Set_RPA_Timeout

OCF: 0x15C

Parametro comando Dimensioni Finalità
LE_local_IRK 16 ottetti L'IRK del dispositivo locale utilizzato per generare l'indirizzo o gli indirizzi risolvibili casuali.
tRPA_min 2 ottetti Il timeout minimo per la generazione di RPA in secondi. Il controller deve generare nuovi indirizzi risolvibili per qualsiasi evento di pubblicità/scansione/connessione in questa scadenza o dopo.
Intervallo valido: 300-1800
tRPA_max 2 ottetti Il timeout massimo per la generazione di RPA in secondi. Il controller deve generare nuovi indirizzi risolvibili per qualsiasi evento di pubblicità/scansione/connessione entro o prima di questo timeout.
Intervallo valido: tRPA_min-1800
Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Lo stato del comando.

Valori di stato HCI suggeriti:
0x00 Riuscito
0x01 Comando sconosciuto (se non supportato)
0x12 Parametri di comando non validi (se alcuni parametri non rientrano nell'intervallo specificato)

LE_RPA_offload_Command

OCF: 0x155

Parametro comando Dimensioni Finalità
RPA_offload_opcode 1 ottetto 0x1 - Enable customer specific feature
0x2 - Add IRK to the list
0x3 - Remove IRK from the list
0x4 - Clear IRK list
0x5 - Read IRK list entry

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Event_RPA_offload_opcode 1 ottetto 0x1 - Enable customer specific feature
0x2 - Add IRK to the list
0x3 - Remove IRK from the list
0x4 - Clear IRK list
0x5 - Read IRK list entry

LE_RPA_offload: Enable_cust_specific_sub_Command

Sub OCF: 0x01

Parametro del sottocomando Dimensioni Finalità
enable_customer_specific_feature_set 1 ottetto 0x01 - Enable offloaded RPA feature
0x00 - Disable offloaded RPA feature

L'offload RPA deve essere abilitato dall'host in base alla funzionalità del chip. Fai riferimento a LE_Get_Vendor_Capabilities_Command. Ogni chip può avere un max_irk_list_sz variabile nel firmware.

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Event_cust_specific_feature_opcode 1 ottetto 0x01 [Enable customer-specific feature]

LE_RPA_offload: Add_IRK_to_list_sub_Command

Sub OCF: 0x02

Parametro del sottocomando Dimensioni Finalità
LE_IRK 16 ottetti LE IRK (LSB del primo byte)
Address_Type 1 ottetto 0: Indirizzo pubblico
1: Indirizzo casuale
LE_Device_Address 6 ottetti Indirizzo pubblico o casuale associato all'IRK (LSB del primo byte)

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Event_cust_specific_feature_opcode 1 ottetto 0x02 [Aggiungi IRK all'elenco]
LE_IrkList_AvailableSpaces 1 ottetto Voci dell'elenco IRL disponibili dopo l'operazione corrente

LE_RPA_offload: Remove_IRK_to_list_sub_Command

Sub OCF: 0x03

Parametro del sottocomando Dimensioni Finalità
Address_Type 1 ottetto 0: Indirizzo pubblico
1: Indirizzo casuale
LE_Device_Address 6 ottetti Indirizzo pubblico o casuale associato all'IRK

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Event_cust_specific_feature_opcode 1 ottetto 0x03 [Remove IRK from the list]
LE_IrkList_AvailableSpaces 1 ottetto Voci dell'elenco IRL disponibili dopo l'operazione corrente

LE_RPA_offload: Clear_IRK_list_sub_Command

Sub OCF: 0x04

Parametro del sottocomando Dimensioni Finalità
Nessuno

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Event_cust_specific_feature_opcode 1 ottetto 0x04 [Clear IRK List]
LE_IrkList_AvailableSpaces 1 ottetto Voci dell'elenco IRL disponibili dopo l'operazione corrente [max_irk_list_sz]

LE_RPA_offload: Read_IRK_list_sub_Command

Sub OCF: 0x05

Parametro del sottocomando Dimensioni Finalità
LE_read_IRK_list_entry-index 1 ottetto Indice dell'elenco IRK [0, max_irk_list_sz-1]

Per questo comando verrà generato un evento Command Complete.

Parametro di ritorno Dimensioni Finalità
Status 1 ottetto Stato Comando completato
Event_cust_specific_feature_opcode 1 ottetto 0x05 [Read IRK List Entry]
LE_Read_IRK_List_entry 1 ottetto Indice dell'IRK che l'host vuole leggere (la dimensione massima dell'elenco IRK è 32)
LE_IRK 16 ottetti Valore IRK
Address_Type 1 ottetto 0: Indirizzo pubblico
1: Indirizzo casuale
LE_Device_Address 6 ottetti Indirizzo pubblico o casuale associato all'IRK
LE_Resolved_Private_Address 6 ottetti Indirizzo privato risolvibile attuale di questo IRK

Sniff Offload

La funzionalità Sniff Offload delega la gestione della modalità Sniff dallo stack host Bluetooth al controller Bluetooth. Ciò consente al controller di gestire la tempistica di attivazione/disattivazione della modalità Sniff e di applicare parametri di valutazione secondaria Sniff e Sniff configurabili, mentre l'host mantiene il controllo sulla selezione dei parametri in base alle modifiche dell'attività del profilo Bluetooth.

Sniff Offload States

Questa sezione definisce gli stati all'interno di un controller Bluetooth rispetto alla funzione di scaricamento della modalità di sospensione. Sono stati definiti due stati globali per identificare lo stato di un controller Bluetooth rispetto all'attivazione di Sniff Offload. Sono stati definiti due stati specifici della connessione per identificare lo stato di una connessione BR/EDR quando il controller Bluetooth è nello stato Sniff Offload Enabled.

Stati globali

Sono stati definiti due stati globali per identificare lo stato di un controller Bluetooth rispetto all'attivazione di Sniff Offload.

Stato di disattivazione dell'offload dello sniffing

Per impostazione predefinita, un controller Bluetooth è considerato in stato "Sniff Offload Disabled". È previsto che il controller Bluetooth gestisca i comandi HCI_Sniff_Mode, HCI_Exit_Sniff_Mode e HCI_Sniff_Subrating emessi da un host Bluetooth. Il controller Bluetooth deve inoltrare anche gli eventi HCI_Mode_Change e HCI_Sniff_Subrating a un host Bluetooth in base alla maschera degli eventi impostata dall'host Bluetooth.

Stato di attivazione dell'offload di sniffing

Un controller Bluetooth viene considerato in stato "Sniff Offload Enabled" dopo aver gestito correttamente un "WriteSniffOffloadEnable" per attivare Sniff Offload. In questo stato, il controller Bluetooth deve inoltrare gli eventi HCI_Mode_Change e HCI_Sniff_Subrating a un host Bluetooth, come stabilito da una funzione AND logica della maschera degli eventi impostata dall'host Bluetooth e dai flag di soppressione degli eventi.

Stati specifici della connessione

Quando un controller Bluetooth è nello stato "Sniff Offload Enabled", ogni ACL attivo può trovarsi in uno dei due stati descritti di seguito.

Stato in attesa del parametro

Un ACL è considerato nello stato "In attesa di parametri" quando il controller Bluetooth è nello stato "Sniff Offload Enabled", ma un comando specifico del fornitore "WriteSniffOffloadParameters" non è stato emesso almeno una volta dall'host Bluetooth per l'ACL corrente.

Stato Control-Started

Un ACL è considerato nello stato "Control-Started" quando il controller Bluetooth è nello stato "Sniff Offload Enabled" e un comando specifico del fornitore "WriteSniffOffloadParameters" è stato emesso almeno una volta dall'host Bluetooth per l'ACL corrente.

WriteSniffOffloadEnable

OCF: 0x310

Parametro del comando Dimensioni Finalità
Enable_Sniff_Offload 1 ottetto 0x00 : Disattiva
0x01 : Attiva
Subrating_Max_Latency 2 ottetti Il parametro Latenza massima deve essere utilizzato per calcolare la velocità di campionamento massima che il dispositivo remoto può utilizzare. Valore predefinito: latenza T*sniff* = N × 0,625 ms (1 slot Baseband) Intervallo: da 0x0002 a 0xFFFE Intervallo di tempo: da 1,25 ms a 40,9 s
Subrating_Min_Remote_Timeout 2 ottetti Timeout minimo della modalità di sniffing (T*sniff_mode_timeout*) che il dispositivo remoto può utilizzare Valore predefinito: 0x0000 Timeout = N × 0,625 ms (1 slot della banda base) Intervallo: da 0x0000 a 0xFFFE Tempo Intervallo: da 0 s a 40,9 s
Subrating_Min_Local_Timeout 2 ottetti Timeout minimo della modalità di rilevamento (T*sniff_mode_timeout*) che il dispositivo locale può utilizzare. Valore predefinito: 0x0000 Timeout = N × 0,625 ms (1 slot baseband) Intervallo: da 0x0000 a 0xFFFE Intervallo di tempo: da 0 s a 40,9 s
Suppress_Mode_Change_Event 1 ottetto 0x00 : Il controller Bluetooth deve segnalare l'evento HCI Mode_Change all'host in base alla configurazione impostata nel comando HCI_Set_Event_Mask.
0x01 : Il controller Bluetooth non deve segnalare l'evento HCI Mode_Change all'host.
Suppress_Sniff_Subrating_Event 1 ottetto 0x00 : Il controller Bluetooth deve segnalare l'evento HCI Sniff_Subrating all'host in base alla configurazione impostata nel comando HCI_Set_Event_Mask.
0x01 : Il controller Bluetooth non deve segnalare l'evento HCI Sniff_Subrating all'host.

WriteSniffOffloadParameters

OCF: 0x311

Parametro comando Dimensioni Finalità
Connection_Handle 2 ottetti Handle di connessione ACL BR/EDR a 16 bit. Intervallo: da 0x0000 a 0x0EFF
Sniff_Max_Interval 2 ottetti – Intervallo definito da Bluetooth SIG, utilizzato normalmente per l'accesso alla modalità Sniff. Intervallo: da 0x0002 a 0xFFFE; sono validi solo i valori pari.Intervallo obbligatorio: da 0x0006 a 0x0540.Tempo = N × 0,625 ms Intervallo di tempo: da 1,25 ms a 40,9 s.Casi speciali 0x0000 : utilizzato per selezionare la modalità "Push-Active" Sniff-Offload. 0x0001 : utilizzato per selezionare la modalità di offload di sniffing "Prefer-Active".
Sniff_Min_Interval 2 ottetti Intervallo: da 0x0002 a 0xFFFE; sono validi solo i valori pari. Intervallo obbligatorio: da 0x0006 a 0x0540 Tempo = N × 0,625 ms Intervallo di tempo: da 1,25 ms a 40,9 s
Sniff_Attempts 2 ottetti Numero di slot di ricezione della banda base per il tentativo di sniffing. Lunghezza = N × 1,25 ms Intervallo: da 0x0001 a 0x7FFF Intervallo di tempo: da 1,25 ms a 40,9 s Intervallo obbligatorio per il controller: da 1 a T*sniff* ÷ 2
Sniff_Timeout 2 ottetti Numero di slot di ricezione della banda base per il timeout di sniffing. Lunghezza = N × 1,25 ms Intervallo: da 0x0000 a 0x7FFF Intervallo di tempo: da 0 ms a 40,9 s Intervallo obbligatorio per il controller: da 0 a 0x0028
Link_Inactivity_Timeout 2 ottetti Valore del timeout in millisecondi. Timer di inattività del collegamento avviato/reimpostato a ogni transazione HCI-ACL. Allo scadere di questo timer, il controller avvierà l'ingresso in modalità Sniff.
Subrating_Max_Latency 2 ottetti Il parametro Latenza massima deve essere utilizzato per calcolare la velocità di campionamento massima che il dispositivo remoto può utilizzare. Valore predefinito: latenza T*sniff* = N × 0,625 ms (1 slot Baseband) Intervallo: da 0x0002 a 0xFFFE Intervallo di tempo: da 1,25 ms a 40,9 s
Subrating_Min_Remote_Timeout 2 ottetti Timeout minimo della modalità di sniffing (T*sniff_mode_timeout*) che il dispositivo remoto può utilizzare Valore predefinito: 0x0000 Timeout = N × 0,625 ms (1 slot della banda base) Intervallo: da 0x0000 a 0xFFFE Tempo Intervallo: da 0 s a 40,9 s
Subrating_Min_Local_Timeout 2 ottetti Timeout minimo della modalità di rilevamento (T*sniff_mode_timeout*) che il dispositivo locale può utilizzare. Valore predefinito: 0x0000 Timeout = N × 0,625 ms (1 slot baseband) Intervallo: da 0x0000 a 0xFFFE Intervallo di tempo: da 0 s a 40,9 s
Allow_Exit_Sniff_On_Rx 1 ottetto Flag per controllare l'uscita dalla modalità Sniff nella transazione HCI-ACL con direzione di ricezione. 0x00 : Non uscire dall'analisi su Rx. 0x01 : Exit Sniff on Rx Receive-direction HCI-ACL is defined as ACL packet transmission from controller to host over HCI.
Allow_Exit_Sniff_On_Tx 1 ottetto Flag per controllare l'uscita dalla modalità Sniff sulla transazione HCI-ACL nella direzione di trasmissione. 0x00 : Non uscire dall'analisi su Tx. 0x01 : Exit Sniff on Tx Transmit-direction HCI-ACL is defined as ACL packet transmission from host to controller over HCI.