Persyaratan HCI

Host Controller Interface (HCI) digunakan untuk berinteraksi dengan pengontrol Bluetooth.

Dokumen ini berisi daftar persyaratan HCI Bluetooth (BT) dan Bluetooth Low Energy (BLE). Tujuannya adalah agar vendor tumpukan BT Host dan vendor pengontrol BT agar sesuai dengan persyaratan platform ini untuk menggunakan rangkaian fitur yang dijelaskan di bawah ini.

Dokumen ini mengacu pada Spesifikasi Bluetooth Core 5.2 sebagai "spek". Spesifikasi Bluetooth Core 5.2 tersedia di situs web Bluetooth SIG bersama dengan dokumen lain yang diadopsi.

Ikhtisar desain umum

Kemampuan dan konfigurasi chip

Sebagai platform terbuka, Android memiliki matriks rilis perangkat lunak, OEM, vendor, dan kemampuan platform dan chip.

Untuk mengelola lanskap yang bervariasi dan untuk mengelola migrasi, filosofi desain yang memungkinkan pengontrol BT untuk mengekspos kemampuan mereka (di luar Spesifikasi Bluetooth Core 5.2 standar) dijelaskan dalam dokumen ini. Tumpukan BT host kemudian dapat menggunakan kemampuan ini untuk menentukan fitur mana yang akan diaktifkan.

Mendukung standar terbuka

Salah satu tujuan Android adalah untuk mendukung standar terbuka setelah ratifikasi dalam spesifikasi Bluetooth. Jika fitur yang dijelaskan di bawah tersedia dalam metode HCI standar dalam spesifikasi Bluetooth di masa mendatang, kami akan cenderung menjadikan pendekatan tersebut sebagai default.

Kemampuan khusus vendor

Perintah khusus vendor: LE_Get_Vendor_Capabilities_Command

Bidang Perintah OpCode (OCF): 0x153

Parameter perintah Ukuran Tujuan
tidak Daftar parameter Perintah Kosong

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
max_advt_instances
(Tidak digunakan lagi)
1 oktet Jumlah contoh iklan yang didukung.

Dicadangkan setelah v0.98.
Parameter ini tidak digunakan lagi dalam spesifikasi fitur Google v0.98 dan lebih tinggi demi LE Extended Advertising yang tersedia dalam spesifikasi BT versi 5.0 dan lebih tinggi.
offloaded_resolution_of_private-address
(Tidak digunakan lagi)
1 oktet Kemampuan chip BT dari RPA.
Jika didukung oleh sebuah chip, perlu diaktifkan oleh host.
0 = Tidak mampu
1 = Mampu

Dicadangkan setelah v0.98.
Parameter ini tidak digunakan lagi dalam spesifikasi fitur Google v0.98 dan lebih tinggi demi fitur Privasi yang tersedia dalam spesifikasi BT versi 4.2 dan lebih tinggi.
total_scan_results_storage 2 oktet Penyimpanan untuk hasil pemindaian dalam byte
max_irk_list_sz 1 oktet Jumlah entri IRK yang didukung dalam firmware
filtering_support 1 oktet Dukungan untuk pemfilteran di pengontrol
0 = Tidak didukung
1 = Didukung
max_filter 1 oktet Jumlah filter yang didukung
activity_energy_info_support 1 oktet Mendukung pelaporan informasi aktivitas dan energi
0 = Tidak mampu
1 = Mampu
version_supported 2 oktet Menentukan versi spesifikasi fitur Google yang didukung
byte[0] = Angka utama
byte[1] = Angka kecil

v1.00
byte[0] = 0x01
byte[1] = 0x00
total_num_of_advt_tracked 2 oktet Jumlah total pengiklan yang dilacak untuk tujuan OnLost / OnFound
extended_scan_support 1 oktet Mendukung jendela dan interval pemindaian yang diperpanjang
debug_logging_supported 1 oktet Mendukung pencatatan informasi debug biner dari pengontrol
LE_address_generation_offloading_support
(Tidak digunakan lagi)
1 oktet 0 = Tidak didukung
1 = Didukung

Dicadangkan setelah v0.98.
Parameter ini tidak digunakan lagi dalam spesifikasi fitur Google v0.98 dan lebih tinggi demi fitur Privasi yang tersedia dalam spesifikasi BT versi 4.2 dan lebih tinggi.
A2DP_source_offload_capability_mask 4 Oktet Masker bit untuk jenis codec didukung
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 dicadangkan
bluetooth_quality_report_support 1 oktet Mendukung pelaporan acara Kualitas Bluetooth
0 = Tidak mampu
1 = Mampu
dynamic_audio_buffer_support 4 oktet Mendukung buffer audio dinamis di pengontrol Bluetooth
Masker bit untuk jenis codec didukung
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31 dicadangkan

Kumpulan hasil pemindaian

Tujuan desain adalah untuk meningkatkan cara pemberitahuan acara Respons Pemindaian Bluetooth LE dikirimkan ke host, untuk menghemat daya di host.

Dengan mengurangi seberapa sering pengontrol memberi tahu prosesor aplikasi host untuk memindai hasil, prosesor aplikasi host dapat tetap diam/tidur lebih lama. Ini mengurangi konsumsi daya di host. Parameter pengembalian total_scan_results_storage dari LE_Get_Vendor_Capabilities_Command menunjukkan kemampuan chip untuk menyimpan hasil pemindaian.

Fitur ini berfokus pada pengelolaan dan konfigurasi fasilitas penyimpanan Hasil Pemindaian LE di pengontrol Bluetooth. Penyimpanan digunakan untuk sementara mengelompokkan data iklan dan memindai data dan metadata yang diterima oleh pengontrol untuk pengiriman nanti ke host.

Firmware harus mendukung dua jenis batching, yang dapat digunakan secara bersamaan:

  • terpotong. Berisi elemen informasi berikut: {MAC, TX Power, RSSI, Timestamp}
  • Penuh. Berisi elemen informasi berikut: {MAC, TX Power, RSSI, Timestamp, Adv Data, Scan Response}

LE_Batch_Scan_Command

OCF: 0x156

Parameter perintah Ukuran Tujuan
Batch_Scan_opcode 1 oktet 0x1 - Aktifkan fitur khusus pelanggan
0x2 - Setel parameter Penyimpanan Pemindaian Batch
0x3 - Setel parameter Pemindaian Batch
0x4 - Baca parameter Hasil Pemindaian Batch

Acara Command Complete akan dibuat untuk perintah ini. Mengaktifkan fitur khusus pelanggan tidak memulai pemindaian.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Batch_Scan_opcode 1 oktet 0x1 - Aktifkan fitur khusus pelanggan
0x2 - Setel parameter Penyimpanan Pemindaian Batch
0x3 - Setel parameter Pemindaian Batch
0x4 - Baca parameter Hasil Pemindaian Batch

LE_Batch_Scan_Command: Aktifkan fitur Khusus Pelanggan

Sub OCF: 0x01

Parameter sub-perintah Ukuran Tujuan
enable_customer_specific_feature_set 1 oktet 0x01 - Aktifkan fitur Pemindaian Batch
0x00 - Nonaktifkan fitur Pemindaian Batch

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Batch_Scan_opcode 1 oktet 0x1 - Aktifkan fitur khusus pelanggan
0x2 - Setel parameter Penyimpanan Pemindaian Batch
0x3 - Setel parameter Pemindaian Batch
0x4 - Baca parameter Hasil Pemindaian Batch

LE_Batch_Scan_Command: Setel sub-perintah Batch Scan Storage Param

Sub OCF: 0x02

Parameter sub-perintah Ukuran Tujuan
Batch_Scan_Full_Max 1 oktet Ruang penyimpanan maksimum (dalam %) dialokasikan untuk gaya penuh
[Rentang: 0-100]
Batch_Scan_Truncated_Max 1 oktet Ruang penyimpanan maksimum (dalam %) dialokasikan untuk gaya terpotong
[Rentang: 0-100]
Batch_Scan_Notify_Threshold 1 oktet Siapkan tingkat pemberitahuan (dalam %) untuk kumpulan penyimpanan individual
[Rentang: 0-100]
Menyetel ke 0 akan menonaktifkan notifikasi. Peristiwa HCI khusus vendor dibuat (Subevent pelanggaran ambang batas penyimpanan)

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Batch_scan_opcode 1 oktet 0x02 [Setel parameter Pemindaian Batch]

LE_Batch_Scan_Command: Setel sub-perintah Batch Scan Param

Sub OCF: 0x03

Parameter sub-perintah Ukuran Tujuan
Batch_Scan_Mode 1 oktet 0x00 – Pemindaian batch dinonaktifkan
0x01 – Mode terpotong diaktifkan
0x02 – Mode penuh diaktifkan
0x03 – Mode terpotong dan Penuh diaktifkan
Duty_cycle_scan_window 4 oktet Batch Scan waktu scan (# slot)
Duty_cyle_scan_interval 4 oktet Periode interval Pemindaian Batch (# slot)
own_address_type 1 oktet 0x00 - Alamat perangkat publik
0x01 - Alamat perangkat acak
Batch_scan_Discard_Rule 1 oktet 0 - Buang iklan terlama
1 - Buang iklan dengan RSSI terlemah

Sub-perintah ini akan memulai pemindaian batch, jika diaktifkan. Dalam pemindaian terpotong, hasil disimpan dalam bentuk terpotong di mana kunci unik untuk gaya terpotong = { BD_ADDR, scan_interval}. Ini berarti hanya satu BD_ADDR will direkam untuk setiap interval pemindaian. Catatan yang harus disimpan untuk mode Terpotong adalah sebagai berikut: { BD_ADDR , Tx Power, RSSI, Timestamp}

Saat mode Penuh diaktifkan, pemindaian aktif akan digunakan dan Respons Pindai akan direkam. Kunci unik gaya penuh = {MAC, Paket iklan}, terlepas dari interval pemindaian. Catatan yang harus disimpan untuk mode Penuh adalah { BD_ADDR , Tx Power, RSSI, Timestamp, Ad packet, Scan Response}. Dalam gaya Penuh, paket AD yang sama, jika dilihat beberapa kali pada interval pemindaian yang berbeda, hanya direkam satu kali. Namun, dalam mode Terpotong, visibilitas BA_ADDR di berbagai interval pemindaian yang menarik (sekali per interval pemindaian). RSSI adalah nilai rata-rata dari semua duplikat iklan unik dalam interval pemindaian.

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Batch_scan_opcode 1 oktet 0x03 [Setel Parameter Pemindaian Batch]

LE_Batch_Scan_Command: Baca sub-perintah Hasil Pemindaian Batch

Sub OCF: 0x04

Parameter sub-perintah Ukuran Tujuan
Batch_Scan_Data_read 1 oktet 0x01 – Data mode terpotong
0x02 – Data mode penuh

Acara Command Complete akan dibuat untuk perintah ini. Saat tuan rumah mengeluarkan perintah ini, semua hasil di pengontrol mungkin tidak muat dalam satu acara Perintah Lengkap. Tuan rumah akan mengulangi mengeluarkan perintah ini sampai hasil yang sesuai dalam acara Perintah Lengkap menunjukkan 0 dalam jumlah catatan, yang menunjukkan pengontrol tidak memiliki catatan lagi untuk dikomunikasikan ke tuan rumah. Setiap event Command Complete dapat berisi beberapa record hanya dari satu jenis data (Full atau Terpotong).

Referensi pengontrol dan waktu host tidak disinkronkan. Satuan stempel waktu adalah 50ms. Nilai stempel waktu didasarkan pada saat Read_Batch_Scan_Results_Sub_cmd diberikan oleh host. Jika waktu kedatangan perintah adalah T_c di firmware, maka waktu sebenarnya stempel waktu diambil di firmware adalah T_fw . Waktu pelaporan adalah: ( T_c - T_fw ). T_c dan T_fw berada dalam domain waktu firmware. Ini memungkinkan tuan rumah menghitung berapa lama peristiwa itu terjadi.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Batch_scan_opcode 1 oktet 0x03 [Mengatur parameter Pemindaian Batch]
Batch_Scan_data_read 1 oktet Mengidentifikasi format (Terpotong atau Penuh)
num_of_records 1 oktet Jumlah catatan Batch_Scan_data_read
format_of_data Variabel Modus terpotong:
Alamat[0]: 6 oktet
Address_Type[0]: 1 oktet
Tx_Pwr[0]: 1 oktet
RSSI[0] : 1 oktet
Stempel waktu[0]: 2 oktet
[beberapa catatan ( num_of_records ) dengan format di atas]

Modus Penuh:
Alamat[0]: 6 oktet
Address_Type[0]: 1 oktet
Tx_Pwr[0]: 1 oktet
RSSI[0]: 1 oktet
Stempel waktu[0]: 2 oktet
Adv packet_len[0]: 1 oktet
Adv_packet[0]: Oktet Adv_packet_len
Scan_data_resp_len[0]: 1 oktet
Scan_data_resp[0]: oktet Scan_data_resp
[beberapa catatan dengan format di atas ( num_of_records )]

Filter Konten Paket Iklan

Gunakan ini untuk mengaktifkan/menonaktifkan/mengatur Filter Konten Paket Iklan (APCF) di pengontrol.

LE_APCF_Command

OCF: 0x157

Parameter perintah Ukuran Tujuan
APCF_opcode 1 oktet 0x00 - Aktifkan APCF
0x01 - APCF Setel parameter Pemfilteran
0x02 - Alamat Penyiar APCF
0x03 - UUID Layanan APCF
0x04 - UUID Permintaan Layanan APCF
0x05 - Nama Lokal APCF
0x06 - Data Pabrikan APCF
0x07 - Data Layanan APCF

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Kembalikan status
APCF_opcode 1 oktet 0x00 - Aktifkan APCF
0x01 - APCF Setel parameter Pemfilteran
0x02 - Alamat Penyiar APCF
0x03 - UUID Layanan APCF
0x04 - UUID Permintaan Layanan APCF
0x05 - Nama Lokal APCF
0x06 - Data Pabrikan APCF
0x07 - Data Layanan APCF

LE_APCF_Command: Aktifkan_sub_cmd

Sub OCF: 0x00

Parameter sub-perintah Ukuran Tujuan
APCF_enable 1 oktet 0x01 - Aktifkan fitur APCF
0x00 - Nonaktifkan fitur APCF

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x0 - APCF Aktifkan
APCF_Enable 1 oktet Aktifkan/nonaktifkan diatur melalui APCF_enable

LE_APCF_Command: set_filtering_parameters_sub_cmd

Subperintah ini digunakan untuk menambah atau menghapus spesifikasi filter atau menghapus daftar filter untuk penyaringan on-chip.

Sub OCF: 0x01

Parameter sub-perintah Ukuran Tujuan
APCF_Action 1 oktet 0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus
Hapus akan menghapus filter tertentu bersama dengan entri fitur terkait di tabel lain.
Hapus akan menghapus semua filter dan entri terkait di tabel lain.
APCF_Filter_Index 1 oktet Indeks filter (0, max_filter-1 )
APCF_Feature_Selection 2 oktet Masker bit untuk fitur yang dipilih:
Bit 0: Setel untuk mengaktifkan filter Alamat Siaran
Bit 1: Setel untuk mengaktifkan filter Perubahan Data Layanan
Bit 2: Setel untuk mengaktifkan pemeriksaan UUID Layanan
Bit 3: Setel untuk mengaktifkan pemeriksaan UUID Permintaan Layanan
Bit 4: Setel untuk mengaktifkan pemeriksaan Nama Lokal
Bit 5: Setel untuk mengaktifkan Pemeriksaan Data Produsen
Bit 6: Setel untuk mengaktifkan Pemeriksaan Data Layanan
APCF_List_Logic_Type 2 oktet Operasi logika untuk setiap pemilihan fitur (posisi per bit) yang ditentukan dalam APCF_Feature_Selection .
Hanya valid jika fitur diaktifkan.
Nilai posisi bit:
0: ATAU
1: DAN
Jika logika "DAN" dipilih, paket ADV akan melewati filter hanya jika berisi SEMUA entri dalam daftar.
Jika logika "ATAU" dipilih, paket ADV akan melewati filter jika berisi salah satu entri dalam daftar.
APCF_Filter_Logic_Type 1 oktet 0x00: ATAU
0x01: DAN
Catatan: Jenis logika adalah N/A untuk tiga bidang pertama APCF_Feature_Selection , yang selalu merupakan logika "DAN". Mereka hanya berlaku untuk (Bit 3 - Bit 6) empat bidang APCF_Feature_Selection .
rssi_high_thresh 1 oktet [dalam dBm]
Pengiklan dianggap terlihat hanya jika sinyalnya lebih tinggi dari ambang batas RSSI yang tinggi. Jika tidak, firmware harus berperilaku seolah-olah tidak pernah melihatnya.
delivery_mode 1 oktet 0x00 - immediate
0x01 - on_found
batched - berkelompok
onfound_timeout 2 oktet Hanya valid jika delivery_mode on_found .
[dalam milidetik]
Saatnya firmware berlama-lama dan mengumpulkan iklan tambahan sebelum melaporkan.
onfound_timeout_cnt 1 oktet Hanya valid jika delivery_mode on_found .
[menghitung]
Jika iklan di onFound tetap ada di firmware selama durasi onfound_timeout , iklan tersebut akan mengumpulkan beberapa iklan dan jumlahnya diperiksa. Jika jumlah melebihi onfound_timeout_cnt , akan segera dilaporkan OnFound setelahnya.
rssi_low_thresh 1 oktet Hanya valid jika delivery_mode on_found .
[dalam dBm]
Paket pengiklan dianggap tidak terlihat jika RSSI dari paket yang diterima tidak berada di atas ambang batas rendah RSSI.
onlost_timeout 2 oktet Hanya valid jika delivery_mode on_found .
[dalam milidetik]
Jika sebuah iklan, setelah ditemukan, tidak terlihat secara berurutan selama periode lost_timeout , akan segera dilaporkan hilang.
num_of_tracking_entries 2 oktet Hanya valid jika delivery_mode on_found .
[menghitung]
Jumlah total pengiklan untuk dilacak per filter.

Nilai RSSI harus menggunakan pelengkap 2 untuk mewakili nilai negatif.

Host harus dapat mengonfigurasi beberapa filter dengan APCF_Application_Address_type diatur ke 0x02 (untuk semua alamat penyiar) untuk mengelola berbagai kombinasi filter.

Penyaringan, batching dan pelaporan adalah konsep yang saling terkait. Setiap iklan dan respons pemindaian terkait harus melalui semua filter, satu demi satu. Dengan demikian, tindakan yang dihasilkan ( delivery_mode ) terkait erat dengan pemfilteran. Mode pengiriman adalah sebagai berikut: report_immediately , batch , dan onFound . Nilai OnLost terkait dengan OnFound dalam arti bahwa itu akan muncul setelah OnFound saat hilang.

Alur pemrosesan ini menggambarkan model konseptual:

Ketika bingkai iklan (atau respons pindaian) diterima, itu diterapkan ke semua filter dalam urutan serial. Ada kemungkinan bahwa iklan dapat menyebabkan pelaporan langsung berdasarkan satu filter dan pengelompokan yang sama karena tindakan filter yang berbeda.

Ambang batas level RSSI (tinggi dan rendah) memberikan kemampuan untuk mengontrol saat bingkai terlihat untuk pemrosesan filter, bahkan saat paket yang valid diterima oleh pengontrol. Jika mode pengiriman disetel ke segera atau di-batch, RSSI dari sebuah frame dipertimbangkan untuk pemrosesan pengontrol lebih lanjut. Aplikasi yang berbeda memerlukan pelaporan dan perilaku pengelompokan yang berbeda. Ini memungkinkan beberapa aplikasi memiliki pelaporan langsung dan/atau pengelompokan hasil dalam firmware, secara bersamaan. Contohnya adalah kasus ketika pemindaian batch aktif dari satu aplikasi dan kemudian pemindaian LE reguler dikeluarkan oleh aplikasi lain. Sebelum pemindaian batch dikeluarkan, kerangka kerja/aplikasi menetapkan filter yang sesuai. Kemudian, ketika aplikasi kedua mengeluarkan pemindaian biasa, pengelompokan sebelumnya berlanjut. Namun, karena pemindaian biasa, ini serupa dengan menambahkan filter nol secara konseptual (bersama dengan semua filter yang ada) bersama dengan perintah pemindaian LE. Parameter perintah pemindaian LE diutamakan saat aktif. Saat pemindaian LE biasa dinonaktifkan, pengontrol akan kembali ke pemindaian batch sebelumnya, jika ada.

Mode pengiriman OnFound didasarkan pada filter yang dikonfigurasi. Kombinasi yang memicu tindakan filter untuk berhasil dianggap sebagai entitas yang dilacak untuk onLost . Peristiwa yang sesuai adalah subperistiwa pelacakan LE Advt.

OnFound/OnLost untuk filter (jika diaktifkan) akan terlihat seperti berikut:

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x02 - Parameter Pemfilteran Atur APCF
APCF_Action 1 oktet Gema kembali perintah APCF_Action
APCF_AvailableSpaces 1 oktet Jumlah entri yang tersedia di tabel filter

LE_APCF_Command: broadcast_address_sub_cmd

Sub-perintah ini digunakan untuk menambah atau menghapus alamat pengiklan atau menghapus daftar alamat pengiklan untuk penyaringan on-chip.

Sub OCF: 0x02

Parameter sub-perintah Ukuran Tujuan
APCF_Action 1 oktet 0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus
Hapus akan menghapus alamat penyiar yang ditentukan dalam filter yang ditentukan.
Hapus akan menghapus semua alamat penyiar di filter yang ditentukan.
APCF_Filter_Index 1 oktet Indeks filter (0, max_filter-1 )
APCF_Broadcaster_Address 6 oktet Alamat perangkat 6-byte untuk ditambahkan atau dihapus dari daftar alamat penyiar
APCF_Application_Address_type 1 oktet 0x00: Umum
0x01: Acak
0x02: NA (jenis alamat tidak berlaku)

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x02 - Alamat Penyiar APCF
APCF_Action 1 oktet Gema kembali perintah APCF_Action
APCF_AvailableSpaces 1 oktet Jumlah entri gratis yang masih tersedia di tabel Alamat Siaran

LE_APCF_Command: service_uuid_sub_cmd

Subperintah ini digunakan untuk menambah atau menghapus UUID layanan atau menghapus daftar UUID layanan untuk pemfilteran on-chip.

Sub OCF: 0x03

Parameter sub-perintah Ukuran Tujuan
APCF_Action 1 oktet 0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus
Hapus akan menghapus alamat UUID layanan yang ditentukan dalam filter yang ditentukan.
Hapus akan menghapus semua UUID layanan di filter yang ditentukan.
APCF_Filter_Index 1 oktet Indeks filter (0, max_filter -1)
APCF_UUID 2,4,16 oktet UUID Layanan (16-bit, 32-bit, atau 128-bit) untuk menambah, atau menghapus dari, daftar.
APCF_UUID_MASK 2,4,16 oktet Service UUID Mask (16-bit, 32-bit, atau 128-bit) untuk ditambahkan ke daftar. Panjangnya harus sama dengan APCF_UUID.

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x03 - UUID Layanan APCF
APCF_Action 1 oktet Gema kembali perintah APCF_Action
APCF_AvailableSpaces 1 oktet Jumlah entri gratis yang masih tersedia di tabel UUID Layanan

LE_APCF_Perintah: solicitation_uuid_sub_cmd

Sub-perintah ini digunakan untuk menambah atau menghapus UUID ajakan atau untuk menghapus daftar UUID ajakan untuk pemfilteran on-chip.

Sub OCF: 0x04

Parameter sub-perintah Ukuran Tujuan
APCF_Action 1 oktet 0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus
Hapus akan menghapus alamat UUID ajakan di filter yang ditentukan.
Hapus akan menghapus semua UUID permintaan dalam filter yang ditentukan.
APCF_Filter_Index 1 oktet Indeks filter (0, max_filter -1)
APCF_UUID 2,4,16 oktet Undang-Undang Permohonan (16-bit, 32-bit, atau 128-bit) untuk ditambahkan atau dihapus dari daftar.
APCF_UUID_MASK 2,4,16 oktet Solicitation UUID Mask (16-bit, 32-bit, atau 128-bit) untuk ditambahkan ke daftar. Itu harus memiliki panjang yang sama dengan APCF_UUID .

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x04 - UUID Permohonan APCF
APCF_Action 1 oktet Gema kembali perintah APCF_Action
APCF_AvailableSpaces 1 oktet Jumlah entri gratis yang masih tersedia di tabel Undang-Undang Permohonan

LE_APCF_Command: nama_lokal_sub_cmd

Sub-perintah ini digunakan untuk menambah atau menghapus string nama lokal atau menghapus daftar string nama lokal untuk penyaringan on-chip.

Sub OCF: 0x05

Parameter sub-perintah Ukuran Tujuan
APCF_Action 1 oktet 0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus
Hapus akan menghapus string nama lokal yang ditentukan dalam filter yang ditentukan.
Hapus akan menghapus semua string nama lokal di filter yang ditentukan.
APCF_Filter_Index 1 oktet Indeks filter (0, max_filter -1)
APCF_LocName_Mandata_or_SerData Ukuran variabel String karakter untuk nama lokal.

Catatan:
  • Saat ini jumlah maksimal karakter dalam string nama lokal adalah 29
  • Tidak berlaku saat tindakan "Hapus" (0x2)

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x05 - Nama Lokal APCF
APCF_Action 1 oktet Gema kembali perintah APCF_Action
APCF_AvailableSpaces 1 oktet Jumlah entri gratis yang masih tersedia di tabel nama Lokal

LE_APCF_Perintah: manf_data_sub_cmd

Subperintah ini digunakan untuk menambah atau menghapus string data pabrikan atau untuk menghapus daftar string data pabrikan untuk pemfilteran on-chip.

Sub OCF: 0x06

Parameter sub-perintah Ukuran Tujuan
APCF_Action 1 oktet 0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus
Hapus akan menghapus string data pabrikan yang ditentukan dalam filter yang ditentukan.
Hapus akan menghapus semua string data pabrikan di filter yang ditentukan.
APCF_Filter_Index 1 oktet Indeks Filter (0, max_filter -1)
APCF_LocName_Mandata_or_SerData Ukuran variabel String karakter untuk data pabrikan.

Catatan:
  • Saat ini jumlah maksimal karakter dalam string nama lokal adalah 29
  • Tidak berlaku saat tindakan "Hapus" (0x2)
APCF_ManData_Mask Ukuran variabel Pembuatan masker data untuk ditambahkan ke daftar. Itu harus memiliki panjang yang sama dengan APCF_LocName_or_ManData_or_SerData .

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x06 - Data Pabrikan APCF
APCF_Action 1 oktet Gema kembali perintah APCF_Action
APCF_AvailableSpaces 1 oktet Jumlah entri gratis yang masih tersedia di tabel Data Pabrik

LE_APCF_Command: service_data_sub_cmd

Subperintah ini digunakan untuk menambah atau menghapus string data layanan atau untuk menghapus daftar string data layanan untuk pemfilteran on-chip.

Sub OCF: 0x07

Parameter sub-perintah Ukuran Tujuan
APCF_Action 1 oktet 0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus
Hapus akan menghapus string data layanan yang ditentukan dalam filter yang ditentukan.
Hapus akan menghapus semua string data layanan dalam filter yang ditentukan.
APCF_Filter_Index 1 oktet Indeks Filter (0, max_filter -1)
APCF_LocName_Mandata_or_SerData Ukuran variabel String karakter untuk data layanan.

Catatan:
  • Saat ini jumlah maksimal karakter dalam string nama lokal adalah 29
  • Tidak berlaku saat tindakan "Hapus" (0x2)
APCF_LocName_Mandata_or_SerData_Mask Ukuran variabel Masker data layanan untuk ditambahkan ke daftar. Itu harus memiliki panjang yang sama dengan APCF_LocName_or_ManData_or_SerData.

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
APCF_opcode 1 oktet 0x07 - Data Layanan APCF
APCF_Action 1 oktet Gema kembali perintah APCF_Action
APCF_AvailableSpaces 1 oktet Jumlah entri gratis yang masih tersedia untuk tabel Data Layanan

Aktivitas pengontrol dan perintah informasi energi

Tujuan informasi ini adalah agar fungsi sistem host yang lebih tinggi menganalisis aktivitas total semua komponen, termasuk pengontrol BT dan status makronya, dalam hubungannya dengan apa yang terjadi di aplikasi dan kerangka kerja. Untuk melakukannya, informasi berikut diperlukan dari tumpukan BT dan pengontrol:

  • Tumpukan BT: Melaporkan status operasional makro saat ini dari pengontrol
  • Firmware: Melaporkan aktivitas agregat dan informasi energi

Status makro tumpukan host BT, sebagaimana ditentukan di tingkat pengguna:

  • Menganggur: [pemindaian halaman, iklan LE, pemindaian pertanyaan]
  • Pindai: [paging/pertanyaan/mencoba menghubungkan]
  • Aktif: [Tautan ACL aktif, tautan SCO sedang berlangsung, mode mengendus]

Aktivitas yang dipantau pengontrol selama masa pakainya adalah waktu Tx, waktu Rx, waktu idle, dan total energi yang dikonsumsi. Mereka dihapus saat dibaca dari host.

LE_Get_Controller_Activity_Energy_Info

Ini adalah perintah khusus vendor.

OCF: 0x159

Parameter sub-perintah Ukuran Tujuan
tidak Parameter perintah kosong

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
total_tx_time_ms 4 oktet Total waktu melakukan Tx
total_rx_time_ms 4 oktet Total waktu melakukan Rx
total_idle_time_ms 4 oktet Total waktu dalam keadaan idle (status daya rendah non-tidur)
total_energy_used 4 oktet Total energi yang digunakan [produk arus (mA), tegangan (V) dan waktu (ms)]

LE diperpanjang mengatur perintah parameter pemindaian

Perintah ini dapat digunakan untuk mengaktifkan jendela dan interval pemindaian yang lebih besar di pengontrol. Sesuai dengan Spesifikasi BT Core 5.2, jendela dan interval pemindaian memiliki batas batas atas 10,24 detik, yang menghambat interval pemindaian aplikasi yang lebih lama di atas 10,24 detik.

Referensi dasar: Spesifikasi BT Core 5.2, halaman 2493 (LE Set Scan Parameters Command)

OCF: 0x15A

Parameter Perintah Ukuran Tujuan
LE_Ex_Scan_Type 1 oktet 0x00 - Pemindaian pasif. Tidak ada paket SCAN_REQ yang akan dikirim (default).
0x01 - Pemindaian aktif. Paket SCAN_REQ dapat dikirim.
LE_Ex_Scan_Interval 4 oktet Didefinisikan sebagai interval waktu dari saat Pengendali memulai pemindaian LE terakhirnya hingga memulai pemindaian LE berikutnya.
Rentang: 0x0004 hingga 0x00FFFFFF
Bawaan: 0x0010 (10 mdtk)
Waktu = N * 0,625 ms
Rentang waktu: 2,5 ms hingga 10442,25 detik
LE_Ex_Scan_Window 4 oktet Durasi pemindaian LE. LE_Scan_Window harus kurang dari atau sama dengan LE_Scan_Interval .
Rentang: 0x0004 hingga 0xFFFF
Bawaan: 0x0010 (10 mdtk)
Waktu = N * 0,625 ms
Rentang Waktu: 2,5 ms hingga 40,95 detik
Own_Address_Type 1 oktet 0x00 - Alamat Perangkat Publik (default)
0x01 - Alamat Perangkat Acak
LE_Ex_Scan_Filter_Policy 0x00 - Terima semua paket iklan (default). Paket iklan terarah yang tidak ditujukan untuk perangkat ini akan diabaikan.
0x01 - Abaikan paket iklan dari perangkat yang tidak ada dalam daftar Hanya Daftar Putih. Paket iklan terarah yang tidak ditujukan untuk perangkat ini akan diabaikan.

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai

Dapatkan perintah info debug pengontrol

Tujuan dari elemen informasi ini adalah untuk memperoleh informasi debug pengontrol oleh sebuah host, dalam bentuk biner, untuk pasca-pemrosesan dan analisis. Ini membantu men-debug masalah di lapangan dan menyediakan toolkit kepada engineer untuk mencatat informasi untuk analisis. Sebuah Controller dapat memberikan informasi ketika diminta oleh host melalui event (Sub-event Controller Debug Info) atau secara mandiri jika diinginkan oleh controller. Contoh penggunaan bisa untuk melaporkan informasi status firmware, informasi crash dump, informasi logging, dll.

OCF: 0x15B

Parameter perintah Ukuran Tujuan
T/A Daftar parameter perintah kosong

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai

Dukungan Offload Perangkat Keras A2DP

Fitur A2DP Offload mendukung offload proses encoding audio A2DP ke prosesor audio yang terpasang pada BT Controller. Aliran data audio yang dikodekan lewat langsung dari prosesor Audio ke Pengontrol BT tanpa keterlibatan host BT. Host BT masih bertanggung jawab atas konfigurasi dan kontrol sesi A2DP.

OCF: 0x15D

Mulai Pembongkaran A2DP

Sub OCF: 0x01

Gunakan perintah ini untuk mengonfigurasi proses A2DP Offload dan untuk memulai aliran A2DP.

Parameter perintah Ukuran Tujuan
Codec 4 oktet Menentukan jenis Codec
0x01 - SBC
0x02 - AAC
0x04 - APTX
0x08 - APTX HD
0x10 - LDAC
Maks_Latensi 2 oktet Latensi Maks Diizinkan (dalam md). Nilai nol menonaktifkan flush.
SCMS-T_Aktifkan 2 oktet Oktet 0: Bendera yang memungkinkan penambahan header SCMS-T.
  • 0x00 - Header SCMS-T tidak disertakan.
  • 0x01 - Header SCMS-T disertakan.

Oktet 1: Nilai untuk header SCMS-T, saat diaktifkan.

Sampling_Frekuensi 4 oktet 0x01 - 44100 Hz
0x02 - 48000 Hz
0x04 - 88200 Hz
0x08 - 96000 Hz
Bits_Per_Contoh 1 oktet 0x01 - 16 bit per sampel
0x02 - 24 bit per sampel
0x04 - 32 bit per sampel
Saluran_Mode 1 oktet 0x01 - Mono
0x02 - Stereo
Encoded_Audio_Bitrate 4 oktet Kecepatan bit audio yang disandikan dalam bit per detik.
0x00000000 - Bitrate audio tidak ditentukan / tidak digunakan.
0x00000001 - 0x00FFFFFF - Kecepatan bit audio yang dikodekan dalam bit per detik.
0x01000000 - 0xFFFFFFFF - Dicadangkan.
Koneksi_Pegangan 2 oktet Koneksi Menangani koneksi A2DP sedang dikonfigurasi
L2CAP_Channel_ID 2 oktet ID Saluran L2CAP yang akan digunakan untuk koneksi A2DP ini
L2CAP_MTU_Ukuran 2 oktet Ukuran maksimum L2CAP MTU yang berisi paket audio yang disandikan
Codec_Informasi 32 oktet Informasi khusus Codec.

Kodek SBC:

Lihat elemen informasi spesifik Codec SBC di A2DP v1.3.
Oktet 0: Panjang balok | Subband | Metode Alokasi
Oktet 1: Nilai Bitpool minimum
Oktet 2: Nilai Bitpool Maksimum
Oktet 3: Frekuensi Pengambilan Sampel | Modus Saluran
Oktet 4-31: dipesan

Kodek AAC:

Lihat elemen informasi spesifik Codec AAC di A2DP v1.3
Oktet 0: Tipe Objek
Oktet 1; b7: VBR
Oktet 2-31: dipesan

Kodek LDAC:

Oktet 0-3: ID Vendor
0x0000012D

Oktet 4-5: ID Codec
0x00AA - LDAC
Semua nilai lainnya dicadangkan

Oktet 6: Indeks Kecepatan Bit:
0x00 - Tinggi
0x01 - Pertengahan
0x02 - Rendah
0x03 - 0x7E - Dipesan
0x7F - ABR (Kecepatan Bit Adaptif)
0x80 - 0xFF - Dipesan

Oktet 7: Mode Saluran LDAC
0x01 - Stereo
0x02 - Ganda
0x04 - Mono
Yang lain sudah dipesan

Oktet 8-31: dipesan

Semua codec lainnya:

Oktet 0-31: dipesan

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Sub_Opcode 1 oktet 0x0- Mulai Pembongkaran A2DP

Hentikan Pembongkaran A2DP

Sub OCF: 0x02

Perintah ini digunakan untuk menghentikan aliran A2DP Offload.

Parameter perintah Ukuran Tujuan
T/A Daftar parameter perintah kosong.

Tidak ada parameter yang ditentukan untuk perintah ini.

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Sub_Opcode 1 oktet 0x02 - Hentikan Pembongkaran A2DP

Perintah Laporan Kualitas Bluetooth

Fitur perintah Laporan Kualitas BT memulai mekanisme di pengontrol Bluetooth untuk melaporkan kejadian Kualitas Bluetooth ke host. Anda dapat mengaktifkan empat opsi:

  • Mode Pemantauan Kualitas: Pengontrol secara berkala mengirimkan sub-acara BQR terkait Kualitas Tautan ke host.
  • Mendekati LSTO: Jika tidak ada paket yang diterima dari perangkat BT yang terhubung selama lebih dari setengah dari nilai Link Supervision TimeOut (LSTO), pengontrol melaporkan peristiwa Mendekati LSTO ke host.
  • A2DP Audio Choppy: Saat pengontrol mendeteksi faktor yang menyebabkan audio berombak, pengontrol melaporkan kejadian A2DP Audio Choppy ke host.
  • (e)SCO Voice Choppy: Saat pengontrol mendeteksi faktor-faktor yang menyebabkan suara terputus-putus, pengontrol melaporkan (e)SCO Voice Choppy event ke host.
  • Root Inflammation: Event ini dikirim oleh controller ke stack ketika HAL atau controller menemukan kesalahan fatal dan perlu me-restart Bluetooth.
  • Jejak pesan LMP/LL: Pengontrol mengirimkan pesan LMP/LL berjabat tangan dengan perangkat jarak jauh ke host.
  • Jejak penjadwalan Multi-profil/Coex Bluetooth: Pengontrol mengirimkan informasi penjadwalannya tentang penanganan beberapa profil Bluetooth dan koeksistensi nirkabel dalam pita 2,4 Ghz ke host.
  • Mekanisme Informasi Debug Pengontrol: Saat diaktifkan, pengontrol dapat secara mandiri melaporkan informasi logging debug melalui sub-peristiwa info debug Pengendali ke host.

OCF: 0x15E

Parameter perintah Ukuran Tujuan
BQR_Laporan_Tindakan 1 oktet Tindakan untuk menambah/menghapus pelaporan peristiwa kualitas yang disetel dalam parameter BQR_Quality_Event_Mask, atau hapus semua.

0x00 - Tambahkan
0x01 - Hapus
0x02 - Hapus

Hapus akan menghapus pelaporan peristiwa kualitas tertentu.
Hapus akan menghapus semua pelaporan peristiwa kualitas (parameter BQR_Quality_Event_Mask dapat diabaikan).

BQR_Quality_Event_Mask 4 oktet Masker bit untuk pelaporan peristiwa kualitas yang dipilih.

Bit 0: Atur untuk mengaktifkan mode pemantauan kualitas.
Bit 1: Setel untuk mengaktifkan Mendekati acara LSTO.
Bit 2: Atur untuk mengaktifkan acara A2DP Audio Choppy.
Bit 3: Atur untuk mengaktifkan (e)SCO Voice Choppy event.
Bit 4: Atur untuk mengaktifkan acara peradangan Root.
Bit 5 ~ 15: Dipesan.
Bit 16: Atur untuk mengaktifkan jejak pesan LMP/LL.
Bit 17: Atur untuk mengaktifkan pelacakan penjadwalan Bluetooth Multi-link/Coex.
Bit 18: Atur untuk mengaktifkan mekanisme Controller Debug Information.
Bit 19 ~ 31: Dipesan.

BQR_Minimum_Report_Interval 2 oktet Tentukan interval waktu minimum pelaporan peristiwa berkualitas untuk peristiwa berkualitas yang dipilih. Firmware pengontrol tidak boleh melaporkan kejadian berikutnya dalam interval waktu yang ditentukan. Pengaturan interval harus masing-masing dan didedikasikan untuk acara kualitas yang sedang ditambahkan.

Satuan: ms
Default: 0 (Tidak ada batasan untuk interval.)
Rentang: 0 ~ 65535 ms

Acara Command Complete akan dibuat untuk perintah ini.

Kembalikan parameter Ukuran Tujuan
Status 1 oktet Perintah status Selesai
Current_Quality_Event_Mask 4 oktet Menunjukkan pengaturan topeng bit saat ini.
Bit 0: Mode pemantauan kualitas diaktifkan.
Bit 1: Mendekati pelaporan peristiwa LSTO diaktifkan.
Bit 2: Pelaporan peristiwa A2DP Audio Choppy diaktifkan.
Bit 3: (e) Pelaporan peristiwa SCO Voice Choppy diaktifkan.
Bit 4: Pelaporan peristiwa peradangan akar diaktifkan.
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
T/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