| /*************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the QtBluetooth module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL$ |
| ** 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 https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://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 3 as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
| ** packaging of this file. Please review the following information to |
| ** ensure the GNU Lesser General Public License version 3 requirements |
| ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 2.0 or (at your option) the GNU General |
| ** Public license version 3 or any later version approved by the KDE Free |
| ** Qt Foundation. The licenses are as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
| ** https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include "qlowenergyservicedata.h" |
| |
| #include "qlowenergycharacteristicdata.h" |
| |
| #include <QtCore/qloggingcategory.h> |
| |
| QT_BEGIN_NAMESPACE |
| |
| Q_DECLARE_LOGGING_CATEGORY(QT_BT) |
| |
| struct QLowEnergyServiceDataPrivate : public QSharedData |
| { |
| QLowEnergyServiceDataPrivate() : type(QLowEnergyServiceData::ServiceTypePrimary) {} |
| |
| QLowEnergyServiceData::ServiceType type; |
| QBluetoothUuid uuid; |
| QList<QLowEnergyService *> includedServices; |
| QList<QLowEnergyCharacteristicData> 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<QLowEnergyService *> 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<QLowEnergyService *> &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. This requirement prevents circular includes |
| (which are forbidden by the Bluetooth specification), and also helps to support the use case of |
| including more than one service of the same type. |
| \sa setIncludedServices() |
| */ |
| void QLowEnergyServiceData::addIncludedService(QLowEnergyService *service) |
| { |
| d->includedServices << service; |
| } |
| |
| /*! Returns the list of characteristics. */ |
| QList<QLowEnergyCharacteristicData> 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<QLowEnergyCharacteristicData> &characteristics) |
| { |
| d->characteristics.clear(); |
| for (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 |