人機交互要求

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

主機控制器接口 (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_cT_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_modeon_found時有效。
[以毫秒為單位]
是時候讓固件在報告之前逗留並收集額外的廣告了。
onfound_timeout_cnt 1 個八位字節僅在delivery_modeon_found時有效。
[數數]
如果onFound中的廣告在固件中停留了onfound_timeout持續時間,它將收集一些廣告並檢查計數。如果計數超過onfound_timeout_cnt ,則立即報告OnFound
rssi_low_thresh 1 個八位字節僅在delivery_modeon_found時有效。
[單位為 dBm]
如果接收到的數據包的 RSSI 不高於 RSSI 低閾值,則認為廣告數據包未看到。
onlost_timeout 2 個八位字節僅在delivery_modeon_found時有效。
[以毫秒為單位]
如果發現廣告後,在lost_timeout時間內沒有連續看到廣告,則會立即報告丟失。
num_of_tracking_entries 2 個八位字節僅在delivery_modeon_found時有效。
[數數]
每個過濾器要跟踪的廣告客戶總數。

RSSI 值必須使用 2 的補碼來表示負值。

主機應該能夠配置多個過濾器,將APCF_Application_Address_type設置為 0x02(對於所有廣播地址)來管理各種過濾器組合。

過濾、批處理和報​​告是相互關聯的概念。每個廣告和相關的掃描響應都必須一個接一個地通過所有過濾器。因此,生成的操作 ( delivery_mode ) 與過濾密切相關。交付模式如下: report_immediatelybatchonFoundOnLost值與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可變尺寸本地名稱的字符串。

筆記:
  • 當前本地名稱字符串中的最大字符數為 29
  • 當操作為“清除”時不適用 (0x2)

將為該命令生成命令完成事件。

返回參數尺寸目的
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可變尺寸製造商數據的字符串。

筆記:
  • 當前本地名稱字符串中的最大字符數為 29
  • 當操作為“清除”時不適用 (0x2)
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可變尺寸服務數據的字符串。

筆記:
  • 當前本地名稱字符串中的最大字符數為 29
  • 當操作為“清除”時不適用 (0x2)
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 標頭的標誌。
  • 0x00 - 不包括 SCMS-T 標頭。
  • 0x01 - 包含 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 編解碼器特定信息元素。
八位字節 0:塊長度 |子帶 |分配方法
八位字節 1:最小比特池值
八位字節 2:最大比特池值
八位字節 3:採樣頻率 |頻道模式
八位字節 4-31:保留

AAC 編解碼器:

請參閱 A2DP v1.3 中的 AAC 編解碼器特定信息元素
八位字節 0:對像類型
八位字節 1; b7:VBR
八位字節 2-31:保留

LDAC編解碼器:

八位字節 0-3:供應商 ID
0x0000012D

八位字節 4-5:編解碼器 ID
0x00AA - LDAC
保留所有其他值

八位字節 6:比特率指數:
0x00 - 高
0x01 - 中
0x02 - 低
0x03 - 0x7E - 保留
0x7F - ABR(自適應比特率)
0x80 - 0xFF - 保留

八位字節 7:LDAC 通道模式
0x01 - 立體聲
0x02 - 雙
0x04 - 單聲道
其他保留

八位字節 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 - 添加
0x01 - 刪除
0x02 - 清除

刪除將清除特定的質量事件報告。
Clear 將清除所有質量事件報告(可以忽略 BQR_Quality_Event_Mask 參數)。

BQR_Quality_Event_Mask 4 個八位字節所選質量事件報告的位掩碼。

位 0:設置為啟用質量監控模式。
位 1:設置為啟用接近 LSTO 事件。
位 2:設置為啟用 A2DP 音頻 Choppy 事件。
位 3:設置為啟用 (e)SCO Voice Choppy 事件。
位 4:設置為啟用根炎症事件。
位 5 ~ 15:保留。
位 16:設置為啟用 LMP/LL 消息跟踪。
位 17:設置為啟用藍牙多鏈路/Coex 調度跟踪。
位 18:設置以啟用控制器調試信息機制。
位 19 ~ 31:保留。

BQR_Minimum_Report_Interval 2 個八位字節為選定的質量事件定義質量事件報告的最小時間間隔。控制器固件不應在定義的時間間隔內報告下一個事件。間隔設置應分別專用於正在添加的質量事件。

單位:毫秒
默認值:0(對時間間隔沒有限制。)
範圍:0 ~ 65535 毫秒

將為該命令生成命令完成事件。

返回參數尺寸目的
地位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 ) present
0x01: Advertiser information ( Advt_Info ) not present
Advertiser_Address 6 octets Public or random address
Advertiser_Address_Type 1 octet 0x00: Public address
0x01: Random address
Advt_Info Tx_Pwr[0] : 1 octet
RSSI[0] : 1 octet
Timestamp[0] : 2 octets
Adv packet_len[0] : 1 octet
Adv_packet[0] : Adv_packet_len octets
Scan_data_resp_len[0] : 1 octet
Scan_data_resp[0] : Scan_data_resp octets

Controller debug info sub-event

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

Sub-event code = 0x57

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

Bluetooth Quality Report sub-event

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

Sub-event Parameter Size Purpose
Quality_Report_Id 1 octet 0x01: Quality reporting on the monitoring mode.
0x02: Approaching LSTO.
0x03: A2DP Audio Choppy.
0x04: (e)SCO Voice Choppy.
0x05 ~ 0xFF: Reserved.
Packet_Types 1 octet 0x01: ID
0x02: NULL
0x03: POLL
0x04: FHS
0x05: HV1
0x06: HV2
0x07: HV3
0x08: DV
0x09: EV3
0x0A: EV4
0x0B: EV5
0x0C: 2-EV3
0x0D: 2-EV5
0x0E: 3-EV3
0x0F: 3-EV5
0x11: DH1
0x12: DM3
0x13: DH3
0x14: DM5
0x15: DH5
0x16: AUX1
0x17: 2-DH1
0x18: 2-DH3
0x19: 2-DH5
0x1A: 3-DH1
0x1B: 3-DH3
0x1C: 3-DH5
0x1D ~ 0xFF: Reserved.
Connection_Handle 2 octets Connection Handle.
Connection_Role 1 octet Performing Role for the connection.
0x00: Central
0x01: Peripheral
0x02 ~ 0xFF: Reserved.
TX_Power_Level 1 octet Current transmit power level for the specified Connection_Handle.

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

RSSI 1 octet [in dBm]

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

SNR 1 octet [in dB]

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

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

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

Buffer_Underflow_Bytes 4 octets [in Byte]

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

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

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

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

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

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

Multi-advertiser support

The objectives of multi-advertiser support are the following:

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

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

LE_Multi_Advt_Command

OCF: 0x154

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

A Command Complete event will be generated for this command.

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

LE_Multi_Advt_Command: Set_Advt_Param_Multi_Sub_Cmd

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

Sub OCF: 0x01

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

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

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

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

LE_Multi_Advt_Command: Set_Advt_Data_Multi_Sub_Cmd

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

Sub OCF: 0x02

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

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

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

LE_Multi_Advt_Command: Set_Scan_Resp_Data_Multi_Sub_Cmd

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

Sub OCF: 0x03

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

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

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

LE_Multi_Advt_Command: Set_Random_Addr_Multi_Sub_Cmd

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

Sub OCF: 0x04

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

A Command Complete event will be generated for this command.

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

LE_Multi_Advt_Command: Set_Advt_Enable_Multi_Sub_Cmd

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

OCF: 0x05

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

A Command Complete event will be generated for this command.

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

Offloaded resolution of private address

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

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

LE_Set_RPA_Timeout

OCF: 0x15C

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

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

LE_RPA_offload_Command

OCF: 0x155

Command parameter Size Purpose
RPA_offload_opcode 1 octet 0x1 - Enable customer specific feature
0x2 - Add IRK to the list
0x3 - Remove IRK from the list
0x4 - Clear IRK list
0x5 - Read IRK list entry

A Command Complete event will be generated for this command.

Return parameter Size Purpose
Status 1 octet Command Complete status
Event_RPA_offload_opcode 1 octet 0x1 - Enable customer specific feature
0x2 - Add IRK to the list
0x3 - Remove IRK from the list
0x4 - Clear IRK list
0x5 - Read IRK list entry

LE_RPA_offload: Enable_cust_specific_sub_Command

Sub OCF: 0x01

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

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

A Command Complete event will be generated for this command.

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

LE_RPA_offload: Add_IRK_to_list_sub_Command

Sub OCF: 0x02

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

A Command Complete event will be generated for this command.

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

LE_RPA_offload: Remove_IRK_to_list_sub_Command

Sub OCF: 0x03

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

A Command Complete event will be generated for this command.

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

LE_RPA_offload: Clear_IRK_list_sub_Command

Sub OCF: 0x04

Sub-command parameter Size Purpose
None

A Command Complete event will be generated for this command.

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

LE_RPA_offload: Read_IRK_list_sub_Command

Sub OCF: 0x05

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

A Command Complete event will be generated for this command.

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