ペイロードを動的に変更するブレーコン広告を検索しています。したがって、できるだけ少ない広告を見逃したいと思います。
現在、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など)を設定します。