【发布时间】:2021-01-07 11:42:48
【问题描述】:
起初我可以配对并连接到设备,它按预期工作。 但我无法理解配对过程的一些特殊性。
如果此操作对之间没有暂停,trust,connect bluetoothctl 日志如下所示:
[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 */
但这似乎不适合我。
【问题讨论】: