带有Qt的Linux上的Bluetooth 5.0。与BT4.x

时间:2019-07-19 13:54:27

标签: linux qt bluetooth-lowenergy

我有一个在Linux上与Qt一起运行的Bluetooth LE程序,可以与Nordic nrf52设备通信。我最初是从具有BT4.0模块的笔记本电脑开始的,然后切换到4.2版笔记本电脑以利用更大的MTU。一切都很好,我设置了具有两个特征的自定义服务,并将240字节的数据包从笔记本电脑传输到了北欧。

我最近有一部LG Gram 17-再次运行Linux-一直在挣扎。我可以扫描并很好地连接到设备,但是Qt [和/或Bluez]无法接收所有服务,并且特性以错误的句柄返回。

因此,对于BT4.x笔记本电脑,当连接到我的nrf设备时,它将使用标准服务1800和1801以及我的自定义特征及其UUID。

然后选择定制服务,我将获得两个特征,分别是句柄0x10和0x13。

但是,当在带有BT5.0模块的新笔记本电脑上使用相同的程序时,我只会看到服务1801和我的自定义服务,而我的自定义服务会返回带有不同句柄的两个特征。

我使用tcpdump查看蓝牙流量,这两个4.x流量与5.0完全不同。使用4.x设备,我可以看到它专门与正确的BT地址对话,甚至提到了设备名称。使用带有BT5模块的新笔记本电脑,似乎没有记录到此类流量。

我已经对此进行了Google搜索,看不到任何提示应该存在问题的信息。我可以使用运行在OnePlus 6手机上的浅蓝色程序,该手机具有BT5.0,可以很好地写入我的自定义特征。我在北欧设置了一个断点,从运行BT5.0的电话发送的数据进入北欧。从笔记本电脑没有。这使我相信问题出在笔记本电脑上,而不是BT5.0或Nordic。

FWIW:

bluetoothctl --version
bluetoothctl: 5.50

Qt版本为5.12.2。

如果有人能指出我正确的方向,或者甚至告诉我Bluez和/或Qt无法应付BT5.0,我将不胜感激。如果还有其他有用的信息,请告诉我,我会提供。

编辑:我已经通过使用UUID解决了此问题,而不是Qt / Bluez从发现的特征中拾取的句柄。我不知道Qt还是Bluez这个问题。如果找到了,我会回发。

0 个答案:

没有答案