Bluez:“Connect()”方法返回和“已连接”信号之间的区别

Bluez:“Connect()”方法返回和“已连接”信号之间的区别

根据 Bluez API 文档(设备接口) 该方法的返回Connect()表示一个或多个配置文件的成功连接:

无效连接()

(跳过)

如果至少一个配置文件已成功连接,则此方法将指示成功。

同时还有一个Connected属性,描述为:

布尔值 已连接 [只读]

指示远程设备当前是否已连接。 PropertiesChanged 信号指示此状态的更改。

在实践中,方法的返回和通知属性被设置的信号Connect()的到达似乎相隔几秒钟。PropertiesChangedConnectedtrue

运行 bluetoothctl 时:

[bluetooth]# connect XX:XX:XX:XX:XX:XX
Attempting to connect to XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
Connection successful

D-Bus 上捕获以下消息:

方法调用时间=1646854334.904791 发送者=:1.521 -> 目的地=org.bluez 序列=50 路径=/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX;接口=org.bluez.Device1;会员=连接
信号时间=1646854336.902736 发送者=:1.128 -> 目的地=(空目的地) 序列=10521 路径=/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX;接口=org.freedesktop.DBus.Properties;成员=属性已更改
   字符串“org.bluez.Device1”
   大批 [
      字典条目(
         字符串“已连接”
         变体布尔值 true
   ]
   大批 [
   ]

方法返回时间=1646854339.349113 发送者=:1.128 -> 目的地=:1.521 序列=10522 回复序列=50

这告诉我们:

  • 当属性更改为信号 ( ) 所报告的[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes时,屏幕上会出现。Connectedtruetime=1646854336.902736
  • 当该方法返回 ( ) 时,将出现该Connection successful消息。Connect()time=1646854339.349113
  • 这些事件发生的间隔为 2.4 秒。

问题是这两个事件之间有什么区别,哪一个事件实际上表示蓝牙设备已连接?

(断开设备连接时,Disconnect()方法返回和信号到达0.003相隔几秒)。


环境:Linux 内核:5.4-179、Bluez:5.62-r3、Systemd 249.9:。

答案1

信号的到来Connected表明低层链路的建立(前交叉韧带)。

该方法的返回Connect()表明至少有一个轮廓连接成功(更高级别的连接)。

相关内容