首页 > 解决方案 > 带有 Qt 的 Linux 上的蓝牙 5.0。与 BT4.x 相比的问题

问题描述

我有一个在 Linux 上运行 Qt 的蓝牙 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 模块的新笔记本电脑,似乎没有记录此类流量。

我用谷歌搜索了这个,看不到任何说应该有问题的东西。我可以使用运行 na OnePlus 6 手机的 Light Blue 程序,它具有 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。如果我发现,我会回帖。

标签: linuxqtbluetooth-lowenergy

解决方案


推荐阅读