Использование двух экземпляров Qt `QLowEnergyController` для подключения к двум устройствам BLE
проблема
Я хочу использовать Bluetooth Low Energy Qt для подключения к двум устройствам BLE.
система
- ОС: Arch Linux 4.13.8
- версия bluez: 5.47
- Адаптер BLE: Bluetooth- адаптер Cambridge Silicon Radio, Ltd (режим HCI)
Решение
Я использую два экземпляра QLowEnergyControllers, как это:
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"
... и связь с BLE1
будет установлено успешно.
Найденный
Я нашел это описание в QLowEnergyControllers:
Важно отметить, что некоторые платформы, такие как Linux на основе BlueZ, не могут поддерживать два подключенных экземпляра QLowEnergyController на одном и том же удаленном устройстве.
Замечания: BLE0
а также BLE1
разные удаленные устройства.
Я также могу подтвердить, что подключение к тем же устройствам работает с моей версией bluez. Это также работает при использовании пакета noblejs Nojjs.
Вопросы
- Должно ли это работать, как я сделал это выше? (присоединиться
BLE0
и послеBLE1
)? - Я думал об использовании второго адаптера, правильно ли, что QBluetooth может использовать только один адаптер (по умолчанию)?
- Может кто-нибудь придумать какой-нибудь обходной путь?
0 ответов
Сейчас это исправлено (QT 5.11, BlueZ 5.50, Raspian, проверено с RPi 4). Я легко могу создать два экземпляраQLowEnergyController
.
Однако может быть только один QBluetoothDeviceDiscoveryAgent
активны одновременно. Это означает, что нужно сначала обнаружить все устройства, а затем подключиться к ним, создав отдельныйQLowEnergyController
объект для каждого периферийного устройства.
Вот отличный короткий пример https://bugreports.qt.io/browse/QTBUG-73809