主機控制器接口 (HCI) 用於與藍牙控制器進行交互。
本文檔提供了藍牙 (BT) 和藍牙低功耗 (BLE) HCI 要求的列表。目標是主機 BT 堆棧供應商和 BT 控制器供應商符合這些平台要求,以便使用下面描述的功能集。
本文檔將藍牙核心 5.2 規範稱為“規範”。藍牙核心 5.2 規範與其他採用的文檔一起在藍牙 SIG 網站上提供。
一般設計概述
芯片能力和配置
作為一個開放平台,Android 擁有一個包含軟件版本、OEM、供應商以及平台和芯片能力的矩陣。
為了管理不斷變化的環境和管理遷移,本文檔描述了允許 BT 控制器公開其功能(超出標準藍牙核心 5.2 規範)的設計理念。然後,主機 BT 堆棧可以使用這些功能來確定要啟用哪些功能。
支持開放標準
Android 的目標之一是在藍牙規範獲得批准後支持開放標準。如果下面描述的功能在未來的藍牙規範中可用於標準 HCI 方法,我們將傾向於將該方法設為默認方法。
供應商特定功能
供應商特定命令: LE_Get_Vendor_Capabilities_Command
操作碼命令字段 (OCF):0x153
命令參數 | 尺寸 | 目的 |
---|---|---|
不適用 | 空命令參數列表 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
max_advt_instances (已棄用) | 1 個八位字節 | 支持的廣告實例數。 v0.98 後保留。 此參數在 Google 功能規範 v0.98 及更高版本中已棄用,以支持 BT 規範版本 5.0 及更高版本中提供的LE 擴展廣告。 |
offloaded_resolution_of_private-address (已棄用) | 1 個八位字節 | RPA的BT芯片能力。 如果芯片支持,則需要主機啟用。 0 = 沒有能力 1 = 有能力 v0.98 後保留。 此參數在 Google 功能規範 v0.98 及更高版本中已棄用,以支持 BT 規範版本 4.2 及更高版本中提供的隱私功能。 |
total_scan_results_storage | 2 個八位字節 | 以字節為單位存儲掃描結果 |
max_irk_list_sz | 1 個八位字節 | 固件支持的 IRK 條目數 |
filtering_support | 1 個八位字節 | 支持在控制器中過濾 0 = 不支持 1 = 支持 |
max_filter | 1 個八位字節 | 支持的過濾器數量 |
activity_energy_info_support | 1 個八位字節 | 支持活動和能量信息的報告 0 = 沒有能力 1 = 有能力 |
version_supported | 2 個八位字節 | 指定支持的 Google 功能規範的版本 字節[0] = 主要編號 字節[1] = 次要數字 v1.00 字節[0] = 0x01 字節[1] = 0x00 |
total_num_of_advt_tracked | 2 個八位字節 | 出於OnLost / OnFound 目的而跟踪的廣告客戶總數 |
extended_scan_support | 1 個八位字節 | 支持擴展掃描窗口和間隔 |
debug_logging_supported | 1 個八位字節 | 支持從控制器記錄二進制調試信息 |
LE_address_generation_offloading_support (已棄用) | 1 個八位字節 | 0 = 不支持 1 = 支持 v0.98 後保留。 此參數在 Google 功能規範 v0.98 及更高版本中已棄用,以支持 BT 規範版本 4.2 及更高版本中提供的隱私功能。 |
A2DP_source_offload_capability_mask | 4 個八位字節 | 支持的編解碼器類型的位掩碼 位 0 - SBC 位 1 - AAC 位 2 - APTX 位 3 - APTX HD 位 4 - LDAC 位 5-31 保留 |
bluetooth_quality_report_support | 1 個八位字節 | 支持報告藍牙質量事件 0 = 沒有能力 1 = 有能力 |
動態音頻緩衝區支持 | 4 個八位字節 | 支持藍牙控制器中的動態音頻緩衝區 支持的編解碼器類型的位掩碼 位 0 - SBC 位 1 - AAC 位 2 - APTX 位 3 - APTX HD 位 4 - LDAC 位 5-31 保留 |
掃描結果的批處理
一個設計目標是增強藍牙 LE 掃描響應事件通知傳送到主機的方式,以節省主機的電力。
通過減少控制器通知主機應用處理器掃描結果的頻率,主機應用處理器可以保持更長時間的空閒/睡眠。這降低了主機中的功耗。 LE_Get_Vendor_Capabilities_Command
的返回參數total_scan_results_storage
表示芯片存儲掃描結果的能力。
此功能側重於藍牙控制器中 LE 掃描結果存儲設施的管理和配置。存儲用於臨時批處理廣告數據和掃描控制器接收到的數據和元數據,以便稍後傳送到主機。
固件應支持兩種類型的批處理,可以同時使用:
- 截斷。包含以下信息元素:{MAC, TX Power, RSSI, Timestamp}
- 滿的。包含以下信息元素:{MAC, TX Power, RSSI, Timestamp, Adv Data, Scan Response}
LE_Batch_Scan_Command
OCF:0x156
命令參數 | 尺寸 | 目的 |
---|---|---|
Batch_Scan_opcode | 1 個八位字節 | 0x1 - 啟用客戶特定功能 0x2 - 設置批量掃描存儲參數 0x3 - 設置批量掃描參數 0x4 - 讀取批量掃描結果參數 |
將為該命令生成命令完成事件。啟用客戶特定功能不會啟動掃描。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
Batch_Scan_opcode | 1 個八位字節 | 0x1 - 啟用客戶特定功能 0x2 - 設置批量掃描存儲參數 0x3 - 設置批量掃描參數 0x4 - 讀取批量掃描結果參數 |
LE_Batch_Scan_Command:啟用客戶特定功能
子 OCF:0x01
子命令參數 | 尺寸 | 目的 |
---|---|---|
enable_customer_specific_feature_set | 1 個八位字節 | 0x01 - 啟用批量掃描功能 0x00 - 禁用批量掃描功能 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
Batch_Scan_opcode | 1 個八位字節 | 0x1 - 啟用客戶特定功能 0x2 - 設置批量掃描存儲參數 0x3 - 設置批量掃描參數 0x4 - 讀取批量掃描結果參數 |
LE_Batch_Scan_Command:設置批量掃描存儲參數子命令
子 OCF:0x02
子命令參數 | 尺寸 | 目的 |
---|---|---|
Batch_Scan_Full_Max | 1 個八位字節 | 分配給完整樣式的最大存儲空間(以 % 為單位) [範圍:0-100] |
Batch_Scan_Truncated_Max | 1 個八位字節 | 分配給截斷樣式的最大存儲空間(以 % 為單位) [範圍:0-100] |
Batch_Scan_Notify_Threshold | 1 個八位字節 | 為單個存儲池設置通知級別(以 % 為單位) [範圍:0-100] 設置為 0 將禁用通知。生成供應商特定的 HCI 事件(存儲閾值違反子事件) |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
Batch_scan_opcode | 1 個八位字節 | 0x02 [設置批量掃描參數] |
LE_Batch_Scan_Command:設置批量掃描參數子命令
子 OCF:0x03
子命令參數 | 尺寸 | 目的 |
---|---|---|
Batch_Scan_Mode | 1 個八位字節 | 0x00 – 禁用批量掃描 0x01 – 啟用截斷模式 0x02 – 啟用完整模式 0x03 – 啟用截斷和完整模式 |
Duty_cycle_scan_window | 4 個八位字節 | 批量掃描掃描時間(插槽#) |
Duty_cyle_scan_interval | 4 個八位字節 | 批量掃描間隔週期(插槽#) |
own_address_type | 1 個八位字節 | 0x00 - 公共設備地址 0x01 - 隨機設備地址 |
Batch_scan_Discard_Rule | 1 個八位字節 | 0 - 丟棄最舊的廣告 1 - 丟棄 RSSI 最弱的廣告 |
如果啟用,此子命令將開始批量掃描。在截斷掃描中,結果以截斷形式存儲,其中截斷樣式的唯一鍵 = { BD_ADDR,
scan_interval}。這意味著每個掃描間隔BD_ADDR will
。截斷模式要保留的記錄如下: { BD_ADDR
, Tx Power, RSSI, Timestamp}
啟用完整模式時,將使用主動掃描並記錄掃描響應。 Full style unique key = {MAC, Ad packet},與掃描間隔無關。完整模式要保留的記錄是 { BD_ADDR
, Tx Power, RSSI, Timestamp, Ad packet, Scan Response}。在完整樣式中,相同的 AD 數據包在不同的掃描間隔內多次看到時,只會記錄一次。但是,在截斷模式下,感興趣的是BA_ADDR
跨不同掃描間隔的可見性(每個掃描間隔一次)。 RSSI 是掃描間隔內唯一廣告的所有副本的平均值。
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
Batch_scan_opcode | 1 個八位字節 | 0x03 [設置批量掃描參數] |
LE_Batch_Scan_Command:讀取批量掃描結果子命令
子 OCF:0x04
子命令參數 | 尺寸 | 目的 |
---|---|---|
Batch_Scan_Data_read | 1 個八位字節 | 0x01 – 截斷模式數據 0x02 – 全模式數據 |
將為該命令生成命令完成事件。當主機發出此命令時,控制器中的所有結果可能不適合一個命令完成事件。主機將迭代發出此命令,直到命令完成事件中的相應結果指示記錄數為 0,這表明控制器沒有更多記錄可與主機通信。每個命令完成事件可以包含僅一種數據類型(完整或截斷)的多條記錄。
控制器和主機時間參考不同步。時間戳的單位是 50ms。時間戳的值基於主機給出Read_Batch_Scan_Results_Sub_cmd
時的值。如果固件中的命令到達時間是T_c
,那麼固件中時間戳的實際時間是T_fw
。報告時間為:( T_c
- T_fw
)。 T_c
和T_fw
在固件時域中。這讓主機可以計算事件發生的時間。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
Batch_scan_opcode | 1 個八位字節 | 0x03 [設置批量掃描參數] |
Batch_Scan_data_read | 1 個八位字節 | 標識格式(截斷或完整) |
num_of_records | 1 個八位字節 | Batch_Scan_data_read 的記錄數 |
format_of_data | 多變的 | 截斷模式: 地址[0]:6 個八位字節 Address_Type[0]:1 個八位字節 Tx_Pwr[0]:1 個八位字節 RSSI[0]:1 個八位字節 時間戳[0]:2 個八位字節 [具有上述格式的多條記錄( num_of_records )]完整模式: 地址[0]:6 個八位字節 Address_Type[0]:1 個八位字節 Tx_Pwr[0]:1 個八位字節 RSSI[0]:1 個八位字節 時間戳[0]:2 個八位字節 高級數據包長度 [0]:1 個八位字節 Adv_packet[0]:Adv_packet_len 八位字節 Scan_data_resp_len[0]:1 個八位字節 Scan_data_resp[0]: Scan_data_resp 八位字節[以上格式的多條記錄( num_of_records )] |
廣告包內容過濾器
使用它來啟用/禁用/設置控制器中的廣告包內容過濾器 (APCF)。
LE_APCF_Command
OCF:0x157
命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_opcode | 1 個八位字節 | 0x00 - APCF 啟用 0x01 - APCF 設置過濾參數 0x02 - APCF 廣播地址 0x03 - APCF 服務 UUID 0x04 - APCF 服務請求 UUID 0x05 - APCF 本地名稱 0x06 - APCF 製造商數據 0x07 - APCF 服務數據 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 退貨狀態 |
APCF_opcode | 1 個八位字節 | 0x00 - APCF 啟用 0x01 - APCF 設置過濾參數 0x02 - APCF 廣播地址 0x03 - APCF 服務 UUID 0x04 - APCF 服務請求 UUID 0x05 - APCF 本地名稱 0x06 - APCF 製造商數據 0x07 - APCF 服務數據 |
LE_APCF_Command:Enable_sub_cmd
子 OCF:0x00
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_enable | 1 個八位字節 | 0x01 - 啟用 APCF 功能 0x00 - 禁用 APCF 功能 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x0 - APCF 啟用 |
APCF_Enable | 1 個八位字節 | 通過APCF_enable 設置啟用/禁用 |
LE_APCF_Command:set_filtering_parameters_sub_cmd
該子命令用於添加或刪除過濾器規範或清除過濾器列表以進行片上過濾。
子 OCF:0x01
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_Action | 1 個八位字節 | 0x00 - 添加 0x01 - 刪除 0x02 - 清除 刪除將清除特定過濾器以及其他表中的相關功能條目。 Clear 將清除其他表中的所有過濾器和關聯條目。 |
APCF_Filter_Index | 1 個八位字節 | 過濾器索引 (0, max_filter-1 ) |
APCF_Feature_Selection | 2 個八位字節 | 所選特徵的位掩碼: 位 0:設置為啟用廣播地址過濾器 位 1:設置為啟用服務數據更改過濾器 位 2:設置為啟用服務 UUID 檢查 位 3:設置為啟用服務請求 UUID 檢查 位 4:設置為啟用本地名稱檢查 位 5:設置以啟用製造商數據檢查 位 6:設置啟用服務數據檢查 |
APCF_List_Logic_Type | 2 個八位字節 | APCF_Feature_Selection 中指定的每個特徵選擇(每位位置)的邏輯操作。僅在啟用某個功能時有效。 位位置值: 0:或 1:和 如果選擇“AND”邏輯,則只有當 ADV 數據包包含列表中的所有條目時,它才會通過過濾器。 如果選擇“或”邏輯,則如果 ADV 數據包包含列表中的任何條目,它將通過過濾器。 |
APCF_Filter_Logic_Type | 1 個八位字節 | 0x00:或 0x01:與 注意: APCF_Feature_Selection 的前三個字段的邏輯類型為 N/A,始終為“AND”邏輯。它們僅適用於 (Bit 3 - Bit 6) APCF_Feature_Selection 的四個字段。 |
rssi_high_thresh | 1 個八位字節 | [單位為 dBm] 只有當信號高於 RSSI 高閾值時,才會認為廣告商已被看到。否則,固件必須表現得好像從未見過一樣。 |
delivery_mode | 1 個八位字節 | 0x00 - immediate 0x01 - on_found 0x02 - batched |
onfound_timeout | 2 個八位字節 | 僅在delivery_mode 為on_found 時有效。[以毫秒為單位] 是時候讓固件在報告之前逗留並收集額外的廣告了。 |
onfound_timeout_cnt | 1 個八位字節 | 僅在delivery_mode 為on_found 時有效。[數數] 如果 onFound 中的廣告在固件中停留了onfound_timeout 持續時間,它將收集一些廣告並檢查計數。如果計數超過onfound_timeout_cnt ,則立即報告OnFound 。 |
rssi_low_thresh | 1 個八位字節 | 僅在delivery_mode 為on_found 時有效。[單位為 dBm] 如果接收到的數據包的 RSSI 不高於 RSSI 低閾值,則認為廣告數據包未看到。 |
onlost_timeout | 2 個八位字節 | 僅在delivery_mode 為on_found 時有效。[以毫秒為單位] 如果發現廣告後,在 lost_timeout 時間內沒有連續看到廣告,則會立即報告丟失。 |
num_of_tracking_entries | 2 個八位字節 | 僅在delivery_mode 為on_found 時有效。[數數] 每個過濾器要跟踪的廣告客戶總數。 |
RSSI 值必須使用 2 的補碼來表示負值。
主機應該能夠配置多個過濾器,將APCF_Application_Address_type
設置為 0x02(對於所有廣播地址)來管理各種過濾器組合。
過濾、批處理和報告是相互關聯的概念。每個廣告和相關的掃描響應都必須一個接一個地通過所有過濾器。因此,生成的操作 ( delivery_mode
) 與過濾密切相關。交付模式如下: report_immediately
、 batch
和onFound
。 OnLost
值與OnFound
相關,因為它會在丟失時出現在OnFound
之後。
此處理流程描述了概念模型:
當接收到廣告(或掃描響應)幀時,它會按順序應用於所有過濾器。由於不同的過濾器操作,廣告可能會導致基於一個過濾器的即時報告和相同的批處理。
RSSI 級別閾值(高和低)能夠控制幀何時對過濾器處理可見,即使控制器接收到有效數據包也是如此。如果將傳送模式設置為立即或批處理,則考慮幀的 RSSI 以進行進一步的控制器處理。不同的應用程序需要不同的報告和批處理行為。這允許多個應用程序同時在固件中直接報告和/或批處理結果。例如,當一個應用程序的批量掃描處於活動狀態,然後另一個應用程序發出常規 LE 掃描時。在發出批量掃描之前,框架/應用程序會設置適當的過濾器。稍後,當第二個應用程序發出定期掃描時,之前的批處理繼續進行。然而,由於定期掃描,它類似於在概念上添加一個空過濾器(連同所有現有過濾器)以及 LE 掃描命令。激活時,LE 掃描命令參數優先。當常規 LE 掃描被禁用時,控制器將恢復到之前的批量掃描(如果存在)。
OnFound
交付模式基於配置的過濾器。觸發過濾器操作成功的組合被視為要跟踪onLost
的實體。相應的事件是 LE Advt 跟踪子事件。
過濾器的OnFound/OnLost
轉換(如果啟用)將如下所示:
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x02 - APCF 設置過濾參數 |
APCF_Action | 1 個八位字節 | 回顯命令的APCF_Action |
APCF_AvailableSpaces | 1 個八位字節 | 過濾器表中的可用條目數 |
LE_APCF_Command:broadcast_address_sub_cmd
該子命令用於添加或刪除廣告商地址或清除廣告商地址列表以進行片上過濾。
子 OCF:0x02
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_Action | 1 個八位字節 | 0x00 - 添加 0x01 - 刪除 0x02 - 清除 刪除將刪除指定過濾器中的指定廣播者地址。 Clear 將清除指定過濾器中的所有廣播者地址。 |
APCF_Filter_Index | 1 個八位字節 | 過濾器索引 (0, max_filter-1 ) |
APCF_Broadcaster_Address | 6個八位字節 | 6 字節設備地址添加到廣播地址列表或從廣播地址列表中刪除 |
APCF_Application_Address_type | 1 個八位字節 | 0x00:公開 0x01:隨機 0x02:NA(地址類型不適用) |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x02 - APCF 廣播地址 |
APCF_Action | 1 個八位字節 | 回顯命令的APCF_Action |
APCF_AvailableSpaces | 1 個八位字節 | 廣播地址表中仍然可用的空閒條目數 |
LE_APCF_Command:service_uuid_sub_cmd
該子命令用於添加或刪除服務 UUID 或清除服務 UUID 列表以進行片上過濾。
子 OCF:0x03
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_Action | 1 個八位字節 | 0x00 - 添加 0x01 - 刪除 0x02 - 清除 刪除將刪除指定過濾器中指定的服務 UUID 地址。 Clear 將清除指定過濾器中的所有服務 UUID。 |
APCF_Filter_Index | 1 個八位字節 | 過濾器索引 (0, max_filter -1) |
APCF_UUID | 2,4,16 字節 | 用於添加到列表或從列表中刪除的服務 UUID(16 位、32 位或 128 位)。 |
APCF_UUID_MASK | 2,4,16 字節 | 要添加到列表的服務 UUID 掩碼(16 位、32 位或 128 位)。它應該與APCF_UUID. |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x03 - APCF 服務 UUID |
APCF_Action | 1 個八位字節 | 回顯命令的APCF_Action |
APCF_AvailableSpaces | 1 個八位字節 | 服務 UUID 表中仍然可用的空閒條目數 |
LE_APCF_Command:solicitation_uuid_sub_cmd
此子命令用於添加或刪除請求 UUID 或清除請求 UUID 列表以進行片上過濾。
子 OCF:0x04
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_Action | 1 個八位字節 | 0x00 - 添加 0x01 - 刪除 0x02 - 清除 刪除將刪除指定過濾器中的請求 UUID 地址。 Clear 將清除指定過濾器中的所有請求 UUID。 |
APCF_Filter_Index | 1 個八位字節 | 過濾器索引 (0, max_filter -1) |
APCF_UUID | 2,4,16 字節 | 要添加到列表或從列表中刪除的請求 UUID(16 位、32 位或 128 位)。 |
APCF_UUID_MASK | 2,4,16 字節 | 要添加到列表的請求 UUID 掩碼(16 位、32 位或 128 位)。它應該與APCF_UUID 具有相同的長度。 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x04 - APCF 請求 UUID |
APCF_Action | 1 個八位字節 | 回顯命令的APCF_Action |
APCF_AvailableSpaces | 1 個八位字節 | Solicitation UUID 表中仍然可用的免費條目數 |
LE_APCF_Command:local_name_sub_cmd
該子命令用於添加或刪除本地名稱字符串或清除本地名稱字符串列表以進行片上過濾。
子 OCF:0x05
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_Action | 1 個八位字節 | 0x00 - 添加 0x01 - 刪除 0x02 - 清除 刪除將刪除指定過濾器中的指定本地名稱字符串。 Clear 將清除指定過濾器中的所有本地名稱字符串。 |
APCF_Filter_Index | 1 個八位字節 | 過濾器索引 (0, max_filter -1) |
APCF_LocName_Mandata_or_SerData | 可變尺寸 | 本地名稱的字符串。 筆記:
|
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x05 - APCF 本地名稱 |
APCF_Action | 1 個八位字節 | 回顯命令的APCF_Action |
APCF_AvailableSpaces | 1 個八位字節 | 本地名稱表中仍然可用的免費條目數 |
LE_APCF_Command:manf_data_sub_cmd
該子命令用於添加或刪除製造商數據字符串或清除製造商數據字符串列表以進行片上過濾。
子 OCF:0x06
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_Action | 1 個八位字節 | 0x00 - 添加 0x01 - 刪除 0x02 - 清除 刪除將刪除指定過濾器中的指定製造商數據字符串。 Clear 將清除指定過濾器中的所有製造商數據字符串。 |
APCF_Filter_Index | 1 個八位字節 | 過濾器索引 (0, max_filter -1) |
APCF_LocName_Mandata_or_SerData | 可變尺寸 | 製造商數據的字符串。 筆記:
|
APCF_ManData_Mask | 可變尺寸 | 要添加到列表中的製造數據掩碼。它應該與APCF_LocName_or_ManData_or_SerData 具有相同的長度。 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x06 - APCF 製造商數據 |
APCF_Action | 1 個八位字節 | 回顯命令的APCF_Action |
APCF_AvailableSpaces | 1 個八位字節 | 製造商數據表中仍然可用的免費條目數 |
LE_APCF_Command:service_data_sub_cmd
該子命令用於添加或刪除服務數據串或清除服務數據串列表以進行片上過濾。
子 OCF:0x07
子命令參數 | 尺寸 | 目的 |
---|---|---|
APCF_Action | 1 個八位字節 | 0x00 - 添加 0x01 - 刪除 0x02 - 清除 刪除將刪除指定過濾器中的指定服務數據字符串。 Clear 將清除指定過濾器中的所有服務數據字符串。 |
APCF_Filter_Index | 1 個八位字節 | 過濾器索引 (0, max_filter -1) |
APCF_LocName_Mandata_or_SerData | 可變尺寸 | 服務數據的字符串。 筆記:
|
APCF_LocName_Mandata_or_SerData_Mask | 可變尺寸 | 要添加到列表的服務數據掩碼。它應該與APCF_LocName_or_ManData_or_SerData. |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
APCF_opcode | 1 個八位字節 | 0x07 - APCF 服務數據 |
APCF_Action | 1 個八位字節 | 回顯命令的APCF_Action |
APCF_AvailableSpaces | 1 個八位字節 | 仍可用於服務數據表的免費條目數 |
控制器活動和能量信息命令
此信息的目的是讓更高的主機系統功能結合應用程序和框架中發生的情況來分析所有組件的總活動,包括 BT 控制器及其宏狀態。為此,BT 堆棧和控制器需要以下信息:
- BT堆棧:報告控制器當前的宏觀運行狀態
- 固件:報告聚合活動和能源信息
BT 主機堆棧宏狀態,在用戶級別確定:
- 空閒:[頁面掃描,LE advt,查詢掃描]
- 掃描:[尋呼/查詢/嘗試連接]
- 活動:[ACL 鏈接開啟,SCO 鏈接正在進行,嗅探模式]
控制器在其生命週期內跟踪的活動是 Tx 時間、Rx 時間、空閒時間和總能量消耗。從主機讀取時它們被清除。
LE_Get_Controller_Activity_Energy_Info
這是特定於供應商的命令。
OCF:0x159
子命令參數 | 尺寸 | 目的 |
---|---|---|
不適用 | 空命令參數 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
total_tx_time_ms | 4 個八位字節 | 執行 Tx 的總時間 |
total_rx_time_ms | 4 個八位字節 | 執行 Rx 的總時間 |
total_idle_time_ms | 4 個八位字節 | 空閒總時間(非睡眠低功耗狀態) |
total_energy_used | 4 個八位字節 | 使用的總能量 [電流 (mA)、電壓 (V) 和時間 (ms) 的乘積] |
LE 擴展設置掃描參數命令
此命令可用於在控制器中啟用更大的掃描窗口和間隔。根據 BT Core 5.2 規範,掃描窗口和間隔的上限為 10.24 秒,這阻礙了應用程序超過 10.24 秒的更長掃描間隔。
基本參考:BT Core 5.2 規範,第 2493 頁(LE 設置掃描參數命令)
OCF:0x15A
命令參數 | 尺寸 | 目的 |
---|---|---|
LE_Ex_Scan_Type | 1 個八位字節 | 0x00 - 被動掃描。不應發送任何SCAN_REQ 數據包(默認)。0x01 - 主動掃描。可以發送 SCAN_REQ 數據包。 |
LE_Ex_Scan_Interval | 4 個八位字節 | 定義為從控制器開始最後一次 LE 掃描到開始下一次 LE 掃描的時間間隔。 範圍:0x0004 到 0x00FFFFFF 默認值:0x0010(10 毫秒) 時間 = N * 0.625 毫秒 時間範圍:2.5 毫秒至 10442.25 秒 |
LE_Ex_Scan_Window | 4 個八位字節 | LE 掃描的持續時間。 LE_Scan_Window 應小於或等於LE_Scan_Interval 。範圍:0x0004 到 0xFFFF 默認值:0x0010(10 毫秒) 時間 = N * 0.625 毫秒 時間範圍:2.5 毫秒至 40.95 秒 |
Own_Address_Type | 1 個八位字節 | 0x00 - 公共設備地址(默認) 0x01 - 隨機設備地址 |
LE_Ex_Scan_Filter_Policy | 0x00 - 接受所有廣告數據包(默認)。未針對該設備尋址的定向廣告數據包應被忽略。 0x01 - 忽略來自不在僅白名單列表中的設備的廣告數據包。未針對該設備尋址的定向廣告數據包應被忽略。 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
Status | 1 個八位字節 | 命令完成狀態 |
獲取控制器調試信息命令
該信息元素的目的是通過主機以二進制形式獲取控制器調試信息,用於後處理和分析。這有助於調試現場問題,並為工程師提供一個工具包來記錄信息以供分析。控制器可以在主機通過事件(控制器調試信息子事件)請求時提供信息,或者在控制器需要時自主提供信息。示例用途可以是報告固件狀態信息、故障轉儲信息、日誌信息等。
OCF:0x15B
命令參數 | 尺寸 | 目的 |
---|---|---|
不適用 | 空命令參數列表 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
地位 | 1 個八位字節 | 命令完成狀態 |
A2DP 硬件卸載支持
A2DP 卸載功能支持將 A2DP 音頻編碼過程卸載到連接到 BT 控制器的音頻處理器。編碼後的音頻數據流直接從音頻處理器傳遞到 BT 控制器,無需 BT 主機參與。 BT Host 仍然負責 A2DP 會話的配置和控制。
OCF:0x15D
開始 A2DP 卸載
子 OCF:0x01
使用此命令配置 A2DP 卸載過程和啟動 A2DP 流。
命令參數 | 尺寸 | 目的 |
---|---|---|
編解碼器 | 4 個八位字節 | 指定編解碼器類型 0x01 - SBC 0x02 - AAC 0x04 - APTX 0x08 - APTX 高清 0x10 - LDAC |
Max_Latency | 2 個八位字節 | 允許的最大延遲(以毫秒為單位)。零值禁用刷新。 |
SCMS-T_Enable | 2 個八位字節 | 八位組 0:啟用添加 SCMS-T 標頭的標誌。
八位字節 1:啟用時 SCMS-T 標頭的值。 |
採樣頻率 | 4 個八位字節 | 0x01 - 44100 赫茲 0x02 - 48000 赫茲 0x04 - 88200 赫茲 0x08 - 96000 赫茲 |
Bits_Per_Sample | 1 個八位字節 | 0x01 - 每個樣本 16 位 0x02 - 每個樣本 24 位 0x04 - 每個樣本 32 位 |
頻道模式 | 1 個八位字節 | 0x01 - 單聲道 0x02 - 立體聲 |
編碼_音頻_比特率 | 4 個八位字節 | 以比特每秒為單位的編碼音頻比特率。 0x00000000 - 未指定/未使用音頻比特率。 0x00000001 - 0x00FFFFFF - 以比特/秒為單位的編碼音頻比特率。 0x01000000 - 0xFFFFFFFF - 保留。 |
Connection_Handle | 2 個八位字節 | 正在配置的 A2DP 連接的連接句柄 |
L2CAP_Channel_ID | 2 個八位字節 | 用於此 A2DP 連接的 L2CAP 通道 ID |
L2CAP_MTU_Size | 2 個八位字節 | 包含編碼音頻數據包的 L2CAP MTU 的最大大小 |
編解碼器_信息 | 32 個八位字節 | 編解碼器特定信息。 SBC編解碼器: 請參閱 A2DP v1.3 中的 SBC 編解碼器特定信息元素。 AAC 編解碼器: 請參閱 A2DP v1.3 中的 AAC 編解碼器特定信息元素 LDAC編解碼器: 八位字節 0-3:供應商 ID 八位字節 4-5:編解碼器 ID 八位字節 6:比特率指數: 八位字節 7:LDAC 通道模式 八位字節 8-31:保留 所有其他編解碼器: 八位字節 0-31:保留 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
地位 | 1 個八位字節 | 命令完成狀態 |
子操作碼 | 1 個八位字節 | 0x0- 啟動 A2DP 卸載 |
停止 A2DP 卸載
子 OCF:0x02
此命令用於停止 A2DP 卸載流。
命令參數 | 尺寸 | 目的 |
---|---|---|
不適用 | 空的命令參數列表。 |
沒有為此命令定義任何參數。
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
地位 | 1 個八位字節 | 命令完成狀態 |
子操作碼 | 1 個八位字節 | 0x02 - 停止 A2DP 卸載 |
藍牙質量報告命令
BT 質量報告命令功能啟動藍牙控制器中的機制以向主機報告藍牙質量事件。您可以啟用四個選項:
- 質量監控模式:控制器定期向主機發送與鏈路質量相關的 BQR 子事件。
- Approaching LSTO:如果在超過 Link Supervision TimeOut (LSTO) 值的一半的時間內沒有從連接的 BT 設備接收到數據包,控制器將向主機報告 Approaching LSTO 事件。
- A2DP 音頻斷斷續續:當控制器檢測到導致音頻斷斷續續的因素時,控制器會向主機報告 A2DP 音頻斷斷續續事件。
- (e)SCO Voice Choppy:當控制器檢測到導致語音不連續的因素時,控制器向主機報告(e)SCO Voice Choppy事件。
- Root Inflammation:當 HAL 或控制器遇到致命錯誤,需要重啟藍牙時,控制器向堆棧發送此事件。
- LMP/LL 消息跟踪:控制器向主機發送與遠程設備握手的 LMP/LL 消息。
- 藍牙多配置文件/Coex 調度跟踪:控制器將其有關處理多個藍牙配置文件和 2.4 Ghz 頻段中的無線共存的調度信息發送到主機。
- 控制器調試信息機制:啟用後,控制器可以通過控制器調試信息子事件自主上報調試日誌信息給主機。
OCF:0x15E
命令參數 | 尺寸 | 目的 |
---|---|---|
BQR_Report_Action | 1 個八位字節 | 添加/刪除 BQR_Quality_Event_Mask 參數中設置的質量事件報告的操作,或全部清除。 0x00 - 添加 刪除將清除特定的質量事件報告。 |
BQR_Quality_Event_Mask | 4 個八位字節 | 所選質量事件報告的位掩碼。 位 0:設置為啟用質量監控模式。 |
BQR_Minimum_Report_Interval | 2 個八位字節 | 為選定的質量事件定義質量事件報告的最小時間間隔。控制器固件不應在定義的時間間隔內報告下一個事件。間隔設置應分別專用於正在添加的質量事件。 單位:毫秒 |
將為該命令生成命令完成事件。
返回參數 | 尺寸 | 目的 |
---|---|---|
地位 | 1 個八位字節 | 命令完成狀態 |
Current_Quality_Event_Mask | 4 個八位字節 | 指示當前位掩碼設置。 位 0:啟用質量監控模式。 位 1:接近 LSTO 事件報告已啟用。 位 2:啟用 A2DP 音頻斷斷續續事件報告。 位 3:(e)SCO Voice Choppy 事件報告已啟用。 Bit 4: Root inflammation event reporting is enabled. Bit 5 ~ 15: Reserved. Bit 16: LMP/LL message trace is enabled. Bit 17: Bluetooth Multi-link/Coex scheduling trace is enabled. Bit 18: Controller Debug Information mechanism is enabled. Bit 19 ~ 31: Reserved. |
Dynamic Audio Buffer command
The Dynamic Audio Buffer reduces audio glitching by changing the audio buffer size in the Bluetooth controller based on various scenarios.
OCF: 0x15F
Get audio buffer time capability
Sub OCF: 0x01
Use this command to get the audio buffer time capability from the Bluetooth controller.
Command parameter | Size | Purpose |
---|---|---|
不適用 | 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 |