linux - 带有 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。如果我发现,我会回帖。
解决方案
推荐阅读
- java - Hibernate自引用关系外键约束问题
- spring-boot - 为什么多个访问令牌在 Keycloak 中起作用?
- java - 如何解决“当列表中的数据混合时,cassandra 列表上的并发写入问题”..?
- python-3.x - 如何在不同的函数中访问局部变量
- google-apps-script - 在 Google Apps Script API 中使用 batchUpdate 更新背景颜色
- java - 如何在 Android 中创建文本字段以在 Flutter 应用中使用
- python - 如何设置 Pandas 以提取某些列的某些行并将它们堆叠在一起?
- c# - efcore 2.2 中的多租户配置
- wordpress - Wordpress 管理区域,添加固定弹出窗口的最佳操作
- python - 基于熊猫列数的自定义分组