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

问题描述

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

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

[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 */

但这似乎对我不起作用。

解决方法

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...