あるマシンでの BLE アクティブ スキャンが別のマシンで接続の問題を引き起こすという問題があります。誰かがその理由を説明し、修正方法について提案を提供できれば、私は傷つきました.
私のコードが行うことの大まかなバージョンを単純なスクリプトに分解しました。
マシン 1:
sudo stdbuf -oL hcidump -X |tee hci.log &
sudo hcitool lewlclr
sudo hcitool lewladd 68:C9:0B:xx:xx:01
sudo hcitool lewladd 68:C9:0B:xx:xx:02
sudo hcitool lewladd 68:C9:0B:xx:xx:03
sudo hcitool lewladd 68:C9:0B:xx:xx:04
sudo hcitool lewladd 68:C9:0B:xx:xx:05
sudo hcitool lewladd 68:C9:0B:xx:xx:06
while true; do sudo hcitool lecc --whitelist; if [ $? == 1 ] ; then sleep 20; else sleep 1; sudo hcitool ledc 64 ; fi; done
上記は問題なく動作します
ただし、別のマシンで次を実行すると、接続の問題が発生します。
sudo hcitool lescan --duplicates
hci ログから、通常の接続は次のようになります。
< HCI Command: LE Create Connection (0x08|0x000d) plen 25
bdaddr 00:00:00:00:00:00 type 0
interval 4 window 4 initiator_filter 1
own_bdaddr_type 0 min_interval 15 max_interval 15
latency 0 supervision_to 3200 min_ce 1 max_ce 1
> HCI Event: Command Status (0x0f) plen 4
LE Create Connection (0x08|0x000d) status 0x00 ncmd 1
> HCI Event: LE Meta Event (0x3e) plen 19
LE Connection Complete
status 0x00 handle 64, role master
bdaddr 68:C9:0B:xx:xx:xx (Public)
< HCI Command: Disconnect (0x01|0x0006) plen 3
handle 64 reason 0x13
Reason: Remote User Terminated Connection
> HCI Event: Command Status (0x0f) plen 4
Disconnect (0x01|0x0006) status 0x00 ncmd 1
> HCI Event: Disconn Complete (0x05) plen 4
status 0x00 handle 64 reason 0x16
Reason: Connection Terminated by Local Host
悪い接続は次のとおりです。
< HCI Command: LE Create Connection (0x08|0x000d) plen 25
bdaddr 00:00:00:00:00:00 type 0
interval 4 window 4 initiator_filter 1
own_bdaddr_type 0 min_interval 15 max_interval 15
latency 0 supervision_to 3200 min_ce 1 max_ce 1
> HCI Event: Command Status (0x0f) plen 4
LE Create Connection (0x08|0x000d) status 0x00 ncmd 1
> HCI Event: LE Meta Event (0x3e) plen 19
LE Connection Complete
status 0x00 handle 64, role master
bdaddr 68:C9:0B:xx:xx:xx (Public)
> HCI Event: Disconn Complete (0x05) plen 4
status 0x00 handle 64 reason 0x3e
Reason: Connection Failed to be Established
< HCI Command: Disconnect (0x01|0x0006) plen 3
handle 64 reason 0x13
Reason: Remote User Terminated Connection
> HCI Event: Command Status (0x0f) plen 4
Disconnect (0x01|0x0006) status 0x12 ncmd 1
Error: Invalid HCI Command Parameters
注: 最後の 2 つのエントリ (Invalid HCI Command Parameters) は、スクリプトの粗さが原因であり、接続の失敗が原因でのみ発生します。
注目すべきは、接続が確立されているように見えますが、「できませんでした (接続が確立されませんでした)」と表示されます。これは私には少し混乱しているようです。
これをさまざまなマシンで試しました。(デスクトップ PC と RPi3)