Bluez 自动重新连接设备

Posted

技术标签:

【中文标题】Bluez 自动重新连接设备【英文标题】:Bluez auto reconnect devices 【发布时间】:2015-11-24 03:43:45 【问题描述】:

我正在为蓝牙低功耗设备编写 C/C++ 库。到目前为止,我一直在使用 Bluez 公开的 D-Bus 接口,并且能够发现、连接和与设备通信。

但是,当设备由于链路故障或超出范围而断开连接时,重新连接并非易事。理想情况下,我希望能够为所有断开连接的设备创建挂起的连接,但 Bluez 似乎不支持这一点。 Bluez 似乎只支持一个同时连接调用,在 15-20 秒后超时。

因此,一种解决方案是监听广告包,并在检测到已知设备时连接。 #bluez 上的好心人告诉我,这已经实现了,方法是用 GattManager1 RegisterProfile 方法注册一个实现 GattProfile1 的对象。尝试这个没有结果,设备在链接失败后保持断开连接。它的文档也很差,所以我很可能错过了一些东西。

我的问题是:这是正确的解决方案吗?它会提供无缝且快速的重新连接吗?如果是,有什么问题?

【问题讨论】:

【参考方案1】:

如果您想重新连接单个蓝牙设备,您可以通过接收org.freedesktop.DBus.Properties.PropertiesChanged来监控连接状态,并在必要时调用org.bluez.Device1.Connect重新连接。由于这会超时,您可以将Connect() 放入一个循环中,只有当org.bluez.Device1.Connected 属性为真时您才会退出。

原作者是否已经通过实现 GattProfile1 为多个设备做到了这一点?

【讨论】:

以上是关于Bluez 自动重新连接设备的主要内容,如果未能解决你的问题,请参考以下文章

从 Bluez 5.48 开始,iPhone 在连接 BLE GAP 外围设备时需要配对,为啥?

[BlueZ] 2使用bluetoothctl搜索连接配对读写使能notify蓝牙低功耗设备

如何在 C++ 中使用 Bluez5 DBUS API 来配对和连接新设备?

使用 DBus 和 Bluez 将数据写入蓝牙设备

BlueZ DBUS API - GATT 接口对 BLE 设备不可用

Bluez 5 未知连接标识符