Requisiti dell'HCI

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

L'interfaccia del controller host (HCI) viene utilizzata per interagire con un controller Bluetooth.

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

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

Panoramica generale del design

Capacità 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 gestire le migrazioni, in questo documento viene descritta una filosofia di progettazione che consente ai controller BT di esporre le proprie capacità (oltre la specifica standard Bluetooth Core 5.2). Lo stack BT host può quindi utilizzare queste capacità per determinare quali funzionalità abilitare.

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, punteremo a rendere tale approccio predefinito.

Funzionalità specifiche del fornitore

Comando specifico del fornitore: LE_Get_Vendor_Capabilities_Command

Campo di comando OpCode (OCF): 0x153

Parametro di comando Dimensione Scopo
N / A Elenco dei parametri di comando vuoto

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
max_advt_instances
(Deprecato)
1 ottetto Numero di istanze pubblicitarie supportate.

Riservato dopo la v0.98.
Questo parametro è deprecato nelle specifiche delle funzionalità di Google v0.98 e successive a favore della pubblicità estesa LE disponibile nelle specifiche BT versione 5.0 e successive.
offloaded_resolution_of_private-address
(Deprecato)
1 ottetto Capacità del chip BT di RPA.
Se supportato da un chip, necessita dell'abilitazione da parte dell'host.
0 = Non in grado
1 = Capace

Riservato dopo la v0.98.
Questo parametro è deprecato nelle specifiche delle funzionalità di Google v0.98 e successive a favore della funzione Privacy disponibile nelle specifiche BT versione 4.2 e successive.
total_scan_results_storage 2 ottetti Archiviazione per risultati di scansione in byte
max_irk_list_sz 1 ottetto Numero di voci IRK supportate nel firmware
filtering_support 1 ottetto Supporto per il filtraggio nel controller
0 = Non supportato
1 = Supportato
max_filter 1 ottetto Numero di filtri supportati
activity_energy_info_support 1 ottetto Supporta la segnalazione di attività e informazioni sull'energia
0 = Non in grado
1 = Capace
version_supported 2 ottetti Specifica la versione delle specifiche delle funzioni di Google supportate
byte[0] = Numero maggiore
byte[1] = Numero minore

v1.00
byte[0] = 0x01
byte[1] = 0x00
total_num_of_advt_tracked 2 ottetti Numero totale di inserzionisti monitorati per scopi OnLost / OnFound
extended_scan_support 1 ottetto Supporta finestra e intervallo di scansione estesi
debug_logging_supported 1 ottetto Supporta la registrazione delle informazioni di debug binarie dal controller
LE_address_generation_offloading_support
(Deprecato)
1 ottetto 0 = Non supportato
1 = Supportato

Riservato dopo la v0.98.
Questo parametro è deprecato nelle specifiche delle funzionalità di Google v0.98 e successive a favore della funzione Privacy disponibile nelle specifiche BT versione 4.2 e successive.
A2DP_source_offload_capability_mask 4 Ottetti Maschere di bit per tipi di codec supportati
Bit 0 - SBC
Bit 1 - CAA
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
I bit 5-31 sono riservati
bluetooth_quality_report_support 1 ottetto Supporta la segnalazione di eventi di qualità Bluetooth
0 = Non in grado
1 = Capace
supporto_buffer_audio_dinamico 4 ottetti Supporta il buffer audio dinamico nel controller Bluetooth
Maschere di bit per tipi di codec supportati
Bit 0 - SBC
Bit 1 - CAA
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
I bit 5-31 sono riservati

Batch dei risultati della scansione

Un obiettivo di progettazione è migliorare il modo in cui le notifiche degli eventi di risposta alla scansione Bluetooth LE vengono inviate all'host, al fine di risparmiare energia nell'host.

Riducendo la frequenza con cui il controller notifica al processore dell'applicazione host la scansione dei risultati, il processore dell'applicazione host può rimanere inattivo/inattivo più a lungo. Ciò riduce il consumo di energia nell'host. Il parametro di ritorno total_scan_results_storage di LE_Get_Vendor_Capabilities_Command indica la capacità del chip per la memorizzazione dei risultati della scansione.

Questa funzione si concentra sulla gestione e configurazione della funzione di archiviazione dei risultati di scansione LE nel controller Bluetooth. L'archiviazione viene utilizzata per raggruppare temporaneamente in batch i dati degli annunci e scansionare dati e metadati 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 di comando Dimensione Scopo
Batch_Scan_opcode 1 ottetto 0x1 - Abilita la funzionalità specifica del cliente
0x2 - Imposta i parametri di archiviazione della scansione in batch
0x3 - Imposta i parametri di scansione batch
0x4 - Lettura dei parametri dei risultati della scansione batch

Verrà generato un evento Command Complete per questo comando. L'abilitazione della funzione specifica del cliente non avvia la scansione.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
Batch_Scan_opcode 1 ottetto 0x1 - Abilita la funzionalità specifica del cliente
0x2 - Imposta i parametri di archiviazione della scansione in batch
0x3 - Imposta i parametri di scansione batch
0x4 - Lettura dei parametri dei risultati della scansione batch

LE_Batch_Scan_Command: Abilita la funzione specifica del cliente

Sub OCF: 0x01

Parametro del sottocomando Dimensione Scopo
enable_customer_specific_feature_set 1 ottetto 0x01 - Abilita la funzione di scansione batch
0x00 - Disabilita la funzione di scansione in batch

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
Batch_Scan_opcode 1 ottetto 0x1 - Abilita la funzionalità specifica del cliente
0x2 - Imposta i parametri di archiviazione della scansione in batch
0x3 - Imposta i parametri di scansione batch
0x4 - Lettura dei parametri dei risultati della scansione batch

LE_Batch_Scan_Command: imposta il sottocomando Batch Scan Storage Param

Sub OCF: 0x02

Parametro del sottocomando Dimensione Scopo
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 Livello di notifica dell'installazione (in %) per il singolo lotto di memoria
[Intervallo: 0-100]
L'impostazione su 0 disabiliterà la notifica. Viene generato un evento HCI specifico del fornitore (sottoevento di violazione della soglia di archiviazione)

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
Batch_scan_opcode 1 ottetto 0x02 [Imposta parametri scansione batch]

LE_Batch_Scan_Command: imposta il sottocomando Batch Scan Param

Sub OCF: 0x03

Parametro del sottocomando Dimensione Scopo
Batch_Scan_Mode 1 ottetto 0x00 – La scansione batch è disabilitata
0x01 – La modalità troncata è abilitata
0x02 – La modalità completa è abilitata
0x03 – Le modalità troncata e completa sono abilitate
Duty_cycle_scan_window 4 ottetti Tempo di scansione della scansione in batch (n. di slot)
Duty_cyle_scan_interval 4 ottetti Intervallo scansione batch (n. di slot)
own_address_type 1 ottetto 0x00 - Indirizzo dispositivo pubblico
0x01 - Indirizzo dispositivo casuale
Batch_scan_Discard_Rule 1 ottetto 0 - Elimina l'annuncio più vecchio
1 - Elimina la pubblicità con RSSI più debole

Questo sottocomando avvierà la scansione batch, se abilitato. Nella scansione troncata, i risultati vengono archiviati in forma troncata in cui la chiave univoca per Stile troncato = { BD_ADDR, scan_interval}. Ciò significa che 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 verranno registrate le risposte alla scansione. La chiave univoca di stile completo = {MAC, Ad packages}, 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 visto più volte in intervalli di scansione diversi, viene registrato solo una volta. Tuttavia, in modalità troncata, è la visibilità di BA_ADDR su diversi intervalli di scansione che interessa (una volta per intervallo di scansione). L'RSSI è il valore medio di tutti i duplicati di un annuncio unico all'interno di un intervallo di scansione.

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
Batch_scan_opcode 1 ottetto 0x03 [Imposta parametri di scansione batch]

LE_Batch_Scan_Command: Leggi il sottocomando dei risultati della scansione batch

Sub OCF: 0x04

Parametro del sottocomando Dimensione Scopo
Batch_Scan_Data_read 1 ottetto 0x01 – Dati in modalità troncata
0x02 – Dati in modalità completa

Verrà generato un evento Command Complete per questo comando. Quando l'host esegue questo comando, tutti i risultati nel controller potrebbero non rientrare in un evento Command Complete. L'host eseguirà l'iterazione emettendo questo comando finché i risultati corrispondenti nell'evento Command Complete indicheranno 0 nel numero di record, il che indica che il controller non ha più record da comunicare all'host. Ciascun 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à del timestamp è 50 ms. Il valore del timestamp si basa su quando 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 è stata acquisita la marcatura temporale nel firmware è T_fw . Il tempo di segnalazione sarà: ( T_c - T_fw ). T_c e T_fw sono nel dominio del tempo del firmware. Ciò consente all'host di calcolare quanto tempo fa si è verificato l'evento.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
Batch_scan_opcode 1 ottetto 0x03 [Imposta parametri scansione batch]
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:
Indirizzo[0]: 6 ottetti
Tipo_indirizzo[0]: 1 ottetto
Tx_Pwr[0]: 1 ottetto
RSSI[0] : 1 ottetto
Timestamp[0]: 2 ottetti
[record multipli ( num_of_records ) con il formato sopra]

Modalità completa:
Indirizzo[0]: 6 ottetti
Tipo_indirizzo[0]: 1 ottetto
Tx_Pwr[0]: 1 ottetto
RSSI[0]: 1 ottetto
Timestamp[0]: 2 ottetti
Adv packet_len[0]: 1 ottetto
Adv_packet[0]: Adv_packet_len ottetti
Scan_data_resp_len[0]: 1 ottetto
Scan_data_resp[0]: Scan_data_resp ottetti
[più record con il formato sopra ( num_of_records )]

Filtro del contenuto del pacchetto pubblicitario

Usalo per abilitare/disabilitare/impostare il filtro del contenuto del pacchetto pubblicitario (APCF) nel controller.

LE_APCF_Comando

OCF: 0x157

Parametro di comando Dimensione Scopo
APCF_opcode 1 ottetto 0x00 - Abilitazione APCF
0x01 - APCF Imposta i parametri di filtraggio
0x02 - Indirizzo dell'emittente APCF
0x03 - UUID del servizio APCF
0x04 - UUID di sollecitazione del servizio APCF
0x05 - Nome locale APCF
0x06 - Dati del produttore APCF
0x07 - Dati di servizio APCF

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato reso
APCF_opcode 1 ottetto 0x00 - Abilitazione APCF
0x01 - APCF Imposta i parametri di filtraggio
0x02 - Indirizzo dell'emittente APCF
0x03 - UUID del servizio APCF
0x04 - UUID di sollecitazione del servizio APCF
0x05 - Nome locale APCF
0x06 - Dati del produttore APCF
0x07 - Dati di servizio APCF

LE_APCF_Comando: Abilita_sub_cmd

Sub OCF: 0x00

Parametro del sottocomando Dimensione Scopo
APCF_enable 1 ottetto 0x01 - Abilita la funzione APCF
0x00 - Disabilita la funzione APCF

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x0 - Abilitazione APCF
APCF_Enable 1 ottetto Abilita/disabilita viene impostato tramite APCF_enable

LE_APCF_Comando: set_filtering_parameters_sub_cmd

Questo sottocomando viene utilizzato per aggiungere o eliminare una specifica di filtro o cancellare un elenco di filtri per il filtraggio su chip.

Sub OCF: 0x01

Parametro del sottocomando Dimensione Scopo
APCF_Action 1 ottetto 0x00 - Aggiungi
0x01 - Elimina
0x02 - Cancella
Elimina cancellerà il filtro specifico insieme alle voci di funzionalità associate in altre tabelle.
Cancella cancellerà 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 funzioni selezionate:
Bit 0: impostare per abilitare il filtro dell'indirizzo di trasmissione
Bit 1: impostare per abilitare il filtro di modifica dei dati di servizio
Bit 2: impostare per abilitare il controllo UUID del servizio
Bit 3: impostare per abilitare il controllo UUID di richiesta di servizio
Bit 4: impostare per abilitare il controllo del nome locale
Bit 5: impostare per abilitare il controllo dei dati del produttore
Bit 6: impostare per abilitare il controllo dei dati di servizio
APCF_List_Logic_Type 2 ottetti Operazione logica per ciascuna selezione di funzioni (posizione per bit) specificata in APCF_Feature_Selection .
Valido solo quando una funzione è abilitata.
Valore di posizione del bit:
0: O
1: E
Se è selezionata la logica "AND", un pacchetto ADV passerà il filtro solo se contiene TUTTE le voci nell'elenco.
Se è selezionata la logica "OR", un pacchetto ADV passerà il filtro se contiene una delle voci nell'elenco.
APCF_Filter_Logic_Type 1 ottetto 0x00: O
0x01: E
Nota: il tipo di logica è N/A per i primi tre campi di APCF_Feature_Selection , che è sempre logica "AND". Sono applicabili solo per (Bit 3 - Bit 6) quattro campi di APCF_Feature_Selection .
rssi_high_thresh 1 ottetto [in dBm]
L'inserzionista è considerato visto solo se il segnale è superiore alla soglia alta RSSI. In caso contrario, il firmware deve comportarsi come se non l'avesse mai visto.
delivery_mode 1 ottetto 0x00 - immediate
0x01 - on_found
0x02 - batched
onfound_timeout 2 ottetti Valido solo se delivery_mode è on_found .
[in millisecondi]
È tempo che il firmware si soffermi e raccolga annunci pubblicitari aggiuntivi prima di segnalare.
onfound_timeout_cnt 1 ottetto Valido solo se delivery_mode è on_found .
[contare]
Se un annuncio in onFound rimane nel firmware per la durata di onfound_timeout , raccoglierà alcuni annunci e il conteggio verrà 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 come 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 un annuncio, dopo essere stato trovato, non viene visualizzato in modo contiguo per il periodo di lost_timeout , verrà immediatamente segnalato come smarrito.
num_of_tracking_entries 2 ottetti Valido solo se delivery_mode è on_found .
[contare]
Numero totale di inserzionisti da monitorare per filtro.

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

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

Filtraggio, batching e reporting sono concetti correlati. Ogni pubblicità e la relativa risposta alla scansione dovranno passare attraverso tutti i filtri, uno dopo l'altro. Pertanto, le azioni risultanti ( delivery_mode ) sono strettamente legate al filtraggio. Le modalità di consegna sono le seguenti: report_immediately , batch e onFound . Il valore OnLost è correlato a OnFound nel senso che verrà dopo OnFound in caso di smarrimento.

Questo flusso di elaborazione descrive il modello concettuale:

Quando viene ricevuto un frame di annuncio (o risposta alla scansione), viene applicato a tutti i filtri in ordine seriale. È possibile che un annuncio possa causare rapporti immediati basati su un filtro e batch dello stesso a causa di una diversa azione del filtro.

Le soglie di livello RSSI (alto e basso) danno la possibilità di controllare quando il frame è visibile per l'elaborazione del filtro, anche quando un pacchetto valido viene ricevuto dal controller. Nel caso in cui la modalità di consegna sia impostata su immediata o batch, l'RSSI di un frame viene considerato per l'ulteriore elaborazione del controller. App diverse richiedono rapporti e comportamenti di batch diversi. Ciò consente a più app di avere rapporti diretti e/o batch di risultati nel firmware, contemporaneamente. Un esempio è il caso in cui una scansione batch è attiva da un'app e successivamente una scansione LE regolare viene emessa da un'altra app. Prima che venga emessa una scansione batch, il framework/l'app imposta i filtri appropriati. Successivamente, 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 LE scan. I parametri del comando di scansione LE hanno la precedenza quando sono attivi. Quando la scansione LE regolare è disabilitata, il controller tornerà a una scansione batch precedente, se esisteva.

La modalità di consegna OnFound si basa su filtri configurati. Una combinazione che attiva l'azione di un filtro per avere successo è considerata l'entità di cui tenere traccia per onLost . L'evento corrispondente è il sottoevento di monitoraggio LE Advt.

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

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x02 - APCF imposta i parametri di filtraggio
APCF_Action 1 ottetto Echo back APCF_Action del comando
APCF_AvailableSpaces 1 ottetto Numero di voci disponibili nella tabella dei filtri

LE_APCF_Comando: broadcast_address_sub_cmd

Questo sottocomando viene utilizzato per aggiungere o eliminare l'indirizzo di un inserzionista o per cancellare l'elenco di indirizzi dell'inserzionista per il filtro su chip.

Sub OCF: 0x02

Parametro del sottocomando Dimensione Scopo
APCF_Action 1 ottetto 0x00 - Aggiungi
0x01 - Elimina
0x02 - Cancella
Elimina eliminerà l'indirizzo dell'emittente specificato nel filtro specificato.
Cancella cancellerà tutti gli indirizzi delle emittenti nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice del filtro (0, max_filter-1 )
APCF_Broadcaster_Address 6 ottetto Indirizzo del dispositivo a 6 byte da aggiungere o eliminare dall'elenco degli indirizzi dell'emittente
APCF_Application_Address_type 1 ottetto 0x00: pubblico
0x01: casuale
0x02: NA (tipo di indirizzi non applicabile)

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x02 - Indirizzo dell'emittente APCF
APCF_Action 1 ottetto Echo back APCF_Action del comando
APCF_AvailableSpaces 1 ottetto Numero di voci libere ancora disponibili nella tabella Indirizzo di trasmissione

LE_APCF_Comando: service_uuid_sub_cmd

Questo sottocomando viene utilizzato per aggiungere o eliminare un UUID di servizio o per cancellare un elenco di UUID di servizio per il filtraggio su chip.

Sub OCF: 0x03

Parametro del sottocomando Dimensione Scopo
APCF_Action 1 ottetto 0x00 - Aggiungi
0x01 - Elimina
0x02 - Cancella
Elimina eliminerà l'indirizzo UUID del servizio specificato nel filtro specificato.
Clear cancellerà 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 ottetto L'UUID del servizio (16 bit, 32 bit o 128 bit) per l'aggiunta o l'eliminazione dall'elenco.
APCF_UUID_MASK 2,4,16 ottetto La maschera UUID del servizio (16 bit, 32 bit o 128 bit) da aggiungere all'elenco. Dovrebbe avere la stessa lunghezza di APCF_UUID.

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x03 - UUID del servizio APCF
APCF_Action 1 ottetto Echo back APCF_Action del comando
APCF_AvailableSpaces 1 ottetto Numero di voci libere ancora disponibili nella tabella UUID del servizio

LE_APCF_Comando: sollecitazione_uuid_sub_cmd

Questo sottocomando viene utilizzato per aggiungere o eliminare un UUID di sollecitazione o per cancellare un elenco di UUID di sollecitazione per il filtraggio su chip.

Sub OCF: 0x04

Parametro del sottocomando Dimensione Scopo
APCF_Action 1 ottetto 0x00 - Aggiungi
0x01 - Elimina
0x02 - Cancella
Elimina eliminerà l'indirizzo UUID di richiesta nel filtro specificato.
Cancella cancellerà tutti gli UUID di sollecitazione nel filtro specificato.
APCF_Filter_Index 1 ottetto Indice del filtro (0, max_filter -1)
APCF_UUID 2,4,16 ottetto L'UUID di sollecitazione (16 bit, 32 bit o 128 bit) da aggiungere o eliminare dall'elenco.
APCF_UUID_MASK 2,4,16 ottetto La maschera UUID di sollecitazione (16 bit, 32 bit o 128 bit) da aggiungere all'elenco. Dovrebbe avere la stessa lunghezza di APCF_UUID .

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x04 - UUID di sollecitazione APCF
APCF_Action 1 ottetto Echo back APCF_Action del comando
APCF_AvailableSpaces 1 ottetto Numero di voci libere ancora disponibili nella tabella UUID di sollecitazione

LE_APCF_Comando: nome_locale_sub_cmd

Questo sottocomando viene utilizzato per aggiungere o eliminare una stringa di nome locale o per cancellare l'elenco di stringhe di nome locale per il filtraggio su chip.

Sub OCF: 0x05

Parametro del sottocomando Dimensione Scopo
APCF_Action 1 ottetto 0x00 - Aggiungi
0x01 - Elimina
0x02 - Cancella
Elimina eliminerà la stringa del nome locale specificata nel filtro specificato.
Clear cancellerà 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.

Appunti:
  • Attualmente il numero massimo di caratteri in una stringa del nome locale è 29
  • Non applicabile quando l'azione è "Cancella" (0x2)

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x05 - Nome locale APCF
APCF_Action 1 ottetto Echo back APCF_Action del comando
APCF_AvailableSpaces 1 ottetto Numero di voci libere ancora disponibili nella tabella dei nomi locali

LE_APCF_Comando: manf_data_sub_cmd

Questo sottocomando 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 su chip.

Sub OCF: 0x06

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

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

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x06 - Dati del produttore APCF
APCF_Action 1 ottetto Echo back APCF_Action del comando
APCF_AvailableSpaces 1 ottetto Numero di voci libere ancora disponibili nella tabella Dati produttore

LE_APCF_Comando: 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 su chip.

Sub OCF: 0x07

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

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

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
APCF_opcode 1 ottetto 0x07 - Dati di servizio APCF
APCF_Action 1 ottetto Echo back APCF_Action del comando
APCF_AvailableSpaces 1 ottetto Numero di voci libere ancora disponibili per la tabella Dati di servizio

Comando delle informazioni sull'attività del controller e sull'energia

L'obiettivo di queste informazioni è che le funzioni del sistema host superiore analizzino le attività totali di tutti i componenti, incluso il controller BT e il suo stato macro, insieme a ciò che sta accadendo nelle app e nel framework. Per fare ciò, sono necessarie le seguenti informazioni dallo stack BT e dal controller:

  • Stack BT: Segnalazione dello stato operativo macro corrente del controller
  • Firmware: report sull'attività aggregata e le informazioni sull'energia

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

  • Inattivo: [scansione pagina, LE advt, scansione richiesta]
  • Scansione: [cercapersone/richiesta/tentativo di connessione]
  • Attivo: [collegamento ACL attivo, collegamento SCO in corso, modalità sniff]

Le attività di cui il controller tiene traccia nel corso della sua vita sono il tempo Tx, il tempo Rx, il tempo di inattività e l'energia totale consumata. Vengono cancellati quando letti dall'host.

LE_Get_Controller_Activity_Energy_Info

Questo è un comando specifico del fornitore.

OCF: 0x159

Parametro del sottocomando Dimensione Scopo
N / A Parametri di comando vuoti

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo
total_tx_time_ms 4 ottetti Tempo totale di esecuzione di Tx
total_rx_time_ms 4 ottetti Tempo totale di esecuzione di Rx
total_idle_time_ms 4 ottetti Tempo totale in idle (stati di basso consumo non dormienti)
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 abilitare una finestra di scansione e un intervallo più grandi nel controller. Secondo la specifica BT Core 5.2, una finestra di scansione e un intervallo hanno un limite superiore di 10,24 secondi, il che ostacola gli intervalli di scansione più lunghi delle applicazioni oltre i 10,24 secondi.

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

OCF: 0x15A

Parametro di comando Dimensione Scopo
LE_Ex_Scan_Type 1 ottetto 0x00 - Scansione passiva. Nessun pacchetto SCAN_REQ deve essere inviato (predefinito).
0x01 - Scansione attiva. È possibile che vengano inviati pacchetti SCAN_REQ .
LE_Ex_Scan_Interval 4 ottetti Definito come l'intervallo di tempo da quando il Controller ha iniziato l'ultima scansione LE fino all'inizio della successiva scansione LE.
Intervallo: da 0x0004 a 0x00FFFFFF
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 minore o uguale a LE_Scan_Interval .
Intervallo: da 0x0004 a 0xFFFF
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 (predefinito)
0x01 - Indirizzo dispositivo casuale
LE_Ex_Scan_Filter_Policy 0x00 - Accetta tutti i pacchetti di annunci (impostazione predefinita). I pacchetti pubblicitari diretti che non sono indirizzati per questo dispositivo devono essere ignorati.
0x01 - Ignora i pacchetti di annunci dai dispositivi non nell'elenco Solo lista bianca. I pacchetti pubblicitari diretti che non sono indirizzati per questo dispositivo devono essere ignorati.

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Status 1 ottetto Stato comando completo

Ottieni il comando delle informazioni di debug del controller

L'obiettivo di questo elemento informativo è acquisire informazioni di debug del controller da un host, in forma binaria, per la post-elaborazione e l'analisi. Questo aiuta a eseguire il debug dei problemi sul campo e fornisce agli ingegneri un toolkit per registrare le informazioni per l'analisi. Un Controller può fornire le informazioni quando richiesto da un host tramite l'evento (sottoevento Controller Debug Info) o autonomamente quando lo desidera il controller. Esempi di utilizzo potrebbero essere la segnalazione di informazioni sullo stato del firmware, informazioni di dump di arresto anomalo, informazioni di registrazione, ecc.

OCF: 0x15B

Parametro di comando Dimensione Scopo
N / A Elenco dei parametri di comando vuoto

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Stato 1 ottetto Stato comando completo

Supporto per lo scarico dell'hardware A2DP

La funzione A2DP Offload supporta l'offload del processo di codifica audio A2DP su un processore audio collegato al controller BT. Il flusso di dati audio codificato 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.

OCF: 0x15D

Avvia lo scarico A2DP

Sub OCF: 0x01

Utilizzare questo comando sia per configurare il processo A2DP Offload che per avviare il flusso A2DP.

Parametro di comando Dimensione Scopo
codec 4 ottetti Specifica il tipo di codec
0x01 - SBC
0x02 - CAA
0x04 - APTX
0x08 - APTX HD
0x10 - LDAC
Max_Latenza 2 ottetti Latenza massima consentita (in ms). Un valore pari a zero disabilita lo svuotamento.
SCMS-T_Abilita 2 ottetti Ottetto 0: flag che abilita l'aggiunta dell'intestazione SCMS-T.
  • 0x00 - Intestazione SCMS-T non inclusa.
  • 0x01 - Intestazione SCMS-T inclusa.

Ottetto 1: valore per l'intestazione SCMS-T, quando è abilitato.

Frequenza di campionamento 4 ottetti 0x01 - 44100 Hz
0x02 - 48000 Hz
0x04 - 88200 Hz
0x08 - 96000 Hz
Bit_per_campione 1 ottetto 0x01 - 16 bit per campione
0x02 - 24 bit per campione
0x04 - 32 bit per campione
Modalità_canale 1 ottetto 0x01 - Mono
0x02 - Stereo
Encoded_Audio_Bitrate 4 ottetti Il bitrate dell'audio codificato in bit al secondo secondo.
0x00000000 - Il bitrate audio non è specificato/non utilizzato.
0x00000001 - 0x00FFFFFF - Bitrate audio codificato in bit al secondo.
0x01000000 - 0xFFFFFFFF - Riservato.
Connection_Handle 2 ottetti Connection Handle della connessione A2DP in fase di configurazione
L2CAP_ID_canale 2 ottetti L2CAP ID canale da utilizzare per questa connessione A2DP
Dimensione L2CAP_MTU 2 ottetti Dimensione massima dell'MTU L2CAP contenente pacchetti audio codificati
Codec_Informazioni 32 ottetti Informazioni specifiche del codec.

Codec SBC:

Fare riferimento agli elementi informativi specifici del codec SBC in A2DP v1.3.
Ottetto 0: lunghezza del blocco | Sottobande | Metodo di allocazione
Ottetto 1: valore minimo di Bitpool
Ottetto 2: valore massimo di Bitpool
Ottetto 3: Frequenza di campionamento | Modalità canale
Ott 4-31: riservato

Codec AAC:

Fare riferimento agli elementi informativi specifici del codec AAC in A2DP v1.3
Ottetto 0: tipo di oggetto
Ottetto 1; b7: VBR
2-31 ottobre: ​​riservato

Codec LDAC:

Ottetto 0-3: ID fornitore
0x0000012D

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

Ottetto 6: Indice di bitrate:
0x00 - Alto
0x01 - Mezzo
0x02 - Basso
0x03 - 0x7E - Riservato
0x7F - ABR (bit rate adattivo)
0x80 - 0xFF - Riservato

Ottetto 7: Modalità canale LDAC
0x01 - Stereo
0x02 - Doppio
0x04 - Mono
Gli altri sono riservati

Ott 8-31: riservato

Tutti gli altri codec:

Ottetto 0-31: riservato

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Stato 1 ottetto Stato comando completo
Sotto_codice operativo 1 ottetto 0x0- Avvia l'offload A2DP

Arresta scaricamento A2DP

Sub OCF: 0x02

Questo comando viene utilizzato per interrompere il flusso di A2DP Offload.

Parametro di comando Dimensione Scopo
N / A Elenco dei parametri di comando vuoto.

Nessun parametro è definito per questo comando.

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Stato 1 ottetto Stato comando completo
Sotto_codice operativo 1 ottetto 0x02 - Arresta scaricamento A2DP

Comando Rapporto qualità Bluetooth

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

  • Modalità di monitoraggio della qualità: il controller invia periodicamente un sottoevento BQR relativo alla qualità del collegamento all'host.
  • LSTO in avvicinamento: se non vengono ricevuti pacchetti dal dispositivo BT connesso per più della metà del valore LSTO (Link Supervision TimeOut), il controller segnala un evento LSTO in avvicinamento all'host.
  • A2DP Audio Choppy: quando il controller rileva i fattori che causano un audio discontinuo, il controller segnala un evento A2DP Audio Choppy all'host.
  • (e) SCO Voice Choppy: quando il controller rileva fattori che causano disturbi della voce, il controller segnala un evento (e)SCO Voice Choppy all'host.
  • Infiammazione alla radice: questo evento viene inviato dal controller allo stack quando l'HAL o il controller rileva un errore irreversibile e deve riavviare il Bluetooth.
  • Traccia del messaggio LMP/LL: il controller invia l'handshaking del messaggio LMP/LL con il dispositivo remoto all'host.
  • Traccia di pianificazione Bluetooth multiprofilo/Coex: il controller invia all'host le informazioni di pianificazione sulla gestione di più profili Bluetooth e sulla coesistenza wireless nella banda da 2,4 Ghz.
  • Meccanismo delle informazioni di debug del controller: se abilitato, il controller può segnalare autonomamente le informazioni di registrazione del debug tramite il sottoevento Informazioni di debug del controller all'host.

OCF: 0x15E

Parametro di comando Dimensione Scopo
BQR_Report_Azione 1 ottetto Azione per aggiungere/eliminare la segnalazione degli eventi di qualità impostati nel parametro BQR_Quality_Event_Mask o cancellare tutto.

0x00 - Aggiungi
0x01 - Elimina
0x02 - Cancella

L'eliminazione cancellerà la segnalazione di eventi di qualità specifici.
Cancella cancellerà tutti i rapporti sugli eventi di qualità (il parametro BQR_Quality_Event_Mask può essere ignorato).

BQR_Quality_Event_Mask 4 ottetti Maschere di bit per il reporting di eventi di qualità selezionato.

Bit 0: impostare per abilitare la modalità di monitoraggio della qualità.
Bit 1: impostato per abilitare l'evento LSTO in avvicinamento.
Bit 2: Impostare per abilitare l'evento A2DP Audio Choppy.
Bit 3: Impostare per abilitare l'evento (e)SCO Voice Choppy.
Bit 4: impostare per abilitare l'evento di infiammazione della radice.
Bit 5 ~ 15: Riservato.
Bit 16: impostare per abilitare la traccia del messaggio LMP/LL.
Bit 17: impostare per abilitare la traccia di pianificazione Bluetooth Multi-link/Coex.
Bit 18: impostare per abilitare il meccanismo delle informazioni di debug del controller.
Bit 19 ~ 31: Riservato.

BQR_Minimum_Report_Interval 2 ottetti Definire l'intervallo di tempo minimo per la segnalazione degli eventi di qualità per gli eventi di qualità selezionati. Il firmware del controller non dovrebbe 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
Predefinito: 0 (nessuna limitazione per l'intervallo.)
Intervallo: 0 ~ 65535 ms

Verrà generato un evento Command Complete per questo comando.

Parametro di ritorno Dimensione Scopo
Stato 1 ottetto Stato comando completo
Current_Quality_Event_Mask 4 ottetti Indica l'impostazione corrente della maschera di bit.
Bit 0: la modalità di monitoraggio della qualità è abilitata.
Bit 1: la segnalazione degli eventi LSTO in avvicinamento è abilitata.
Bit 2: la segnalazione di eventi discontinui audio A2DP è abilitata.
Bit 3: (e) La segnalazione di eventi SCO Voice Choppy è abilitata.
Bit 4: Root inflammation event reporting is enabled.
Bit 5 ~ 15: Reserved.
Bit 16: LMP/LL message trace is enabled.
Bit 17: Bluetooth Multi-link/Coex scheduling trace is enabled.
Bit 18: Controller Debug Information mechanism is enabled.
Bit 19 ~ 31: Reserved.

Dynamic Audio Buffer command

The Dynamic Audio Buffer reduces audio glitching by changing the audio buffer size in the Bluetooth controller based on various scenarios.

OCF: 0x15F

Get audio buffer time capability

Sub OCF: 0x01

Use this command to get the audio buffer time capability from the Bluetooth controller.

Command parameter Size Purpose
N/A Empty Command parameter list

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Dynamic_Audio_Buffer_opcode 1 octet 0x01 - Get audio buffer time
Audio_Codec_Type_Supported 4 octets Bit masks for the supported codec types
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 are reserved
Audio_Codec_Buffer_Default_Time_For_Bit_0 2 octets Default buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 0 codec type is not supported.
Unit: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 2 octets Maximum buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 0 codec type is not supported.
Unit: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 2 octets Minimum buffer time of the Bit 0 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 0 codec type is not supported.
Unit: ms
Audio_Codec_Buffer_Default_Time_For_Bit_1 2 octets Default buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 1 codec type is not supported.
Unit: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 2 octets Maximum buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 1 codec type is not supported.
Unit: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 2 octets Minimum buffer time of the Bit 1 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 1 codec type is not supported.
Unit: ms
...... ...... ......
Audio_Codec_Buffer_Default_Time_For_Bit_31 2 octets Default buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 31 codec type is not supported.
Unit: ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 2 octets Maximum buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 31 codec type is not supported.
Unit: ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 2 octets Minimum buffer time of the Bit 31 codec type specified in Audio_Codec_Type_Supported.
This value shall be 0 if the Bit 31 codec type is not supported.
Unit: ms

Set audio buffer time

Sub OCF: 0x02

Use this command to set the audio buffer time to the Bluetooth controller.

Command parameter Size Purpose
Audio_Codec_Buffer_Time 2 octets Requested audio buffer time for the current used codec.
Unit: ms

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Dynamic_Audio_Buffer_opcode 1 octet 0x02 - Set audio buffer time
Audio_Codec_Buffer_Time 2 octets Current audio buffer time in the Bluetooth controller.
Unit: ms

HCI event (vendor-specific)

Vendor-specific HCI events are required in some cases. Refer to Figure 5.4 on page 1897 of the BT Core 5.2 Specification. Event parameter 0 will always contain the first sub-event code, based on which the rest of the HCI event is decoded.

Event Parameter Size Purpose
HCI_vendor_specific_event_code 1 octet 0xFF
sub_event_code 1 octet A sub-event code will be 1 octet in size, the byte immediately following Parameter Length in the HCI event packet.

Storage threshold breach sub-event

This event indicates that the storage threshold has been breached.

Sub-event code = 0x54

Sub-event Parameter Size Purpose
None

LE multi-advertising state change sub-event

This event indicates that an advertising instance has changed its state. At this time, this event is only used to indicate which advertising instance was stopped as a result of a connection.

Sub-event code = 0x55

Sub-event parameter Size Purpose
Advertising_instance 1 octet Identifies the specific advertising instance
Valid values are 0 through max_advt_instances -1
State_Change_Reason 1 octet 0x00: Connection received
Connection_handle 2 octets Identifies the connection that caused the advt instance to be disabled (0xFFFF if invalid)

LE advertisement tracking sub-event

This event indicates when an advertiser is found or lost.

Sub event code = 0x56

Sub-event Parameter Size Purpose
APCF_Filter_Index 1 octet Filter Index (0, max_filter -1)
Advertiser_State 1 octet 0x00: Advertiser found
0x01: Advertiser lost
Advt_Info_Present 1 octet 0x00: Advertiser information ( Advt_Info ) present
0x01: Advertiser information ( Advt_Info ) not present
Advertiser_Address 6 octets Public or random address
Advertiser_Address_Type 1 octet 0x00: Public address
0x01: Random address
Advt_Info 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

Controller debug info sub-event

This event is used by a Controller to provide binary debug information to a host.

Sub-event code = 0x57

Sub-event Parameter Size Purpose
debug_block_byte_offset_start 2 octets Debug block byte offset from the start
last_block 1 octet 0x00: More debug data present
0x01: Last binary block; no more debug data
cur_pay_load_sz 2 octets Binary block size in a current event
Debug_Data Variable Debug data of cur_payload_sz

Bluetooth Quality Report sub-event

This event indicates one of the following: a Bluetooth quality event occurred, the controller uploaded the LMP/LL message trace and Bluetooth Multi-link/Coex scheduling trace, or the controller dumped debug information data.

Sub-event Parameter Size Purpose
Quality_Report_Id 1 octet 0x01: Quality reporting on the monitoring mode.
0x02: Approaching LSTO.
0x03: A2DP Audio Choppy.
0x04: (e)SCO Voice Choppy.
0x05 ~ 0xFF: Reserved.
Packet_Types 1 octet 0x01: ID
0x02: NULL
0x03: POLL
0x04: FHS
0x05: HV1
0x06: HV2
0x07: HV3
0x08: DV
0x09: EV3
0x0A: EV4
0x0B: EV5
0x0C: 2-EV3
0x0D: 2-EV5
0x0E: 3-EV3
0x0F: 3-EV5
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 ~ 0xFF: Reserved.
Connection_Handle 2 octets Connection Handle.
Connection_Role 1 octet Performing Role for the connection.
0x00: Central
0x01: Peripheral
0x02 ~ 0xFF: Reserved.
TX_Power_Level 1 octet Current transmit power level for the specified Connection_Handle.

This value shall be the same as the controller's responding to the HCI_Read_Transmit_Power_Level HCI command.

RSSI 1 octet [in dBm]

Received Signal Strength Indication (RSSI) value for the specified Connection_Handle.
This value shall be an absolute receiver signal strength value.
Range: -127 to +20

SNR 1 octet [in dB]

Signal-to-Noise Ratio (SNR) value for the specified Connection_Handle.
The controller shall provide the average SNR of all the channels used by the link.

Unused_AFH_Channel_Count 1 octet Indicates the number of unused channels in AFH_channel_map.
0x4F ~ 0xFF: Reserved.
AFH_Select_Unideal_Channel_Count 1 octet Indicates the number of the channels which are interfered and have bad quality, but they are still selected for AFH.
The minimum number of channels allowed by the Bluetooth specification is 20, so even if all 79 channels are interfered and have bad quality, the controller still needs to choose at least 20 channels for AFH.
LSTO 2 octets Current Link Supervision Timeout Setting.
Time = N * 0.625 ms
Time Range: 0.625 ms to 40.9 s
Connection_Piconet_Clock 4 octets Piconet Clock for the specified Connection_Handle.
This value shall be the same as the controller's responding to HCI_Read_Clock HCI command with parameter "Which_Clock" of 0x01 (Piconet Clock).
Unit: N * 0.3125 ms (1 Bluetooth Clock)
Retransmission_Count 4 octets The number of retransmissions since the last event.
This count shall be reset after reporting to the host.
No_RX_Count 4 octets No RX count since the last event.
The count increases when no packet is received at the scheduled time slot or the received packet is corrupted.
This count shall be reset after reporting to the host.
NAK_Count 4 octets NAK (Negative Acknowledge) count since the last event.
This count shall be reset after reporting to the host.
Last_TX_ACK_Timestamp 4 octets Timestamp of last TX ACK. It is based on the Bluetooth Clock of the piconet central (CLK).
Unit: N * 0.3125 ms (1 Bluetooth Clock)
Flow_Off_Count 4 octets The number of times the controller receives Flow-off (STOP) since the last event.
This count shall be reset after reporting to the host.
Last_Flow_On_Timestamp 4 octets Timestamp of last Flow-on (GO). It is based on the Bluetooth Clock of the piconet central (CLK).
Unit: N * 0.3125 ms (1 Bluetooth Clock)
Buffer_Overflow_Bytes 4 octets [in Byte]

Buffer overflow count since the last event.
The controller counts how many bytes of data are dropped.
This count shall be reset after reporting to host.

Buffer_Underflow_Bytes 4 octets [in Byte]

Buffer underflow count since the last event.
This count shall be reset after reporting to host.

Vendor Specific Parameter (Parameter Total Length - 49) * octets For the controller vendor to obtain more vendor specific parameters.

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

This event indicates that Bluetooth HAL or the controller encountered a fatal error and needs Bluetooth stack to record this situation and restart. The controller must send a Root_Inflammation_Event to Bluetooth stack before sending the first fragment of the debug info events in any case.

The Error_Code parameter contains an error code reported from HAL/Controller, 0 if it is a chipset vendor specific error. The Vendor_Specific_Error_Code contains a chipset vendor specific error code from HAL/Controller. It should set as 0 if the parameter Error_Code is not 0. The parameters Error_Code and Vendor_Specific_Error_Code should not both be 0.

Sub-event Parameter Size Purpose
Quality_Report_Id 1 octet 0x00 ~ 0x04: Reserved.
0x05: Root inflammation.
0x06 ~ 0xFF: Reserved.
Error_Code 1 octet 0x00: Chipset vendor specific error code is included.
0x01 ~ 0xFF: Controller failure occurred. See Bluetooth Spec [Vol 2] Part D, Error Codes for a list of error codes and descriptions.
Vendor_Specific_Error_Code 1 octet 0x00: No chipset vendor specific error code is included.
0x01 ~ 0xFF: Chipset vendor specific error code.
Vendor Specific Parameter (Parameter Total Length - 4) * octets For the controller vendor to obtain more vendor specific parameters.
Sub-event Parameter Size Purpose
Quality_Report_Id 1 octet 0x00 ~ 0x10: Reserved.
0x11: LMP/LL message trace.
0x12: Bluetooth Multi-link/Coex scheduling trace.
0x13: Controller Debug Information data dump.
0x14 ~ 0xFF: Reserved.
Connection_Handle 2 octets Connection Handle.
Vendor Specific Parameter (Parameter Total Length - 4) * octets Vendor Specific format of LMP message trace, Bluetooth Multi-link/Coex scheduling trace and Controller Debug Information data dump.

Multi-advertiser support

The objectives of multi-advertiser support are the following:

  • Ability to support multiple advertisements ( max_advt_instances )
  • Different transmit powers to allow for a varying range
  • Different advertising content
  • An individualized response for each advertiser
  • Privacy (non-trackable) for each advertiser
  • Connectable

To keep this specification close to existing standards, the following vendor-specific commands are provided. They are derived from the Bluetooth Core 4.1 Specification.

LE_Multi_Advt_Command

OCF: 0x154

Command parameter Size Purpose
Multi_advt_opcode 1 octet 0x01 - Set_Advt_Param_Multi_Sub_Cmd
0x02 - Set_Advt_Data_Multi_Sub_Cmd
0x03 - Set_Scan_Resp_Data_Multi_Sub_Cmd
0x04 - Set_Random_Addr_Multi_Sub_Cmd
0x05 - Set_Advt_Enable_Multi_Sub_Cmd

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Multi_advt_opcode 1 octet 0x01 - Set_Advt_Param_Multi_Command
0x02 - Set_Advt_Data_Multi_Command
0x03 - Set_Scan_Resp_Data_Multi_Command
0x04 - Set_Random_Addr_Multi_Command
0x05 - Set_Advt_Enable_Multi_Command

LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd

Base reference: Bluetooth Core 4.1 Specification, page 964 (LE Set Advertising Parameter Command)

Sub OCF: 0x01

Sub-command parameter Size Purpose
Advertising_Interval_Min Per spec Per spec
Advertising_Interval_Max Per spec Per spec
Advertising_Type Per spec Per spec
Own_Address_Type Per spec Per spec
Own_Address Per spec Per spec
Direct_Address_Type Per spec Per spec
Direct_Address Per spec Per spec
Advertising_Channel_Map Per spec Per spec
Adverstising_Filter_Policy Per spec Per spec
Advertising_Instance 1 octet Specifies the applicability of the above parameters to an instance
Tx_power 1 octet Transmit_Power
Unit - in dBm (signed integer)
Range (-70 to +20)

The Own_Address parameter could be a host-configured address at the time of setting up this multi-advertisement instance. This provides the ability to have a resolvable private address at the time of the transmit of the first beacon. Advertisement on an instance will continue irrespective of the connection. The host BT stack could issue a command to start advertisement on an instance, post connection.

A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success (invalid parameter) code if the advertising instance or Tx_Power parameters are invalid.

Return parameter Size Purpose
Status 1 octet Command Complete status
Multi_advt_opcode 1 octet 0x01 [ Set_Advt_Param_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd

Base reference: Bluetooth Core 4.1 Specification, page 969 (LE Set Advertising Data Command)

Sub OCF: 0x02

Sub-command parameter Size Purpose
Advertising_Data_Length Per spec Per spec
Advertising_Data Per spec Per spec
Advertising_Instance 1 octet Specifies the applicability of the above parameters to an instance

A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success code if the advertising instance or Tx_Power parameters are invalid.

Return parameter Size Purpose
Status 1 octet Command Complete status
Multi_advt_opcode 1 octet 0x02 [ Set_Advt_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd

Base reference: Bluetooth Core 4.1 Specification, page 970 (LE Set Scan Response Data Command)

Sub OCF: 0x03

Sub-command parameter Size Purpose
Scan_Response_Data_Length Per spec Per spec
Scan_Response_Data Per spec Per spec
Advertising_Instance 1 octet Specifies the applicability of the above parameters to an instance

A Command Complete event will be generated for this command as specified in the Bluetooth Core 4.1 Specification, per the above command. The controller will respond with a non-success code (invalid parameter) if the advertising instance or Tx_Power parameters are invalid.

Return parameter Size Purpose
Status 1 octet Command Complete status
Multi_advt_opcode 1 octet 0x03 [ Set_Scan_Resp_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd

Base reference: Bluetooth Core 4.1 Specification, page 963 (LE Set Random Address Command)

Sub OCF: 0x04

Sub-command parameter Size Purpose
Random Address Per spec Per spec
Advertising_Instance 1 octet Specifies the applicability of the above parameters to an instance

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Multi_advt_opcode 1 octet 0x04 [ Set_Random_Addr_Multi_Sub_Cmd]

LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd

Base reference: Bluetooth Core 4.1 Specification, page 971 (LE Set Advertise Enable Command in that core specification)

OCF: 0x05

Sub-command parameter Size Purpose
Advertising_Enable 1 octet A value of 1 means enable. Any other value means disable.
Advertising_Instance 1 octet Specifies the applicability of the above parameters to an instance. Instance 0 means a standard HCI instance.

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Multi_advt_opcode 1 octet 0x05 [ Set_Advt_Enable_Multi_Sub_Cmd]

Offloaded resolution of private address

This feature resolves a private address in the controller firmware or hardware, which provides the following benefits:

  • Latency involved with the host in resolving a private address
  • Saving power by refraining from waking up the host

LE_Set_RPA_Timeout

OCF: 0x15C

Command parameter Size Purpose
LE_local_IRK 16 octet The local device IRK used to generate the random resolvable address(es).
tRPA_min 2 octets The minimum RPA generation timeout in seconds. The controller must generate new resolvable addresses for any advertising/scanning/connection events on or after this timeout.
Valid range: 300-1800
tRPA_max 2 octets The maximum RPA generation timeout in seconds. The controller must generate new resolvable addresses for any advertising/scanning/connection events on or before this timeout.
Valid range: tRPA_min -1800
Return parameter Size Purpose
Status 1 octet The status of the command.

Suggested HCI status values:
0x00 Success
0x01 Unknown command (if not supported)
0x12 Invalid command parameters (if any parameters are outside the given range)

LE_RPA_offload_Command

OCF: 0x155

Command parameter Size Purpose
RPA_offload_opcode 1 octet 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

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Event_RPA_offload_opcode 1 octet 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

Sub-command parameter Size Purpose
enable_customer_specific_feature_set 1 octet 0x01 - Enable offloaded RPA feature
0x00 - Disable offloaded RPA feature

RPA offload is required to be enabled by the host, based on the chip capability. Refer to the LE_Get_Vendor_Capabilities_Command . Each chip can have a varying max_irk_list_sz in the firmware.

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Event_cust_specific_feature_opcode 1 octet 0x01 [Enable customer-specific feature]

LE_RPA_offload: Add_IRK_to_list_sub_Command

Sub OCF: 0x02

Sub-command parameter Size Purpose
LE_IRK 16 octets LE IRK (1st byte LSB)
Address_Type 1 octet 0: Public address
1: Random address
LE_Device_Address 6 octets Public or random address associated to the IRK (1st byte LSB)

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Event_cust_specific_feature_opcode 1 octet 0x02 [Add IRK to the list]
LE_IrkList_AvailableSpaces 1 octet Available IRL list entries after current operation

LE_RPA_offload: Remove_IRK_to_list_sub_Command

Sub OCF: 0x03

Sub-command parameter Size Purpose
Address_Type 1 octet 0: Public address
1: Random address
LE_Device_Address 6 octets Public or random address that associates to the IRK

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Event_cust_specific_feature_opcode 1 octet 0x03 [Remove IRK from the list]
LE_IrkList_AvailableSpaces 1 octet Available IRL list entries after current operation

LE_RPA_offload: Clear_IRK_list_sub_Command

Sub OCF: 0x04

Sub-command parameter Size Purpose
None

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Event_cust_specific_feature_opcode 1 octet 0x04 [Clear IRK List]
LE_IrkList_AvailableSpaces 1 octet Available IRL list entries after current operation [ max_irk_list_sz]

LE_RPA_offload: Read_IRK_list_sub_Command

Sub OCF: 0x05

Sub-command parameter Size Purpose
LE_read_IRK_list_entry-index 1 octet Index of the IRK list [0, max_irk_list_sz-1]

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Event_cust_specific_feature_opcode 1 octet 0x05 [Read IRK List Entry]
LE_Read_IRK_List_entry 1 octet Index of the IRK that the host wants to read back (maximum IRK list size is 32)
LE_IRK 16 octets IRK value
Address_Type 1 octet 0: Public address
1: Random address
LE_Device_Address 6 octets Public or random address associated to the IRK
LE_Resolved_Private_Address 6 octets Current resolved resolvable private address of this IRK