btmgmtによるBluetoothスキャンパラメータの変更

btmgmtによるBluetoothスキャンパラメータの変更

ペイロードを動的に変更するブレーコン広告を検索しています。したがって、できるだけ少ない広告を見逃したいと思います。

現在、bluetoothctlとWiresharkを介してスキャン出力を監視します。私のビーコンは10秒ごとに放送し、3つのチャンネルのそれぞれに2つのメッセージを送信します。

目標は、チャンネルの 1 つから両方のメッセージを 1 回以上キャプチャすることです。

現在何も正常に受信できないまま最大20~30秒の空白を経験しています。

私がしていること:

bluetouthctl、「スキャン」をオンにする

Wireshark、Bluetoothで各Bluetoothデバイスを監視する

"btmgmt"を調べた後、次の動作が見つかりました。

hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
[mgmt]# 

検索間隔やウィンドウを変更していません。検索が次のようにオンとオフになるようです。 10秒オン、5秒オフ。

これは、私が本質的に視覚障害者になる時間枠が常に5秒であることを意味します。

この動作を変更する方法をご存知ですか?

最高、

答え1

Bluezユーティリティは、シンプルで内部的にいくつかのロジックを実装し、HCIと同じ機能を提供しない(つまり、連続パッシブスキャンを実行できない)MGMTカーネルインタフェース(HCIではない)を使用します。

カーネルMGMTインターフェースを使用して開始された検索(検索)は10秒間のみ続きます(Bluetoothカーネルモジュールで定義されています)。その後、Bluezは検索が終了したことを通知し、Bluezは検索を再開します(検索フィルタが設定されている場合はすぐに、そうでなければ5秒後)。

解決策:

  • HCIインタフェースを使用する(コマンドはhcitool lescanうまく機能します。ソースコードを参照として使用するか、事前に作成されたライブラリを探します)
  • Bluetoothカーネルモジュールを変更し、Bluezを使用してdiscoveryFilter(RSSI -127など)を設定します。

関連情報