使用Qt的两个"QLowEnergyController"实例连接到两个BLE设备
Using two instances of Qt's `QLowEnergyController` to connect to two BLE devices
问题
我想使用Qt的蓝牙低能耗连接到两个BLE设备。
系统
- 操作系统:Arch Linux 4.13.8
- bluez版本:5.47
- BLE适配器:剑桥硅无线电有限公司蓝牙软件狗(HCI模式)
解决方案
我使用了两个QLowEnergyController实例,如下所示:
controller0 = QLowEnergyController::createCentral(qBluetoothDeviceInfoBLE0, this));
controller1 = QLowEnergyController::createCentral(qBluetoothDeviceInfoBLE1, this));
如果然后成功地与BLE0
连接,并且在发射信号connected()
之后,我发起到BLE1
的连接。与BLE0
的连接将中止:
qt.bluetooth.bluez: Cannot connect due to pending active LE connections
qt.bluetooth.bluez: void QBluetoothSocketPrivate::_q_readNotify() 17 error: -1 "Software caused connection abort"
并且将成功地建立到CCD_ 5的连接。
已找到
我在QLowEnergyControllers:中发现了这样的描述
值得一提的是,一些平台,如基于BlueZ的Linux无法维护QLowEnergyController的两个连接实例到同一远程设备
注意:BLE0
和BLE1
是不同的远程设备。
我还可以确认,连接到相同的设备适用于我的bluez版本。当使用nodejs的package noble时,它也可以工作。
问题
- 它应该像我上面做的那样工作吗?(连接
BLE0
,然后连接BLE1
) - 我正在考虑使用第二个适配器,QBluetooth只能使用一个适配器(默认适配器)是正确的吗
- 有人能想出什么变通办法吗
目前已修复(QT 5.11,BlueZ 5.50,Raspian,用RPi 4测试)。我可以很容易地创建两个QLowEnergyController
实例。
但是,一次只能有一个活动的QBluetoothDeviceDiscoveryAgent
。这意味着必须首先发现所有设备,然后通过为每个外围设备创建一个单独的QLowEnergyController
对象来连接它们。
下面是一个很好的例子https://bugreports.qt.io/browse/QTBUG-73809
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将fold表达式与std::一起用于两个元组
- 如何在C++中比较两个char数组
- 给定两个偶数,求出它们之间所有偶数的平方和
- 比较两个大小不等的映射c++
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 如何在for循环中包含两个索引值的测试条件
- 在声明中合并两个常量"std::set"(不是在运行时)
- 使用Qt的两个"QLowEnergyController"实例连接到两个BLE设备