Bluetooth Host-Controller インターフェイス (HCI) は、ホストとBluetooth無線コントローラー間のすべての相互作用を指定します。 Bluetooth仕様では、ベンダー定義の HCI コマンドとイベントを使用して、ホストとコントローラー間の非標準の対話を有効にすることができます。 Microsoft では、Windows で使用されるベンダー固有の HCI コマンドとイベントを定義しています。 Bluetoothコントローラーの実装者は、これらの拡張機能を使用して特別な機能を実装できます。
必要条件
Bluetooth HCI コマンドは、16 ビットのコマンド コードによって識別されます。 Bluetooth組織は、0x0000から0xFBFFまでの範囲の値を定義します。 ベンダーは、0xFC00 から 0xFFFF までの範囲の値を定義しており、1024 種類の異なるベンダー割り当てコマンドコードを使用できるようにします。
ベンダーは、Microsoft が定義したコマンド コードの値を選択する必要があります。 Microsoft ではコマンド コードを選択できません。競合する目的で他のベンダーがコードを使用していないと想定しています。 ベンダー固有のコマンドを発行するのは安全ではなく、コントローラーに依存してコマンドが認識されない場合は拒否します。 コントローラーは、コントローラーのファームウェアの更新などの破壊的操作としてコマンドを解釈できます。
ベンダーは、コントローラー以外の方法を使用して、選択した値を通信する必要があります。 Microsoft では、選択したコードを取得する方法を指定していません。
ベンダー固有のコマンド コードの Windows Bluetooth スタックへの通知
Windows Bluetooth スタックは、VsMsftOpCode
レジストリ キーからベンダー固有のコマンド コードを読み取ります。
VsMsftOpCode
レジストリ キーにはREG_DWORDの種類があり、キー データはベンダー固有のオペコードです。
ベンダー固有のオペコードを指定するには、ドライバーの INF の DDInstall.HW セクションAddReg
ディレクティブを使用します。 レジストリの追加セクションには、次のものが含まれている必要があります。
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 コマンド | 説明 |
---|---|
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 コマンドが 1 つだけあることを認識します。 Microsoft 固有のコマンド セットは、オペコードを使用して拡張されます。 Microsoft 定義 HCI コマンドの最初のコマンド・パラメーターは、サブコマンドを指定するオペコードです。
コントローラーは、他の Microsoft HCI サブコマンドをサポートするために、HCI_VS_MSFT_Read_Supported_Features をサポートする必要があります。 他のコマンドのサポートは省略可能であり、HCI_VS_MSFT_Read_Supported_Featuresによって返される値によって異なります。 コントローラーがHCI_VS_MSFT_Read_Supported_Featuresへの応答を通じてサブコマンドのサポートを示していない限り、Windows は Microsoft が定義したサブコマンドを送信しません。
HCI_VS_MSFT_Read_Supported_Features
HCI_VS_MSFT_Read_Supported_Featuresは、コントローラーがサポートする Microsoft 定義の機能を記述するビットマップを提供し、コントローラーによって返される Microsoft が定義したイベントのプレフィックスを指定します。
コントローラーは常に、Command Completed イベントを使用してこのコマンドをすぐに完了します。
コマンド | コード | コマンド パラメーター | 戻り値パラメーター |
---|---|---|---|
HCI_VS_MSFT_Read_Supported_Features | 選択した基本コード | Subcommand_opcode | Status、 Subcommand_opcode、 サポートされている機能 Microsoft_event_prefix_length、 Microsoft_event_prefix |
コマンド_パラメーター
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | HCI_VS_MSFT_Read_Supported_Features のサブコマンド オペコード。 |
戻り値のパラメータ
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01から0xFFまで | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | HCI_VS_MSFT_Read_Supported_Features のサブコマンド オペコード。 |
Supported_features (8 オクテット):
価値 | パラメータの説明 |
---|---|
0x00000000 00000001 | コントローラーは、BR/EDR 接続の RSSI 監視機能をサポートしています。 さらに、コントローラーは BR/EDR 接続の絶対 RSSI メトリックを読み取る HCI_VS_MSFT_Read_Absolute_RSSI をサポートします。 |
0x00000000 00000002 | コントローラーは、LE 接続の RSSI 監視機能をサポートしています。 |
0x00000000 00000004 | コントローラーは、LE レガシ アドバタイズメントの RSSI 監視をサポートします。 |
0x00000000 00000008 | コントローラーは、LEのレガシーアドバタイズメントの監視をサポートします。 |
0x00000000 00000010 | コントローラーは、P-192 および P-256 のセキュア シンプル ペアリング プロセス中に、曲線上のパブリック X 座標と Y 座標の有効性の検証をサポートします。 詳細については、「Bluetooth Core Specification Erratum 10734」を参照してください。 |
0x00000000 00000020 | コントローラは、HCI_VS_MSFT_LE_Monitor_Advertisement[v1]を使用して、他の無線活動と同時に実行されるLE広告の継続的な広告監視をサポートしています。 |
0x00000000 00000040 | 予約済み。 |
0x00000000 00000080 | コントローラーは AVDTP オフロードと、このドキュメントで説明する HCI_VS_MSFT_Avdtp_* コマンドをサポートしています。 |
0x00000000 00000100 | 予約済み。 |
0x00000000 00000200 | 予約済み |
0x00000000 00000400 | コントローラーは HCI_VS_MSFT_LE_Monitor_Advertisement [v2]をサポートしています。 さらに、コントローラは、HCI_VS_MSFT_LE_Monitor_Advertisement[v2]を使用して、他の無線活動と同時に実行されるLEアドバタイズの継続的な広告監視をサポートしています。 |
0xFFFFFFFF FFFFFF00 | 将来の定義用に予約されたビット。 ゼロを指定してください。 |
Microsoft_event_prefix_length (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00から0x20まで | 返された Microsoft_event_prefixで指定された Microsoft イベント プレフィックス フィールドのバイト数。 これは、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サンプリング期間 |
Status、 Subcommand_opcode |
コントローラーは、定期的に生成されたイベント (RSSI_sampling_periodに基づいて) を使用して RSSI 値をホストに通知する必要があります。 測定されたリンク RSSI は次のようになります 絶対の BR/EDR 接続の受信機信号強度の値 (dBm 単位)。
HCI_VS_MSFT_Monitor_Rssi コマンドに応答して、コントローラーが監視を開始できる場合は状態が 0、それ以外の場合は 0 以外の状態の Command Complete イベントが生成されます。 状態値が 0 以外の場合、コントローラーはこのコマンドに応答して HCI_VS_MSFT_Rssi_Event を生成しません。
コントローラーは、同じ Connection_Handle を持つ別のHCI_VS_MSFT_Monitor_Rssi コマンドが未処理の場合、または指定された接続ハンドルが無効な場合は、コマンドを拒否しなければなりません。 コントローラーは、リソースの枯渇など、他の理由でコマンドを拒否することもできます。
この状態図は、接続の RSSI を監視するときのコントローラーの遷移状態を示しています。
コントローラーは、受信した RSSI が指定された RSSI_threshold_high以上の場合に HCI_VS_MSFT_Rssi_Event を生成する必要があります。 このイベントが生成された後、コントローラーは新しい HCI_VS_MSFT_Rssi_Event を生成して、RSSI が RSSI_threshold_low以下であることを指定する HCI_VS_MSFT_Rssi_Event を生成するまで、RSSI_threshold_high が超過したことを指定することはできません。
コントローラーは、受信したRSSIが指定されたRSSI_threshold_lowに等しいか下回る場合、指定されたRSSI_threshold_low_time_intervalにおいて、HCI_VS_MSFT_Rssi_Eventを生成します。 このイベントが生成された後、コントローラーは新しい HCI_VS_MSFT_Rssi_Event を生成して、RSSI が RSSI_threshold_low を下回ったことを指定し、RSSI_threshold_high に達または超過したことを指定する HCI_VS_MSFT_Rssi_Event イベントが生成されるまで行いません。
RSSI_sampling_period が0x01と0xFEの間にある場合、コントローラーは、RSSI_sampling_periodごとに定期的に HCI_VS_MSFT_Rssi_Event を生成する必要があります。 このイベントには、RSSI_sampling_periodで計算された RSSI の平均が含まれている必要があります。 もし RSSI_sampling_period 0x00 または 0xFF の場合、コントローラーは not 定期的にホストに通知します HCI_VS_MSFT_Rssi_Event.
コマンドのパラメーター
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x01 | HCI_VS_MSFT_Monitor_Rssi のサブコマンド オペコード。 |
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 | RSSI値が以下になるまでの時間 秒 RSSI_threshold_low を下回ってから HCI_VS_MSFT_Rssi_Event が生成される. 期間 = N * ミリ秒 必須範囲: 0x01から0x3C |
RSSI_sampling_period (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | 予約済みの値。 |
N = 0xXX | サンプリング間隔 (100 ミリ秒の倍数)。 期間 = N * 100 ミリ秒 必須範囲: 0x01から0xFE |
0xFF | 予約済みの値。 |
Return_parameters
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01から0xFFまで | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
0x07 | コマンド 処理するのに十分なメモリがない場合、コントローラーはメモリ容量超過 を返します。 |
エラーコード | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x01 | HCI_VS_MSFT_Monitor_Rssiのサブコマンドオペコード。 |
マスクされない限り生成されるイベント
HCI_VS_MSFT_Monitor_Rssi コマンドを受信すると、コントローラーはコマンドの完了イベントをすぐに生成します。 Command Complete イベントが 0 の状態を返す場合、コントローラーは次のいずれかの条件が発生したときに HCI_VS_MSFT_Rssi_Event を生成します。
- デバイスに対して観測された RSSI RSSI_threshold_low_time_interval 指定された値以下になる 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 |
Status、 Subcommand_opcode |
コマンド_パラメータ
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x02 | HCI_VS_MSFT_Cancel_Monitor_Rssi のサブコマンド オペコード。 |
Connection_Handle (2 オクテット):
価値 | パラメータの説明 |
---|---|
0xXXXX | RSSI をキャンセルする必要がある接続のハンドルです。 |
戻り値パラメーター
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01から0xFFまで | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x02 | HCI_VS_MSFT_Cancel_Monitor_Rssi のサブコマンド オペコード。 |
マスクされない限り生成されるイベント
HCI_VS_MSFT_Cancel_Monitor_RSSI コマンドを受信すると、コントローラーは Command Complete イベントを生成します。
HCI_VS_MSFT_LE_Monitor_Advertisement
HCI_VS_MSFT_LE_Monitor_Advertisementは、指定された RSSI 範囲内にあり、次のいずれかの条件を満たすアドバタイズの監視をコントローラーが開始することを要求します。
- 指定されたパターンは、受信したアドバタイズ パケットと照合できます。
- 指定された UUID は、受信したアドバタイズ パケットと照合できます。
- 指定された ID 解決キー (IRK) を使用して、アドバタイズ パケットの送信元デバイスのプライベート アドレスを解決できます。
- 指定したBluetooth アドレスは、受信したアドバタイズ パケットと照合できます。
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、 モニターオプション 広告レポートのフィルターオプション Peer_device_address、 Peer_device_address_type、 Peer_device_IRK、 Condition_type、 <条件パラメーター> |
Status、 Subcommand_opcode、 モニター取っ手 |
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、 <条件パラメーター> |
Status、 Subcommand_opcode、 モニターのハンドル |
コントローラーは、このコマンドに応答して Command Complete イベントを生成する必要があります。 コントローラーが監視を開始できる場合は状態値を 0 に、それ以外の場合は 0 以外の状態に設定する必要があります。 コントローラーが LE アドバタイズの RSSI 監視をサポートしていない場合は、RSSI_threshold_high、RSSI_threshold_low、RSSI_threshold_low_time_interval、および RSSI_sampling_period パラメーター値を無視する必要があります。
この状態図は、アドバタイズの RSSI を監視するときのコントローラーの遷移状態を示しています。
コントローラーは、受信した RSSI が特定のデバイスの RSSI_threshold_high 以上で、Monitor_options が一致する場合にのみ、アドバタイズの監視を開始します (以下を参照)。 コントローラーは、Monitor_state を1に設定し、この 条件用のハンドルに Monitor_handle を設定した HCI_VS_MSFT_LE_Monitor_Device_Event を生成して、この特定のデバイスを 条件のために監視していることをホストに通知します。 さらに、コントローラーは、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_interval に対して RSSI_threshold_low 以下になった場合、コントローラーは、 Condition の監視を停止します。 コントローラーは、Monitor_state が 0 に設定された HCI_VS_MSFT_LE_Monitor_Device_Event を生成して、コントローラーが 条件の特定のデバイスの監視を停止したことをホストに通知します。 コントローラーが Monitor_state 0 に設定されたHCI_VS_MSFT_LE_Monitor_Device_Eventを指定した後、コントローラーは、特定のデバイスの RSSI が 条件の特定のデバイスに対して RSSI_threshold_high 以上に上昇したことをコントローラーがホストに通知するまで、デバイスのホストに送信するアドバタイズ パケットを許可しません。
さらに、コントローラーは、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 | コントローラーは、Enable が 0x00 に設定された HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable コマンドを以前に受信していない限り、この 条件 のデバイスに対して受信したすべてのアドバタイズ パケットをホストに伝達しなければなりません。 この Condition の特定のデバイスに対して RSSI_threshold_low_time_interval が期限切れにならない限り、受信した RSSI が RSSI_threshold_low 以下になっても、コントローラーはホストにアドバタイズメント パケットを伝達します。 この広告パケットの RSSI 値は、受信したアドバタイズの RSSI 値である必要があります。 | コントローラーがサンプリングなしで LE 拡張アドバタイズの RSSI 監視をサポートしている場合、アドバタイズ パケットがアドバタイズ チェーン内のすべての PDU として定義されている点を除き、レガシ アドバタイズ 列と同じ動作になります。 | コントローラーがサンプリングなしで LE 拡張アドバタイズの RSSI 監視をサポートしている場合、コントローラーは、Enable が 0x00 に設定された HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable コマンドを以前に受信していない限り、この 条件 のデバイスに対して受信したすべてのアドバタイズ パケットをホストに伝達する必要があります。 |
0x01から0xFEまで | コントローラは、次の間隔でレガシー アドバタイズメント パケットをホストに伝播します。 RSSI サンプリング期間 コントローラが以前に受信した場合を除き HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable でコマンドを実行します 許可 0x00 に設定されます。 提供情報に指定された RSSI 値は、このサンプリング間隔中に受信した RSSI 値の平均である必要があります。 サンプリング期間中にコントローラーがアドバタイズ パケットを受信しない場合は、アドバタイズをホストに伝達しません。 RSSI_sampling_period が RSSI_threshold_low_time_interval 未満であり、RSSI_sampling_period の間に受信したすべての広告は、RSSI_threshold_low以下の RSSI を持っている可能性があります。 コントローラーは、このサンプリング間隔中に受信した RSSI 値の平均を使用してアドバタイズを伝達する必要があります。 | コントローラーがサンプリングなしで LE 拡張アドバタイズの RSSI 監視をサポートしている場合、コントローラーは、RSSI_sampling_period が0x00されたかのように動作します。 | コントローラーがサンプリングなしで LE 拡張アドバタイズの RSSI 監視をサポートしている場合、コントローラーは、RSSI_sampling_period が0x00されたかのように動作します。 |
0xFF | コントローラは、デバイスのホストにそれ以上のアドバタイズメント パケットが流れることを許可しません 調子 コントローラが特定のデバイスの RSSI が下回ったことをホストに通知するまで RSSI_しきい値_低 ために RSSI しきい値の低時間間隔 この特定のデバイスについては 調子. この通知は、Monitor_state が 0 に設定された HCI_VS_MSFT_LE_Monitor_Device_Event を生成することによって行われます。 | コントローラーがサンプリングなしで LE 拡張アドバタイズメントの RSSI 監視をサポートしている場合は、レガシ アドバタイズ 列 の動作と同じです。 | コントローラーがサンプリングなしで LE 拡張アドバタイズの RSSI 監視をサポートしている場合、コントローラーは、RSSI_sampling_period が0x00されたかのように動作します。 |
Enable が 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 値が高い範囲に入った場合、コントローラーは、Monitor_state が 0 に設定された HCI_VS_MSFT_LE_Monitor_Device_Event を生成することによって、デバイス (A) の監視を停止したことをホストに通知します。 コントローラーは、デバイス (B) が現在監視されていることをホストに通知するために、Monitor_state が 1 に設定されたHCI_VS_MSFT_LE_Monitor_Device_Eventも生成します。
条件の種類と条件パラメーター
Condition_type パラメーターは、Condition パラメーターでパターン、UUID、IRK、またはBD_ADDRを指定するかどうかを指定します。
Condition_type パラメーターでパターンが指定されている場合、Condition には、Condition内に存在するパターンの数とパターン データを含む 2 つのセクションが含まれます。
パターンの数 照合する必要があるパターンの数を指定します。
パターン データ の形式は次のとおりです。
- Length は、このパターンの長さを指定します。これには、パターンのデータ型と開始バイトが含まれます。
- AD の種類 は、[AD の種類] フィールドを指定します。
- パターンの開始 は、AD の種類の直後のパターンの開始バイト位置を指定します。
- パターン のサイズは (Length - 0x2) で、指定した開始バイトからのアドバタイズ パケット内の指定した AD の種類に対して照合されるパターンです。
複数のパターンが指定されている場合、コントローラーは、少なくとも 1 つのパターンが受信したアドバタイズと一致することを確認します。
コントローラがサンプリングなしで LE 拡張アドバタイズメントの RSSI 監視をサポートする場合:
コントローラーは、ホスト広告データの最初の 251 オクテットでパターンを探し、ホスト広告データの残りのオクテットを調べることができます。 AD セクションがホスト広告データの最初の 251 オクテットを超える場合、コントローラーは、ホスト広告データの最初の 251 オクテットにある AD セクションの一部内のパターンを検索し、ホスト広告データの残りのオクテットを調べることができます。 注: 広告主による断片化に基づき、ホスト広告データの最初の 251 オクテットは、複数の広告 PDU の AdvData 全体に及ぶ可能性があります。 スキャナーでは、PTU のチェーンが過度に長くなりすぎないように、従う AuxPtr の数を制限するように注意する必要があります。
コントローラーは、広告セットごとにデバイスごとのアドレスに基づいて追跡する必要があります。 コントローラーは、アドバタイズが同じデバイス アドレスから取得された場合でも、パターンに一致する各アドバタイズ セットの 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 AD の種類で指定された 16 ビット サービス UUID の完全な一覧を解析する必要があります。 UUID の種類が0x02として定義されている場合、コントローラーは、32 ビット サービス UUID の不完全な一覧と、サービス UUID AD の種類で指定された 32 ビット UUID の完全な一覧を解析する必要があります。 指定した UUID の種類が0x03場合、コントローラーは、128 ビット サービス UUID の不完全な一覧と、サービス UUID AD の種類で指定された 128 ビット サービス UUID の完全な一覧を解析する必要があります。
コントローラがサンプリングなしで LE 拡張アドバタイズメントの RSSI 監視をサポートする場合:
コントローラーは、ホスト広告データの最初の 251 オクテットでサービス UUID を検索するものとし、ホスト広告データの残りのオクテットを検索できます。 AD セクションがホスト広告データの最初の 251 オクテットを超える場合、コントローラーは、ホスト広告データの最初の 251 オクテット内にある AD セクションの一部内でサービス UUID を検索し、ホスト広告データの残りのオクテットを検索できます。 注: 広告主による断片化に基づき、ホスト広告データの最初の 251 オクテットは、複数の広告 PDU の AdvData にまたがることがあります。 スキャナーでは、PTU のチェーンが過度に長くなりすぎないように、従う AuxPtr の数を制限するように注意する必要があります。
コントローラーは、広告セットごとにデバイスごとのアドレスに基づいて追跡する必要があります。 コントローラーは、アドバタイズが同じデバイスから取得された場合でも、サービス UUID に一致する各アドバタイズ セットの HCI_VS_MSFT_LE_Monitor_Device_Event を伝達する必要があります。
Condition_type パラメーターが IRK を指定する場合、Condition パラメーターには IRK が含まれます。
Condition_type パラメーターで Bluetooth Address を指定する場合、Condition パラメーターにはアドレスの種類とBD_ADDRが含まれます。
コントローラーは、スキャン (アクティブまたはパッシブ) が有効になっている場合でも、条件に基づいて監視を続ける必要があります。 アクティブなスキャンが有効になっている場合、フィルターに一致するアドバタイズのスキャン応答がホストに伝達されます。
フィルターが無効になっているときにコントローラーが HCI_VS_MSFT_LE_Monitor_Advertisement コマンドを受け取った場合 (Enable を 0x00 に設定した状態で以前に受信した HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable コマンドが原因で)、コントローラーは可能であればコマンドを受け入れますが、無効な状態に設定します。 コントローラーは、リソース不足などの他の理由でコマンドを拒否することもできます。
Monitor_optionsのすべてのビットがクリアされている場合、コントローラーはエラーコード 無効な HCI コマンドパラメーター (0x12) を返す必要があります。
Monitor_optionsのビット 1 またはビット 3 が設定されていて、Peer_device_IRKが無効な IRK に設定されている場合、またはMonitor_optionsのビットが設定されていない場合、コントローラーは無効な HCI コマンド パラメーター (0x12) エラー コードを返す必要があります。
Monitor_optionsのビット 0 またはビット 1 またはビット 2 またはビット 3 が設定され、Condition_typeが0x03または0x04に設定されている場合、コントローラーは、無効な HCI コマンド パラメーター (0x12) エラー コードを返す必要があります。
Advertisement_report_filter_optionsのビット 0 が設定され、RSSI_sampling_periodが0x00以外の値である場合、コントローラーは、無効な HCI コマンド パラメーター (0x12) エラー コードを返す必要があります。
パラメーターがありません
すべてのパラメーターを含まないバージョンのこのコマンドが発行された場合は、次のものが使用されます。
パラメーター | 価値 |
---|---|
モニター設定オプション | ビット5がセットされる。他の全てのビットはクリアされる。 |
広告レポートフィルターオプション | ビット 1 と 2 はセットされています。他のすべてのビットはクリアされています。 |
Peer_device_IRK | 0x0000000000000000 00000000000000 |
ピアデバイスのアドレス | 0x000000000000 |
Peer_device_address_type | 0x00 |
コマンドパラメーター
Subcommand_opcode_v1 (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x03 | HCI_VS_MSFT_LE_Monitor_Advertisement [v1] のサブコマンド オペコード。 |
Subcommand_opcode_v2 (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x0F | HCI_VS_MSFT_LE_Monitor_Advertisement [v2] のサブコマンド オペコード。 |
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値が以下になるまでの時間 秒 RSSI_threshold_low を下回ってから HCI_VS_MSFT_Rssi_Event が生成される 期間 = N * ミリ秒 必須範囲: 0x01から0x3Cまで。 |
RSSI_sampling_period (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コントローラーは、受信したすべてのアドバタイズをホストに伝達する必要があります。 |
N = 0xXX | サンプリング間隔 (100 ミリ秒の倍数)。 期間= N * 100ミリ秒。 必須範囲: 0x01から0xFE |
0xFF | コントローラーは、受信したアドバタイズをホストに伝達することはできません。 |
モニターオプション (1 オクテット):
ビット番号 | パラメータの説明 |
---|---|
0 | コントローラーは、AdvA またはその解決された ID アドレスがPeer_device_addressおよびPeer_device_address_typeに一致し、TargetA が存在しない場合、または存在する場合は、スキャン フィルター ポリシーに基づいて TargetA が許可されている場合、それらの PTU が Condition_Type で指定された条件と一致する場合に、アドバタイズ PTU を監視します。 |
1 | コントローラーは、AdvA が Peer_device_IRK で解決可能であり、かつ、TargetA が存在しないか、存在する場合でもスキャンフィルターポリシーにより TargetA が許可されているときに、その PDU が Condition_Type で指定された条件に合致する場合に限り、アドバタイジング PDU を監視する必要があります。 リンク層プライバシーがコントローラで使用されている場合、このビットは設定されません。 |
2 | コントローラーは、スキャン フィルター ポリシーに基づいて TargetA が許可され、AdvA またはその解決された ID アドレスがPeer_device_addressおよびPeer_device_address_typeと一致する場合に、ダイレクト 広告の PDU を監視する必要があります。 これは、PDU がCondition_Typeで指定された条件と一致するかどうかに関係なく行われます。 |
3 | コントローラーは、スキャン フィルター ポリシーに基づいて TargetA が許可され、AdvA がPeer_device_IRKで解決できるダイレクト 広告 PTU を監視する必要があります。 これは、PDU がCondition_Typeで指定された条件と一致するかどうかに関係なく行われます。 リンク層プライバシーがコントローラで使用されている場合、このビットは設定されません。 |
4 | コントローラーは、Peer_device_address、Peer_device_address_type、またはPeer_device_IRKの値に関係なく、PDU がCondition_Typeで指定された条件と一致するかどうかに関係なく、スキャン フィルター ポリシーに基づいて TargetA が許可されているダイレクト 広告 PDU を監視する必要があります。 |
5 | コントローラーは、TargetA が存在しない AdvA からのアドバタイズ PTU を監視するか、存在する場合は、スキャン フィルター ポリシーに基づいて TargetA が許可されます (これらの PDU がCondition_Typeで指定された条件と一致する場合)。 |
他のすべてのビット | 将来の使用のために予約済み |
Advertisement_report_filtering_options (1 オクテット):
ビット番号 | パラメータの説明 |
---|---|
0 | 重複する広告の PDU をフィルター処理します。 このビットは、RSSI_sampling_periodが0x00されている場合にのみ設定されます。 |
1 | コントローラーは、指定されたMonitor_optionsと一致するレガシー広告PDUに対して、HCI_LE_Advertising_Reportイベント、HCI_LE_Directed_Advertising_Reportイベント、またはHCI_LE_Extended_Advertising_Reportイベントを生成する必要があります。 |
2 | コントローラーは、拡張アドバタイズのPDUが指定されたMonitor_optionsと一致する場合、HCI_LE_Extended_Advertising_Reportイベントを生成します。 |
3 | コントローラーは、指定されたMonitor_optionsに一致するダイレクトアドバタイズ PDU に対して、HCI_LE_Advertising_Reportイベント、HCI_LE_Directed_Advertising_Reportイベント、またはHCI_LE_Extended_Advertising_Reportイベントを生成する必要があります。 |
他のすべてのビット | 将来の使用のために予約済み |
Peer_device_address (6 オクテット):
価値 | パラメータの説明 |
---|---|
0xXXXXXXXXXXXX | 一致するパブリック デバイス アドレスまたはランダム デバイス アドレス。 |
Peer_device_address_type (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | パブリック デバイス アドレス |
0x01 | ランダム デバイス アドレス |
その他のすべての値 | 将来の使用のために予約済み |
Peer_device_IRK (16 オクテット):
価値 | パラメータの説明 |
---|---|
0x0000000000000000 00000000000000 | IRK が無効です。 Monitor_options ビット 1 が設定されている場合や、Monitor_options ビット 3 が設定されている場合、その値であってはなりません。 |
0xXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX | マッチするデバイスの IRK。 Peer_device_address と Peer_device_address_type が入力されます。 |
Condition_type (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x01 | 条件は、広告で一致する必要があるパターンです。 |
0x02 | 条件は UUID の種類と UUID です。 |
0x03 | 条件はIRKの解決です。 Monitor_options ビット 0、1、2、または 3 のいずれかが設定されている場合は除外されます。 |
0x04 | 条件は、Bluetooth アドレスの種類とBluetoothアドレスです。 Monitor_options ビット 0、1、2、または 3 のいずれかが設定されている場合は除外されます。 |
条件: 条件に適用できるフィールドは、Condition_typeの値によって異なります。 詳細については、「Condition_type」と「Condition」パラメーターのセクションを参照してください。
パターン数 (1 オクテット)
価値 | パラメータの説明 |
---|---|
0xXX | Pattern_data パラメーター内で指定されたパターンの数。 |
Pattern_data (>3 オクテット):
価値 | パラメータの説明 |
---|---|
長さ | このパターンの長さ。 |
データ型 | 広告セクションのデータ型。 値は、Bluetooth割り当て番号ドキュメントに一覧表示されます。 |
開始バイト | 指定したデータ型に一致するパターンの開始位置。 |
パターン | 一致するパターン (長さ - 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 オクテット):
価値 | パラメータの説明 |
---|---|
0xXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX | プライベート アドレスの解決に使用される IRK。 |
Address_type(1オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | パブリック デバイス アドレス。 |
0x01 | ランダム デバイス アドレス。 |
0x02から0xFFまで | 将来使用するために予約された値。 |
BD_ADDR (6 オクテット):
価値 | パラメータの説明 |
---|---|
0xXXXXXXXXXXXX | 監視するデバイスのBluetoothアドレス。 |
戻り値パラメーター
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x07 | コマンドを処理するのに十分なメモリがない場合、コントローラーはメモリ容量超過を返します。 |
エラー コード | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x03または0x0F | 送信されたコマンドに応じて、HCI_VS_MSFT_LE_Monitor_Advertisement [v1] または HCI_VS_MSFT_LE_Monitor_Advertisement [v2]のサブコマンドオペコード。 |
Monitor_handle (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00から0xFFまで | この規則のハンドル。 このハンドルは、アドバタイズの監視を取り消す 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 |
Status、 Subcommand_opcode |
コントローラーは、このコマンドに応答して、Command Completed イベントをすぐに生成します。
コマンド_パラメータ
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x04 | HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement のサブコマンド オペコード。 |
Connection_Handle (1 オクテット):
価値 | パラメータの説明 |
---|---|
0xXX | キャンセルされるフィルタのハンドル。 |
Return_parameters
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x07 | コマンドを処理するのに十分なメモリがない場合、コントローラーはメモリ容量超過を返します。 |
エラー コード | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x04 | HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement のサブコマンド オペコード。 |
マスクされない限り生成されるイベント
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、 有効にする |
Status、 Subcommand_opcode |
[ を有効にする] が 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 を発行して、Enable を 0x01 に設定することで、すべてのフィルター条件を再度有効化することができます。
[ の有効化] が [0x01] に設定されている場合、このコマンドにより、以前発行された HCI_VS_MSFT_LE_Monitor_Advertisement コマンドで設定されたすべてのフィルターが有効になります。 コントローラーは、フィルター状態を切り替えない場合、HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable コマンドを拒否します。
- コントローラーは、Enable が 0x01 に設定されたHCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable コマンドを以前に受け取った場合、Enable を 0x01 に設定したHCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable コマンドを拒否します。
- コントローラーは、HCI_VS_MSFT_LE_Set_Advertising_Filter_Enable コマンドを拒否する必要があります 有効にする 以前に HCI_VS_MSFT_LE_Set_Advertising_Filter_Enable コマンドを受け取った場合は 0x00 に設定されます 有効にする 0x00 に設定されます。
アドバタイズ フィルターの既定の状態はオフである必要があります。 この状態は、Enable が 0x00 に設定されたHCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable コマンドを以前に受け取ったコントローラーと同じです。 コントローラーは、このコマンドに応答して、Command Completed イベントをすぐに生成します。
コマンド_パラメータ
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x05 | HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable のサブコマンド オペコード。 |
有効にする(1オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | フィルター許可リストの現在の動作に戻しますが、条件 に基づいて、HCI_VS_MSFT_LE_Monitor_Advertisement コマンドを使用してデバイスの監視を続行します。 |
0x01 | コントローラーで、発行されたすべての HCI_VS_MSFT_LE_Monitor_Advertisement コマンドを有効にします。 |
リターンパラメータ
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x0C | コントローラーは戻ってくるはずです コマンドは禁止されています 以前にコントローラが HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable でコマンドを実行します 許可 このコマンドと同じ値に設定してください。 |
エラー コード | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x05 | HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable のサブコマンド オペコード。 |
マスクされない限り生成されるイベント
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 |
Status、 Subcommand_opcode、 Connection_Handle、 RSSI |
接続ハンドルは、RSSI が読み取られている ACL 接続を識別するためのコマンドと戻り値の両方のパラメーターとして提供されます。 RSSI メトリックは、±6 dB の精度で測定された dBm 単位の 絶対 受信信号強度です。 RSSI を読み取ることができない場合、RSSI メトリックは 127 に設定されます。 コントローラーは常に、Command Completed イベントを使用してこのコマンドをすぐに完了します。
コマンド_パラメーター
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x06 | HCI_VS_MSFT_Read_Absolute_RSSIのサブコマンドオペコード。 |
Connection_Handle (2 オクテット):
価値 | パラメータの説明 |
---|---|
0xXXXX | RSSI を読み取る必要がある BR/EDR 接続のハンドル。 |
戻りパラメータ
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01から0xFFまで | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様の エラー コード を参照してください。 |
Subcommand_opcode (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x06 | HCI_VS_MSFT_Read_Absolute_RSSIのサブコマンドオペコード。 |
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 が定義した Bluetooth HCI イベント
Microsoft が定義したすべてのBluetooth HCI イベントはベンダー定義イベントであり、イベント コード 0xFFを使用します。 Microsoft イベントのイベント データは常にバイトの定数文字列で始まり、Microsoft が定義したイベントを他のベンダー定義イベントと区別します。 定数文字列の長さと値は、コントローラー実装者によって定義され、HCI_VS_MSFT_Read_Supported_Featuresに応答して返されます。
HCI イベント | 説明 |
---|---|
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は、コントローラーが Bluetooth LE デバイスの監視を開始または停止したことを示します。 |
HCI_VS_MSFT_RSSI_Event
HCI_VS_MSFT_RSSI_Eventは、HCI_VS_MSFT_Monitor_Rssi コマンドが完了したことを示します。 Status パラメーターが 0 の場合、リモート デバイスの RSSI 値が指定した範囲外の値に変更されたため、コマンドは完了しました。 Status パラメーターが 0 以外の場合、接続の RSSI 値を監視できなくなるため、コマンドは完了しました。
出来事 | イベント コード | Microsoft イベント コード | イベント パラメーター |
---|---|---|---|
HCI_VS_MSFT_RSSI_Event | 0xFF | 0x01 | Event_prefix、 Microsoft_event_code、 Status、 Connection_Handle、 RSSI |
イベントパラメータ
Event_prefix (可変サイズ):
価値 | パラメータの説明 |
---|---|
イベント プレフィックス | このイベントに Microsoft 定義としてフラグを設定するイベント プレフィックス。 サイズおよび値は HCI_VS_MSFT_Read_Supported_Features 指図。 |
Microsoft_event_code (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x01 | HCI_VS_MSFT_RSSI_Eventのイベント コード。 |
Status (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | 成功。 接続の RSSI 値が、次のいずれかの条件を満たしている。 RSSI が RSSI_threshold_highに達したか超えました。 RSSI_threshold_low_time_interval 秒に対して RSSI が RSSI_threshold_low 以下になりました。 RSSI_sampling_period の有効期限が切れ、RSSI 値をホストに通知するためにこのイベントが生成されました。 |
0x01から0xFFまで | 失敗。 接続の RSSI 値を監視できなくなりました。 通常、エラー コードは、基になる ACL 接続が失われた理由を説明するコードの 1 つです。 |
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は、コントローラーが Bluetooth LE デバイスの監視を開始または停止したことを示します。
Monitor_state パラメーター値が 1 の場合、コントローラーは、指定されたBD_ADDRを使用してBluetooth デバイスの監視を開始します。 Monitor_state パラメーター値が 0 の場合、コントローラーは、指定したBD_ADDRを使用してBluetooth デバイスの監視を停止しました。
出来事 | イベント コード | Microsoft イベント コード | イベント パラメーター |
---|---|---|---|
HCI_VS_MSFT_LE_Monitor_Device_Event | 0xFF | 0x02 | Event_prefix、 Microsoft_event_code、 Address_type、 BD_ADDR、 Monitor_handle、 モニター状態 |
Monitor_state が 1 に設定されたHCI_VS_MSFT_LE_Monitor_Device_Eventをまだ生成していない場合、コントローラーは Monitor_state パラメーターを 0 に設定したHCI_VS_MSFT_LE_Monitor_Device_Eventを生成しません。
イベントパラメーター
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 オクテット):
価値 | パラメータの説明 |
---|---|
0xXXXXXXXXXXXX | デバイスのBluetoothアドレス。 |
Monitor_handle (1 オクテット):
価値 | パラメータの説明 |
---|---|
0xXX | HCI_VS_MSFT_LE_Monitor_Advertisement コマンドに指定されたフィルターのハンドル。 |
モニター状態 (1 オクテット):
価値 | パラメータの説明 |
---|---|
0x00 | コントローラーは、BD_ADDR および Monitor_handleで指定されたデバイスの監視を停止しました。 |
0x01 | コントローラーは、BD_ADDR および Monitor_handleで指定されたデバイスの監視を開始しました。 |
Microsoft が定義した AVDTP HCI コマンド
次の AVDTP HCI コマンドは、オーディオ サイドバンド A2DP オフロードのサポートを提供します。 詳細については、「オーディオ サイドバンド A2DP オフロード」を参照してください。
HCI AVDTP コマンド | 説明 |
---|---|
HCI_VS_MSFT_Avdtp_Capabilities_Configuration | オーディオ トランスポート インターフェイスを構成し、コーデック情報ブロックの一覧であるBluetooth コントローラーのコーデック機能を返します。 |
HCI_VS_MSFT_Avdtp_Open | コントローラー内の AVDTP オフロード リソースを割り当てて構成します。 |
HCI_VS_MSFT_Avdtp_Start | オーディオ トランスポートから送信された AVDTP メディア パケットへのオーディオ ストリーミングを開始します。 |
HCI_VS_MSFT_Avdtp_Suspend | HCI_VS_MSFT_Avdtp_Startによって開始されたストリーミング アクティビティを停止します。 |
HCI_VS_MSFT_Avdtp_Close | HCI_VS_MSFT_Avdtp_Openによって割り当てられた AVDTP オフロード リソースを解放します。 |
HCI_VS_MSFT_Avdtp_Capabilities_Configuration
HCI_VS_MSFT_Avdtp_Capabilities_Configurationオーディオ トランスポート インターフェイスを構成し、コーデック情報ブロックの一覧であるBluetooth コントローラーのコーデック機能を返します。 各コーデック情報ブロックは、サポートされている 1 つのコーデックを記述します。
以下の一部のパラメーターは可変長の構造体の配列であるため、これらのパラメーターはすべて 1 つの HCI コマンドと 1 つの対応する HCI イベントに収まるものと想定されています。
コマンドパラメータ
External_codec_count (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00-0xFF | 後に続くCodec_capability ブロックの数。 |
External_codec_capability(可変長):
Value | パラメーターの説明 |
---|---|
コーデック機能ブロック | コーデック機能情報で説明されているコーデック機能情報ブロック。 オーディオ インターフェイスに接続されているデバイスでサポートされる 1 つのコーデックについて説明します。 |
このデータ構造は、External_codec_count 回繰り返されます。
Audio_interface_parameter_count (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00-0xFF | 後続の Audio_interface_parameters の数。 |
オーディオインターフェースパラメーター(可変長)
Value | パラメーターの説明 |
---|---|
オーディオ インターフェイス パラメーター | 上記のようにオーディオ インターフェイス パラメーター。オーディオ インターフェイスに接続されているデバイスによって設定されます。 |
このデータ構造は、オーディオインターフェースパラメータ数 回繰り返されます。
リターンパラメータ (Return_parameters)
Status (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01-0xFF | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様のエラー コードを参照してください。 |
Subcommand_opcode _ (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x07 | HCI_VS_MSFT_Avdtp_Capabilities_Configuration のサブコマンド オペコード。 |
内部コーデック数 (1 オクテット)
Value | パラメーターの説明 |
---|---|
0x00-0xFF | 後に続くInternal_codec_capability ブロックの数。 |
Internal_codec_capability (可変長):
Value | パラメーターの説明 |
---|---|
コーデック機能ブロック | オーディオ サイドバンド A2DP オフロード で説明されているコーデック機能情報ブロック。 ここでは、Bluetooth コントローラーでサポートされる 1 つのコーデックについて説明します。 |
このデータ構造は Internal_codec_count 回繰り返されます。
オーディオインターフェースパラメーターカウント (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00-0xFF | 後続の Audio_interface_parameters の数。 |
オーディオインターフェースパラメータ(可変長)
Value | パラメーターの説明 |
---|---|
オーディオ インターフェイス パラメーター | 上記のオーディオ インターフェイス パラメーター。 ホスト ソフトウェアは、オーディオ インターフェイスに接続されているデバイスにこのパラメーターを渡します。 |
このデータ構造は Audio_interface_parameter_count 回繰り返されます。
HCI_VS_MSFT_Avdtp_Open
コントローラー内の AVDTP オフロード リソースを割り当てて構成します。
以下の一部のパラメーターは可変長の構造体の配列であるため、これらのパラメーターはすべて 1 つの HCI コマンドと 1 つの対応する HCI イベントに収まるものと想定されています。
コマンドパラメータ
Connection_handle (2 オクテット)
Value | パラメーターの説明 |
---|---|
0xXXXX | リモート デバイスに接続されている AVDTP メディア L2CAP チャネルを識別します。 |
L2cap_destination_cid(2オクテット)
Value | パラメーターの説明 |
---|---|
0xXXXX | AVDTP メディア チャネルの L2CAP 宛先 CID |
L2cap_mtu (2 オクテット)
Value | パラメーターの説明 |
---|---|
0xXXXX | L2CAP AVDTP メディアチャンネル MTU |
設定済みコーデック機能(可変長)
Value | パラメーターの説明 |
---|---|
コーデック機能ブロック | オーディオ サイドバンド A2DP オフロード で説明されているコーデック機能情報ブロック。 ここでは、AVDTP メディア用に構成されたコーデックについて説明します。 |
オーディオインターフェースパラメータ数 (1オクテット):
Value | パラメーターの説明 |
---|---|
0x00-0xFF | 後続の Audio_interface_parameters の数。 |
Audio_interface_parameter (可変長)
Value | パラメーターの説明 |
---|---|
オーディオ インターフェイス パラメーター | 上記のオーディオ インターフェイス パラメーター。 オーディオ インターフェイスに接続されているデバイスは、特定のストリーム インスタンスに対してこれらのパラメーターを指定します。 |
このデータ構造は Audio_interface_parameter_count 回繰り返されます。
戻り値パラメータ
Status (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01-0xFF | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様のエラー コードを参照してください。 |
Subcommand_opcode (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x08 | HCI_VS_MSFT_Avdtp_Openのサブコマンドオペコード。 |
Avdtp_offload_handle (2 オクテット):
Value | パラメーターの説明 |
---|---|
0xXXXX | オフロード ストリームに割り当てられたリソースを識別します。 |
Audio_interface_parameter_count (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00-0xFF | 後に続くオーディオインターフェースパラメータの数。 |
Audio_interface_parameter (可変長)
Value | パラメーターの説明 |
---|---|
オーディオ インターフェイス パラメーター | 上記のオーディオ インターフェイス パラメーター。 ホスト ソフトウェアは、ストリーム インスタンスのオーディオ インターフェイスに接続されているデバイスにこのパラメーターを渡します。 |
このデータ構造は Audio_interface_parameter_count 回繰り返されます。
HCI_VS_MSFT_Avdtp_Start
このコマンドは、オーディオ トランスポートから送信された AVDTP メディア パケットへのオーディオ ストリーミングを開始します。 このコマンドを実行すると、Bluetooth コントローラーは次のアクティビティを開始します。
- オーディオ トランスポートからオーディオ データを受信します
- エンコーダーが Bluetooth コントローラーにある場合は、オーディオ トランスポートから受信したデータをエンコードして、エンコードされたフレームを生成します
- エンコーダーがオーディオ DSP 内にある場合は、オーディオ トランスポートからエンコードされたフレームを抽出します
- エンコードされたフレームを AVDTP メディア ペイロードにアセンブルします
- メディア ペイロードを含む AVDTP メディア パケットを構築して送信する
コマンドパラメータ
Avdtp_offload_handle (2 オクテット):
Value | パラメーターの説明 |
---|---|
0xXXXX | オフロード ストリームに割り当てられたリソースを識別します。 |
Return_parameters
Status (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01-0xFF | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様のエラー コードを参照してください。 |
Subcommand_opcode (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x09 | HCI_VS_MSFT_Avdtp_Startのサブコマンドオペコード。 |
HCI_VS_MSFT_Avdtp_Suspend
HCI_VS_MSFT_Avdtp_Startによって開始されたストリーミング アクティビティを停止します。
コマンド_パラメータ
Avdtp_offload_handle (2 オクテット):
Value | パラメーターの説明 |
---|---|
0xXXXX | オフロード ストリームに割り当てられたリソースを識別します。 |
Return_parameters
Status (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01-0xFF | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様のエラー コードを参照してください。 |
Subcommand_opcode (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x0A | HCI_VS_MSFT_Avdtp_Suspendのサブコマンドオペコード。 |
HCI_VS_MSFT_Avdtp_Close
HCI_VS_MSFT_Avdtp_Openによって割り当てられた AVDTP オフロード リソースを解放します。
コマンド_パラメーター
Avdtp_offload_handle (2 オクテット):
Value | パラメーターの説明 |
---|---|
0xXXXX | 注: この値は、このコマンドの完了後に無効になります。 |
戻り値パラメータ
Status (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x00 | コマンドは成功しました。 |
0x01-0xFF | コマンドが失敗しました。 詳細については、Bluetooth Core 仕様のエラー コードを参照してください。 |
Subcommand_opcode (1 オクテット):
Value | パラメーターの説明 |
---|---|
0x0B | HCI_VS_MSFT_Avdtp_Closeのサブコマンドオペコード。 |
価値 | パラメータの説明 |
---|---|
0x00 | |
0x01 | コントローラーは、BD_ADDR および Monitor_handleで指定されたデバイスの監視を開始しました。 |
付録
このセクションには、Microsoft が定義した Bluetooth HCI 拡張機能の例と図が含まれています。
例: HCI_VS_MSFT_LE_Monitor_Advertisementのパターンの照合
この例では、受信した HCI_VS_MSFT_LE_Monitor_Advertisement コマンドと、コマンド パラメーターに対する 3 つの異なるアドバタイズ パケットの評価を示します。
受信した HCI_VS_MSFT_LE_Monitor_Advertisement コマンド HCI_VS_MSFT_LE_Monitor_Advertisement コマンドは、コントローラーによって受信され、次のパラメーターが含まれています。
パラメーター | 価値 | 注記 |
---|---|---|
Subcommand_opcode | 0x03 | HCI_VS_MSFT_LE_Monitor_Advertisement のサブコマンド オペコード |
RSSI閾値_高 | 0x01 | 1dB |
RSSI_threshold_low | 0xCE | -50dB |
RSSI_threshold_low_time_interval | 0x05 | 5 秒 |
RSSI_sampling_period | 0xFF | サンプリングなし |
条件タイプ | 0x01 | 条件 |
Condition | 0x02 | 2 つのパターンを照合する必要がある |
0x03 | 最初のパターンの長さ (AD の種類と開始位置を含む) | |
0x01 | AD の種類 | |
0x00 | AD タイプに従った開始位置 | |
0x01 | 一致する最初のパターン | |
0x06 | AD の種類と開始位置を含む、2 番目のパターンの長さ | |
0xFF | AD の種類 (製造元固有のデータ) | |
0x00 | AD タイプに従った開始位置 | |
0x00 | 一致する 2 番目のパターン | |
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 (マッチ!) |
AD 照合する 2 番目のパターンの種類 | 0xFF (製造元固有のデータ) |
一致する 2 番目のパターンの長さ | 0x06 - 0x02 = 0x04 バイト |
ADタイプ0xFFの位置0x00で一致するパターン | 0×00 0×06 0×FF 0×FF |
ADタイプ0xFFの0x00の位置のバイト | 0x00 0x06 0xFF 0xFF (マッチ!) |
判定: PASS (両方のパターンが一致)
アドバタイズメントパケット [B] の一致を評価しています
説明 | 価値 |
---|---|
AD マッチングする最初のパターンのタイプ | 0x01 |
一致する最初のパターンの長さ | 0x03 - 0x02 = 0x01 バイト |
ADタイプ0x01の位置0x00で一致するパターン | 0x01 |
ADタイプ0x01の0x00の位置のバイト | 0x01 (マッチ!) |
AD 照合する 2 番目のパターンの種類 | 0xFF (製造元固有のデータ) |
一致する 2 番目のパターンの長さ | 0x06 - 0x02 = 0x04 バイト |
ADタイプ0xFFの位置0x00で一致するパターン | 0×00 0×06 0×FF 0×FF |
ADタイプ0xFFの0x00の位置のバイト | 0x00 0x06 0xFF (一致しない) |
判定: 合格 (最初のパターンのみ一致)
広告パケットの一致を評価中 [C]
説明 | 価値 |
---|---|
AD マッチングする最初のパターンのタイプ | 0x01 |
一致する最初のパターンの長さ | 0x03 - 0x02 = 0x01 バイト |
ADタイプ0x01の位置0x00で一致するパターン | 0x01 |
ADタイプ0x01の0x00の位置のバイト | 未定義。 広告には、AD タイプ0x01 のデータがありません。 |
AD 照合する 2 番目のパターンの種類 | 0xFF (製造元固有のデータ) |
一致する 2 番目のパターンの長さ | 0x06 - 0x02 = 0x04 バイト |
ADタイプ0xFFの位置0x00で一致するパターン | 0×00 0×06 0×FF 0×FF |
ADタイプ0xFFにおける位置0x00のバイト数 | 0x00 0x06 0xFF 0xFF (マッチ!) |
評決: 過ぎる (2番目のパターンのみが一致します)
アドバタイズメントパケットの一致を評価中[D]
説明 | 価値 |
---|---|
AD マッチングする最初のパターンのタイプ | 0x01 |
一致する最初のパターンの長さ | 0x03 - 0x02 = 0x01 バイト |
ADタイプ0x01の位置0x00で一致するパターン | 0x01 |
ADタイプ0x01の0x00の位置のバイト | 0x02 (一致しない) |
AD 照合する 2 番目のパターンの種類 | 0xFF (製造元固有のデータ) |
一致する 2 番目のパターンの長さ | 0x06 - 0x02 = 0x04 バイト |
ADタイプ0xFFの位置0x00で一致するパターン | 0×00 0×06 0×FF 0×FF |
AD タイプ 0xFF の位置 0x00 にあるバイト数 | 0x00 0x06 0xFF 0x01 (一致しない) |
判定: FAIL (どちらのパターンも一致しない)
例: 広告の監視
この例では、RSSI アドバタイズの監視を示します。 指定した条件に一致した受信通知の RSSI 値を次に示します。
時間 (秒) | RSSI (デシベル) |
---|---|
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 |
十七 | 70- |
パラメーター | 価値 |
---|---|
RSSI_threshold_high | -10dB |
RSSIしきい値低 | -80 dB |
RSSI_threshold_low_time_interval | 3 秒 |
RSSI_sampling_period | 2 秒 |
アドバタイズメント RSSI が以下より大きい RSSI_threshold_high 時間3で。 サンプリングの定期的なタイマーは、時刻 3 で開始されます。 2 秒ごとに、定期的なタイマーが期限切れになり、受信したアドバタイズの平均 RSSI 値がスタックに伝達されます。
時間 5 で定期的なタイマーが期限切れになると、この時間 (-23dB) に受信したアドバタイズ RSSI の平均がスタックに伝達されます。
時間 13 で定期的なタイマーの有効期限が切れると、この期間中に受信したアドバタイズ RSSI の平均は、RSSI_threshold_low (-80dB) を下回ります。 アドバタイズメント RSSI の平均 (-85 dB) がホストに伝播されます。
インスタント 15 で RSSI_threshold_low_time_interval が期限切れになると、アドバタイズメントは -85dB の RSSI でホストに伝達されます。 この例では、それ以上のアドバタイズはホストに送信されません。
例: デバイスからの BAP アナウンスの監視
CAP アクセプタと結合されているが、接続されていない場合、ホストはそのデバイスからの BAP アナウンスを監視できます。
パラメーター | 価値 |
---|---|
Subcommand_opcode_v2 | 0x0F |
RSSI_threshold_high | -127 |
RSSI_threshold_low | -127 |
RSSI閾値の低い時間間隔 | 0x05 |
RSSI_sampling_period | 0x00 |
モニター_オプション | ビット 0 セット。デバイスが IRK を配布した場合に設定されるビット 1 |
広告レポートのフィルタリングオプション | ビット 0、1、および 2 は設定されました |
Peer_device_address | <address> |
ピアデバイスアドレスタイプ | <address type> |
Peer_device_IRK | <IRK、ビット 1 が> 設定されている場合 |
Condition_type | 0x01 |
パターン数 | 0x01 |
パターンデータ | 0x04 (length) 0x16 (サービス データ – 16 ビット UUID) 0x00 (開始バイト) 0x4E (ASCS UUID の下位バイト) 0x18 (ASCS UUID の上位バイト) |
例: デバイスからの CAP アナウンスの監視
CAP コマンダーと結び付けられますが、接続されていない場合、ホストはそのデバイスから CAP アナウンスを監視できます。
パラメーター | 価値 |
---|---|
Subcommand_opcode_v2 | 0x0F |
RSSI_threshold_high | -127 |
RSSI閾値低 | -127 |
RSSI_threshold_low_time_interval | 0x05 |
RSSI_sampling_period | 0x00 |
モニターオプション | ビット 0 セット。デバイスが IRK を配布した場合に設定されるビット 1 |
広告レポートフィルタリングオプション | ビット 0、1、および 2 設定 |
ピアデバイスアドレス | <address> |
ピアデバイスアドレスタイプ | <address type> |
Peer_device_IRK | <IRK、ビット 1 が設定されている場合> |
Condition_type | 0x01 |
パターンの数 | 0x01 |
パターンデータ | 0x04 (length) 0x16 (サービス データ – 16 ビット UUID) 0x00 (開始バイト) 0x53 (CAS UUID の下位バイト) 0x18 (CAS UUID の上位バイト) |
フローチャート: 公開通知とフィルターの受け入れリストのフィルター処理
このフローチャートでは、アドバタイズの受信時に、広告フィルター処理とフィルター受け入れリスト フィルター処理のコントローラー実装の例を示します。
コントローラーは、フローチャートで指定されているとおりにホストにアドバタイズまたは HCI_VS_MSFT_LE_Monitor_Device_Event が通知される限り、このロジックを異なる方法で実装できます。
シーケンス図: 広告に関連付けられているスキャン応答を伝達する
シーケンス図: 広告に関連付けられているスキャン応答を展開する
このシーケンス図は、アクティブなスキャンが有効な場合にアドバタイズ フィルターを満たすアドバタイズメントに関連付けられている伝達スキャン応答を示しています。 この図は、コントローラーとホストの間の予期されるイベントのシーケンスのみを示しており、コントローラーと特定のデバイスの間のイベントは示していません。 広告フィルターを満たす A 広告があり、アドバタイズ フィルターを満たさない B 広告があるとします。