diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2017-02-14 11:06:55 +0100 |
---|---|---|
committer | Kari Hautamäki <kari.hautamaki@qt.io> | 2017-02-14 14:04:47 +0000 |
commit | cc73478e1ff48a6e469d3856c552e7a5e3d5023d (patch) | |
tree | 29a4d2ebd8dc262d789d71754ccbbd306975dd88 /tradeshow/iot-sensortag/bluetoothdevice.cpp | |
parent | 25aa7288205ba8371466768392a3be02a5c8f5d7 (diff) |
iot-sensortag: Rework service discovery
Instead of iterating over the list of the controller's services
after discovery is finished, handle the found services one by one
when the according serviceDiscovered signal is emitted.
Change-Id: I84d879059222189fb106e085bd9f2e4d3cb44bb5
Reviewed-by: Kari Hautamäki <kari.hautamaki@qt.io>
Diffstat (limited to 'tradeshow/iot-sensortag/bluetoothdevice.cpp')
-rw-r--r-- | tradeshow/iot-sensortag/bluetoothdevice.cpp | 119 |
1 files changed, 53 insertions, 66 deletions
diff --git a/tradeshow/iot-sensortag/bluetoothdevice.cpp b/tradeshow/iot-sensortag/bluetoothdevice.cpp index 800a8ab..ba9aa55 100644 --- a/tradeshow/iot-sensortag/bluetoothdevice.cpp +++ b/tradeshow/iot-sensortag/bluetoothdevice.cpp @@ -162,93 +162,80 @@ void BluetoothDevice::scanServices() void BluetoothDevice::addLowEnergyService(const QBluetoothUuid &serviceUuid) { -} - -void BluetoothDevice::serviceScanDone() -{ - statusUpdated("(Service scan done!)"); - qCDebug(boot2QtDemos) << "ServiceScan done."; - if (!irTemperatureService) - { - QBluetoothUuid uuid; - for (int i = 0; i < controller->services().count(); i++) { - QBluetoothUuid id = controller->services().at(i); - if (id.toString().contains("f000aa00-0451-4000-b000-000000000000")) { - uuid = id; - break; - } + if (serviceUuid == QBluetoothUuid(QLatin1String(IRTEMPERATURESENSOR_SERVICE_UUID))) { + qCDebug(boot2QtDemos) << "Found infrared temperature service."; + irTemperatureService = controller->createServiceObject(serviceUuid); + if (!irTemperatureService) { + qWarning() << "Could not create infrared temperature service object."; + return; } - - irTemperatureService = controller->createServiceObject(uuid); connect(irTemperatureService, &QLowEnergyService::stateChanged, this, &BluetoothDevice::temperatureDetailsDiscovered); connect(irTemperatureService, &QLowEnergyService::characteristicChanged, this, &BluetoothDevice::characteristicsRead); irTemperatureService->discoverDetails(); - } - if (!baroService) - { - QBluetoothUuid uuid; - for (int i = 0; i < controller->services().count(); i++) { - QBluetoothUuid id = controller->services().at(i); - if (id.toString().contains("f000aa40-0451-4000-b000-000000000000")) { - uuid = id; - break; - } + } else if (serviceUuid == QBluetoothUuid(QLatin1String(BAROMETER_SERVICE_UUID))) { + qCDebug(boot2QtDemos) << "Found barometer service."; + baroService = controller->createServiceObject(serviceUuid); + if (!baroService) { + qWarning() << "Could not create barometer service object."; + return; } - - baroService = controller->createServiceObject(uuid); connect(baroService, &QLowEnergyService::stateChanged, this, &BluetoothDevice::barometerDetailsDiscovered); connect(baroService, &QLowEnergyService::characteristicChanged, this, &BluetoothDevice::characteristicsRead); baroService->discoverDetails(); - } - if (!humidityService) - { - QBluetoothUuid uuid; - for (int i = 0; i < controller->services().count(); i++) { - QBluetoothUuid id = controller->services().at(i); - if (id.toString().contains("f000aa20-0451-4000-b000-000000000000")) { - uuid = id; - break; - } - + } else if (serviceUuid == QBluetoothUuid(QLatin1String(HUMIDITYSENSOR_SERVICE_UUID))) { + qCDebug(boot2QtDemos) << "Found humidity service."; + humidityService = controller->createServiceObject(serviceUuid); + if (!humidityService) { + qWarning() << "Could not create humidity service object."; + return; } - - humidityService = controller->createServiceObject(uuid); connect(humidityService, &QLowEnergyService::stateChanged, this, &BluetoothDevice::humidityDetailsDiscovered); connect(humidityService, &QLowEnergyService::characteristicChanged, this, &BluetoothDevice::characteristicsRead); humidityService->discoverDetails(); - } - if (!lightService) - { - QBluetoothUuid uuid; - for (int i = 0; i < controller->services().count(); i++) { - QBluetoothUuid id = controller->services().at(i); - if (id.toString().contains("f000aa70-0451-4000-b000-000000000000")) { - uuid = id; - break; - } - + } else if (serviceUuid == QBluetoothUuid(QLatin1String(LIGHTSENSOR_SERVICE_UUID))) { + qCDebug(boot2QtDemos) << "Found light service."; + lightService = controller->createServiceObject(serviceUuid); + if (!lightService) { + qWarning() << "Could not create light service object."; + return; } - - lightService = controller->createServiceObject(uuid); connect(lightService, &QLowEnergyService::stateChanged, this, &BluetoothDevice::lightIntensityDetailsDiscovered); connect(lightService, &QLowEnergyService::characteristicChanged, this, &BluetoothDevice::characteristicsRead); lightService->discoverDetails(); - } - if (!motionService) - { - QBluetoothUuid uuid; - for (int i = 0; i < controller->services().count(); i++) { - QBluetoothUuid id = controller->services().at(i); - if (id.toString().contains("f000aa80-0451-4000-b000-000000000000")) { - uuid = id; - break; - } + } else if (serviceUuid == QBluetoothUuid(QLatin1String(MOTIONSENSOR_SERVICE_UUID))) { + qCDebug(boot2QtDemos) << "Found motion service."; + motionService = controller->createServiceObject(serviceUuid); + if (!motionService) { + qWarning() << "Could not create motion service object."; + return; } - motionService = controller->createServiceObject(uuid); connect(motionService, &QLowEnergyService::stateChanged, this, &BluetoothDevice::motionDetailsDiscovered); connect(motionService, &QLowEnergyService::characteristicChanged, this, &BluetoothDevice::characteristicsRead); motionService->discoverDetails(); + } else { + qCDebug(boot2QtDemos) << "Found unhandled service with id" << serviceUuid << "."; } +} + +void BluetoothDevice::serviceScanDone() +{ + statusUpdated("(Service scan done!)"); + qCDebug(boot2QtDemos) << "ServiceScan done."; + if (!irTemperatureService) + qCDebug(boot2QtDemos) << "Infrared temperature service not found."; + + if (!baroService) + qCDebug(boot2QtDemos) << "Barometer service not found."; + + if (!humidityService) + qCDebug(boot2QtDemos) << "Humidity service not found."; + + if (!lightService) + qCDebug(boot2QtDemos) << "Light service not found."; + + if (!motionService) + qCDebug(boot2QtDemos) << "Motion service not found."; + attitudeChangeInterval.restart(); } |