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:
|
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 - immediate0x01 - on_found0x02 - 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:
|
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:
|
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:
|
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_LengthIgnora quando APCF_Action è 0x02 (Cancella) |
APCF_AD_DATA_MASK |
Dimensione variabile |
Dimensioni variabili, in base a APCF_AD_DATA_LengthIgnora 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:
Valore del bit
|
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.
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. Codec AAC:
Fai riferimento agli elementi informativi specifici del codec AAC in A2DP v1.3 Codec LDAC:
Ottetto 0-3: ID fornitore
Ottetti 4-5: ID codec
Ottetto 6: indice del bitrate:
Ottetto 7: LDAC Channel Mode 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
L'eliminazione cancellerà i report relativi a eventi di qualità specifici. |
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à. |
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 |
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 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) presenti0x01: 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 ottettoRSSI[0]: 1 ottettoTimestamp[0]: 2 ottettiAdv packet_len[0]: 1 ottettoAdv_packet[0]: Adv_packet_len ottettiScan_data_resp_len[0]: 1 ottettoScan_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.
Codice subevento = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, evento correlato a Link Quality]
| 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. |
SNR |
1 ottetto |
[in dB]
Valore del rapporto segnale/rumore (SNR) per l'handle di connessione specificato. |
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. |
Buffer_Underflow_Bytes |
4 ottetti |
[in Byte]
Conteggio dell'underflow del buffer dall'ultimo evento. |
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. |
Codice subevento = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, evento correlato al dump dei log]
| 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. |
Evento secondario Feedback sul link ISO
Codice evento secondario = 0x5C
Se attivato, questo evento deve essere generato durante ogni intervallo ISO.
Attivazione
L'attivazione viene eseguita selezionando il codice fornitoreData_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 utilizzandoAnchor_Point_Delay.
Sincronizzazione del controller
All'inizio di un intervallo ISO, il controller calcola StreamSN incrementando il valore corrente in base alISO_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 utilizzandoIn_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_IntervaleSNdiff <= 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 aMax_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_Cmd0x02 - Set_Advt_Data_Multi_Sub_Cmd0x03 - Set_Scan_Resp_Data_Multi_Sub_Cmd0x04 - Set_Random_Addr_Multi_Sub_Cmd0x05 - Set_Advt_Enable_Multi_Sub_Cmd
|
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_Command0x02 - Set_Advt_Data_Multi_Command0x03 - Set_Scan_Resp_Data_Multi_Command0x04 - Set_Random_Addr_Multi_Command0x05 - Set_Advt_Enable_Multi_Command
|
LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd
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. |