Index: sources/bluetooth/BLEScanner.cpp =================================================================== diff -u -r3a238930f8d939800512c9a786e96f15b35a2001 -r2fde0cfeb28b3fab9437e9bd15c1ec775785f103 --- sources/bluetooth/BLEScanner.cpp (.../BLEScanner.cpp) (revision 3a238930f8d939800512c9a786e96f15b35a2001) +++ sources/bluetooth/BLEScanner.cpp (.../BLEScanner.cpp) (revision 2fde0cfeb28b3fab9437e9bd15c1ec775785f103) @@ -105,6 +105,17 @@ } /*! + * \brief BLEScanner::doReselectDevice + * Called when reselecting a device (e.g. on reboot) + * \param deviceInfo - the device info to connect to + */ +void BLEScanner::doReselectDevice(const QBluetoothDeviceInfo &deviceInfo) +{ + selectedDeviceInfo = deviceInfo; + onConnectToDevice(deviceInfo); +} + +/*! * \brief BLEScanner::onDeviceDiscovered * When a new mac address was discovered * \param deviceInfo - The discovered device's information @@ -150,43 +161,47 @@ discoveryAgent->start(); } +QLowEnergyService* BLEScanner::setupService(const QBluetoothUuid &uuid) +{ + QLowEnergyService *service = lowEnergyController->createServiceObject(uuid, this); + + service->discoverDetails(); + + qDebug() << "Service " << service->serviceName() << "UUID: " << uuid << " state: " << service->state(); + + foreach (const QLowEnergyCharacteristic &c, service->characteristics()) { + qDebug() << "----> Characteristic: " << c.name() + << " uuid: " << c.uuid(); + } + return service; +} + /*! * \brief BLEScanner::onServiceDiscovered * Called when a new service is discovered on the paired BLE device. * \param uuid - the QBluetoothUuid of the discovered service */ void BLEScanner::onServiceDiscovered(const QBluetoothUuid &uuid) { - - QLowEnergyService* service = lowEnergyController->createServiceObject(uuid, this); - - services.append(service); - if (uuid.toString() == omronUnknownServiceName) { - omronUnknownService = service; - + omronUnknownService = setupService(uuid); } else if (uuid.toString() == omronBloodPressureServiceName) { - omronBloodPressureService = service; + omronBloodPressureService = setupService(uuid); } else if (uuid.toString() == omronCurrentTimeServiceName) { - omronCurrentTimeService = service; + omronCurrentTimeService = setupService(uuid); } else if (uuid.toString() == omronBatteryLevelServiceName) { - omronBatteryLevelService = service; + omronBatteryLevelService = setupService(uuid); } else if (uuid.toString() == omronDeviceInformationServiceName) { - omronDeviceInformationService = service; - } - - service->discoverDetails(); - - qDebug() << "Service " << service->serviceName() << "UUID: " << uuid << " state: " << service->state(); - - foreach (const QLowEnergyCharacteristic &c, service->characteristics()) { - qDebug() << "----> Characteristic: " << c.name() - << " uuid: " << c.uuid(); - } + omronDeviceInformationService = setupService(uuid); + } /*else { + QLowEnergyService *service = setupService(uuid); + if (service != NULL) + services.append(service); + }*/ } /*! @@ -216,7 +231,7 @@ */ void BLEScanner::onRequestDeviceInformation() { - qDebug() << __FUNCTION__; + LOG_DEBUG("Requesting BLE device information"); onRequestDeviceSerialNumber(); } @@ -402,6 +417,26 @@ } /*! + * \brief BLEScanner::makeServiceConnections + * Makes the necessary connections to interact with the given service + * \param service - the service with connections we need + */ +void BLEScanner::makeServiceConnections(QLowEnergyService *service) +{ + connect(service, SIGNAL(stateChanged(QLowEnergyService::ServiceState)), + this, SLOT(onServiceStateChanged(QLowEnergyService::ServiceState))); + + connect(service, SIGNAL(characteristicChanged(QLowEnergyCharacteristic, QByteArray)), + this, SLOT(onCharacteristicChanged(QLowEnergyCharacteristic,QByteArray))); + + connect(service, SIGNAL(characteristicRead(QLowEnergyCharacteristic,QByteArray)), + this, SLOT(onServiceCharacteristicsRead(QLowEnergyCharacteristic,QByteArray))); + + connect(service, SIGNAL(descriptorWritten(QLowEnergyDescriptor, QByteArray)), + this, SLOT(onConfirmedDescriptorWrite(QLowEnergyDescriptor, QByteArray))); +} + +/*! * \brief BLEScanner::onServiceScanDone * Called when we have finished scanning the services provided by BLE device */ @@ -414,20 +449,29 @@ qDebug() << "##############################"; qDebug() << "##############################"; - foreach (QLowEnergyService* service, services) { + foreach (QLowEnergyService *service, services) + makeServiceConnections(service); - connect(service, SIGNAL(stateChanged(QLowEnergyService::ServiceState)), - this, SLOT(onServiceStateChanged(QLowEnergyService::ServiceState))); - - connect(service, SIGNAL(characteristicChanged(QLowEnergyCharacteristic, QByteArray)), - this, SLOT(onCharacteristicChanged(QLowEnergyCharacteristic,QByteArray))); - - connect(service, SIGNAL(characteristicRead(QLowEnergyCharacteristic,QByteArray)), - this, SLOT(onServiceCharacteristicsRead(QLowEnergyCharacteristic,QByteArray))); - - connect(service, SIGNAL(descriptorWritten(QLowEnergyDescriptor, QByteArray)), - this, SLOT(onConfirmedDescriptorWrite(QLowEnergyDescriptor, QByteArray))); - } + if (omronUnknownService != NULL) + makeServiceConnections(omronUnknownService); + else + LOG_DEBUG("Unknown service is null"); + if (omronCurrentTimeService != NULL) + makeServiceConnections(omronCurrentTimeService); + else + LOG_DEBUG("Current time service is null"); + if (omronBatteryLevelService != NULL) + makeServiceConnections(omronBatteryLevelService); + else + LOG_DEBUG("Battery level service is null"); + if (omronBloodPressureService != NULL) + makeServiceConnections(omronBloodPressureService); + else + LOG_DEBUG("Blood Pressure service is null"); + if (omronDeviceInformationService != NULL) + makeServiceConnections(omronDeviceInformationService); + else + LOG_DEBUG("Device Information service is null"); } /*! @@ -471,7 +515,7 @@ */ void BLEScanner::onDeviceConnected() { - qDebug() << __FUNCTION__; + LOG_DEBUG("Device Connected"); lowEnergyController->discoverServices(); @@ -487,7 +531,7 @@ */ void BLEScanner::onDeviceDisconnected() { - qDebug() << __FUNCTION__; + LOG_DEBUG("Device Disconnected."); emit didDisconnectFromDevice(selectedDeviceInfo); } @@ -500,6 +544,7 @@ */ void BLEScanner::onConnectToDevice(const QBluetoothDeviceInfo& deviceInfo) { + LOG_DEBUG(QString("Connecting to (%1, %2)").arg(deviceInfo.name()).arg(deviceInfo.address().toString())); lowEnergyController = QLowEnergyController::createCentral(deviceInfo); @@ -525,6 +570,6 @@ void BLEScanner::onRetryConnectToDevice() { - qDebug() << __FUNCTION__ << "Retrying to connect to device..."; + LOG_DEBUG("Retrying to connect to BLE device..."); lowEnergyController->connectToDevice(); }