共用方式為


Microsoft 定義的藍牙 HCI 延伸模組

藍牙 Host-Controller 介面 (HCI) 會指定主機與藍牙無線電控制器之間的所有互動。 藍牙規格可讓廠商定義的 HCI 命令和事件在主機和控制器之間啟用非標準互動。 Microsoft 會定義 Windows 所取用的廠商特定 HCI 命令和事件。 藍牙控制器實作器可以使用這些擴充功能來實作特殊功能。

規格需求

藍牙 HCI 命令是由 16 位命令程式代碼所識別。 藍牙組織會定義範圍中的值,0x0000到0xFBFF。 廠商定義範圍0xFC00到0xFFFF的值,允許1024個不同的廠商指派命令碼。

廠商必須選擇 Microsoft 定義的命令程式代碼值。 Microsoft 無法選擇命令程式代碼,並假設沒有其他廠商將程式代碼用於衝突的目的。 發出廠商特定的命令並不安全,如果控制器不瞭解命令,則視控制器拒絕命令而定。 控制器可以將命令解譯為破壞性作業,例如更新控制器的韌體。

廠商必須透過控制器以外的方法來傳達所選的值。 Microsoft 不會指定如何取得選擇的程序代碼。

通知廠商特定命令程式代碼的 Windows 藍牙堆疊

Windows 藍牙堆疊會從登入機碼讀取廠商特定的命令程式代碼。 VsMsftOpCode

登錄 VsMsftOpCode 機碼的類型為 REG_DWORD,而機碼數據是廠商特定的作業碼。

若要指定廠商特定的 opcode,請使用 AddReg 驅動程式 INF 中 DDInstall.HW 區段下的 指示詞。 新增登錄區段應該包含:

HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>

範例:

[radio.NTamd64.HW]
AddReg=radio.NTamd64.HW.AddReg
[radio.NTamd64.HW.AddReg]
HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>

Microsoft 定義的 HCI 命令

HCI 命令 Description
HCI_VS_MSFT_Read_Supported_Features 提供位圖,描述控制器所支援的 Microsoft 定義功能,並指定控制器所傳回之 Microsoft 定義事件的前置詞。
HCI_VS_MSFT_Monitor_Rssi 要求控制器開始監視指定連線的測量連結 RSSI,並在連線的測量連結 RSSI 超出指定界限時產生事件。
HCI_VS_MSFT_Cancel_Monitor_Rssi 取消先前發出的 HCI_VS_MSFT_Monitor_Rssi 命令。
HCI_VS_MSFT_LE_Monitor_Advertisement 要求控制器開始監視落在指定 RSSI 範圍內的公告,同時滿足其他需求。
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement 取消先前發出的 HCI_VS_MSFT_LE_Monitor_Advertisement 命令。
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 設定廣告篩選的狀態。
HCI_VS_MSFT_Read_Absolute_RSSI 從控制器讀取 BR/EDR 連接的絕對接收訊號強度指示 (RSSI) 值。

Microsoft 定義的 HCI 命令和子命令

控制器瞭解只有一個 Microsoft 特定的 HCI 命令。 Microsoft 特定的命令集是使用 opcode 來擴充。 Microsoft 定義 HCI 命令的第一個命令參數是指定子命令的 opcode。

控制器必須支援 HCI_VS_MSFT_Read_Supported_Features ,才能支援任何其他 Microsoft HCI 子命令。 其他命令的支持是選擇性的,取決於HCI_VS_MSFT_Read_Supported_Features所傳回的值。 Windows 不會傳送任何 Microsoft 定義的子命令,除非控制器指出透過回應HCI_VS_MSFT_Read_Supported_Features支援子命令。

HCI_VS_MSFT_Read_Supported_Features

HCI_VS_MSFT_Read_Supported_Features提供位陣圖,描述控制器所支援的 Microsoft 定義功能,並指定控制器所傳回之 Microsoft 定義事件的前置詞。

控制器應該一律使用 Command Completed 事件立即完成此命令。

命令 程式碼 命令參數 傳回參數
HCI_VS_MSFT_Read_Supported_Features 選擇的基底程序代碼 Subcommand_opcode 地位
Subcommand_opcode,
Supported_features,
Microsoft_event_prefix_length,
Microsoft_event_prefix

Command_parameters

Subcommand_opcode (1 個八位) :

參數描述
0x00 HCI_VS_MSFT_Read_Supported_Features的子命令 opcode。

Return_parameters

狀態 (1 八位) :

參數描述
0x00 命令成功。
0x01至 0xFF 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼

Subcommand_opcode (1 個八位) :

參數描述
0x00 HCI_VS_MSFT_Read_Supported_Features的子命令 opcode。

Supported_features (8 個八位) :

參數描述
0x00000000 00000001 控制器支援 BR/EDR 連線的 RSSI 監視功能。 此外,控制器支援 HCI_VS_MSFT_Read_Absolute_RSSI 讀取 BR/EDR 連線的絕對 RSSI 計量。
0x00000000 00000002 控制器支援 LE 連線的 RSSI 監視功能。
0x00000000 00000004 控制器支援LE舊版廣告的RSSI監視。
0x00000000 00000008 控制器支援LE舊版廣告的廣告監視。
0x00000000 00000010 控制器支援在 P-192 和 P-256 的安全簡單配對程式期間,驗證曲線上公用 X 和 Y 座標的有效性。
如需詳細資訊,請參閱 藍牙核心規格 Erratum 10734
0x00000000 00000020 Controller 支援使用 HCI_VS_MSFT_LE_Monitor_Advertisement [v1] 同時執行之 LE 廣告的持續廣告監視與其他無線電活動。
0x00000000 00000040 保留的。
0x00000000 00000080 保留的。
0x00000000 00000100 保留的。
0x00000000 00000200 保留的。
0x00000000 00000400 控制器支援 [v2] HCI_VS_MSFT_LE_Monitor_Advertisement。 此外,控制器也支援使用 HCI_VS_MSFT_LE_Monitor_Advertisement [v2] 同時執行之 LE 廣告的持續廣告監視。
0xFFFFFFFF FFFFF800 保留給未來定義的位。 必須為零。

Microsoft_event_prefix_length (1 個八位) :

參數描述
0x00至 0x20 Microsoft 事件前置詞欄位中的位元組數目,如傳回 Microsoft_event_prefix中所指定。 這是每個 Microsoft 指定 HCI 事件開頭的常數資訊位元元組數目。

Microsoft_event_prefix (可變長度) :

參數描述
事件前置詞值 每個 Microsoft 定義事件開頭所預期的常數資訊。 這項資訊是用來區分 Microsoft 定義的事件與其他自定義事件。

HCI_VS_MSFT_Monitor_Rssi

HCI_VS_MSFT_Monitor_Rssi要求控制器開始監視指定連線的測量連結 RSSI,並在連線的測量連結 RSSI 超出指定界限時產生事件。

命令 程式碼 命令參數 傳回參數
HCI_VS_MSFT_Monitor_Rssi 選擇的基底程序代碼 Subcommand_opcode,
Connection_Handle,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period
地位
Subcommand_opcode

控制器應根據 RSSI_sampling_period) ,以定期產生的事件通知 RSSI 值的主機 (。 針對 BR/EDR 連線,測量的連結 RSSI 應該是 dBm 中的 絕對 接收者訊號強度值。

為了回應HCI_VS_MSFT_Monitor_Rssi命令,如果控制器可以開始監視或非零狀態,控制器應該會產生狀態等於零的命令完成事件。 如果狀態值為非零值,則控制器不得產生 HCI_VS_MSFT_Rssi_Event 以回應此命令。

如果具有相同Connection_Handle的另一個 HCI_VS_MSFT_Monitor_Rssi 命令未處理,或指定的連接句柄無效,控制器應該拒絕命令。 控制器也可能因為其他原因而拒絕命令,例如資源耗盡。

此狀態圖表顯示監視連線的RSSI時,控制器上的轉換狀態。

狀態圖顯示監視連線的RSSI時,控制器上的轉換狀態。

當收到的 RSSI 大於或等於指定的RSSI_threshold_high時,控制器應該會產生HCI_VS_MSFT_Rssi_Event。 產生此事件之後,控制器不得產生新的HCI_VS_MSFT_Rssi_Event,以指定超過RSSI_threshold_high,直到產生指定RSSI低於RSSI_threshold_low的HCI_VS_MSFT_Rssi_Event為止。

當收到的 RSSI 等於或低於指定的RSSI_threshold_low超過指定的RSSI_threshold_low_time_interval時,控制器應該會產生HCI_VS_MSFT_Rssi_Event。 產生此事件之後,控制器不得產生新的 HCI_VS_MSFT_Rssi_Event ,以指定RSSI低於 RSSI_threshold_low ,直到產生 HCI_VS_MSFT_Rssi_Event 事件,以指定已達到或超過 RSSI_threshold_high

如果RSSI_sampling_period介於 0x01 和 0xFE 之間,控制器應該定期產生每個RSSI_sampling_period HCI_VS_MSFT_Rssi_Event。 此事件應包含 透過RSSI_sampling_period計算的 RSSI 平均值。 如果 RSSI_sampling_period 0x00或0xFF,控制器 不得 定期通知主機 HCI_VS_MSFT_Rssi_Event

Command_parameters

Subcommand_opcode (1 個八位) :

參數描述
0x01 HCI_VS_MSFT_Monitor_Rssi的子命令 opcode。

Connection_Handle (2 個八位) :

參數描述
0xXXXX 必須監視其 RSSI 之連線的句柄。

RSSI_threshold_high (1 個八位) :

參數描述
0xXX 預期的 RSSI 值上限。 如果觀察到的 RSSI 大於或等於此值,控制器就會產生事件。
單位:dBm
BR/EDR 範圍:-128 到 127 (帶正負號的整數)
LE 範圍:-127 到 20 (帶正負號的整數)

RSSI_threshold_low (1 個八位) :

參數描述
0xXX 預期的 RSSI 值下限。 如果觀察到的 RSSI 小於或等於此值,控制器就會產生事件。
單位:dBm
BR/EDR 強制範圍:-128 到 127 (帶正負號的整數)
LE 強制範圍:-127 到 20 (帶正負號的整數)

RSSI_threshold_low_time_interval (1 個八位) :

參數描述
0x00 保留的值。
N = 0xXX 在產生HCI_VS_MSFT_Rssi_Event之前,RSSI 值應該低於RSSI_threshold_low的秒數。
時間週期 = N * 1 秒
強制範圍:0x01 0x3C

RSSI_sampling_period (1 個八位) :

參數描述
0x00 保留的值。
N = 0xXX 取樣間隔以毫秒為單位。
時間週期 = N * 100 毫秒
強制範圍:0x01至0xFE
0xFF 保留的值。

Return_parameters

狀態 (1 八位) :

參數描述
0x00 命令成功。
0x01至 0xFF 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼
0x07 如果控制器沒有足夠的記憶體來處理命令,控制器應該會傳回 超過記憶體容量
錯誤碼 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼

Subcommand_opcode (1 個八位) :

參數描述
0x01 HCI_VS_MSFT_Monitor_Rssi的子命令 opcode。

除非遮罩離開,否則產生的事件

當收到 HCI_VS_MSFT_Monitor_Rssi 命令時,控制器應該會立即產生命令完成事件。 如果 Command Complete 事件傳回狀態為 0,當發生下列其中一個狀況時,控制器應該會產生 HCI_VS_MSFT_Rssi_Event

  • 裝置透過 RSSI_threshold_low_time_interval 觀察到的RSSI會等於或小於指定的 RSSI_threshold_low 值。
  • 裝置觀察到的 RSSI 會大於或等於指定的 RSSI_threshold_high 值。
  • RSSI_sampling_period有效且取樣期間到期。

如果與指定裝置的連線中斷,控制器應該執行所有必要的清除。 在此情況下, 不會將HCI_VS_MSFT_Cancel_Monitor_Rssi 命令傳送至控制器。

HCI_VS_MSFT_Cancel_Monitor_Rssi

HCI_VS_MSFT_Cancel_Monitor_Rssi取消先前發出的 HCI_VS_MSFT_Monitor_Rssi 命令。 控制器應該會立即產生 Command Completed 事件,以回應此命令。

命令 程式碼 命令參數 傳回參數
HCI_VS_MSFT_Cancel_Monitor_Rssi 選擇的基底程序代碼 Subcommand_opcode,
Connection_Handle
地位
Subcommand_opcode

Command_parameters

Subcommand_opcode (1 個八位) :

參數描述
0x02 HCI_VS_MSFT_Cancel_Monitor_Rssi的子命令 opcode。

Connection_Handle (2 個八位) :

參數描述
0xXXXX 必須取消其 RSSI 之連線的句柄。

Return_parameters

狀態 (1 八位) :

參數描述
0x00 命令成功。
0x01至 0xFF 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼

Subcommand_opcode (1 個八位) :

參數描述
0x02 HCI_VS_MSFT_Cancel_Monitor_Rssi的子命令 opcode。

除非遮罩離開,否則產生的事件

當收到 HCI_VS_MSFT_Cancel_Monitor_RSSI 命令時,控制器應該會產生 Command Complete 事件。

HCI_VS_MSFT_LE_Monitor_Advertisement

HCI_VS_MSFT_LE_Monitor_Advertisement要求控制器開始監視落在指定 RSSI 範圍內的公告,同時滿足下列其中一個條件:

  • 指定的模式可以比對收到的公告封包。
  • 指定的 UUID 可以比對收到的公告封包。
  • 指定的識別解析金鑰 (IRK) 可用來解析廣告封包來源裝置的私人位址。
  • 指定的藍牙位址可以比對收到的公告封包。

v2 命令允許主機結合上述一些條件,以及控管廣告來源和導向廣告目標的選項,進一步精簡哪些廣告受到監視。 v2 命令也允許主機篩選哪些受監視的公告導致控制器產生廣告報告。

命令 程式碼 命令參數 傳回參數
HCI_VS_MSFT_LE_Monitor_Advertisement [v2] 選擇的基底程序代碼 Subcommand_opcode_v2,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Monitor_options,
Advertisement_report_filtering_options,
Peer_device_address,
Peer_device_address_type,
Peer_device_IRK,
Condition_type,
<條件參數>
地位
Subcommand_opcode,
Monitor_Handle
HCI_VS_MSFT_LE_Monitor_Advertisement [v1] 選擇的基底代碼 Subcommand_opcode_v1、
RSSI_threshold_high、
RSSI_threshold_low,
RSSI_threshold_low_time_interval、
RSSI_sampling_period、
Condition_type、
<條件參數>
地位
Subcommand_opcode、
Monitor_Handle

控制器應該產生 Command Complete 事件,以回應此命令。 如果控制器可以開始監視或非零狀態,則狀態值應該設定為零。 如果控制器不支援 LE 廣告的 RSSI 監視,它應該忽略 RSSI_threshold_highRSSI_threshold_lowRSSI_threshold_low_time_intervalRSSI_sampling_period 參數值。

此狀態圖顯示監視廣告 RSSI 時的控制器轉換狀態。

顯示HCI_VS_MSFT_LE_Monitor_Advertisement轉換狀態的狀態圖。

只有當接收的 RSSI 大於或等於特定裝置 的RSSI_threshold_high ,且 Monitor_options 相符專案 (請參閱下列) 時,控制器才開始監視公告。 控制器應該產生HCI_VS_MSFT_LE_Monitor_Device_Event,並將Monitor_state設定為 1,並將Monitor_handle設定為此條件的句柄,以通知主機控制器正在監視此特定裝置的 Condition 此外,只有在 Advertisement_report_filter_options 相符專案時,控制器才會將受監視廣告的第一個廣告報告傳播至主機, (請參閱下列) 。

篩選 條件的Monitor_options 會根據虛擬程式碼) 中的下列邏輯 (視為相符專案:

MatchesCondition = (PDU Matches Condition Parameters)

IsAdvAMatch = ((Monitor_options bit 0 is set) && ((AdvA == Peer_device_address) && (TxAdd == Peer_device_address_type))) ||
    ((Monitor_options bit 1 is set) && (AdvA resolvable with Peer_device_IRK))

IsDirectedAdvAMatch = (TargetA is permitted based on the Scanning Filter Policy) &&
    (((Monitor_options bit 2 is set) && ((AdvA == Peer_device_address) && (TxAdd == Peer_device_address_type))) ||
        ((Monitor_options bit 3 is set) && (AdvA resolvable with Peer_device_IRK)))

IsDirectedTargetAMatch = (Monitor_options bit 4 is set) &&
    (TargetA is permitted based on the Scanning Filter Policy)

MonitorOptionsMatch = (MatchesCondition && IsAdvAMatch) ||
    IsDirectedAdvAMatch ||
    IsDirectedTargetAMatch ||
    ((Monitor_options bit 5 is set) && MatchesCondition)

針對受監視的廣告, Advertisement_report_filter_options 會根據虛擬程式代碼) 中的下列邏輯 (視為相符專案:

IsDuplicateFilterSatisfied = (Advertisement_report_filter_options bit 0 is NOT set || PDU is not a duplicate)

ShouldGenerateLegacyReport = (Advertisement_report_filter_options bit 1 is set) &&
    (PDU is Legacy) &&
    MonitorOptionsMatch

ShouldGenerateExtendedReport = (Advertisement_report_filter_options bit 2 is set) &&
    (PDU is Extended) &&
    MonitorOptionsMatch

ShouldGenerateDirectedReport = (Advertisement_report_filter_options bit 3 is set) &&
    (PDU is Directed) &&
    MonitorOptionsMatch

AdvertisementReportFilterOptionsMatch = IsDuplicateFilterSatisfied &&
    (ShouldGenerateLegacyReport || ShouldGenerateExtendedReport || ShouldGenerateDirectedReport)

如果接收廣告的 RSSI 等於或低於特定裝置的RSSI_threshold_low_intervalRSSI_threshold_low,控制器應該停止監視 Condition。 控制器應該產生HCI_VS_MSFT_LE_Monitor_Device_Event,並將Monitor_state設定為 0,以通知主機控制器已停止監視條件的特定裝置。 控制器指定Monitor_state設定為 0 的HCI_VS_MSFT_LE_Monitor_Device_Event之後,控制器不得允許進一步公告封包流向裝置的主機,直到控制器通知主機特定裝置的 RSSI 已針對條件的特定裝置RSSI_threshold_high。

此外,如果指定的RSSI_threshold_low_time_interval過期,控制器應該會產生Monitor_state設定為 0 的HCI_VS_MSFT_LE_Monitor_Device_Event,以通知主機如果指定的RSSI_threshold_low_time_interval過期而未收到裝置的任何廣告封包,則控制器已停止監視裝置。 如果控制器正在監視特定條件的裝置,下列語句為 true。

如果控制器支援 LE 擴充廣告的 RSSI 監視而不取樣,如果封包的 RSSI 值大於或等於 RSSI_threshold_high,控制器應該將匿名公告封包傳播至主機。 匿名廣告不得追蹤,且不會產生 HCI_VS_MSFT_LE_Monitor_Device_Event 事件。

如果控制器支援 LE 廣告的 RSSI 監視而不取樣,則控制器應該會在收到的廣告片段 () 相符的情況下產生截斷的廣告報告,但未成功收到整個廣告。

控制器至少支援 30 個同時Monitor_handles、至少 30 個同時追蹤的裝置,以及至少 20 個同時追蹤的重複廣告。 控制器也應該能夠在 10% 的工作週期執行連續 LE 掃描。

如果在控制器中啟用位址解析,且主機想要監視遠端裝置,且其 IRK 已成功儲存在控制器的解析清單中,則主機應該從遠端裝置的解析清單專案提供Peer_Identity_Address和Peer_Identity_Address_Type參數,作為Peer_device_address和Peer_device_address_type參數。 分別。

RSSI_sampling_period 舊版廣告 擴充廣告 (非匿名) 匿名) 擴充廣告 (
0x00 除非控制器先前收到 [啟用] 設定為 0x00 的 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令,否則控制器應該會將所有已接收的公告封包傳播至裝置的主機。 即使接收的 RSSI 小於或等於RSSI_threshold_low,控制器還是會將公告封包傳播至主機,前提是此條件的特定裝置RSSI_threshold_low_time_interval尚未過期。 此公告封包的 RSSI 值應該是所接收公告的 RSSI 值。 如果控制器支援 LE 擴充廣告的 RSSI 監視而不取樣,則與 舊版廣告 數據行的行為相同,但廣告封包定義為廣告鏈結中的所有 PDU。 如果控制器支援 LE 擴充廣告的 RSSI 監視而不取樣,則除非控制器先前收到設定為 [啟用] 設定為 0x00 的HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable命令,否則控制器應該會將所有收到的公告封包傳播至裝置的主機。
要0xFE 0x01 除非控制器先前收到 [啟用] 設定為 0x00 的 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令,否則控制器應該將舊版公告封包傳播至每個指定的 RSSI_sampling_period主機。 針對廣告指定的 RSSI 值應該是在此取樣間隔期間收到的 RSSI 值平均值。 如果控制器在取樣期間未收到公告封包,則不應將公告傳播至主機。 RSSI_sampling_period可能小於RSSI_threshold_low_time_interval,而且在RSSI_sampling_period期間收到的所有廣告,RSSI 低於 RSSI_threshold_low。 控制器仍應傳播廣告,且此取樣間隔期間所收到的 RSSI 值平均值。 如果控制器支援 LE 擴充廣告的 RSSI 監視而不取樣,控制器的行為應該如同 RSSI_sampling_period 0x00一樣。 如果控制器支援 LE 擴充廣告的 RSSI 監視而不取樣,控制器的行為應該如同 RSSI_sampling_period 0x00一樣。
0xFF 控制器不得允許進一步公告封包流向條件裝置的主機,直到控制器通知主機特定裝置的 RSSI 低於RSSI_threshold_low,此條件的特定裝置RSSI_threshold_low_time_interval。 此通知是藉由產生 Monitor_state 設為 0 的HCI_VS_MSFT_LE_Monitor_Device_Event 來完成。 如果控制器支援 LE 擴充廣告的 RSSI 監視而不取樣,則與 舊版廣告 數據行的行為相同。 如果控制器支援 LE 擴充廣告的 RSSI 監視而不取樣,控制器的行為應該如同 RSSI_sampling_period 0x00一樣。

如果控制器先前收到 [啟用] 設為 0x00 的 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令,則取樣期間定時器不得停止。 如需詳細資訊,請參閱範例:使用取樣週期HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable篩選。 如果控制器收到來自相同裝置的非重複數據刪除公告封包,它應該符合控制器上儲存的條件的每個廣告封包。

如果控制器從符合多個條件的裝置收到公告封包,則控制器應該為每個符合的條件產生HCI_VS_MSFT_LE_Monitor_Device_Event並將Monitor_handle設定為符合的條件

如果控制器無法監視符合 條件範圍內所有裝置的 RSSI 值,它會持續監視盡可能多的裝置。 應監視哪些裝置的決策取決於所接收廣告的 RSSI 值。 控制器應監視具有更高接收訊號強度的裝置。

如果控制器已通知主機特定裝置 (A) ,且其監視裝置的硬體容量上限,而且如果另一個裝置 (B) 進入具有較高 RSSI 值的範圍,則控制器應該通知主機已停止監視裝置 (A) ,方法是產生Monitor_state設為 0 HCI_VS_MSFT_LE_Monitor_Device_Event。 控制器也應該產生 HCI_VS_MSFT_LE_Monitor_Device_Event,並將 Monitor_state 設定為 1,以通知主機裝置 (B) 現在受到監視。

條件類型和條件參數

Condition_type參數會指定 Condition 參數是否指定模式、UUID、IRK 或BD_ADDR。

如果 Condition_type 參數指定模式, Condition 會包含兩個區段,其中包含 Condition 中存在的模式數目,以及模式數據。

說明HCI_VS_MSFT_LE_Monitor_Advertisement之模式條件數據配置的圖表。

模式數目 會指定需要比對的模式數目。

模式數據 的格式如下。

  • Length 指定此模式的長度包括數據類型和模式的起始位元組。
  • AD 類型 會指定 [AD 類型] 欄位。
  • Pattern 的開頭 會指定緊接在AD類型之後之模式的起始位元組位置。
  • 模式 的大小為 (Length - 0x2) ,而且是要比對來自指定起始位元組之公告封包內指定 AD 類型的模式。

如果有多個指定的模式,控制器應該確保至少有一個模式符合收到的公告。

如果控制器支援 LE 擴充廣告的 RSSI 監視,而不需取樣:

  • 控制器應該在主機廣告數據的前 251 個八位中尋找模式,而且可能會查看主機廣告數據的任何剩餘八位。 如果 AD 區段延伸超過主機廣告數據的前 251 個八位,控制器應該尋找位於主機廣告數據前 251 個八位的 AD 區段部分內的模式,而且可能會查看主機 Advertising 數據的任何剩餘八位。 注意:根據廣告商的片段,主機廣告數據的前 251 個八位可能會延伸至多個廣告 PDU 的 AdvData。 掃描器應該小心限制其所遵循的 AuxPtrs 數目,以避免追蹤過長的 PDU 鏈結。

  • 控制器應該根據每個廣告集的每個裝置位址來追蹤。 控制器應該針對符合模式的每個廣告集傳播 HCI_VS_MSFT_LE_Monitor_Device_Event ,即使廣告來自相同的裝置位址也一樣。

如果Condition_type參數指定 UUID,Condition 參數會包含 UUID 類型和 UUID。 UUID 類型會指定 UUID 是 16 位、32 位或 128 位。 控制器應剖析公告封包的服務 UUID,以檢查指定的 UUID。 如果 UUID 類型定義為0x01,控制器應該剖析 16 位服務 UUID 的不完整清單,並完成服務 UUID 中指定之 16 位服務 UUID 的清單。 如果 UUID 類型定義為0x02,控制器應該剖析 32 位服務 UUID 的不完整清單,並完成服務 UUID 類型中指定的 32 位 UUID 清單。 如果指定的 UUID 類型0x03,控制器應該剖析 128 位服務 UUID 的不完整清單,並完成服務 UUID 中指定的 128 位服務 UUID 清單。

如果控制器支援 LE 擴充廣告的 RSSI 監視,而不需取樣:

  • 控制器應該在主機廣告數據的前 251 個八位中尋找服務 UUID,而且可能會查看主機廣告數據的任何剩餘八位。 如果 AD 區段超出主機廣告數據的前 251 個八位,則控制器應該在主機廣告數據前 251 個八位的 AD 區段中尋找服務 UUID,而且可能會查看主機 Advertising 數據的任何剩餘八位。 注意:根據廣告商的片段,主機廣告數據的前 251 個八位可能會跨越多個廣告 PDU 的 AdvData。 掃描器應該小心限制其所遵循的 AuxPtrs 數目,以避免追蹤過長的 PDU 鏈結。

  • 控制器應該根據每個廣告集的每個裝置位址來追蹤。 控制器應該針對符合服務 UUID 的每個廣告集傳播 HCI_VS_MSFT_LE_Monitor_Device_Event ,即使廣告來自相同的裝置也一樣。

如果Condition_type參數指定 IRK,Condition 參數會包含 IRK。

如果 Condition_type 參數指定藍牙位址, Condition 參數會包含位址類型和BD_ADDR。

即使啟用掃描 (主動或被動) ,控制器仍應根據條件持續監視。 啟用作用中掃描時,符合篩選條件之廣告的掃描回應應傳播至主機。

如果控制器在篩選已停用 (時收到HCI_VS_MSFT_LE_Monitor_Advertisement命令,因為先前收到的 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令 已設定為 [0x00) ],則控制器在可以時接受命令,但將它設定為停用狀態。 控制器也可能因為資源耗盡等其他原因而拒絕命令。

如果清除所有Monitor_options位,控制器應該會傳回錯誤碼 無效的 HCI 命令參數 (0x12) 。

如果已設定Monitor_options位 1 或位 3,且Peer_device_IRK設定為無效的 IRK,或未設定任何Monitor_options位,控制器應該會傳回錯誤碼 無效的 HCI 命令參數 (0x12) 。

如果已設定位 0 或位 1 或位 2 或位 2 或位 Monitor_options 3,且Condition_type設定為 0x03 或 0x04,則控制器應該傳回錯誤碼 無效的 HCI 命令參數 (0x12) 。

如果已設定Advertisement_report_filter_options位 0,且RSSI_sampling_period是0x00以外的任何值,控制器應該會傳回錯誤碼 無效的 HCI 命令參數 (0x12) 。

遺漏參數

發出不包含所有參數的此命令版本時,應該使用下列專案:

參數
Monitor_options 位 5 設定;清除所有其他位
Advertisement_report_filter_options 設定位 1 和 2;清除所有其他位
Peer_device_IRK 0x0000000000000000 0000000000000000
Peer_device_address 0x000000000000
Peer_device_address_type 0x00

Command_parameters

Subcommand_opcode_v1 (1 個八位) :

參數描述
0x03 HCI_VS_MSFT_LE_Monitor_Advertisement [v1] 的子命令 opcode。

Subcommand_opcode_v2 (1 個八位) :

參數描述
0x0F HCI_VS_MSFT_LE_Monitor_Advertisement [v2] 的子命令 opcode。

RSSI_threshold_high (1 個八位) :

參數描述
0xXX 預期的 RSSI 值上限。 如果觀察到的 RSSI 大於或等於此值,控制器就會產生事件。
單位:dBm
強制範圍:-127 到 20 (帶正負號的整數)

RSSI_threshold_low (1 個八位) :

參數描述
0xXX 預期的 RSSI 值下限。 如果觀察到的 RSSI 小於或等於此值,控制器就會產生事件。
單位:dBm
強制範圍:-127 到 20 (帶正負號的整數)

RSSI_threshold_low_time_interval (1 個八位) :

參數描述
0x00 保留值。
N = 0xXX RSSI 值在產生 HCI_VS_MSFT_Rssi_Event 之前的秒數應該低於 RSSI_threshold_low 的時間
時間週期 = N * 1 秒
強制範圍:0x01 0x3C。

RSSI_sampling_period (1 個八位) :

參數描述
0x00 控制器應該將所有接收的公告傳播到主機。
N = 0xXX 取樣間隔以毫秒為單位。
時間週期 = N * 100 毫秒。
強制範圍:0x01 0xFE
0xFF 控制器不得將任何收到的公告傳播至主機。

Monitor_options (1 個八位) :

位編號 參數描述
0 如果 AdvA 或其解析的身分識別位址符合Peer_device_address和Peer_device_address_type,且 TargetA 不存在,或者如果存在,則 TargetA 可以根據掃描篩選原則來監視廣告 PDU,如果這些 PDU 符合Condition_Type中指定的條件,
1 如果 AdvA 符合 Peer_device_IRK Condition_Type中指定的條件,控制器應該監視可解析 advA 且 TargetA 不存在的位置,或者,如果 TargetA 存在,則會根據掃描篩選原則來允許 TargetA。 如果控制器中使用連結層隱私權,則不得設定此位。
2 控制器應根據掃描篩選原則監視 TargetA 允許的導向廣告 PDU,以及 AdvA 或其解析的身分識別位址符合Peer_device_address和Peer_device_address_type。 不論 PDU 是否符合Condition_Type中指定的條件,都是如此。
3 控制器應根據掃描篩選原則監視允許 TargetA 的導向廣告 PDU,以及 AdvA 可透過Peer_device_IRK解析的位置。 不論 PDU 是否符合Condition_Type中指定的條件,都是如此。 如果控制器中使用連結層隱私權,則不得設定此位。
4 控制器應根據掃描篩選原則監視允許 TargetA 的導向廣告 PDU,不論Peer_device_address和Peer_device_address_type或Peer_device_IRK的值,以及不論 PDU 是否符合Condition_Type中指定的條件。
5 控制器應監視來自 TargetA 不存在之任何 AdvA 的廣告 PDU;如果存在,則會根據掃描篩選原則允許 TargetA,如果這些 PDU 符合Condition_Type中指定的條件。
所有其他位 保留供日後使用

Advertisement_report_filtering_options (1 個八位) :

位編號 參數描述
0 篩選重複的廣告 PDU。 只有在RSSI_sampling_period 0x00時,才應該設定此位。
1 如果這些 PDU 符合指定的Monitor_options,控制器應該產生HCI_LE_Advertising_Report事件或HCI_LE_Directed_Advertising_Report事件或舊版廣告 PDU 的HCI_LE_Extended_Advertising_Report事件。
2 如果這些 PDU 符合指定的Monitor_options,控制器應該為擴充廣告 PDU 產生HCI_LE_Extended_Advertising_Report事件。
3 如果這些 PDU 符合指定的Monitor_options,控制器應該會產生HCI_LE_Advertising_Report事件或HCI_LE_Directed_Advertising_Report事件或HCI_LE_Extended_Advertising_Report事件。
所有其他位 保留供日後使用

Peer_device_address (6 個八位) :

參數描述
0xXXXXXXXXXXXXXXX 要比對的公用裝置位址或隨機裝置位址。

Peer_device_address_type (1 個八位) :

參數描述
0x00 公用裝置位址
0x01 隨機裝置位址
所有其他的值 保留供日後使用

Peer_device_IRK (16 個八位) :

參數描述
0x0000000000000000 0000000000000000 無效的 IRK。 設定Monitor_options位 1 或設定Monitor_options位 3 時,不得為值。
0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 要比對之裝置的 IRK。 應該填入Peer_device_address和Peer_device_address_type。

Condition_type (1 個八位) :

參數描述
0x01 條件是必須在廣告上比對的模式。
0x02 條件是 UUID 類型和 UUID。
0x03 條件是 IRK 的解析。 如果已設定任何Monitor_options位 0、1、2 或 3,則排除。
0x04 條件為藍牙地址類型與藍牙位址。 如果已設定任何Monitor_options位 0、1、2 或 3,則排除。

條件:Condition 適用的字段取決於Condition_type的值。 如需詳細資訊,請參閱Condition_type和條件參數一節。

Number_of_patterns (1 個八位) :

參數描述
0xXX Pattern_data 參數中指定的模式數目。

>Pattern_data (3 個八位) :

參數描述
長度 此模式的長度。
資料類型 公告區段的數據類型。 這些值會列在藍牙指派的數位檔中。
開始位元組 要針對指定的數據類型比對之模式的開始位置。
模式 要比對的模式 (長度 - 0x2個字節) 。

UUID_type (1 個八位) :

參數描述
0x01 UUID 是16位服務。
0x02 UUID 是 32 位服務。
0x03 UUID 是128位服務。

UUID (2、4 或 16 八位) :

參數描述
0xXXXX 如果UUID_type為 0x01,則為 2 個字節。
如果UUID_type為 0x02,則為 4 個字節。
如果UUID_type為 0x03,則為 16 個字節。

IRK (16 個八位) :

參數描述
0xXXXXXXXXXXX XXXXXXXX XXXXXXXX 用來解析私人位址的 IRK。

Address_type (1 個八位) :

參數描述
0x00 公用裝置位址。
0x01 隨機裝置位址。
要0xFF的0x02 保留值以供日後使用。

BD_ADDR (6 個八位) :

參數描述
0xXXXXXXXXXXXXXXX 要監視之裝置的藍牙位址。

Return_parameters

狀態 (1 八位) :

參數描述
0x00 命令成功。
0x07 如果控制器沒有足夠的記憶體來處理命令,則控制器應傳回超過記憶體容量。
錯誤碼 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼

Subcommand_opcode (1 個八位) :

參數描述
0x03或0x0F HCI_VS_MSFT_LE_Monitor_Advertisement [v1]HCI_VS_MSFT_LE_Monitor_Advertisement [v2] 的子命令 opcode,視提交的命令而定。

Monitor_handle (1 個八位) :

參數描述
要0xFF的0x00 此規則的句柄。 此句柄會用來做為 參數,HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement 取消監視廣告。
只有當 Status 為0x00時,此參數才有效。

除非遮罩離開,否則產生的事件

收到 HCI_VS_MSFT_LE_Monitor_Advertisement 命令時,控制器應該會產生 Command Complete 事件。

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement取消先前發出的 HCI_VS_MSFT_LE_Monitor_Advertisement 命令。

命令 程式碼 命令參數 傳回參數
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement 選擇的基底代碼 Subcommand_opcode、
Monitor_handle
地位
Subcommand_opcode

控制器應該會立即產生 Command Completed 事件,以回應此命令。

Command_parameters

Subcommand_opcode (1 個八位) :

參數描述
0x04 HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement的子命令 opcode。

Connection_Handle (1 個八位) :

參數描述
0xXX 正在取消之篩選的句柄。

Return_parameters

狀態 (1 八位) :

參數描述
0x00 命令成功。
0x07 如果控制器沒有足夠的記憶體來處理命令,則控制器應傳回超過記憶體容量。
錯誤碼 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼

Subcommand_opcode (1 個八位) :

參數描述
0x04 HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement的子命令 opcode。

除非遮罩離開,否則產生的事件

當收到 HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement 命令時,控制器應該會產生 Command Complete 事件。

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable設定廣告篩選的狀態。

命令 程式碼 命令參數 傳回參數
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 選擇的基底代碼 Subcommand_opcode、
啟用
地位
Subcommand_opcode

如果 Enable 設定為 0x00,控制器應該根據現有的篩選接受清單設定,將接收的公告傳播至主機。 如果裝置不再受到監視,則控制器應該繼續監視目前正在監視的裝置,併產生Monitor_state設為 0 HCI_VS_MSFT_LE_Monitor_Device_Event。 如果監視新的裝置,控制器應該會產生 Monitor_state 設定為1 的HCI_VS_MSFT_LE_Monitor_Device_Event 。 主機可能會發出HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable,並將 [啟用 ] 設為 [0x01],以重新啟用所有篩選條件。

如果 Enable 設定為0x01,此命令會啟用所有使用先前發行 HCI_VS_MSFT_LE_Monitor_Advertisement 命令所設定的篩選條件。 如果控制器未切換篩選狀態,控制器應該拒絕HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable命令:

  • 如果控制器先前收到 [啟用] 設為 0x01 的 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令,則控制器應該拒絕 [啟用] 設為 0x01 的HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable命令。
  • 如果控制器先前收到 enable 設定為 0x00 的 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令,則控制器應該拒絕 [啟用] 設定為 0x00 的 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令。

廣告篩選的默認狀態應為關閉。 此狀態相當於先前接收HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable命令的控制器,並將 Enable 設定為 0x00。 控制器應該會立即產生 Command Completed 事件,以回應此命令。

Command_parameters

Subcommand_opcode (1 個八位) :

參數描述
0x05 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable的子命令 opcode。

開啟 (1 八位) :

參數描述
0x00 還原為目前的篩選接受清單行為,但會根據來自HCI_VS_MSFT_LE_Monitor_Advertisement命令的條件繼續監視裝置。
0x01 在控制器上啟用所有發出 HCI_VS_MSFT_LE_Monitor_Advertisement 命令。

Return_parameter

狀態 (1 八位) :

參數描述
0x00 命令成功。
0x0C 如果控制器先前看到 [啟用] 設定為與此命令相同的值,所以控制器應該會傳回 「不允許命令」,因為它先前看到HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable命令。
錯誤碼 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼

Subcommand_opcode (1 個八位) :

參數描述
0x05 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable的子命令 opcode。

除非遮罩離開,否則產生的事件

當收到 HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable 命令時,控制器應該會產生 Command Complete 事件。

HCI_VS_MSFT_Read_Absolute_RSSI

HCI_VS_MSFT_Read_Absolute_RSSI從控制器讀取 BR/EDR 連線 的絕對 接收訊號強度指示 (RSSI) 值。

命令 程式碼 命令參數 傳回參數
HCI_VS_MSFT_Read_Absolute_RSSI 選擇的基底代碼 Subcommand_opcode、
Connection_Handle
地位
Subcommand_opcode、
Connection_Handle、
Rssi

線上句柄同時提供做為命令和傳回參數,以識別正在讀取其 RSSI 的 ACL 連線。 RSSI 計量是 dBm 中的 絕對 接收者訊號強度,可± 6 dB 精確度。 如果無法讀取 RSSI,則 RSSI 計量應設定為 127。 控制器應一律使用 Command Completed 事件立即完成此命令。

Command_parameters

Subcommand_opcode (1 個八位) :

參數描述
0x06 HCI_VS_MSFT_Read_Absolute_RSSI的子命令 opcode。

Connection_Handle (2 個八位) :

參數描述
0xXXXX 必須讀取其 RSSI 的 BR/EDR 連線句柄。

Return_parameters

狀態 (1 八位) :

參數描述
0x00 命令成功。
要0xFF的0x01 命令失敗。 如需詳細資訊,請參閱藍牙核心規格中的 錯誤碼

Subcommand_opcode (1 個八位) :

參數描述
0x06 HCI_VS_MSFT_Read_Absolute_RSSI的子命令 opcode。

Connection_Handle (2 個八位) :

參數描述
0xXXXX 讀取 RSSI 之 BR/EDR 連線的句柄。

RSSI (1 八位) :

參數描述
N = 0xXX BR/EDR 連線的RSSI值。
單位:dBm
強制範圍:-128 到 127 (帶正負號的整數)

除非遮罩離開,否則產生的事件

HCI_VS_MSFT_Read_Absolute_RSSI 命令完成時,控制器應該會產生 Command Complete 事件。

Microsoft 定義的藍牙 HCI 事件

所有 Microsoft 定義的藍牙 HCI 事件都是廠商定義的事件,並使用事件程式代碼0xFF。 Microsoft 事件的事件數據一律會以位元組的常數位串開頭,以區分 Microsoft 定義的事件與其他廠商定義的事件。 常數位符串的長度和值是由控制器實作者定義,並傳回以回應 HCI_VS_MSFT_Read_Supported_Features

HCI 事件 Description
HCI_VS_MSFT_Rssi_Event HCI_VS_MSFT_RSSI_Event表示 HCI_VS_MSFT_Monitor_Rssi 命令已完成。
HCI_VS_MSFT_LE_Monitor_Device_Event HCI_VS_MSFT_LE_Monitor_Device_Event表示控制器已啟動或停止監視藍牙 LE 裝置。

HCI_VS_MSFT_RSSI_Event

HCI_VS_MSFT_RSSI_Event表示 HCI_VS_MSFT_Monitor_Rssi 命令已完成。 如果 Status 參數為零,則命令已完成,因為遠端裝置的 RSSI 值已變更為超出指定範圍的值。 如果 Status 參數為非零,則命令已完成,因為無法再監視連線的 RSSI 值。

事件 事件程序代碼 Microsoft 事件程序代碼 事件參數
HCI_VS_MSFT_RSSI_Event 0xFF 0x01 Event_prefix、
Microsoft_event_code、
地位
Connection_Handle、
Rssi

Event_parameters

Event_prefix (可变大小) :

參數描述
事件前置詞 將這個事件標示為 Microsoft 定義的事件前置詞。 大小和值如 HCI_VS_MSFT_Read_Supported_Features 命令所傳回。

Microsoft_event_code (1 個八位) :

參數描述
0x01 HCI_VS_MSFT_RSSI_Event的事件碼。

狀態 (1 八位) :

參數描述
0x00 成功。 線上的 RSSI 值符合下列其中一個條件。 RSSI 已達到或超過 RSSI_threshold_high
RSSI 在 RSSI_threshold_low_time_interval 秒內達到或卸除低於 RSSI_threshold_low
RSSI_sampling_period已過期,而且已產生此事件來通知主機 RSSI 值。
0x01至 0xFF 失敗。 無法再監視連線的RSSI值。 錯誤碼通常是其中一個代碼,描述基礎 ACL 連線遺失的原因。

Connection_Handle (2 個八位) :

參數描述
0xXXXX 要監視其 RSSI 之連線的句柄。

RSSI (1 八位) :

參數描述
0xXX 連接的測量連結 RSSI 值。
單位:dBm
BR/EDR 範圍:-128 到 127 (帶正負號的整數)
LE 範圍:-127 到 20 (帶正負號的整數)

HCI_VS_MSFT_LE_Monitor_Device_Event

HCI_VS_MSFT_LE_Monitor_Device_Event表示控制器已啟動或停止監視藍牙 LE 裝置。

如果 Monitor_state 參數值為1,控制器會開始使用指定的BD_ADDR監視藍牙裝置。 如果 Monitor_state 參數值為 0,控制器會停止監視具有指定BD_ADDR的藍牙裝置。

事件 事件程序代碼 Microsoft 事件程序代碼 事件參數
HCI_VS_MSFT_LE_Monitor_Device_Event 0xFF 0x02 Event_prefix,
Microsoft_event_code,
Address_type,
BD_ADDR,
Monitor_handle,
Monitor_state

如果Monitor_state參數尚未產生Monitor_state設為 1 的HCI_VS_MSFT_LE_Monitor_Device_Event,則控制器不得產生HCI_VS_MSFT_LE_Monitor_Device_Event

Event_parameters

Event_prefix (变量大小) :

參數描述
事件前置詞 將這個事件標示為 Microsoft 定義的事件前置詞。 大小和值如 HCI_VS_MSFT_Read_Supported_Features 命令所傳回。

Microsoft_event_code (1 個八位) :

參數描述
0x02 HCI_VS_MSFT_LE_Monitor_Device_Event的事件碼。

Address_type (1 個八位) :

參數描述
0x00 公用裝置位址。
0x01 隨機裝置位址。
0x02至 0xFF 保留的值供日後使用。

BD_ADDR (6 個八位) :

參數描述
0xXXXXXXXXXXXXXXX 裝置的藍牙位址。

Monitor_handle (1 個八位) :

參數描述
0xXX HCI_VS_MSFT_LE_Monitor_Advertisement 命令指定的篩選句柄。

Monitor_state (1 個八位) :

參數描述
0x00 控制器停止監視 由 BD_ADDRMonitor_handle 指定的裝置。
0x01 控制器已開始監視 由 BD_ADDRMonitor_handle 指定的裝置。

附錄

本節包含 Microsoft 定義的藍牙 HCI 延伸模組範例和圖表。

範例:比對HCI_VS_MSFT_LE_Monitor_Advertisement的模式

此範例示範已接收 的HCI_VS_MSFT_LE_Monitor_Advertisement 命令,以及針對命令參數評估三個不同的公告封包。

收到 HCI_VS_MSFT_LE_Monitor_Advertisement 命令 控制器會收到 HCI_VS_MSFT_LE_Monitor_Advertisement 命令,並包含下列參數。

參數 注意
Subcommand_opcode 0x03 HCI_VS_MSFT_LE_Monitor_Advertisement的子命令 opcode
RSSI_threshold_high 0x01 1dB
RSSI_threshold_low 0xCE -50dB
RSSI_threshold_low_time_interval 0x05 5 秒
RSSI_sampling_period 0xFF 無取樣
Condition_type 0x01 條件
條件 0x02 應該比對兩個模式
0x03 第一個模式的長度,包括AD類型和起始位置
0x01 AD 類型
0x00 AD 類型之後的起始位置
0x01 要比對的第一個模式
0x06 第二個模式的長度,包括AD類型和起始位置
0xFF AD 類型 (製造商特定數據)
0x00 AD 類型之後的起始位置
0x00 要比對的第二個模式
0x06
0xFF
0xFF

控制器接著會收到下列公告封包。

  • 公告封包 [A]

    0x02 0x01 0x01 0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x05 0xFF 0x00 0x06 0xFF 0xFF

  • 公告封包 [B]

    0x02 0x01 0x01 0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x04 0xFF 0x00 0x06 0xFF

  • 公告封包 [C]

    0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x05 0xFF 0x00 0x06 0xFF 0xFF

  • 公告封包 [D]

    0x02 0x01 0x02 0x05 0xFF 0x00 0x06 0xFF 0x01

評估廣告封包的相符專案 [A]

描述
要比對的第一個模式的AD類型 0x01
要比對的第一個模式長度 0x03 - 0x02 = 0x01 位元組
AD 類型0x01位置0x00相符的模式 0x01
AD 類型0x01位置0x00的位元組 0x01 (MATCH!)
要比對的第二個模式的 AD 類型 0xFF (制造商特定数据)
要比對的第二個模式長度 0x06 - 0x02 = 0x04 個字節
AD 類型0xFF位置0x00相符的模式 0x00 0x06 0xFF 0xFF
AD 類型0xFF位置0x00位元組 0x00 0x06 0xFF 0xFF (MATCH!)

判定: PASS (兩種模式都符合)

評估廣告封包的相符專案 [B]

描述
要比對的第一個模式的AD類型 0x01
要比對的第一個模式長度 0x03 - 0x02 = 0x01 位元組
AD 類型0x01位置0x00相符的模式 0x01
AD 類型0x01位置0x00的位元組 0x01 (MATCH!)
要比對的第二個模式的 AD 類型 0xFF (制造商特定数据)
要比對的第二個模式長度 0x06 - 0x02 = 0x04 個字節
AD 類型0xFF位置0x00相符的模式 0x00 0x06 0xFF 0xFF
AD 類型0xFF位置0x00位元組 0x00 0x06 0xFF (不相符)

判定: 僅傳遞 (第一個模式符合)

評估廣告封包的相符專案 [C]

描述
要比對的第一個模式的AD類型 0x01
要比對的第一個模式長度 0x03 - 0x02 = 0x01 位元組
AD 類型0x01位置0x00相符的模式 0x01
AD 類型0x01位置0x00的位元組 未定義。 廣告沒有AD類型0x01的數據。
要比對的第二個模式的 AD 類型 0xFF (制造商特定数据)
要比對的第二個模式長度 0x06 - 0x02 = 0x04 個字節
AD 類型0xFF位置0x00相符的模式 0x00 0x06 0xFF 0xFF
AD 類型0xFF位置0x00位元組 0x00 0x06 0xFF 0xFF (MATCH!)

判定: 僅傳遞 (第二個模式符合)

評估廣告封包的相符專案 [D]

描述
要比對的第一個模式的AD類型 0x01
要比對的第一個模式長度 0x03 - 0x02 = 0x01 位元組
AD 類型0x01位置0x00相符的模式 0x01
AD 類型0x01位置0x00的位元組 0x02 (不相符)
要比對的第二個模式的 AD 類型 0xFF (制造商特定数据)
要比對的第二個模式長度 0x06 - 0x02 = 0x04 個字節
AD 類型0xFF位置0x00相符的模式 0x00 0x06 0xFF 0xFF
AD 類型0xFF位置0x00位元組 0x00 0x06 0xFF 0x01 (不相符)

判定: 失敗 (模式都不符合)

範例:廣告監視

此範例說明 RSSI 廣告監視。 符合指定條件之已接收公告的 RSSI 值如下所示。

次數 RSSI (dB)
1 -100
2 -90
3 -5
4 -15
5 -30
6 -15
7 -45
8 -20
9 -35
10 -45
11 -70
12 -85
13 -85
14 -85
15 -90
16 -90
17 -70
參數
RSSI_threshold_high -10dB
RSSI_threshold_low -80dB
RSSI_threshold_low_time_interval 3 秒
RSSI_sampling_period 2 秒

顯示隨著時間使用 RSSI 值進行廣告監視的圖表。

廣告 RSSI 在時間 3 大於 RSSI_threshold_high 。 取樣的定期定時器會在時間 3 開始。 每隔 2 秒,定期定時器就會過期,而所接收公告的平均 RSSI 值會傳播到堆疊。

當定期定時器在時間 5 到期時,在這段期間收到的公告 RSSI 平均值 (-23dB) 會傳播到堆棧。

當定期定時器在時間 13 到期時,在此時間範圍內收到的廣告 RSSI 平均值低於 (-80dB ) RSSI_threshold_low。 廣告 RSSI (-85 dB) 的平均應該傳播到主機。

當RSSI_threshold_low_time_interval在立即 15 到期時,公告會傳播至 RSSI 為 -85dB 的主機。 在此範例中,不會再傳送任何廣告給主機。

範例:從裝置監視 BAP 公告

雖然與 CAP 接受器結合,但未連線,但主機可以監視來自該裝置的 BAP 公告。

參數
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options 位 0 設定;如果裝置散發 IRK,則設定位 1
Advertisement_report_filtering_options 位 0、1 和 2 設定
Peer_device_address <address>
Peer_device_address_type <地址類型>
Peer_device_IRK <IRK,如果已設定位 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (长度)
0x16 (服务数据 – 16 位 UUID)
0x00 (开始字节)
0X4E (ASCS UUID) 的低位元組
0x18 (ASCS UUID) 的高位元組

範例:從裝置監視 CAP 公告

雖然與 CAP 擷取結合,但未連線,但主機可以監視來自該裝置的 CAP 公告。

參數
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options 位 0 設定;如果裝置散發 IRK,則設定位 1
Advertisement_report_filtering_options 位 0、1 和 2 設定
Peer_device_address <address>
Peer_device_address_type <地址類型>
Peer_device_IRK <IRK,如果已設定位 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (长度)
0x16 (服务数据 – 16 位 UUID)
0x00 (开始字节)
0X53 (CAS UUID) 的低位元組
0X18 (CAS UUID) 的高位元組

流程圖:公告和篩選接受清單篩選

此流程圖提供廣告篩選的範例控制器實作,並在收到廣告時篩選接受清單篩選。

只要主機收到公告通知或流程圖所指定的 HCI_VS_MSFT_LE_Monitor_Device_Event ,控制器就可以以不同的方式實作此邏輯。

顯示 Microsoft HCI 延伸模組篩選程式的流程圖。

順序圖:傳播與廣告相關聯的掃描回應

順序圖:傳播與廣告相關聯的掃描回應

此順序圖顯示傳播掃描回應,此回應與啟用作用中掃描時符合廣告篩選條件的公告相關聯。 此圖表只會顯示控制器與主機之間的預期事件順序,而且不會顯示控制器與特定裝置之間的事件。 假設有符合廣告篩選條件的公告 A ,以及不符合廣告篩選條件的公告 B

顯示 HCI 傳播與公告相關聯之掃描響應的順序圖。