2015-08-29 78 views
5

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

但是,当由于链路故障或超出范围而导致设备断开连接时,重新连接到该设备并非微不足道。理想情况下,我希望能够为所有断开连接的设备创建待定连接,但Bluez似乎不支持该连接。 Bluez似乎只支持一次同时连接呼叫,它在15-20秒后超时。

因此,解决方案将是侦听广告包,并在检测到已知设备时进行连接。 #bluez上的优秀人士告诉我,这已经实现了,而实现它的方法是使用GattManager1 RegisterProfile方法注册一个实现GattProfile1的对象。尝试这样做没有结果,设备在链接失败后保持断开状态。它的记录也很差,所以很有可能我错过了一些东西。

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

回答

2

如果您希望重新连接到单个蓝牙设备,您可以通过接收org.freedesktop.DBus.Properties.PropertiesChanged来监视连接状态,并在需要时调用org.bluez.Device1.Connect重新连接。由于这会超时,因此您可以将Connect()置于循环内,只有在org.bluez.Device1.Connected属性为true时才会退出。

原始作者是否设法通过实现GattProfile1来为多个设备做到这一点?