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:
|
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:
|
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:
|
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.
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. Kodek AAC: Lihat elemen informasi spesifik Codec AAC di A2DP v1.3 Kodek LDAC: Oktet 0-3: ID Vendor Oktet 4-5: ID Codec Oktet 6: Indeks Kecepatan Bit: Oktet 7: Mode Saluran LDAC 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 Hapus akan menghapus pelaporan peristiwa kualitas tertentu. |
BQR_Quality_Event_Mask | 4 oktet | Masker bit untuk pelaporan peristiwa kualitas yang dipilih. Bit 0: Atur untuk mengaktifkan mode pemantauan kualitas. |
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 |
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 ) present0x01: 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 octetRSSI[0] : 1 octetTimestamp[0] : 2 octetsAdv packet_len[0] : 1 octetAdv_packet[0] : Adv_packet_len octetsScan_data_resp_len[0] : 1 octetScan_data_resp[0] : Scan_data_resp octets |
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 code = 0x58 [Quality_Report_Id = 0x01 ~ 0x04, Link Quality related event]
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. |
SNR | 1 octet | [in dB] Signal-to-Noise Ratio (SNR) value for the specified Connection_Handle. |
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. |
Buffer_Underflow_Bytes | 4 octets | [in Byte] Buffer underflow count since the last event. |
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 code = 0x58 [Quality_Report_Id = 0x11 ~ 0x13, Log Dump related event]
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 |