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 来配对和连接新设备?