diff options
author | Alex Blasche <alexander.blasche@digia.com> | 2014-06-18 12:24:09 +0200 |
---|---|---|
committer | Alex Blasche <alexander.blasche@digia.com> | 2014-06-19 11:11:24 +0200 |
commit | 243db8a80ff4cfeba5eda13f900fd11e1144e367 (patch) | |
tree | 754db9ebff4ae081b3f5b47ebee301cc352dcfb6 /src/bluetooth/qlowenergyservice.cpp | |
parent | 6014943db4b72962731a90c09a1b476af8385c29 (diff) |
Connect QLowEnergyService and QLowEnergyControllerNew classes
Ensures that the two classes have sufficient references to each other.
When the controller disconnects the related QLES classes should become
invalid.
Introduces an error flag for QLowEnergyService.
Change-Id: I28aee49e45f93c68c4ac69a5e489c0a3cc33dbf5
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/bluetooth/qlowenergyservice.cpp')
-rw-r--r-- | src/bluetooth/qlowenergyservice.cpp | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/src/bluetooth/qlowenergyservice.cpp b/src/bluetooth/qlowenergyservice.cpp index e60f7cc1..0e25c9b3 100644 --- a/src/bluetooth/qlowenergyservice.cpp +++ b/src/bluetooth/qlowenergyservice.cpp @@ -40,9 +40,12 @@ ****************************************************************************/ #include <QtCore/QCoreApplication> +#include <QtCore/QPointer> #include <QtBluetooth/QLowEnergyService> #include <QtBluetooth/QLowEnergyCharacteristicInfo> +#include "qlowenergycontrollernew_p.h" + QT_BEGIN_NAMESPACE class QLowEnergyServicePrivate { @@ -50,16 +53,61 @@ public: QBluetoothUuid uuid; QLowEnergyService::ServiceType type; QLowEnergyService::ServiceState state; + QLowEnergyService::ServiceError lastError; + + QPointer<QLowEnergyControllerNewPrivate> controller; }; +/*! + \internal + + QLowEnergyControllerNewPrivate creates instances of this class. + The user gets access to class instances via + \l QLowEnergyControllerNew::services(). + */ QLowEnergyService::QLowEnergyService(const QBluetoothUuid &uuid, QObject *parent) : QObject(parent) { d_ptr = new QLowEnergyServicePrivate(); d_ptr->uuid = uuid; - d_ptr->state = QLowEnergyService::DiscoveryRequired; + d_ptr->state = QLowEnergyService::InvalidService; d_ptr->type = QLowEnergyService::PrimaryService; + d_ptr->lastError = QLowEnergyService::NoError; +} + +/*! + \internal + + Called by Controller right after construction. + */ +void QLowEnergyService::setController(QLowEnergyControllerNewPrivate *control) +{ + Q_D(QLowEnergyService); + if (!control) + return; + + d->state = QLowEnergyService::DiscoveryRequired; + d->controller = control; +} + +/*! + \internal + + Called by Controller. + */ +void QLowEnergyService::setError(QLowEnergyService::ServiceError newError) +{ + Q_D(QLowEnergyService); + d->lastError = newError; + emit error(newError); +} + +void QLowEnergyService::setState(QLowEnergyService::ServiceState newState) +{ + Q_D(QLowEnergyService); + d->state = newState; + emit stateChanged(newState); } QLowEnergyService::~QLowEnergyService() @@ -117,7 +165,21 @@ QString QLowEnergyService::serviceName() const void QLowEnergyService::discoverDetails() { - //TODO discoverDetails + Q_D(QLowEnergyService); + if (d->state != QLowEnergyService::DiscoveryRequired) + return; + + if (!d->controller) { + setError(QLowEnergyService::ServiceNotValidError); + return; + } + + d->controller->discoverServiceDetails(d->uuid); +} + +QLowEnergyService::ServiceError QLowEnergyService::error() const +{ + return d_ptr->lastError; } |