From 83c826261d6d6bf9180857c9a9cff3f78b63378d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 26 Oct 2015 16:25:43 +0100 Subject: Bluetooth: Add API to set up GATT services. This is the next step in implementing LE peripheral support. Change-Id: I5e8cb186d556e7bfb9ae8a5e60e051ff7398b77d Reviewed-by: Alex Blasche --- src/bluetooth/qlowenergyservicedata.cpp | 209 ++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 src/bluetooth/qlowenergyservicedata.cpp (limited to 'src/bluetooth/qlowenergyservicedata.cpp') diff --git a/src/bluetooth/qlowenergyservicedata.cpp b/src/bluetooth/qlowenergyservicedata.cpp new file mode 100644 index 00000000..539f8472 --- /dev/null +++ b/src/bluetooth/qlowenergyservicedata.cpp @@ -0,0 +1,209 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtBluetooth module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qlowenergyservicedata.h" + +#include "qlowenergycharacteristicdata.h" + +#include + +QT_BEGIN_NAMESPACE + +Q_DECLARE_LOGGING_CATEGORY(QT_BT) + +struct QLowEnergyServiceDataPrivate : public QSharedData +{ + QLowEnergyServiceDataPrivate() : type(QLowEnergyServiceData::ServiceTypePrimary) {} + + QLowEnergyServiceData::ServiceType type; + QBluetoothUuid uuid; + QList includedServices; + QList characteristics; +}; + + +/*! + \since 5.7 + \class QLowEnergyServiceData + \brief The QLowEnergyServiceData class is used to set up GATT service data. + \inmodule QtBluetooth + \ingroup shared + + An Object of this class provides a service to be added to a GATT server via + \l QLowEnergyController::addService(). +*/ + +/*! + \enum QLowEnergyServiceData::ServiceType + The type of GATT service. + + \value ServiceTypePrimary + The service is a primary service. + \value ServiceTypeSecondary + The service is a secondary service. Secondary services are included by other services + to implement some higher-level functionality. + */ + +/*! Creates a new invalid object of this class. */ +QLowEnergyServiceData::QLowEnergyServiceData() : d(new QLowEnergyServiceDataPrivate) +{ +} + +/*! Constructs a new object of this class that is a copy of \a other. */ +QLowEnergyServiceData::QLowEnergyServiceData(const QLowEnergyServiceData &other) : d(other.d) +{ +} + +/*! Destroys this object. */ +QLowEnergyServiceData::~QLowEnergyServiceData() +{ +} + +/*! Makes this object a copy of \a other and returns the new value of this object. */ +QLowEnergyServiceData &QLowEnergyServiceData::operator=(const QLowEnergyServiceData &other) +{ + d = other.d; + return *this; +} + +/*! Returns the type of this service. */ +QLowEnergyServiceData::ServiceType QLowEnergyServiceData::type() const +{ + return d->type; +} + +/*! Sets the type of this service to \a type. */ +void QLowEnergyServiceData::setType(ServiceType type) +{ + d->type = type; +} + +/*! Returns the UUID of this service. */ +QBluetoothUuid QLowEnergyServiceData::uuid() const +{ + return d->uuid; +} + +/*! Sets the UUID of this service to \a uuid. */ +void QLowEnergyServiceData::setUuid(const QBluetoothUuid &uuid) +{ + d->uuid = uuid; +} + +/*! Returns the list of included services. */ +QList QLowEnergyServiceData::includedServices() const +{ + return d->includedServices; +} + +/*! + Sets the list of included services to \a services. + All objects in this list must have been returned from a call to + \l QLowEnergyController::addService. + \sa addIncludedService() +*/ +void QLowEnergyServiceData::setIncludedServices(const QList &services) +{ + d->includedServices = services; +} + +/*! + Adds \a service to the list of included services. + The \a service object must have been returned from a call to + \l QLowEnergyController::addService. + \sa setIncludedServices() +*/ +void QLowEnergyServiceData::addIncludedService(QLowEnergyService *service) +{ + d->includedServices << service; +} + +/*! Returns the list of characteristics. */ +QList QLowEnergyServiceData::characteristics() const +{ + return d->characteristics; +} + +/*! + Sets the list of characteristics to \a characteristics. + Only valid characteristics are considered. + \sa addCharacteristic() + */ +void QLowEnergyServiceData::setCharacteristics(const QList &characteristics) +{ + foreach (const QLowEnergyCharacteristicData &cd, characteristics) + addCharacteristic(cd); +} + +/*! + Adds \a characteristic to the list of characteristics, if it is valid. + \sa setCharacteristics() + */ +void QLowEnergyServiceData::addCharacteristic(const QLowEnergyCharacteristicData &characteristic) +{ + if (characteristic.isValid()) + d->characteristics << characteristic; + else + qCWarning(QT_BT) << "not adding invalid characteristic to service"; +} + +/*! Returns \c true if this service is has a non-null UUID. */ +bool QLowEnergyServiceData::isValid() const +{ + return !uuid().isNull(); +} + +/*! + \fn void QLowEnergyServiceData::swap(QLowEnergyServiceData &other) + Swaps this object with \a other. + */ + +/*! + Returns \c true if \a sd1 and \a sd2 are equal with respect to their public state, + otherwise returns \c false. + */ +bool operator==(const QLowEnergyServiceData sd1, const QLowEnergyServiceData &sd2) +{ + return sd1.d == sd2.d || (sd1.type() == sd2.type() && sd1.uuid() == sd2.uuid() + && sd1.includedServices() == sd2.includedServices() + && sd1.characteristics() == sd2.characteristics()); +} + +/*! + \fn bool operator!=(const QLowEnergyServiceData &sd1, + const QLowEnergyServiceData &sd2) + Returns \c true if \a sd1 and \a sd2 are not equal with respect to their public state, + otherwise returns \c false. + */ + +QT_END_NAMESPACE -- cgit v1.2.3