web-dev-qa-db-ja.com

BlueZでBLE広告の頻度を増やす方法はありますか?

Linuxコンピューターで、次のコマンドを使用してBLEアドバタイズをブロードキャストしています。

 Sudo hciconfig hci0 up
 Sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
 Sudo hciconfig hci0 leadv 3

これはうまく機能しますが、コンピュータはBluetooth広告を1秒に1回だけブロードキャストします。この頻度を毎秒10回以上に増やしたい。 BlueZで広告の頻度を増やす方法はありますか?または、1秒に1回が標準で変更不可能ですか?コマンドラインツールでできない場合は、C APIを使用してこれを実行できます。

21
jjnebeker

私はそれを理解したと思います。

の代わりに:

Sudo hciconfig hci0 up
Sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
Sudo hciconfig hci0 leadv 3

これを行う:

Sudo hciconfig hci0 up
Sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
Sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 03 00 00 00 00 00 00 00 00 07 00
Sudo hcitool -i hci0 cmd 0x08 0x000a 01

2番目のhcitoolコマンド(0x08 0x0006)は「LE Set Advertising Parameters。最初の2バイトA0 00は「最小間隔」です。2番目の2バイトA0 00は「最大間隔」です。この例では、アドバタイズメントを100msに設定します。この設定の精度は0.625msであるため、間隔を01 00に設定すると、アドバタイズメントは0.625msごとに設定されます。A000に設定すると、アドバタイズメントは0xA0 * 0.625ms = 100msごとに設定されます。 40 06は、アドバタイズを0x0640 * 0.625ms = 1000msごとに設定します。5番目のバイト03は、アドバタイズモードを接続不可に設定します。接続できないアドバタイズの場合、アドバタイズできる最高速は100ミリ秒で、接続可能なアドバタイズメント( 0x00)はるかに速く宣伝できます。

3番目のhcitoolコマンド(0x08 0x000a)は「LE Set Advertise Enable」です。 「hciconfig hci0 leadv 3」は自動的に広告レートを遅いデフォルトの1280msに設定するため、hciconfigではなくhcitoolを使用してこのコマンドを発行する必要があります。

これは、質問に投稿した元のコマンドを実行すると同時にhcidumpを実行することでわかりました。これは、bluezによって実行される一連の生のhcitoolコマンド(それらが何をするかについてうまく注釈が付けられている)を示しています。 hcidumpの出力から、「hciconfig hci0 leadv 3」が遅いアドバタイジングインターバルコマンドを発行していることに気づきました。

これはすべてIOGear GBU521に基づいているため、他のBluetooth LEチップセットでは動作しない場合があります。

46
davidgyoung