蓝牙(Linux / BlueZ)对超时还是什么?

时间:2020-09-21 11:21:23

标签: bluetooth bluez hci

首先,我可以配对并连接到设备,它可以正常工作。 但是我无法理解配对过程的一些特殊之处。

如果此操作对之间没有暂停的位置,则信任,连接蓝牙日志如下所示:

[bluetooth]#pair FC:58:FA:XX:XX:XX
Attempting to pair with FC:58:FA:XX:XX:XX
[bluetooth]# trust  FC:58:FA:XX:XX:XX
[bluetooth]#                               [CHG] Device FC:58:FA:XX:XX:XX Trusted: yes
[bluetooth]#                               Changing FC:58:FA:XX:XX:XX trust succeeded
[bluetooth]#connect  FC:58:FA:XX:XX:XX
Attempting to connect to FC:58:FA:XX:XX:XX
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX Connected: yes
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX ServicesResolved: yes
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX Paired: yes
[ERGO BTS-520]#                            Connection successful
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000111e-0000-1000-8000-00805f9b34fb

使用Ubuntu蓝牙连接管理器可以观察到这种行为。

但是在我自己的BT管理器实现中,配对和连接操作之间存在一些延迟(2-3秒以上),在这种情况下,bluetoothctl的日志绝对不同:

[bluetooth]# pair FC:58:FA:XX:XX:XX
Attempting to pair with FC:58:FA:XX:XX:XX
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX Connected: yes
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX ServicesResolved: yes
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX Paired: yes
[ERGO BTS-520]#                            Pairing successful
[ERGO BTS-520]# trust FC:58:FA:XX:XX:XX
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX Trusted: yes
[ERGO BTS-520]#                            Changing FC:58:FA:XX:XX:XX trust succeeded
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX ServicesResolved: no
[bluetooth]#                         [CHG] Device FC:58:FA:XX:XX:XX Connected: no
[bluetooth]# connect FC:58:FA:XX:XX:XX
Attempting to connect to FC:58:FA:XX:XX:XX
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX Connected: yes
[ERGO BTS-520]#                            Connection successful
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[ERGO BTS-520]#                            [CHG] Device FC:58:FA:XX:XX:XX ServicesResolved: yes

如果配对后2-3秒内没有连接到设备,则设备状态将更改为“已断开连接”。

由于依赖设备属性更改的顺序(ServicesResolved,Connected等),我的BT管理器逻辑被破坏了。

BlueZ或linux HCI子系统是否以某种方式描述了此行为?

感谢您的帮助。

PS: 我知道这个内核头参数,甚至尝试通过增加值来使用它。

HCI_DISCONN_TIMEOUT     msecs_to_jiffies(2000)  /* 2 seconds */
HCI_CMD_TIMEOUT     msecs_to_jiffies(2000)  /* 2 seconds */
HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(2000)  /* 2 seconds */

但这似乎对我不起作用。

1 个答案:

答案 0 :(得分:3)

不确定我能理解你的问题。配对通常是一次性设置步骤,在该步骤中交换密钥并建立设备为受信任的设备。我希望一旦安装完成,设备就会断开连接。

后续连接不需要先进行配对步骤。您将进行连接和服务发现,因为两台设备已经配对并且受信任。

Bluetooth SIG网站上的一系列博客中讨论了配对过程:https://www.bluetooth.com/blog/bluetooth-pairing-part-1-pairing-feature-exchange/