我正在用C / C ++编写一个用于蓝牙低功耗设备的库。到目前为止,我一直在使用Bluez公开的D-Bus接口,并能够发现,连接并与设备通信。
但是,当设备由于链路故障或超出范围而断开连接时,重新连接到它并非易事。理想情况下,我希望能够为所有断开连接的设备创建挂起的连接,但Bluez似乎并不支持这种连接。似乎Bluez只支持一个同时连接呼叫,在15-20秒后超时。
因此,解决方案是监听广告包,并在检测到已知设备时进行连接。 #bluez上的优秀人员告诉我,这已经实现了,实现它的方法是使用GattManager1 RegisterProfile方法注册实现GattProfile1的对象。尝试此操作没有结果,设备在链接失败后保持断开连接。它的记录也很差,所以我很有可能错过了一些东西。我的问题是:这是正确的解决方案吗?它会提供无缝和快速的重新连接吗?如果是,那可能是什么错误?
答案 0 :(得分:2)
如果您想重新连接到单个蓝牙设备,可以通过接收org.freedesktop.DBus.Properties.PropertiesChanged
来监控连接状态,并在必要时调用org.bluez.Device1.Connect
重新连接。由于这会超时,您可以将Connect()
放在循环中,只有当org.bluez.Device1.Connected
属性为true时才会退出。
原作者是否通过实施GattProfile1设法为多个设备做了这个?