From f57507c5ea62a964cf848ad7fbfefbfe63ef40a4 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 16 Oct 2019 14:59:29 +0200 Subject: [PATCH] Nuimo: Make it work with Bluez 5.48 (except battery service) --- senic/nuimo.cpp | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/senic/nuimo.cpp b/senic/nuimo.cpp index 9b1337a8..1b720e79 100644 --- a/senic/nuimo.cpp +++ b/senic/nuimo.cpp @@ -305,7 +305,13 @@ void Nuimo::onConnectedChanged(bool connected) if (!connected) { // Clean up services m_deviceInfoService->deleteLater(); - m_batteryService->deleteLater(); + + // FIXME: As of BlueZ 5.48, the Battery service isn't expose in the same way any more. + // Until that's fixed m_batteryService might never be initialized + if (m_batteryService) { + m_batteryService->deleteLater(); + } + m_ledMatrixService->deleteLater(); m_inputService->deleteLater(); @@ -327,11 +333,13 @@ void Nuimo::onServiceDiscoveryFinished() return; } - if (!m_bluetoothDevice->serviceUuids().contains(QBluetoothUuid::BatteryService)) { - qCWarning(dcSenic()) << "Battery service not found for device" << bluetoothDevice()->name() << bluetoothDevice()->address().toString(); - emit deviceInitializationFinished(false); - return; - } + // FIXME: As of BlueZ 5.48, the Battery service isn't expose in the same way any more. + // For now we're deactivating this check to make the Nuimo still work despite the broken battery info +// if (!m_bluetoothDevice->serviceUuids().contains(QBluetoothUuid::BatteryService)) { +// qCWarning(dcSenic()) << "Battery service not found for device" << bluetoothDevice()->name() << bluetoothDevice()->address().toString(); +// emit deviceInitializationFinished(false); +// return; +// } if (!m_bluetoothDevice->serviceUuids().contains(ledMatrinxServiceUuid)) { qCWarning(dcSenic()) << "Led matrix service not found for device" << bluetoothDevice()->name() << bluetoothDevice()->address().toString(); @@ -366,15 +374,18 @@ void Nuimo::onServiceDiscoveryFinished() m_batteryService = m_bluetoothDevice->controller()->createServiceObject(QBluetoothUuid::BatteryService, this); if (!m_batteryService) { qCWarning(dcSenic()) << "Could not create battery service."; - emit deviceInitializationFinished(false); - return; - } - connect(m_batteryService, &QLowEnergyService::stateChanged, this, &Nuimo::onBatteryServiceStateChanged); - connect(m_batteryService, &QLowEnergyService::characteristicChanged, this, &Nuimo::onBatteryCharacteristicChanged); + // FIXME: As of BlueZ 5.48, the Battery service isn't expose in the same way any more. + // For now we're deactivating this check to make the Nuimo still work despite the broken battery info +// emit deviceInitializationFinished(false); +// return; + } else { + connect(m_batteryService, &QLowEnergyService::stateChanged, this, &Nuimo::onBatteryServiceStateChanged); + connect(m_batteryService, &QLowEnergyService::characteristicChanged, this, &Nuimo::onBatteryCharacteristicChanged); - if (m_batteryService->state() == QLowEnergyService::DiscoveryRequired) { - m_batteryService->discoverDetails(); + if (m_batteryService->state() == QLowEnergyService::DiscoveryRequired) { + m_batteryService->discoverDetails(); + } } }