HCI 相關規定

主機控制器介面 (HCI) 的用途是與藍牙控制器互動。

本文件提供藍牙 (BT) 和藍牙低功耗 (BLE) HCI 要求清單。我們的目標是讓主機 BT 堆疊供應商和 BT 控制器供應商遵守這些平台規定,才能使用下述的功能集。

本文件將藍牙核心 5.2 規格稱為「規格」。如要瞭解 Bluetooth Core 5.2 規格,請參閱 Bluetooth SIG 網站和其他採用的文件。

一般設計總覽

晶片功能與設定

Android 是開放式平台,包含軟體版本、原始設備製造商 (OEM)、供應商,以及平台與晶片功能係列。

為了管理不同的環境及管理遷移作業,本文件中除了標準藍牙核心 5.2 規格外,還說明允許 BT 控制器公開其功能的設計理念。主機 BT 堆疊接著可以使用這些功能,決定要啟用哪些功能。

支援開放標準

Android 的其中一個目標,是按照藍牙規格,在傳播後支援開放標準。如果日後在藍牙規格的標準 HCI 方法中提供下述功能,我們就會將該做法設為預設設定。

供應商專屬功能

供應商專屬指令:LE_Get_Vendor_Capabilities_Command

OpCode 指令欄位 (OCF):0x153

指令參數 大小 目的
不限 空白的指令參數清單

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
max_advt_instances
(已淘汰)
1 個八位元 支援的廣告執行個體數量。

保留版本 v0.98 後保留。
此參數已在 Google 功能規格 0.98 以上版本中淘汰,並改用 BT 規格 5.0 以上版本提供的 LE Extended Advertising
offloaded_resolution_of_private-address
(已淘汰)
1 個八位元 RPA 的 BT 晶片功能。
如果方塊支援方塊,就必須由主機啟用。
0 = 不可行
1 = 功能

在 v0.98 推出後保留。
此參數已在 Google 功能規格 0.98 以上版本中淘汰,並改用 BT 規格 4.2 以上版本提供的隱私權功能
total_scan_results_storage 2 個八位元組 Storage 掃描結果 (以位元組為單位)
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 功能規格版本
byte[0] = 主要數字
byte[1] = 最小值

v1.04
byte[0] = 0x01
byte[1] = 0x04
total_num_of_advt_tracked 2 個八位元組 追蹤以下目的的廣告主總數:OnLost/OnFound
extended_scan_support 1 個八位元 支援延伸掃描期間和間隔時間
debug_logging_supported 1 個八位元 支援從控制器取得二進位檔偵錯資訊
LE_address_generation_offloading_support
(已淘汰)
1 個八位元 0 = 不支援
1 = 支援

第 0.98 版之後保留。
此參數已在 Google 功能規格 0.98 以上版本中淘汰,並改用 BT 規格 4.2 以上版本提供的隱私權功能
A2DP_source_offload_capability_mask 4 八位元 支援的轉碼器類型的位元遮罩
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31
bluetooth_quality_report_support 1 個八位元 支援藍牙品質事件
0 = 不支援
1 = 功能
dynamic_audio_buffer_support 4 個八位元組 支援藍牙控制器中的動態音訊緩衝區
支援的轉碼器類型位元遮罩
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
保留 5-31 位元的位元數
a2dp_offload_v2_support 1 個八位元 支援藍牙控制器中的 A2dp 卸載 v2 指令 (請參閱啟動 A2DP 卸載停止 A2DP 卸載)
0 = 不支援
1 = 支援

批次處理掃描結果

設計目標是加強藍牙 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_批次掃描指令

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:設定 Batch Scan Storage Param 子指令

子 OCF:0x02

子指令參數 大小 目的
Batch_Scan_Full_Max 1 個八位元 分配給完整樣式的儲存空間上限 (以百分比表示)
[Range: 0-100]
Batch_Scan_Truncated_Max 1 個八位元 分配給截斷樣式的空間上限 (以 % 為單位)
[Range: 0-100]
Batch_Scan_Notify_Threshold 1 個八位元 個別儲存空間集區的通知等級 (以百分比表示)
[Range: 0-100]
如果設為 0,系統會停用通知。產生供應商專屬的 HCI 事件 (儲存空間門檻侵害子事件)

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Batch_scan_opcode 1 個八位元 0x02 [設定批次掃描參數]

LE_Batch_Scan_Command:設定 Batch Scan Param 子指令

子 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}

啟用「完整模式」後,系統會採用主動掃描,並記錄掃描回應。完整樣式專屬金鑰 = {MAC, Ad Pack} (無論掃描間隔為何)。完整模式保留的記錄為 {BD_ADDR, Tx Power, RSSI, Timestamp, Ad package, 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 - 完整模式資料

系統會為這個指令產生指令完成事件。主機發出這個指令時,控制器中的所有結果可能不會對應至單一「Command 完成」事件。主機會反覆發出這個指令,直到「指令完成」事件中的對應結果在記錄數量中顯示 0 為止,這代表控制器已無其他與主機通訊的記錄。每個「指令完成」事件可包含多個記錄,但這些記錄只能含有一種資料 (完整或截斷)。

控制器和主機時間參照不會同步處理。時間戳記的單位為 50 毫秒。時間戳記的值以主機提供 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 變數 Truncated Mode:
Address[0]: 6 octets
Address_Type[0]: 1 octet
Tx_Pwr[0]: 1 octet
RSSI[0] : 1 octet
Timestamp[0]: 2 octets (num_of_records)












num_of_recordsScan_data_resp

廣告封包內容篩選器

使用此功能可在控制器中啟用/停用/設定「廣告封包內容篩選器」(APCF)。APCF 會篩選控制器中的廣告報表,但不會過濾定期廣告。

LE_APCF 指令

OCF:0x157

指令參數 大小 目的
APCF_opcode 1 個八位元 0x00 - APCF 啟用
0x01 - APCF 設定篩選參數
0x02 - APCF Broadcaster Address
0x03 - APCF 服務 UUID
0x04 - APCF Service Solicitation UUID
0x05 - APCF 本機 - 關聯 UUID
0x05 - APCF 未來使用 APCF 保留服務 0x01 - APCF 保留服務 ~ 2UID
0x05 - APCF Service Solicitation UUID
0x05 - APCF 未來





系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 退貨狀態
APCF_opcode 1 個八位元 0x00 - APCF 啟用
0x01 - APCF 設定篩選參數
0x02 - APCF Broadcaster Address
0x03 - APCF 服務 UUID
0x04 - APCF Service Solicitation UUID
0x05 - APCF 本機 - 關聯 UUID
0x05 - APCF 未來使用 APCF 保留服務 0x01 - APCF 保留服務 ~ 2UID
0x05 - APCF Service Solicitation UUID
0x05 - 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 - 清除
刪除會清除特定篩選器,以及其他資料表中的關聯地圖項目。
清除將會清除其他表格中的所有篩選器和相關聯的項目。
APCF_Filter_Index 1 個八位元 篩選索引 (0、max_filter-1)
APCF_Feature_Selection 2 個八位元組 所選功能的位元遮罩:
Bit 0:設為啟用廣播位址篩選器
Bit 1:設為啟用服務資料變更篩選器
Bit 2:設為啟用服務 UUID 檢查
Bit 3:設為啟用服務 Soli 檢查 UUID 檢查
Bit 4:設定 Bit 5:設定 AD 資料檢查
Bit 4:設定讓 Manufacturer Data Check
Bit 6:設定用於啟用 Manufacturer Data Check 的

APCF_List_Logic_Type 2 個八位元組 APCF_Feature_Selection 中指定的每個特徵選項 (每個位元位置) 的邏輯作業。
僅在功能啟用時有效。
位元位置值:
0:OR
1: AND
如果選取「AND」邏輯,ADV 封包只有在包含清單中「所有」項目時才會通過篩選器。
如果選取「OR」邏輯,ADV 封包只要包含清單中的任何項目,就會通過這個篩選器。
APCF_Filter_Logic_Type 1 個八位元 0x00:OR
0x01:AND
注意:APCF_Feature_Selection 的前三個欄位的邏輯類型為 N/A,這些欄位一律為「AND」邏輯。這些屬性僅適用於 APCF_Feature_Selection 的四個欄位 (Bit 3 - Bit 6)。
rssi_high_thresh 1 個八位元 [in 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 的情況。
[count]
如果 onFound 中的一則廣告在韌體期間處於 onfound_timeout 期間,系統會收集幾則廣告,並檢查計數。如果數量超過 onfound_timeout_cnt,就會在之後立即回報 OnFound
rssi_low_thresh 1 個八位元 只適用於 delivery_modeon_found 的情況。
[in 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 個八位元 0x01 - APCF 集合篩選參數
APCF_Action 1 個八位元 回聲返回指令的「APCF_Action
APCF_AvailableSpaces 1 個八位元 篩選器表格中的可用項目數量

LE_APCF_Command:Broadcast_address_sub_cmd

這個子指令可用於新增或刪除廣告主地址,或是清除廣告主地址清單,以便進行晶片篩選。

子 OCF:0x02

子指令參數 大小 目的
APCF_Action 1 個八位元 0x00 - 新增
0x01 - 刪除
0x02 - 清除
刪除會刪除指定篩選器中的指定電視台位址。
清除將會清除指定篩選器中的所有播送者地址。
APCF_Filter_Index 1 個八位元 篩選索引 (0、max_filter-1)
APCF_Broadcaster_Address 6 個八位元 要在電視台位址清單中新增或刪除的 6 位元組裝置位址
APCF_Application_Address_type 1 個八位元 0x00:公開
0x01:隨機
0x02: NA (忽略位址類型)
使用身分地址類型 (0x02、0x03) 篩選廣告報表。 如要取得地址類型為 0x02 和 0x03 的廣告報表,請將這個欄位設為 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 位址。
清除將會清除指定篩選器中的所有服務 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 個八位元 Service UUID 資料表中可用的免費項目數量

LE_APCF_Command:solicitation_uuid_sub_cmd

這個子指令可用於新增或刪除推銷 UUID,或清除用來篩選的晶片 UUID 清單。

子 OCF:0x04

子指令參數 大小 目的
APCF_Action 1 個八位元 0x00 - 新增
0x01 - 刪除
0x02 - 清除
Delete 會刪除指定篩選器中的宣傳 UUID 位址。
清除 將清除指定篩選器中的所有招攬者 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 - 清除
刪除會刪除指定篩選器中的指定本機名稱字串。
清除 將清除指定篩選器中的所有本機名稱字串。
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 - 清除
刪除會刪除指定篩選器中的指定製造商資料字串。
清除 將清除指定篩選器中的所有製造商資料字串。
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 - 清除
刪除會刪除指定篩選器中的指定服務資料字串。
清除 將清除指定篩選器中的所有服務資料字串。
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 個八位元 「服務資料」資料表剩餘的免費項目數量

LE_APCF_Command: ad_type_sub_cmd

這個子指令可用來新增或刪除 AD 類型,或是清除用於晶片篩選的 AD 類型清單。使用 read_extended_features_sub_cmd 即可檢查系統是否支援這個指令。
APCF_AD_DATA_Length 為 0 時,在不比較 AD 資料與 AD 資料遮罩的情況下篩選 APCF_AD_TYPE。 如果接收的 ADV 封包資料長度超過 AD_DATA_LENGTH,請只比較 AD 資料的前 AD_DATA_LENGTH 位元組,並忽略剩餘的資料。

子 OCF:0x09

子指令參數 大小 目的
APCF_Action 1 個八位元 0x00 - 新增
0x01 - 刪除
0x02 - 清除
刪除會刪除指定篩選器中的指定廣告類型。
清除將會清除指定篩選器中的所有 AD 類型。
APCF_Filter_Index 1 個八位元 篩選器索引 (0, max_filter-1)
APCF_AD_TYPE 1 個八位元 用來在清單中新增或刪除的廣告類型。APCF_Action 為 0x02 時忽略 (清除)
APCF_AD_DATA_Length 1 個八位元 0x00 - 代表不篩選資料內容
APCF_Action 為 0x02 時忽略 (清除)
APCF_AD_DATA 變數大小 變數大小,依據APCF_AD_DATA_Length
APCF_Action 為 0x02 時忽略 (清除)
APCF_AD_DATA_MASK 變數大小 根據 APCF_AD_DATA_Length 決定尺寸大小
APCF_Action 為 0x02 時忽略 (清除)
長度應與 APCF_AD_DATA 相同。

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
APCF_opcode 1 個八位元 0x09 - APCF 廣告類型
APCF_Action 1 個八位元 回聲返回指令的「APCF_Action
APCF_AvailableSpaces 1 個八位元 「廣告類型」表格中仍有可用的免費項目數量

LE_APCF_Command:read_extended_features_sub_cmd

這個子指令是用來讀取擴充的 APCF 功能。

子 OCF:0xFF

子指令參數 大小 目的
不適用 空白指令參數。

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
APCF_opcode 1 個八位元 0xFF - APCF_Read_Extended_Features
APCF_extended_features 2 個八位元

支援的擴充功能位元遮罩:

  • 位元 0:支援 Transport Discovery Service 篩選器
  • 位元 1:支援 AD 類型篩選器
  • Bit 2 ~15:保留供日後使用

位元值

  • 0 = 不支援
  • 1 = 支援

控制器活動和能源資訊指令

這項資訊可讓較高階的主機系統函式分析所有元件的總活動量,包括 BT 控制器及其巨集狀態,以及應用程式與架構中的動態。為此,BT 堆疊和控制器必須提供下列資訊:

  • BT 堆疊:回報控制器目前的巨集運作狀態
  • 韌體:回報匯總活動和能源資訊

BT 主機堆疊巨集狀態 (在使用者層級決定):

  • 閒置:[網頁掃描、LE 優先、查詢掃描、LE 掃描]
  • 掃描:[分頁/查詢/嘗試連線]
  • 有效:[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 Set Scan Parameters Command)

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

指令參數 大小 目的
不適用 空白指令參數清單

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態

A2DP 硬體卸載支援

A2DP 卸載功能支援將 A2DP 音訊編碼程序卸載至連接至 BT 控制器的音訊處理器。經過編碼的音訊資料串流會直接從音訊處理器傳送至 BT 控制器,完全不需 BT 主機參與。BT 主機仍負責 A2DP 工作階段的設定和控制。可用的指令有兩種版本,採用 Sub OCF 0x01-0x02 的舊版指令僅支援開放原始碼轉碼器。 Sub-OCF 0x02-0x03 的版本適用於所設定的轉碼器。

OCF:0x15D

啟動 A2DP 卸載 (舊版)

子 OCF:0x01

使用這個指令來設定 A2DP 卸載程序及啟動 A2DP 串流。

指令參數 大小 目的
Codec 4 個八位元組 指定轉碼器類型
0x01 - SBC
0x02 - AAC
0x04 - APTX
0x08 - APTX HD
0x10 - LDAC
Max_Latency 2 個八位元組 允許的延遲時間上限 (以毫秒為單位)。如果值為 0,就會停用清除功能。
SCMS-T_Enable 2 個八位元組 八位元 0:可新增 SCMS-T 標頭的旗標。
  • 0x00 - 未包含 SCMS-T 標頭。
  • 0x01 - 包含 SCMS-T 標頭。

10 月 1 日:已啟用 SCMS-T 標頭的值。

Sampling_Frequency 4 個八位元組 0x01 - 44100 Hz
0x02 - 48000 Hz
0x04 - 88200 Hz
0x08 - 96000 Hz
Bits_Per_Sample 1 個八位元 每個樣本 0x01 至 16 位元
每個樣本 0x02 至 24 位元
每個樣本 0x04 - 32 位元
Channel_Mode 1 個八位元 0x01 - 單聲道
0x02 - 立體聲
Encoded_Audio_Bitrate 4 個八位元組 經過編碼的音訊位元率 (以每秒位元數為單位)。
0x00000000 - 未指定音訊位元率
0x00000001 - 0x00FFFFFF - 經過編碼的音訊位元率,以每秒位元數為單位。
0x01000000 - 0xFFFFFFFF - 已保留。
Connection_Handle 2 個八位元組 設定 A2DP 連線的連線處理常式
L2CAP_Channel_ID 2 個八位元組 要用於這個 A2DP 連線的 L2CAP 頻道 ID
L2CAP_MTU_Size 2 個八位元組 含有已編碼音訊封包的 L2CAP MTU 大小上限
Codec_Information 32 個八位元組 轉碼器專屬資訊。

SBC 轉碼器:

請參閱 A2DP v1.3 中的 SBC 轉碼器專屬資訊元素。
八位元:區塊長度 | 子頻 | 配置方法
八位元 1:位元集區值下限
八位元:最大位元集區值
八位元:取樣頻率 | 聲道模式
八位元 4 至 31:保留

AAC 轉碼器:

請參閱 A2DP v1.3 中的 AAC 轉碼器專屬資訊元素
八位元 0:物件類型
八位元 1;b7:VBR
10 月 2-31 日:保留

LDAC 轉碼器:

八位元 0-3:供應商 ID
0x0000012D

八位元 4-5:轉碼器 ID
0x00AA - LDAC
保留所有其他值

八位元 6:位元率索引:
0x00 - 高
0x01 - 中等
0x02 - 低
0x03 - 0x7E - 預訂
0x7F - ABR (自動調整位元率)
0x80 - 0xFF - 預留

10 月 7 日:LDAC 頻道模式
0x01 - 立體聲
0x02 - 雙聲道
0x04 - 單聲道
其他模型保留

八月 8-31:保留

所有其他轉碼器:

八位元 0-31:保留

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Sub_Opcode 1 個八位元 0x01 - 啟動 A2DP 卸載

啟動 A2DP 卸載

子 OCF:0x03

使用這個指令來設定 A2DP 卸載程序及啟動 A2DP 串流。

指令參數 大小 目的
Connection Handle 2 個八位元組 有效 HCI 連線的處理
L2CAP_Channel_ID 2 個八位元組 用於 A2DP 串流的 L2CAP 頻道 ID
Data_Path_Direction 1 個八位元 0x00 - 輸出 (AVDTP 來源/合併)
0x01 - 輸入 (AVDTP 接收器/分割)
Peer_MTU 2 個八位元組 與對等點交涉的 L2CAP 封包大小上限。
CP_Enable_SCMS_T 1 個八位元 0x00 - 停用 SCMS-T 內容保護標頭
0x01 - 啟用 SCMS-T 內容保護標頭
CP_Header_SCMS_T 1 個八位元 在 SCMS-T 內容保護標頭啟用 (CP_SCMS_T_Enable 設為 0x01) 的情況下,定義音訊內容前面的標頭值 (請參閱 A2DP 第 3.2.1-2 節,按照藍牙指派號碼的定義),第 6.3.2 節。
如未啟用 SCMS-T 內容保護措施,系統會忽略這項設定。
Vendor_Specific_Parameters_Length 1 個八位元 供應商特定參數長度,介於 0 到 128 之間。
如未提供其他參數,系統會使用 0。
Vendor_Specific_Parameters 0 到 128 個八位元組 藍牙音訊 HAL 提供的供應商專屬參數 CodecParameters.vendorSpecificParameters[]

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Sub_Opcode 1 個八位元 0x03 - 啟動 A2DP 卸載

停止 A2DP 卸載 (舊版)

子 OCF:0x02

這個指令可用來停止 A2DP 卸載串流。

指令參數 大小 目的
不適用 空白指令參數清單。

這項指令未定義任何參數。

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Sub_Opcode 1 個八位元 0x02 - 停止 A2DP 卸載

停止 A2DP 卸載

子 OCF:0x04

這個指令可用來停止 A2DP 卸載串流。

指令參數 大小 目的
Connection Handle 2 個八位元組 有效 HCI 連線的處理
L2CAP_Channel_ID 2 個八位元組 用於 A2DP 串流的 L2CAP 頻道 ID
Data_Path_Direction 1 個八位元 0x00 - 輸出 (AVDTP 來源/合併)
0x01 - 輸入 (AVDTP 接收器/分割)

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Sub_Opcode 1 個八位元 0x04 - 停止 A2DP 卸載

藍牙品質報告指令

BT 品質報告指令功能會在藍牙控制器中啟動相關機制,向主機回報藍牙品質事件。您可啟用以下四個選項:

  • 品質監控模式:控制器會定期傳送與連結品質相關的 BQR 子事件給主機。
  • 接近 LSTO:如果連結監督時間 (LSTO) 值超過一半的 Link Supervision TimeOut (LSTO) 值沒有從已連線 BT 裝置接收封包時,控制器會回報將 LSTO 事件告知主機。
  • A2DP 音訊斷線:當控制器偵測到導致音訊斷斷續續的因素時,控制器會向主機回報 A2DP 音訊斷路事件。
  • (e) SCO 語音斷線:當控制器偵測到導致語音斷斷續續的因素時,控制器會向主機回報 (e)SCO 語音斷路器事件。
  • 根發炎:當 HAL 或控制器發生嚴重錯誤且必須重新啟動藍牙時,控制器會將這個事件傳送至堆疊。
  • LMP/LL 訊息追蹤:控制器會將 LMP/LL 訊息握手和遠端裝置傳送至主機。
  • 藍牙多設定檔/Coex 排程追蹤記錄:控制器會將處理排程資訊傳送給主機,用於處理多個藍牙設定檔和 2.4 Ghz 頻帶中的無線共存。
  • 控制器偵錯資訊機制:啟用後,控制器就能自動透過控制器偵錯資訊子事件,將偵錯記錄資訊回報給主機。
  • LE Audio 無法順暢播放:當控制器偵測到導致音訊斷斷續續的因素時,控制器會向主機回報 LE Audio Choppy 事件。
  • 進階 RF 統計資料模式:控制器會將 RF 統計資料相關資訊回報給主機,支援兩種報表用途:
    • 定期報表
    • 事件觸發條件 (串流開始/停止,以及連結品質事件觸發條件)。
  • BQR_Report_Action 的藍牙品質報告指令:主機可以使用這個 HCI 指令,取得一次性查詢,以用於品質監控模式、能源監控模式或進階 RF 統計資料模式。

OCF:0x15E

指令參數 大小 目的
BQR_Report_Action 1 個八位元 針對在 BQR_Quality_Event_Mask 參數中設定的品質事件新增 / 刪除回報的動作,或全部清除。

0x00 - 新增
0x01 - 刪除
0x02 - 清除
0x03 - 一次性查詢

刪除會清除特定品質事件報表。
清除:清除所有品質事件報表 (BQR_Quality_Event_Mask 參數則可忽略)。

BQR_Quality_Event_Mask 4 個八位元組 所選品質事件報表的位元遮罩。

位元 0:設為啟用品質監控模式。
Bit 1:設為啟用「接近 LSTO 事件」(適用於 ACL/(e)SCO/ISO)。
位元 2:設為啟用 A2DP 音訊斷線事件。
位元 3:設為啟用 (e) SCO 語音斷路事件。
位元 4:設為啟用根發炎事件。
位元 5:設為啟用能源監控模式。
位元 6:設定即可啟用 LE Audio 流暢度事件。
位元 7:設為啟用連結失敗事件。
Bit 8:設為啟用「進階 RF 統計資料」事件觸發條件。
Bit 9:設為啟用「進階 RF 統計資料」定期報表。
Bit 10 ~ 14:保留。
位元 15:設為啟用特定供應商的品質事件。
Bit 16:設為啟用 LMP/LL 訊息追蹤。
Bit 17:設定即可啟用藍牙多連結/Coex 排程追蹤記錄。
Bit 18:設為啟用控制器偵錯資訊機制。
Bit 19 ~ 30:保留。
Bit 31:設為啟用供應商專屬的追蹤記錄。

BQR_Minimum_Report_Interval 2 個八位元組 為所選品質事件定義品質事件回報的最短時間間隔。控制器韌體不應在定義的時間間隔內回報下一個事件。間隔設定應各自獨立,專門用於新增的品質事件。

單位:ms
預設值:0 (無間隔限制)
範圍:0 ~ 65535 毫秒

BQR_Vendor_Specific_Quality_Event_Mask 4 個八位元組 所選供應商專屬品質事件報表的位元遮罩。
只有在已設定 BQR_Quality_Event_Mask 的位元 15 時,這個參數才會生效。

位元 0 ~ 31:保留。

BQR_Vendor_Specific_Trace_Mask 4 個八位元組 所選供應商專屬追蹤記錄報表的位元遮罩。
只有在已設定 BQR_Quality_Event_Mask 的位元 31 時,這個參數才會生效。

位元 0 ~ 31:保留。

Report_interval_multiple 4 個八位元組 BQR_Minimum_Report_Interval 的乘數。當這個值大於 1 時,BQR 報告間隔會採用以下格式:
BQR 報告間隔 = BQR_Minimum_Report_Interval x Report_interval_multiple。
控制器韌體不得在定義的時間間隔內回報下一個事件。間隔設定是專為新增的品質事件所設計。

單位:ms
預設值:1
範圍:0 ~ 4294967295 (0: 等於設為 1)

注意:如果 BQR_Report_Interval 的設定大於控制器的能力,控制器必須在指令完成時傳回 BQR_Report_Interval 時間上限。

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Current_Quality_Event_Mask 4 個八位元組 表示目前的位元遮罩設定。
位元 0:品質監控模式已啟用。
小 1:已啟用接近 LSTO 事件回報功能。
位元 2:已啟用 A2DP 音訊斷路事件回報功能。
Bit 3:(e) 已啟用 SCO 語音斷路事件回報功能。
位元 4:已啟用根發炎事件回報功能。
5 點:啟用能源監控模式。
位元 6:已啟用 LE Audio 不流暢事件回報功能。
小 7:連線失敗事件。
Bit 8:設為啟用「進階 RF 統計資料」事件觸發條件。
Bit 9:設為啟用「進階 RF 統計資料」定期報表。
Bit 10 ~ 14:保留。
位元 15:已啟用供應商專屬的品質事件回報功能。
Bit 16:已啟用 LMP/LL 訊息追蹤。
Bit 17:已啟用藍牙多連結/Coex 排程追蹤記錄。
Bit 18:已啟用控制器偵錯資訊機制。
Bit 19 ~ 30:保留。
Bit 31:已啟用供應商專屬的追蹤記錄。
Current_Vendor_Specific_Quality_Event_Mask 4 個八位元組 表示目前的位元遮罩設定。
Current_Vendor_Specific_Trace_Mask 4 個八位元組 表示目前的位元遮罩設定。
BQR_Report_interval 4 個八位元組 表示目前的位元遮罩設定。
Current_Vendor_Specific_Trace_Mask 4 個八位元組 BQR_Report_interval 的設定。這個值必須是介於 BQR_Minimum_Report_Interval * Report_interval_multiple 之間的最小值,或是控制器的支援時間間隔上限。

動態音訊緩衝區指令

動態音訊緩衝區可根據各種情境,變更藍牙控制器中的音訊緩衝區大小,藉此減少音訊故障。

OCF:0x15F

取得音訊緩衝時間功能

子 OCF:0x01

請使用這個指令,從藍牙控制器取得音訊緩衝區時間功能。

指令參數 大小 目的
不適用 空白的指令參數清單

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Dynamic_Audio_Buffer_opcode 1 個八位元 0x01 - 取得音訊緩衝時間
Audio_Codec_Type_Supported 4 個八位元組 支援的轉碼器類型位元遮罩
Bit 0 - SBC
Bit 1 - AAC
Bit 2 - APTX
Bit 3 - APTX HD
Bit 4 - LDAC
Bit 5-31
Audio_Codec_Buffer_Default_Time_For_Bit_0 2 個八位元組 Audio_Codec_Type_Supported 中指定的位元 0 轉碼器類型的預設緩衝時間。
如果不支援 Bit 0 轉碼器類型,這個值應為 0。
單位:ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_0 2 個八位元組 Audio_Codec_Type_Supported 中指定的位元 0 轉碼器類型的緩衝區時間上限。
如果不支援 Bit 0 轉碼器類型,這個值應為 0。
單位:ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_0 2 個八位元組 Audio_Codec_Type_Supported 中指定的 Bit 0 轉碼器類型的最短緩衝時間。
如果不支援 Bit 0 轉碼器類型,這個值應為 0。
單位:ms
Audio_Codec_Buffer_Default_Time_For_Bit_1 2 個八位元組 Audio_Codec_Type_Supported 中指定的 Bit 1 轉碼器類型預設緩衝時間。
如果不支援 Bit 1 轉碼器類型,這個值應為 0。
單位:ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_1 2 個八位元組 Audio_Codec_Type_Supported 中指定的 Bit 1 轉碼器類型的緩衝區時間上限。
如果不支援 Bit 1 轉碼器類型,這個值應為 0。
單位:ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_1 2 個八位元組 Audio_Codec_Type_Supported 中指定的 Bit 1 轉碼器類型的最短緩衝時間。
如果不支援 Bit 1 轉碼器類型,這個值應為 0。
單位:ms
...... ...... ......
Audio_Codec_Buffer_Default_Time_For_Bit_31 2 個八位元組 Audio_Codec_Type_Supported 中指定的 Bit 31 轉碼器類型預設緩衝時間。
如果不支援 Bit 31 轉碼器類型,這個值應為 0。
單位:ms
Audio_Codec_Buffer_Maximum_Time_For_Bit_31 2 個八位元組 Audio_Codec_Type_Supported 中指定的 Bit 31 轉碼器類型的緩衝時間上限。
如果不支援 Bit 31 轉碼器類型,這個值應為 0。
單位:ms
Audio_Codec_Buffer_Minimum_Time_For_Bit_31 2 個八位元組 Audio_Codec_Type_Supported 中指定的 Bit 31 轉碼器類型的最短緩衝時間。
如果不支援 Bit 31 轉碼器類型,這個值應為 0。
單位:ms

設定音訊緩衝時間

子 OCF:0x02

請使用這個指令,將音訊緩衝時間設為藍牙控制器。

指令參數 大小 目的
Audio_Codec_Buffer_Time 2 個八位元組 目前所用轉碼器要求的音訊緩衝時間。
單位:ms

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Dynamic_Audio_Buffer_opcode 1 個八位元 0x02 - 設定音訊緩衝時間
Audio_Codec_Buffer_Time 2 個八位元組 藍牙控制器目前的音訊緩衝時間。
單位:ms

HCI 事件 (供應商專屬)

在某些情況下,你必須建立供應商專屬的 HCI 事件。請參閱 BT Core 5.2 規格第 1897 頁的圖 5.4。事件參數 0 一律會包含第一個子事件程式碼,視其他 HCI 事件已解碼而定。

事件參數 大小 目的
HCI_vendor_specific_event_code 1 個八位元 0xFF
sub_event_code 1 個八位元 子事件代碼的大小為 1 個八位元組,緊接在 HCI 事件封包中「參數長度」之後的位元組。

儲存空間門檻侵害子事件

此事件表示儲存空間門檻遭到入侵。

子事件代碼 = 0x54

子事件參數 大小 目的
不通知

LE 多廣告狀態變更子事件

這個事件表示廣告執行個體已變更其狀態。目前,這個事件只會用來指出哪些廣告執行個體有連線而停止。

子事件代碼 = 0x55

子事件參數 大小 目的
Advertising_instance 1 個八位元 識別特定廣告執行個體
有效值為 0 到 max_advt_instances-1
State_Change_Reason 1 個八位元 0x00:已接收連線
Connection_handle 2 個八位元組 識別導致 advt 執行個體停用的連線 (如果無效,則為 0xFFFF)

LE 廣告追蹤子事件

此事件會指出找到或遺失廣告主。

子事件代碼 = 0x56

子事件參數 大小 目的
APCF_Filter_Index 1 個八位元 篩選器索引 (0, max_filter-1)
Advertiser_State 1 個八位元 0x00:找到廣告主
0x01:錯失的廣告客戶
Advt_Info_Present 1 個八位元 0x00:顯示廣告主資訊 (Advt_Info)
0x01:沒有廣告主資訊 (Advt_Info)
Advertiser_Address 6 個八位元組 公開或隨機位址
Advertiser_Address_Type 1 個八位元 0x00:公開位址
0x01:隨機位址
Advt_Info Tx_Pwr[0]:1 個八位元組
RSSI[0]: 1 八位元
Timestamp[0]: 2 八位元
Adv packet_len[0]: 1 八位元
Adv_packet[0]: Adv_packet_len 八位元組
Scan_data_resp_len[0]: 1 八位元
Scan_data_resp[0]Scan_data_resp 八位元

控制器偵錯資訊子事件

控制器會使用這個事件向主機提供二進位檔偵錯資訊。

子事件代碼 = 0x57

子事件參數 大小 目的
debug_block_byte_offset_start 2 個八位元組 從開始偵錯區塊位元組偏移
last_block 1 個八位元 0x00:出現更多偵錯資料
0x01:最後一個二進位檔區塊;沒有其他偵錯資料
cur_pay_load_sz 2 個八位元組 目前事件中的二進位檔區塊大小
Debug_Data 變數 cur_payload_sz」的偵錯資料

藍牙品質報告子事件

這個事件會指出下列其中一項:發生藍牙品質事件、控制器上傳 LMP/LL 訊息追蹤記錄和藍牙多重連結/Coex 排程追蹤記錄,或是控制器傾印的偵錯資訊資料。

子事件參數 大小 目的
Quality_Report_Id 1 個八位元 0x01:監控模式的品質報告
0x02:即將達到 LSTO。
0x03:A2DP 音訊斷線。
0x04:(e) SCO 語音斷斷續。
0x05 ~ 0x06:已保留。
0x07:低音音訊斷斷續續。
0x08:連線失敗。
0x09 ~ 0xFF:已保留。
Packet_Types 1 個八位元 0x01: ID
0x02: NULL 0x2: EV
0x03: POLL
0x04:FHS
0x05: HV1
0x06:HV2
0x09:HV3
0x08:DV3





















Connection_Handle 2 個八位元組 ACL/(e)SCO/ISO 連線控制代碼。
Connection_Role 1 個八位元 執行連線的角色。
0x00:中央
0x01:週邊裝置
0x02 ~ 0xFF:已保留。
TX_Power_Level 1 個八位元 目前指定 Connection_Handle 的傳輸功率。

這個值應與控制器回應 HCI_Read_Transmit_Power_Level HCI 指令的回應相同。

RSSI 1 個八位元 [在 dBm 內]

已收到指定 Connection_Handle 的訊號強度指示 (RSSI) 值。
這個值應為絕對訊號強度值。
範圍:-127 至 +20

SNR 1 個八位元 [以 dB 計算]

指定 Connection_Handle 的訊號到雜訊比率 (SNR) 值。
控制器應提供該連結使用的所有管道平均值 SNR。

Unused_AFH_Channel_Count 1 個八位元 指出 AFH_channel_map 中未使用的頻道數量。
0x4F ~ 0xFF:已保留。
AFH_Select_Unideal_Channel_Count 1 個八位元 指出受到影響且品質不佳的頻道數量,但仍會在 AFH 中選取。
藍牙規格允許的頻道數量下限為 20 個,因此即使所有 79 個頻道都受到干擾且品質不佳,控制器仍需要至少選擇 20 個 AFH 聲道。
LSTO 2 個八位元組 目前的連結監督逾時設定。
時間 = N * 0.625 毫秒
時間範圍:0.625 毫秒至 40.9 秒
Connection_Piconet_Clock 4 個八位元組 指定 Connection_Handle 的 Piconet 時鐘。
這個值應與控制器針對 HCI_Read_Clock HCI 指令而回應 HCI_Read_Clock HCI 指令而傳回 0x01 參數 (Piconet Clock)。
單位:N * 0.3125 ms (1 個藍牙時鐘)
Retransmission_Count 4 個八位元組 自上次事件以來重新傳輸的次數。
向主機回報後,這項計數應重設。
No_RX_Count 4 個八位元組 自上次事件以來沒有任何 RX 次數。
如果排定的時段未收到封包,或是收到的封包毀損,數量就會增加。
向主機回報後,這項計數應重設。
NAK_Count 4 個八位元組 自上次事件以來的 NAK (負面確認) 數量。
向主機回報後,這項計數應重設。
Last_TX_ACK_Timestamp 4 個八位元組 上次 TX ACK 的時間戳記。這款手錶是以相片中心 (CLK) 的藍牙時鐘為基礎。
單位:N * 0.3125 ms (1 個藍牙時鐘)
Flow_Off_Count 4 個八位元組 控制器自上次事件以來收到資料流關閉 (STOP) 的次數。
向主機回報後,這項計數應重設。
Last_Flow_On_Timestamp 4 個八位元組 上次流程 (GO) 的時間戳記。採用時,相片中心 (CLK) 的藍牙時鐘。
單位:N * 0.3125 ms (1 個藍牙時鐘)
Buffer_Overflow_Bytes 4 個八位元組 [在位元組中]

自上次事件以來的緩衝區溢位計數。
控制器會計算遭到捨棄的資料位元組數。
向主機回報後,這項計數應重設。

Buffer_Underflow_Bytes 4 個八位元組 [在位元組中]

自上次事件以來的緩衝區不足次數。
向主機回報後,這項計數應重設。

bdaddr 6 個八位元組 遠端裝置位址
cal_failed_item_count 1 個八位元 校正失敗的項目數量
TX_Total_Packets 4 個八位元組 已傳送的封包數。
TX_UnAcked_Packets 4 個八位元組 未收到確認的封包數量。
向主機回報後,系統會重設這個計數。
TX_Flushed_Packets 4 個八位元組 未由清除點傳出的封包數量。
向主機回報後,系統會重設這個計數。
TX_Last_Subevent_Packets 4 個八位元組 在 CIS 事件的最後一個子事件中,連結層傳送 CIS 資料 PDU 的封包數。
向主機回報後,系統會重設這個計數。
如果連結沒有有效值,這個值會是 0。
CRC_Error_Packets 4 個八位元組 自上次事件以來接收到的 CRC 錯誤套件數量。
向主機回報後,系統會重設這個計數。
RX_Duplicate_Packets 4 個八位元組 自上次事件以來收到的重複 (重新傳輸) 包裹數量。
向主機回報後,系統會重設這個計數。
RX_Unreceived_Packets 4 個八位元組 未接收的封包數與 LE READ ISO 連結品質指令的參數相同 (請參閱藍牙核心規格 5.4 版)。相關聯的串流為 CIS 和 BIS。
當這個值遞增時,連結層不會收到特定酬載 (在 CIS 上) 或在相關事件結束時 (在 BIS 上) 收到特定酬載 (在 BIS 上;請參閱藍牙核心規格 5.4 第 6 部分 B,第 4.4.6.6 節)。
Coex_Info_Mask 2 個八位元組 Bit 0 - 共存活動:設定以表示產生這份報表時,可能涉及共事活動,例如 A2DP 重點和即將達到 LSTO。
Bit 1 - WL 2G 無線電活動功能:設為表示 WLAN 2G Radio 已啟用。
Bit 2 - 已連線至 WL 2G:請設為表示 WLAN 2G Radio 已啟用且已連線。
Bit 3 - WL 5G/6G 無線電活動功能:設為表示 WLAN 5G/6G 無線電已啟用。
Bit 4-15 - 已保留
供應商專屬參數 (參數總長度 - 待定) * 八位元 讓控管者供應商取得更多供應商專屬參數。

子事件代碼 = 0x58 [Quality_Report_Id = 0x05, Root Inflammation event]

這個事件表示藍牙 HAL 或控制器發生嚴重錯誤,因此需要藍牙堆疊來記錄這種情況並重新啟動。在任何情況下,控制器必須先傳送 Root_Inflammation_Event 至藍牙堆疊, 才能傳送偵錯資訊事件的第一個片段。

Error_Code 參數包含 HAL/Controller 回報的錯誤代碼;如果這是晶片組供應商特有的錯誤,則為 0。Vendor_Specific_Error_Code 包含 HAL/Controller 提供的晶片組供應商特定錯誤代碼。如果 Error_Code 參數不是 0,這個欄位應設為 0。Error_Code 和 Vendor_Specific_Error_Code 參數不得同時為 0。

子事件參數 大小 目的
Quality_Report_Id 1 個八位元 0x00 ~ 0x04:已保留。
0x05:根發炎。
0x06 ~ 0xFF:已保留。
Error_Code 1 個八位元 0x00:包含晶片組供應商的專屬錯誤代碼。
0x01 ~ 0xFF:發生控制器故障。請參閱藍牙規格 [Vol 2] 第 D 部分、錯誤代碼,瞭解錯誤代碼和說明。
Vendor_Specific_Error_Code 1 個八位元 0x00:未加入任何晶片組廠商專屬錯誤代碼。
0x01 ~ 0xFF:晶片組供應商特定錯誤代碼。
供應商專屬參數 (參數總長度 - 4) * 八位元 讓控管者供應商取得更多供應商專屬參數。
子事件參數 大小 目的
Quality_Report_Id 1 個八位元 0x00 ~ 0x10:已保留。
0x11:LMP/LL 訊息追蹤。
0x12:藍牙多連結/Coex 排程追蹤記錄。
0x13:控制器偵錯資訊資料轉儲。
0x14 ~ 0xFF:已保留。
Connection_Handle 2 個八位元組 連線處理常式,
供應商專屬參數 (參數總長度 - 4) * 八位元 LMP 訊息追蹤格式、藍牙多連結/Coex 排程追蹤記錄和控制器偵錯資訊資料傾印的供應商專屬格式。

多廣告客戶支援

多重廣告客戶支援的目標如下:

  • 支援多個廣告 (max_advt_instances)
  • 不同傳送功率,因此可提供不同範圍的
  • 不同的廣告內容
  • 每位廣告客戶的專屬回應
  • 各廣告主的隱私權 (不可追蹤)
  • 可連線

為了讓這個規格與現有標準趨近一致,我們提供了供應商特定指令。這些項目取自 Bluetooth Core 4.1 規格。

LE_Multi_Advt 指令

OCF:0x154

指令參數 大小 目的
Multi_advt_opcode 1 個八位元 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

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Multi_advt_opcode 1 個八位元 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

基本參考資料:Bluetooth Core 4.1 規格,第 964 頁 (LE Set Advertising Parameter Command)

子 OCF:0x01

子指令參數 大小 目的
Advertising_Interval_Min 依規格設定 依規格設定
Advertising_Interval_Max 依規格設定 依規格設定
Advertising_Type 依規格設定 依規格設定
Own_Address_Type 依規格設定 依規格設定
Own_Address 依規格設定 依規格設定
Direct_Address_Type 依規格設定 依規格設定
Direct_Address 依規格設定 依規格設定
Advertising_Channel_Map 依規格設定 依規格設定
Adverstising_Filter_Policy 依規格設定 依規格設定
Advertising_Instance 1 個八位元 指定上述參數的適用性
Tx_power 1 個八位元 Transmit_Power
單位 - 以 dBm (帶正負號的整數)
範圍 (-70 到 +20)

Own_Address 參數可以是設定這個多廣告執行個體時由主機設定的位址。這樣在第一個信標傳送時,就可以取得可解析的私人位址。無論連線狀態為何,在執行個體上的廣告都會持續。主機 BT 堆疊可發出指令,在執行個體發布後啟動通告。

系統會根據上述指令,根據藍牙核心 4.1 規格中指定的指令,為這個指令產生「指令完成」事件。如果廣告執行個體或 Tx_Power 參數無效,控制器會以非成功 (參數無效) 的程式碼回應。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Multi_advt_opcode 1 個八位元 0x01 [Set_Advt_Param_Multi_Sub_Cmd]]

LE_Multi_Advt_Command:Set_Advt_Data_Multi_Sub_Cmd

基本參考資料:Bluetooth Core 4.1 規格,第 969 頁 (LE Set Advertising Data Command)

子 OCF:0x02

子指令參數 大小 目的
Advertising_Data_Length 依規格設定 依規格設定
Advertising_Data 依規格設定 依規格設定
Advertising_Instance 1 個八位元 指定上述參數的適用性

系統會根據上述指令,根據藍牙核心 4.1 規格中指定的指令,為這個指令產生「指令完成」事件。如果廣告執行個體或 Tx_Power 參數無效,控制器會以非成功的代碼回應。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Multi_advt_opcode 1 個八位元 0x02 [Set_Advt_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command:Set_Scan_Resp_Data_Multi_Sub_Cmd

基本參考資料:藍牙核心 4.1 規格,第 970 頁 (LE Set Scan Response Data Command)

子 OCF:0x03

子指令參數 大小 目的
Scan_Response_Data_Length 依規格設定 依規格設定
Scan_Response_Data 依規格設定 依規格設定
Advertising_Instance 1 個八位元 指定上述參數的適用性

系統會根據上述指令,根據藍牙核心 4.1 規格中指定的指令,為這個指令產生「指令完成」事件。如果廣告執行個體或 Tx_Power 參數無效,控制器會以非成功代碼 (無效參數) 回應。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Multi_advt_opcode 1 個八位元 0x03 [Set_Scan_Resp_Data_Multi_Sub_Cmd]

LE_Multi_Advt_Command:Set_Random_Addr_Multi_Sub_Cmd

基本參考資料:Bluetooth Core 4.1 規格,第 963 頁 (LE Set Random Address Command)

子 OCF:0x04

子指令參數 大小 目的
隨機地址 依規格設定 依規格設定
Advertising_Instance 1 個八位元 指定上述參數的適用性

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Multi_advt_opcode 1 個八位元 0x04 [Set_Random_Addr_Multi_Sub_Cmd]

LE_Multi_Advt_Command:Set_Advt_Enable_Multi_Sub_Cmd

基本參考資料:藍牙核心 4.1 規格,第 971 頁 (LE Set 宣揚該核心規格中的「啟用指令」指令)

OCF:0x05

子指令參數 大小 目的
Advertising_Enable 1 個八位元 如果值為 1,表示啟用。如果設為其他值,則會停用。
Advertising_Instance 1 個八位元 指定上述參數可套用至執行個體。執行個體 0 代表標準 HCI 執行個體。

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Multi_advt_opcode 1 個八位元 0x05 [Set_Advt_Enable_Multi_Sub_Cmd]

私人位址的卸載解析度

這項功能可解析控制器韌體或硬體中的私人位址,優點如下:

  • 主機解析私人位址所涉及的延遲時間
  • 避免喚醒主機,藉此節省電力

LE_Set_RPA_逾時

OCF:0x15C

指令參數 大小 目的
LE_local_IRK 16 個八位元 用來產生隨機解析位址的本機裝置 IRK。
tRPA_min 2 個八位元組 RPA 產生作業的最短逾時秒數。在這個逾時期間或之後,控制器必須為任何廣告/掃描/連線事件產生新的可解析位址。
有效範圍:300-1800
tRPA_max 2 個八位元組 RPA 產生作業的逾時時間上限 (以秒為單位)。針對此逾時期間或之前的任何廣告/掃描/連線事件,控制器必須產生新的可解析位址。
有效範圍:tRPA_min-1800
傳回參數 大小 目的
Status 1 個八位元 指令的狀態。

建議的 HCI 狀態值:
0x00 成功
0x01 不明指令 (如果不支援)
0x12 無效的指令參數 (如有任何參數超出指定範圍)

LE_RPA_offload_Command

OCF:0x155

指令參數 大小 目的
RPA_offload_opcode 1 個八位元 0x1 - 啟用客戶專屬功能
0x2 - 在清單中加入 IRK
0x3 - 從清單中移除 IRK
0x4 - 清除 IRK 清單
0x5 - 閱讀 IRK 清單項目

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Event_RPA_offload_opcode 1 個八位元 0x1 - 啟用客戶專屬功能
0x2 - 在清單中加入 IRK
0x3 - 從清單中移除 IRK
0x4 - 清除 IRK 清單
0x5 - 閱讀 IRK 清單項目

LE_RPA_offload:Enable_cust_specific_sub_Command

子 OCF:0x01

子指令參數 大小 目的
enable_customer_specific_feature_set 1 個八位元 0x01 - 啟用已卸載的 RPA 功能
0x00 - 停用卸載的 RPA 功能

主機必須依據晶片功能啟用 RPA 卸載。請參閱 LE_Get_Vendor_Capabilities_Command。每個晶片在韌體中可能有不同的 max_irk_list_sz

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Event_cust_specific_feature_opcode 1 個八位元 0x01 [啟用客戶專屬功能]

LE_RPA_offload:Add_IRK_to_list_sub_Command

子 OCF:0x02

子指令參數 大小 目的
LE_IRK 16 個八位元組 LE IRK (第 1 位元組 LSB)
Address_Type 1 個八位元 0:公開位址
1:隨機位址
LE_Device_Address 6 個八位元組 與 IRK 相關聯的公開或隨機位址 (第 1 位元組 LSB)

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Event_cust_specific_feature_opcode 1 個八位元 0x02 [將 IRK 加入清單]
LE_IrkList_AvailableSpaces 1 個八位元 當前作業完成後,可用的 IRL 清單項目

LE_RPA_offload:Remove_IRK_to_list_sub_Command

子 OCF:0x03

子指令參數 大小 目的
Address_Type 1 個八位元 0:公開位址
1:隨機位址
LE_Device_Address 6 個八位元組 與 IRK 相關聯的公開或隨機位址

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Event_cust_specific_feature_opcode 1 個八位元 0x03 [將 IRK 從清單中移除]
LE_IrkList_AvailableSpaces 1 個八位元 當前作業完成後,可用的 IRL 清單項目

LE_RPA_offload:Clear_IRK_list_sub_Command

子 OCF:0x04

子指令參數 大小 目的
不通知

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Event_cust_specific_feature_opcode 1 個八位元 0x04 [清除 IRK 清單]
LE_IrkList_AvailableSpaces 1 個八位元 目前作業完成後的可用 IRL 清單項目 [max_irk_list_sz]

LE_RPA_offload:Read_IRK_list_sub_Command

子 OCF:0x05

子指令參數 大小 目的
LE_read_IRK_list_entry-index 1 個八位元 IRK 清單的索引 [0, max_irk_list_sz-1]

系統會為這個指令產生指令完成事件。

傳回參數 大小 目的
Status 1 個八位元 指令完成狀態
Event_cust_specific_feature_opcode 1 個八位元 0x05 [閱讀 IRK 清單項目]
LE_Read_IRK_List_entry 1 個八位元 主機要讀取的 IRK 索引 (IRK 清單大小上限為 32)
LE_IRK 16 個八位元組 IRK 值
Address_Type 1 個八位元 0:公開位址
1:隨機位址
LE_Device_Address 6 個八位元組 與 IRK 相關聯的公開或隨機位址
LE_Resolved_Private_Address 6 個八位元組 這個 IRK 目前解析的可解析私人位址