加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bluez自动重新连接设备

发布时间:2020-12-14 02:14:19 所属栏目:Linux 来源:网络整理
导读:我正在用C/C++编写一个用于蓝牙低功耗设备的库.到目前为止,我一直在使用Bluez公开的D-Bus接口,并能够发现,连接并与设备通信. 但是,当设备由于链路故障或超出范围而断开连接时,重新连接到它并非易事.理想情况下,我希望能够创建到所有断开连接的设备的挂起连接
我正在用C/C++编写一个用于蓝牙低功耗设备的库.到目前为止,我一直在使用Bluez公开的D-Bus接口,并能够发现,连接并与设备通信.

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

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读