From 9004e89bb902a709c3d61c7f168d2d39fe2cd936 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Wed, 29 Aug 2018 16:24:00 +0200 Subject: Ensure that local services have state LocalService and invalidate the state once they have been disconnected. This affects Android, Bluez and Apple code lines. Change-Id: I2b87577930b6ae78e7ef7ef061e597beba946594 Reviewed-by: Oliver Wolff --- src/bluetooth/qlowenergycontroller_osx.mm | 1 + src/bluetooth/qlowenergycontrollerbase.cpp | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bluetooth/qlowenergycontroller_osx.mm b/src/bluetooth/qlowenergycontroller_osx.mm index 46782a22..d01686ae 100644 --- a/src/bluetooth/qlowenergycontroller_osx.mm +++ b/src/bluetooth/qlowenergycontroller_osx.mm @@ -1372,6 +1372,7 @@ QLowEnergyService *QLowEnergyController::addService(const QLowEnergyServiceData if (const auto servicePrivate = [osx_d_ptr->peripheralManager addService:data]) { servicePrivate->setController(osx_d_ptr); + servicePrivate->state = QLowEnergyService::LocalService; osx_d_ptr->discoveredServices.insert(servicePrivate->uuid, servicePrivate); return new QLowEnergyService(servicePrivate, parent); } diff --git a/src/bluetooth/qlowenergycontrollerbase.cpp b/src/bluetooth/qlowenergycontrollerbase.cpp index bfdd61a6..86108648 100644 --- a/src/bluetooth/qlowenergycontrollerbase.cpp +++ b/src/bluetooth/qlowenergycontrollerbase.cpp @@ -255,10 +255,11 @@ quint16 QLowEnergyControllerPrivate::updateValueOfDescriptor( void QLowEnergyControllerPrivate::invalidateServices() { - for (QSharedPointer service : serviceList.values()) { + for (QSharedPointer service : serviceList.values()) + service->setController(nullptr); + + for (QSharedPointer service : localServices.values()) service->setController(nullptr); - service->setState(QLowEnergyService::InvalidService); - } serviceList.clear(); localServices.clear(); @@ -273,8 +274,8 @@ QLowEnergyService *QLowEnergyControllerPrivate::addServiceHelper( // for it. const auto servicePrivate = QSharedPointer::create(); - servicePrivate->state = QLowEnergyService::LocalService; servicePrivate->setController(this); + servicePrivate->state = QLowEnergyService::LocalService; servicePrivate->uuid = service.uuid(); servicePrivate->type = service.type() == QLowEnergyServiceData::ServiceTypePrimary ? QLowEnergyService::PrimaryService : QLowEnergyService::IncludedService; -- cgit v1.2.3