diff options
author | Alex Blasche <alexander.blasche@digia.com> | 2014-07-18 13:44:09 +0200 |
---|---|---|
committer | Alex Blasche <alexander.blasche@digia.com> | 2014-07-23 11:01:47 +0200 |
commit | d5731113e912e0df17f19fcdb12b4b6b68256220 (patch) | |
tree | 543c437f8ba375175631a05488e3e2cbd2fe2482 | |
parent | 3956cae8adc2cb7f8f883e52a7f19e4f5b9fea29 (diff) |
Remove old GATT API
The subsequent patches will rename QLowEnergyControllerNew to
QLowEnergyController and fix up the documentation fragments which still
point to the old API.
Change-Id: I084e6b1a85a17f424702018f3ad7047bda35d46a
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
33 files changed, 6 insertions, 3329 deletions
diff --git a/examples/bluetooth/btscanner/service.cpp b/examples/bluetooth/btscanner/service.cpp index e304f850..d24837eb 100644 --- a/examples/bluetooth/btscanner/service.cpp +++ b/examples/bluetooth/btscanner/service.cpp @@ -46,7 +46,6 @@ #include <qbluetoothserviceinfo.h> #include <qbluetoothlocaldevice.h> #include <qlowenergyserviceinfo.h> -#include <qlowenergycharacteristicinfo.h> #include <qbluetoothuuid.h> diff --git a/src/bluetooth/bluetooth.pro b/src/bluetooth/bluetooth.pro index 6b015229..74309891 100644 --- a/src/bluetooth/bluetooth.pro +++ b/src/bluetooth/bluetooth.pro @@ -25,12 +25,9 @@ PUBLIC_HEADERS += \ qbluetoothtransferrequest.h \ qlowenergyserviceinfo.h \ qlowenergyservice.h \ - qlowenergycharacteristicinfo.h \ qlowenergycharacteristic.h \ - qlowenergydescriptorinfo.h \ qlowenergydescriptor.h \ qbluetoothtransferreply.h \ - qlowenergycontroller.h \ qlowenergycontrollernew.h PRIVATE_HEADERS += \ @@ -47,10 +44,6 @@ PRIVATE_HEADERS += \ qprivatelinearbuffer_p.h \ qbluetoothlocaldevice_p.h \ qlowenergyserviceinfo_p.h \ - qlowenergycharacteristicinfo_p.h \ - qlowenergyprocess_p.h \ - qlowenergydescriptorinfo_p.h \ - qlowenergycontroller_p.h \ qlowenergycontrollernew_p.h \ qlowenergyserviceprivate_p.h @@ -71,11 +64,8 @@ SOURCES += \ qbluetoothtransferreply.cpp \ qlowenergyserviceinfo.cpp \ qlowenergyservice.cpp \ - qlowenergycharacteristicinfo.cpp \ qlowenergycharacteristic.cpp \ - qlowenergydescriptorinfo.cpp \ qlowenergydescriptor.cpp \ - qlowenergycontroller.cpp \ qlowenergycontrollernew.cpp \ qlowenergyserviceprivate.cpp @@ -101,10 +91,7 @@ config_bluez:qtHaveModule(dbus) { # old versions of Bluez do not have the required BTLE symbols config_bluez_le { SOURCES += \ - qlowenergyprocess_bluez.cpp \ qlowenergyserviceinfo_bluez.cpp \ - qlowenergycharacteristicinfo_bluez.cpp \ - qlowenergycontroller_bluez.cpp \ qlowenergycontrollernew_bluez.cpp } else { message("Bluez version is too old to support Bluetooth Low Energy.") @@ -112,9 +99,6 @@ config_bluez:qtHaveModule(dbus) { DEFINES += QT_BLUEZ_NO_BTLE SOURCES += \ qlowenergyserviceinfo_p.cpp \ - qlowenergycharacteristicinfo_p.cpp \ - qlowenergyprocess_p.cpp \ - qlowenergycontroller_p.cpp \ qlowenergycontrollernew_p.cpp } @@ -141,10 +125,7 @@ config_bluez:qtHaveModule(dbus) { qbluetoothsocket_qnx.cpp \ qbluetoothserver_qnx.cpp \ qbluetoothtransferreply_qnx.cpp \ - qlowenergycharacteristicinfo_qnx.cpp \ qlowenergyserviceinfo_qnx.cpp \ - qlowenergyprocess_qnx.cpp \ - qlowenergycontroller_qnx.cpp \ qlowenergycontrollernew_p.cpp } else:android:!android-no-sdk { @@ -168,9 +149,6 @@ config_bluez:qtHaveModule(dbus) { qbluetoothsocket_android.cpp \ qbluetoothserver_android.cpp \ qlowenergyserviceinfo_p.cpp \ - qlowenergycharacteristicinfo_p.cpp \ - qlowenergyprocess_p.cpp \ - qlowenergycontroller_p.cpp \ qlowenergycontrollernew_p.cpp } else { @@ -184,9 +162,6 @@ config_bluez:qtHaveModule(dbus) { qbluetoothsocket_p.cpp \ qbluetoothserver_p.cpp \ qlowenergyserviceinfo_p.cpp \ - qlowenergycharacteristicinfo_p.cpp \ - qlowenergyprocess_p.cpp \ - qlowenergycontroller_p.cpp \ qlowenergycontrollernew_p.cpp } diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp index 7b1a6f2f..c27a59ee 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp +++ b/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp @@ -41,7 +41,6 @@ #include "qbluetoothservicediscoveryagent.h" #include "qbluetoothservicediscoveryagent_p.h" -#include "qlowenergycharacteristicinfo_p.h" #include "qlowenergyserviceinfo_p.h" #include "bluez/manager_p.h" @@ -710,130 +709,6 @@ void QBluetoothServiceDiscoveryAgentPrivate::performMinimalServiceDiscovery(cons _q_serviceDiscoveryFinished(); } -/* - * Following three methods are implemented in this way to avoid blocking the main thread. - * We first go through list of services path and then through services characteristics paths. - * - * Bluez v4.x does not have support for LE devices through org.bluez interfaces. Because of that - * these functions will not be used now. I propose to leave them commented because in Bluez v5.x - * we have support for LE devices and we can use these functions. - */ -/* -void QBluetoothServiceDiscoveryAgentPrivate::_g_discoveredGattService() -{ - - if (!gattServices.empty()) { - qDebug() << gattServices.at(0) << gattServices.size(); - gattService = QLowEnergyServiceInfo(gattServices.at(0)); - gattService.getProperties(); - QObject::connect(gattService.d_ptr.data(), SIGNAL(finished()), this, SLOT(_g_discoveredGattService())); - characteristic = new OrgBluezCharacteristicInterface(QLatin1String("org.bluez"), gattServices.at(0), QDBusConnection::systemBus()); - QDBusPendingReply<QList<QDBusObjectPath> > characterictisReply = characteristic->DiscoverCharacteristics(); - QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(characterictisReply, this); - QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(_q_discoverGattCharacteristics(QDBusPendingCallWatcher*))); - - gattServices.removeFirst(); - q_ptr->lowEnergyServiceDiscovered(gattService); - emit gattService.d_ptr->finished(); - } - else - q_ptr->finished(); - -} - -void QBluetoothServiceDiscoveryAgentPrivate::_q_discoverGattCharacteristics(QDBusPendingCallWatcher *watcher) -{ - - QDBusPendingReply<QList<QDBusObjectPath> > characterictisReply = *watcher; - if (characterictisReply.isError()){ - qDebug()<< "Discovering service characteristic error" << characterictisReply.error().message(); - Q_Q(QBluetoothServiceDiscoveryAgent); - error = QBluetoothServiceDiscoveryAgent::UnknownError; - errorString = characterictisReply.error().message(); - emit q->error(error); - _q_serviceDiscoveryFinished(); - return; - } - - foreach (const QDBusObjectPath &characteristicPath, characterictisReply.value()) - gattCharacteristics.append(characteristicPath.path()); - characteristic = new OrgBluezCharacteristicInterface(QLatin1String("org.bluez"), gattCharacteristics.at(0), QDBusConnection::systemBus()); - QDBusPendingReply<QVariantMap> characteristicProperty = characteristic->GetProperties(); - watcher = new QDBusPendingCallWatcher(characteristicProperty, this); - _q_discoveredGattCharacteristic(watcher); - -} - -void QBluetoothServiceDiscoveryAgentPrivate::_q_discoveredGattCharacteristic(QDBusPendingCallWatcher *watcher) -{ - - QDBusPendingReply<QVariantMap> characteristicProperty = *watcher; - //qDebug()<<characteristicProperty.value(); - if (characteristicProperty.isError()){ - qDebug() << "Characteristic properties error" << characteristicProperty.error().message(); - Q_Q(QBluetoothServiceDiscoveryAgent); - error = QBluetoothServiceDiscoveryAgent::UnknownError; - errorString = characteristicProperty.error().message(); - emit q->error(error); - _q_serviceDiscoveryFinished(); - return; - } - QStringList serviceName; - - if (characteristicProperty.isError()) - qDebug()<<characteristicProperty.error().message(); - - QVariantMap properties = characteristicProperty.value(); - QString name = properties.value(QLatin1String("Name")).toString(); - QString description = properties.value(QLatin1String("Description")).toString(); - serviceName = description.split(QStringLiteral(" ")); - QString charUuid = properties.value(QLatin1String("UUID")).toString(); - QBluetoothUuid characteristicUuid(charUuid); - - QVariant value = properties.value(QLatin1String("Value")); - QByteArray byteValue = QByteArray(); - if (value.type() == QVariant::ByteArray) - byteValue = value.toByteArray(); - - //qDebug() << name << description << characteristicUuid.toString()<< byteValue.size(); - gattCharacteristic = QLowEnergyCharacteristicInfo(name, description, characteristicUuid, byteValue); - gattCharacteristic.setPath(gattCharacteristics.at(0)); - qDebug() << gattCharacteristics.at(0); - gattService.addCharacteristic(gattCharacteristic); - - - //Testing part for setting the property - QString b = "f000aa02-0451-4000-b000-000000000000"; - QBluetoothUuid u(b); - if (gattCharacteristic.uuid() == u){ - for (int j = 0; j< byteValue.size(); j++){ - qDebug() << (int) byteValue.at(j); - byteValue[j]=1; - qDebug() << (int) byteValue.at(j); - } - bool s = gattCharacteristic.setPropertyValue(QStringLiteral("Value"), byteValue); - qDebug() <<s; - } - - QString serName = serviceName.at(0) + " Service"; - - gattCharacteristics.removeFirst(); - if (gattCharacteristics.isEmpty()){ - q_ptr->lowEnergyServiceDiscovered(gattService); - emit gattService.d_ptr->finished(); - } - else{ - OrgBluezCharacteristicInterface *characteristicProperties = new OrgBluezCharacteristicInterface(QLatin1String("org.bluez"), gattCharacteristics.at(0), QDBusConnection::systemBus()); - QDBusPendingReply<QVariantMap> characteristicProperty = characteristicProperties->GetProperties(); - watcher = new QDBusPendingCallWatcher(characteristicProperty, this); - QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(_q_discoveredGattCharacteristic(QDBusPendingCallWatcher*))); - } - -} -*/ - QVariant QBluetoothServiceDiscoveryAgentPrivate::readAttributeValue(QXmlStreamReader &xml) { if (xml.name() == QLatin1String("boolean")) { diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_p.h b/src/bluetooth/qbluetoothservicediscoveryagent_p.h index b316998b..0377ce1a 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_p.h +++ b/src/bluetooth/qbluetoothservicediscoveryagent_p.h @@ -55,7 +55,6 @@ class OrgBluezManagerInterface; class OrgBluezAdapterInterface; class OrgBluezDeviceInterface; -class OrgBluezCharacteristicInterface; class OrgFreedesktopDBusObjectManagerInterface; QT_BEGIN_NAMESPACE @@ -194,11 +193,6 @@ private: OrgFreedesktopDBusObjectManagerInterface *managerBluez5; OrgBluezAdapterInterface *adapter; OrgBluezDeviceInterface *device; - // variables below are used for discovering Bluetooth Low Energy devices - OrgBluezCharacteristicInterface *characteristic; - QStringList gattServices; - QStringList gattCharacteristics; - QLowEnergyCharacteristicInfo gattCharacteristic; #endif #ifdef QT_ANDROID_BLUETOOTH diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp index 81d2c623..a2abbebc 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp +++ b/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp @@ -45,7 +45,6 @@ #include "qbluetoothdeviceinfo.h" #include "qbluetoothdevicediscoveryagent.h" -#include "qlowenergycharacteristicinfo_p.h" #include "qlowenergyserviceinfo_p.h" #include <QStringList> diff --git a/src/bluetooth/qlowenergycharacteristicinfo.cpp b/src/bluetooth/qlowenergycharacteristicinfo.cpp deleted file mode 100644 index c1df5e06..00000000 --- a/src/bluetooth/qlowenergycharacteristicinfo.cpp +++ /dev/null @@ -1,214 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergycharacteristicinfo.h" -#include "qlowenergycharacteristicinfo_p.h" -#include <QHash> - -QT_BEGIN_NAMESPACE - -/*! - \class QLowEnergyCharacteristicInfo - \inmodule QtBluetooth - \brief The QLowEnergyCharacteristicInfo class stores information about a Bluetooth - Low Energy service characteristic. - - \since 5.4 - - QLowEnergyCharacteristicInfo provides information about a Bluetooth Low Energy - service characteristic's name, UUID, value, permissions, handle and descriptors. - To get the full characteristic specification and information it is necessary to - connect to the service using QLowEnergyServiceInfo and QLowEnergyController classes. - Some characteristics can contain none, one or more descriptors. -*/ - -/*! - \enum QLowEnergyCharacteristicInfo::PropertyType - - This enum describes the properties of a characteristic. - - \value Unknown The type is not known. - \value Broadcasting Allow for the broadcasting of Generic Attributes (GATT) characteristic values. - \value Read Allow the characteristic values to be read. - \value WriteNoResponse Allow characteristic values without responses to be written. - \value Write Allow for characteristic values to be written. - \value Notify Permits notification of characteristic values. - \value Indicate Permits indications of characteristic values. - \value WriteSigned Permits signed writes of the GATT characteristic values. - \value ExtendedProperty Additional characteristic properties are defined in the characteristic - extended properties descriptor. - - \sa properties() -*/ - -/*! - Construct a new QLowEnergyCharacteristicInfo. -*/ -QLowEnergyCharacteristicInfo::QLowEnergyCharacteristicInfo(): - d_ptr(new QLowEnergyCharacteristicInfoPrivate) -{ - -} - -/*! - Construct a new QLowEnergyCharacteristicInfo with given \a uuid. -*/ -QLowEnergyCharacteristicInfo::QLowEnergyCharacteristicInfo(const QBluetoothUuid &uuid): - d_ptr(new QLowEnergyCharacteristicInfoPrivate) -{ - d_ptr->uuid = uuid; -} - -/*! - Construct a new QLowEnergyCharacteristicInfo that is a copy of \a other. - - The two copies continue to share the same underlying data which does not detach - upon write. -*/ -QLowEnergyCharacteristicInfo::QLowEnergyCharacteristicInfo(const QLowEnergyCharacteristicInfo &other): - d_ptr(other.d_ptr) -{ - -} - -/*! - Destroys the QLowEnergyCharacteristicInfo object. -*/ -QLowEnergyCharacteristicInfo::~QLowEnergyCharacteristicInfo() -{ - -} - -/*! - Returns the name of the gatt characteristic type. -*/ -QString QLowEnergyCharacteristicInfo::name() const -{ - return QBluetoothUuid::characteristicToString( - static_cast<QBluetoothUuid::CharacteristicType>(d_ptr->uuid.toUInt16())); -} - -/*! - Returns the UUID of the gatt characteristic. -*/ -QBluetoothUuid QLowEnergyCharacteristicInfo::uuid() const -{ - return d_ptr->uuid; -} - -/*! - Returns the properties of the gatt characteristic. -*/ -QLowEnergyCharacteristicInfo::PropertyTypes QLowEnergyCharacteristicInfo::properties() const -{ - return d_ptr->properties; -} - -/*! - Returns value of the gatt characteristic. -*/ -QByteArray QLowEnergyCharacteristicInfo::value() const -{ - return d_ptr->value; -} - -/*! - Returns the handle of the gatt characteristic. -*/ -QLowEnergyHandle QLowEnergyCharacteristicInfo::handle() const -{ - return d_ptr->handle; -} - -/*! - Returns the true or false statement depending whether the characteristic is notification - (enables conctant updates when value is changed on LE device). -*/ -bool QLowEnergyCharacteristicInfo::isNotificationCharacteristic() const -{ - return d_ptr->notification; -} - -/*! - Sets the value \a value of the characteristic. This only caches the value. To write - a value directly to the device QLowEnergyController class must be used. - - \sa QLowEnergyController::writeCharacteristic() -*/ -void QLowEnergyCharacteristicInfo::setValue(const QByteArray &value) -{ - d_ptr->value = value; -} - -/*! - Makes a copy of the \a other and assigns it to this QLowEnergyCharacteristicInfo object. - The two copies continue to share the same service and registration details. -*/ -QLowEnergyCharacteristicInfo &QLowEnergyCharacteristicInfo::operator=(const QLowEnergyCharacteristicInfo &other) -{ - d_ptr = other.d_ptr; - return *this; -} - -/*! - Returns true if the QLowEnergyCharacteristicInfo object is valid, otherwise returns false. - If it returns false, it means that service that this characteristic belongs was not connected. -*/ -bool QLowEnergyCharacteristicInfo::isValid() const -{ - if (d_ptr->uuid == QBluetoothUuid()) - return false; - if (!d_ptr->handle) - return false; - if (!d_ptr->valid()) - return false; - return true; -} - -/*! - Returns the list of characteristic descriptors. -*/ -QList<QLowEnergyDescriptorInfo> QLowEnergyCharacteristicInfo::descriptors() const -{ - return d_ptr->descriptorsList; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergycharacteristicinfo.h b/src/bluetooth/qlowenergycharacteristicinfo.h deleted file mode 100644 index 6d3d2187..00000000 --- a/src/bluetooth/qlowenergycharacteristicinfo.h +++ /dev/null @@ -1,107 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QLOWENERGYCHARACTERISTICINFO_H -#define QLOWENERGYCHARACTERISTICINFO_H -#include <QtCore/QSharedPointer> -#include <QtCore/QObject> -#include <QtBluetooth/qbluetooth.h> -#include <QtBluetooth/QBluetoothUuid> -#include <QtBluetooth/QLowEnergyDescriptorInfo> - -QT_BEGIN_NAMESPACE - -class QBluetoothUuid; -class QLowEnergyCharacteristicInfoPrivate; - -//TODO rename class to QLowEnergyCharacteristic -class Q_BLUETOOTH_EXPORT QLowEnergyCharacteristicInfo -{ - friend class QLowEnergyController; - friend class QLowEnergyControllerPrivate; -public: - - enum PropertyType { - Unknown = 0x00, - Broadcasting = 0x01, - Read = 0x02, - WriteNoResponse = 0x04, - Write = 0x08, - Notify = 0x10, - Indicate = 0x20, - WriteSigned = 0x40, - ExtendedProperty = 0x80 - }; - Q_DECLARE_FLAGS(PropertyTypes, PropertyType) - - QLowEnergyCharacteristicInfo(); - QLowEnergyCharacteristicInfo(const QBluetoothUuid &uuid); - QLowEnergyCharacteristicInfo(const QLowEnergyCharacteristicInfo &other); - ~QLowEnergyCharacteristicInfo(); - - QLowEnergyCharacteristicInfo &operator=(const QLowEnergyCharacteristicInfo &other); - - QString name() const; - - QBluetoothUuid uuid() const; - - void setValue(const QByteArray &value); - QByteArray value() const; - - QLowEnergyCharacteristicInfo::PropertyTypes properties() const; - QLowEnergyHandle handle() const; - - bool isNotificationCharacteristic() const; - - QList<QLowEnergyDescriptorInfo> descriptors() const; - - bool isValid() const; - -protected: - QSharedPointer<QLowEnergyCharacteristicInfoPrivate> d_ptr; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QLowEnergyCharacteristicInfo::PropertyTypes) - -QT_END_NAMESPACE - -#endif // QLOWENERGYCHARACTERISTICINFO_H diff --git a/src/bluetooth/qlowenergycharacteristicinfo_bluez.cpp b/src/bluetooth/qlowenergycharacteristicinfo_bluez.cpp deleted file mode 100644 index 2aba98c9..00000000 --- a/src/bluetooth/qlowenergycharacteristicinfo_bluez.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergycharacteristicinfo.h" -#include "qlowenergycharacteristicinfo_p.h" -#include "qlowenergyprocess_p.h" - -#include <QtDBus/QDBusPendingCallWatcher> - -//#define QT_LOWENERGYCHARACTERISTIC_DEBUG - -#ifdef QT_LOWENERGYCHARACTERISTIC_DEBUG -#include <QtCore/QDebug> -#endif - -QT_BEGIN_NAMESPACE - -QLowEnergyCharacteristicInfoPrivate::QLowEnergyCharacteristicInfoPrivate() - : properties(QLowEnergyCharacteristicInfo::Unknown), - notification (false), handle(0) -{ -} - -QLowEnergyCharacteristicInfoPrivate::~QLowEnergyCharacteristicInfoPrivate() -{ -} - - -bool QLowEnergyCharacteristicInfoPrivate::valid() -{ - return true; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergycharacteristicinfo_p.cpp b/src/bluetooth/qlowenergycharacteristicinfo_p.cpp deleted file mode 100644 index 30122b39..00000000 --- a/src/bluetooth/qlowenergycharacteristicinfo_p.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergycharacteristicinfo_p.h" - -QT_BEGIN_NAMESPACE - -QLowEnergyCharacteristicInfoPrivate::QLowEnergyCharacteristicInfoPrivate() - : properties(QLowEnergyCharacteristicInfo::Unknown), - notification(false), - handle(0) -{ - -} - -QLowEnergyCharacteristicInfoPrivate::~QLowEnergyCharacteristicInfoPrivate() -{ - -} - - -bool QLowEnergyCharacteristicInfoPrivate::valid() -{ - return false; -} -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergycharacteristicinfo_p.h b/src/bluetooth/qlowenergycharacteristicinfo_p.h deleted file mode 100644 index 651be2aa..00000000 --- a/src/bluetooth/qlowenergycharacteristicinfo_p.h +++ /dev/null @@ -1,91 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QLOWENERGYCHARACTERISTICINFO_P_H -#define QLOWENERGYCHARACTERISTICINFO_P_H -#include "qbluetoothuuid.h" -#include "qlowenergycharacteristicinfo.h" - -#ifdef QT_BLUEZ_BLUETOOTH -#include <QtDBus/QtDBus> -#include <QObject> -#endif -#ifdef QT_QNX_BLUETOOTH -#include <btapi/btdevice.h> -#include <btapi/btgatt.h> -#include <btapi/btspp.h> -#include <btapi/btle.h> -#endif -#ifdef QT_BLUEZ_BLUETOOTH -QT_FORWARD_DECLARE_CLASS(QLowEnergyProcess); -#endif - -QT_BEGIN_NAMESPACE -class QBluetoothUuid; -class QLowEnergyCharacteristicInfo; - -class QLowEnergyCharacteristicInfoPrivate -{ -public: - QLowEnergyCharacteristicInfoPrivate(); - ~QLowEnergyCharacteristicInfoPrivate(); - bool valid(); - - QString name; - QBluetoothUuid uuid; - QByteArray value; - QLowEnergyCharacteristicInfo::PropertyType properties; - bool notification; - QLowEnergyHandle handle; - int instance; - QList<QLowEnergyDescriptorInfo> descriptorsList; -#ifdef QT_QNX_BLUETOOTH - bt_gatt_characteristic_t characteristic; - int characteristicMtu; - bt_gatt_char_prop_mask characteristicProperties; -#endif - -private: - -}; -QT_END_NAMESPACE - -#endif // QLOWENERGYCHARACTERISTICINFO_P_H diff --git a/src/bluetooth/qlowenergycharacteristicinfo_qnx.cpp b/src/bluetooth/qlowenergycharacteristicinfo_qnx.cpp deleted file mode 100644 index cbe5bc5b..00000000 --- a/src/bluetooth/qlowenergycharacteristicinfo_qnx.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtCore/QLoggingCategory> -#include "qlowenergycharacteristicinfo_p.h" -#include <btapi/btdevice.h> -#include <btapi/btgatt.h> -#include <btapi/btle.h> -#include <errno.h> -#include "qlowenergyserviceinfo.h" -#include "qlowenergyserviceinfo_p.h" -#include "qlowenergydescriptorinfo_p.h" -#include "qnx/ppshelpers_p.h" - - -QT_BEGIN_NAMESPACE - -Q_DECLARE_LOGGING_CATEGORY(QT_BT_QNX) - -QLowEnergyCharacteristicInfoPrivate::QLowEnergyCharacteristicInfoPrivate() - : properties(QLowEnergyCharacteristicInfo::Unknown), - notification(false), handle(0), instance(-1) -{ - -} - -QLowEnergyCharacteristicInfoPrivate::~QLowEnergyCharacteristicInfoPrivate() -{ - -} - -bool QLowEnergyCharacteristicInfoPrivate::valid() -{ - if (instance == -1) - return false; - return true; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergycontroller.cpp b/src/bluetooth/qlowenergycontroller.cpp deleted file mode 100644 index fb60e4df..00000000 --- a/src/bluetooth/qlowenergycontroller.cpp +++ /dev/null @@ -1,261 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergycontroller.h" -#include "qlowenergycontroller_p.h" -#include "qlowenergyserviceinfo_p.h" -#include "qlowenergycharacteristicinfo_p.h" - -QT_BEGIN_NAMESPACE -/*! - \class QLowEnergyController - \inmodule QtBluetooth - \brief The QLowEnergyController class is used for connecting and reading data from LE device - services. - \since 5.4 - - To read data contained in LE service characteristics, the LE device must be paired and turned on. - First, connect necessary signals from the class and then connect to service by passing the wanted service - to \l connectToService() function. \l connected() signal will be emitted on success or \l error() - signal in case of failure. It is possible to get error message by calling errorString function - in QLowEnergyServiceInfo class. - - In case of disconnecting from service, pass the wanted service to \l disconnectFromService() - function and \l disconnected() signal will be emitted. - - It is enough to use one instance of this class to connect to more service on more devices, - but it is not possible to create more QLowEnergyController classes and connect to same - service on the same LE device. - - - \sa QLowEnergyServiceInfo, QLowEnergyCharacteristicInfo, QLowEnergyDescriptorInfo -*/ - -/*! - \enum QLowEnergyController::Error - - Indicates all possible error conditions found during Bluetooth Low Energy communication. - - \value NoError No error has occurred. - \value UnknownError An unknown error has occurred. - \value InputOutputError BLE device is not responding. - \value OperationError The error occurred while communicating with the BLE device - (connecting, disconnecting, receiving updates,etc). - \value PermissionError Characteristic does not have required permissions. -*/ - -/*! - \fn void QLowEnergyController::connected(const QLowEnergyServiceInfo &info) - - This signal is emitted when the connection to the Bluetooth Low Energy service - \a info was established. - - \sa disconnected(), connectToService() -*/ - -/*! - \fn void QLowEnergyController::error(const QLowEnergyServiceInfo &info, QLowEnergyController::Error error) - - This signal is emitted when the service \a info triggered an \a error. - - \sa errorString() -*/ - -/*! - \fn void QLowEnergyController::error(const QLowEnergyCharacteristicInfo &info, QLowEnergyController::Error error) - - This signal is emitted when the characteristic \a info triggered an \a error. - - \sa errorString() -*/ - -/*! - \fn void QLowEnergyController::disconnected(const QLowEnergyServiceInfo &info) - - This signal is emitted when the connection to the Bluertooth Low Energy service \a info - was severed. - - \sa connected(), disconnectFromService() -*/ - -/*! - \fn QLowEnergyController::valueChanged(const QLowEnergyCharacteristicInfo &info) - - Emits a signal when the value of \a info has changed. This signal is only emitted - once the \l enableNotifications() function was called. - - \sa enableNotifications() -*/ - - -/*! - Construct a new QLowEnergyController object with \a parent. -*/ -QLowEnergyController::QLowEnergyController(QObject *parent) - : QObject(parent), d_ptr(new QLowEnergyControllerPrivate) -{ - d_ptr->q_ptr = this; -} - -/*! - Constructs a new QLowEnergyController for \a localAdapter and with \a parent. - - It uses \a localAdapter for the device connection. If \a localAdapter is default constructed - the resulting object will use the local default Bluetooth adapter. -*/ -QLowEnergyController::QLowEnergyController(const QBluetoothAddress &localAdapter, QObject *parent) - : QObject(parent), d_ptr(new QLowEnergyControllerPrivate) -{ - d_ptr->q_ptr = this; - d_ptr->localAdapter = localAdapter; -} - -/*! - Destroys the QLowEnergyController instance. -*/ -QLowEnergyController::~QLowEnergyController() -{ - -} - -/*! - Returns the list of all Bluetooth Low Energy services managed by this controller instance. -*/ -QList<QLowEnergyServiceInfo> QLowEnergyController::services() const -{ - return d_ptr->m_leServices; -} - -/*! - Connects to the given \a leService. If the given service is not valid, or if - the given service is already connected, nothing will happen. - -*/ -void QLowEnergyController::connectToService(const QLowEnergyServiceInfo &leService) -{ - d_ptr->connectService(leService); -} - - -/*! - Disconnects the given \a leService. If the given service was not connected, nothing will be done. - - If \a leService is invalid, all connected services will be disconnected. - -*/ -void QLowEnergyController::disconnectFromService(const QLowEnergyServiceInfo &leService) -{ - d_ptr->disconnectService(leService); -} - - -/*! - Enables receiving notifications from the given \a characteristic. If the service characteristic - does not belong to one of the services or characteristic permissions do not allow notifications, - the function will return false. -*/ -bool QLowEnergyController::enableNotifications(const QLowEnergyCharacteristicInfo &characteristic) -{ - return d_ptr->enableNotification(characteristic); -} - -/*! - Disables receiving notifications from the given \a characteristic. If the service characteristic - does not belong to one of the services, nothing will be done. -*/ -void QLowEnergyController::disableNotifications(const QLowEnergyCharacteristicInfo &characteristic) -{ - d_ptr->disableNotification(characteristic); -} - -/*! - Returns a human-readable description of the last error that occurred. -*/ -QString QLowEnergyController::errorString() const -{ - return d_ptr->errorString; -} - -/*! - This method is called for the Linux platform if a device has a random device address that - is used for connecting. - */ -void QLowEnergyController::setRandomAddress() -{ - d_ptr->m_randomAddress = true; -} - -/*! - This method writes \a characteristic using its current value. The value is directly written - to the Bluetooth Low Energy device. If the service associated to \a characteristic is not - connected or does not have write permission, the function returns \c false with - a corresponding \l errorString() being set. - - \sa QLowEnergyCharacteristicInfo::setValue(), errorString(), error() - */ -bool QLowEnergyController::writeCharacteristic(const QLowEnergyCharacteristicInfo &characteristic) -{ - return d_ptr->write(characteristic); -} - -/*! - This method writes \a descriptor using its current value. The value is directly written - to the Bluetooth Low Energy device. If the service associated to \a descriptor is not - connected it returns \c false with a corresponding \l errorString() being set. - - \sa QLowEnergyDescriptorInfo::setValue(), errorString() - */ -bool QLowEnergyController::writeDescriptor(const QLowEnergyDescriptorInfo &descriptor) -{ - return d_ptr->write(descriptor); -} - -/*! - This method returns the last occurred error. - - \sa errorString() - */ -QLowEnergyController::Error QLowEnergyController::error() const -{ - return d_ptr->error; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergycontroller.h b/src/bluetooth/qlowenergycontroller.h deleted file mode 100644 index 60400ada..00000000 --- a/src/bluetooth/qlowenergycontroller.h +++ /dev/null @@ -1,104 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QLOWENERGYCONTROLLER_H -#define QLOWENERGYCONTROLLER_H - -#include <QtCore/QObject> -#include <QtBluetooth/qbluetoothglobal.h> -#include <QtBluetooth/QBluetoothAddress> -#include <QtBluetooth/QLowEnergyCharacteristicInfo> -#include <QtBluetooth/QLowEnergyServiceInfo> -#include <QtBluetooth/QLowEnergyDescriptorInfo> - -QT_BEGIN_NAMESPACE - -class QLowEnergyControllerPrivate; - -class Q_BLUETOOTH_EXPORT QLowEnergyController: public QObject -{ - Q_OBJECT -public: - enum Error { - NoError, - UnknownError, - OperationError, - InputOutputError, - PermissionError - }; - QLowEnergyController(QObject *parent = 0); - QLowEnergyController(const QBluetoothAddress &localAdapter, QObject *parent = 0); - ~QLowEnergyController(); - - QList<QLowEnergyServiceInfo> services() const; - - void connectToService(const QLowEnergyServiceInfo &leService); - void disconnectFromService(const QLowEnergyServiceInfo &leService = QLowEnergyServiceInfo()); - - bool enableNotifications(const QLowEnergyCharacteristicInfo &characteristic); - void disableNotifications(const QLowEnergyCharacteristicInfo &characteristic); - - bool writeCharacteristic(const QLowEnergyCharacteristicInfo &characteristic); - bool writeDescriptor(const QLowEnergyDescriptorInfo &descriptor); - - QString errorString() const; - - void setRandomAddress(); - Error error() const; - -Q_SIGNALS: - void connected(const QLowEnergyServiceInfo &); - void error(const QLowEnergyServiceInfo &, QLowEnergyController::Error); - void error(const QLowEnergyCharacteristicInfo &, QLowEnergyController::Error); - void disconnected(const QLowEnergyServiceInfo &); - void valueChanged(const QLowEnergyCharacteristicInfo &); - -private: - Q_DECLARE_PRIVATE(QLowEnergyController) - QLowEnergyControllerPrivate *d_ptr; -#if defined(QT_BLUEZ_BLUETOOTH) && !defined(QT_BLUEZ_NO_BTLE) - Q_PRIVATE_SLOT(d_func(), void _q_replyReceived(const QString &reply)) -#endif -}; - -QT_END_NAMESPACE - -#endif // QLOWENERGYCONTROLLER_H diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp deleted file mode 100644 index 09922de6..00000000 --- a/src/bluetooth/qlowenergycontroller_bluez.cpp +++ /dev/null @@ -1,475 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtBluetooth/QBluetoothLocalDevice> -#include "qlowenergycontroller.h" -#include "qlowenergycontroller_p.h" -#include "qlowenergyserviceinfo_p.h" -#include "qlowenergycharacteristicinfo_p.h" -#include "qlowenergyprocess_p.h" -#include "qlowenergydescriptorinfo.h" -#include "qlowenergydescriptorinfo_p.h" -#include "moc_qlowenergycontroller.cpp" - -QT_BEGIN_NAMESPACE - -Q_DECLARE_LOGGING_CATEGORY(QT_BT_BLUEZ) - -QLowEnergyControllerPrivate::QLowEnergyControllerPrivate(): - error(QLowEnergyController::NoError), m_randomAddress(false), m_step(0), m_commandStarted(false) -{ - -} - -QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate() -{ - -} - -void QLowEnergyControllerPrivate::connectService(const QLowEnergyServiceInfo &service) -{ - errorString = QString(); - service.d_ptr->characteristicList.clear(); - bool add = true; - for (int i = 0; i < m_leServices.size(); i++) { - if (m_leServices.at(i).serviceUuid() == service.serviceUuid()) { - m_leServices.replace(i, service); - add = false; - break; - } - } - if (add) - m_leServices.append(service); - process = process->instance(); - if (!process->isConnected()) { - if (m_commandStarted) - connectToTerminal(); - else { - QObject::connect(process, SIGNAL(replySend(const QString &)), q_ptr, SLOT(_q_replyReceived(const QString &))); - if (localAdapter.isNull()) { - QBluetoothLocalDevice localDevice; - localAdapter = localDevice.address(); - } - QString command = QStringLiteral("gatttool -i ") + localAdapter.toString() - + QStringLiteral(" -b ") - + service.d_ptr->deviceInfo.address().toString() - + QStringLiteral(" -I"); - if (m_randomAddress) - command += QStringLiteral(" -t random"); - qCDebug(QT_BT_BLUEZ) << "[REGISTER] uuid inside: " << service.d_ptr->uuid << command; - process->startCommand(command); - m_commandStarted = true; - } - process->addConnection(); - } - else - service.d_ptr->m_step = 1; -} - -void QLowEnergyControllerPrivate::disconnectService(const QLowEnergyServiceInfo &service) -{ - if (service.isValid()) { - for (int i = 0; i < m_leServices.size(); i++) { - if (m_leServices.at(i).serviceUuid() == service.serviceUuid() && service.isConnected()) { - process = process->instance(); - process->endProcess(); - m_leServices.at(i).d_ptr->connected = false; - m_leServices.at(i).d_ptr->m_step = 0; - m_leServices.at(i).d_ptr->m_valueCounter = 0; - m_leServices.removeAt(i); - emit q_ptr->disconnected(service); - break; - } - } - } - else - disconnectAllServices(); -} - -void QLowEnergyControllerPrivate::_q_replyReceived(const QString &reply) -{ - qCDebug(QT_BT_BLUEZ) << "reply: " << reply; - // STEP 0 - if (m_step == 0 && !m_leServices.isEmpty()) - connectToTerminal(); - if (reply.contains(QStringLiteral("Connection refused (111)"))) { - errorString = QStringLiteral("Connection refused (111)"); - error = QLowEnergyController::InputOutputError; - disconnectAllServices(); - } - else if (reply.contains(QStringLiteral("Device busy"))) { - errorString = QStringLiteral("Device busy"); - error = QLowEnergyController::InputOutputError; - disconnectAllServices(); - } - else if (reply.contains(QStringLiteral("disconnected"))) { - errorString = QStringLiteral("Trying to execute command on disconnected service"); - error = QLowEnergyController::OperationError; - disconnectAllServices(); - } - else { - // STEP 1 -> connect - if (reply.contains(QStringLiteral("[CON]"))) { - for (int i = 0; i < m_leServices.size(); i++) { - if (m_leServices.at(i).d_ptr->m_step == 1) { - setHandles(); - m_leServices.at(i).d_ptr->m_step++; - } - } - } - - // STEP 2 -> primary - if (reply.contains(QStringLiteral("attr")) && reply.contains(QStringLiteral("uuid"))){ - const QStringList handles = reply.split(QStringLiteral("\n")); - foreach (const QString &handle, handles) { - if (handle.contains(QStringLiteral("attr")) && handle.contains(QStringLiteral("uuid"))) { - const QStringList handleDetails = handle.split(QRegularExpression(QStringLiteral("[\\s+|,]")), - QString::SkipEmptyParts); - Q_ASSERT(handleDetails.count() == 9); - const QBluetoothUuid foundUuid(handleDetails.at(8)); - for (int i = 0; i < m_leServices.size(); i++) { - if (foundUuid == m_leServices.at(i).serviceUuid() && m_leServices.at(i).d_ptr->m_step == 2) { - m_leServices.at(i).d_ptr->startingHandle = handleDetails.at(2); - m_leServices.at(i).d_ptr->endingHandle = handleDetails.at(6); - setCharacteristics(i); - } - } - } - } - } - - // STEP 3 -> "characteristics startHandle endHandle" - if (reply.contains(QStringLiteral("char")) && reply.contains(QStringLiteral("uuid")) && reply.contains(QStringLiteral("properties"))) { - const QStringList handles = reply.split(QStringLiteral("\n")); - int stepSet = -1; - foreach (const QString& handle, handles) { - if (handle.contains(QStringLiteral("char")) && handle.contains(QStringLiteral("uuid"))) { - const QStringList handleDetails = handle.split(QRegularExpression(QStringLiteral("[\\s+|,]")), - QString::SkipEmptyParts); - Q_ASSERT(handleDetails.count() == 11); - const QString charHandle = handleDetails.at(8); - QLowEnergyHandle charHandleId = charHandle.toUShort(0, 0); - for (int i = 0; i < m_leServices.size(); i++) { - if ( charHandleId >= m_leServices.at(i).d_ptr->startingHandle.toUShort(0,0) && - charHandleId <= m_leServices.at(i).d_ptr->endingHandle.toUShort(0,0)) - { - const QBluetoothUuid charUuid(handleDetails.at(10)); - - QLowEnergyCharacteristicInfo charInfo(charUuid); - charInfo.d_ptr->handle = charHandleId; - charInfo.d_ptr->properties = - static_cast<QLowEnergyCharacteristicInfo::PropertyType>( - handleDetails.at(4).toUShort(0,0)); - if (!(charInfo.d_ptr->properties & QLowEnergyCharacteristicInfo::Read)) - qCDebug(QT_BT_BLUEZ) << "GATT characteristic: Read not permitted: " << charInfo.d_ptr->uuid; - else - m_leServices.at(i).d_ptr->m_readCounter++; - m_leServices.at(i).d_ptr->characteristicList.append(charInfo); - stepSet = i; - break; - } - } - } - } - if ( stepSet != -1) - readCharacteristicValue(stepSet); - } - - // STEP 4 and STEP 5 -> char-read-uuid - // This part is for reading characteristic values and setting the notifications - if (reply.contains(QStringLiteral("handle")) && reply.contains(QStringLiteral("value")) && !reply.contains(QStringLiteral("char"))) { - int index = -1; // setting characteristics values - int index1 = -1; // setting notifications and descriptors - for (int i = 0; i < m_leServices.size(); i++) { - if (m_leServices.at(i).d_ptr->m_step == 4) - index = i; - if (m_leServices.at(i).d_ptr->m_step == 5) - index1 = i; - } - const QStringList handles = reply.split(QStringLiteral("\n")); - bool lastStep = false; - foreach (const QString &handle, handles) { - if (handle.contains(QStringLiteral("handle")) && - handle.contains(QStringLiteral("value"))) - { - const QStringList handleDetails = handle.split(QRegularExpression(QStringLiteral("\\W+")), QString::SkipEmptyParts); - if (index != -1) { - if (!m_leServices.at(index).d_ptr->characteristicList.isEmpty()) { - for (int j = 0; j < m_leServices.at(index).d_ptr->characteristicList.size(); j++) { - const QLowEnergyCharacteristicInfo chars = m_leServices.at(index).d_ptr->characteristicList.at(j); - const QLowEnergyHandle handleId = handleDetails.at(1).toUShort(0, 0); - qCDebug(QT_BT_BLUEZ) << QString::number(handleId, 16) << handleId - << chars.handle() << QString::number(chars.handle(), 16); - if (handleId == chars.handle()) { - QString value; - for ( int k = 3; k < handleDetails.size(); k++) - value = value + handleDetails.at(k); - m_leServices.at(index).d_ptr->characteristicList[j].d_ptr->value = value.toUtf8(); - qCDebug(QT_BT_BLUEZ) << "Characteristic value set." << m_leServices.at(index).d_ptr->characteristicList[j].uuid() - << hex << chars.d_ptr->handle << value; - m_leServices.at(index).d_ptr->m_valueCounter++; - } - } - } - if (m_leServices.at(index).d_ptr->m_valueCounter == m_leServices.at(index).d_ptr->m_readCounter) { - setNotifications(); - m_leServices.at(index).d_ptr->m_step++; - } - } - if (index1 != -1) { - QLowEnergyServiceInfo service = m_leServices.at(index1); - for (int j = 0; j < service.d_ptr->characteristicList.size()-1; j++) { - QLowEnergyCharacteristicInfo chars = service.d_ptr->characteristicList.at(j); - QLowEnergyCharacteristicInfo charsNext = service.d_ptr->characteristicList.at(j+1); - const QLowEnergyHandle handleId = handleDetails.at(1).toUShort(0, 0); - qCDebug(QT_BT_BLUEZ) << hex << handleId << hex << chars.handle(); - - if (handleId > chars.handle() && handleId < charsNext.handle()) { - chars.d_ptr->notification = true; - QLowEnergyDescriptorInfo descriptor( - service.d_ptr->characteristicList[j].uuid(), - QBluetoothUuid::ClientCharacteristicConfiguration, - handleId); - QString val; - //TODO why do we start parsing value from k = 0? Shouldn't it be k = 2 - for (int k = 3; k < handleDetails.size(); k++) - val = val + handleDetails.at(k); - descriptor.d_ptr->m_value = val.toUtf8(); - service.d_ptr->characteristicList[j].d_ptr->descriptorsList.append(descriptor); - qCDebug(QT_BT_BLUEZ) << "Notification characteristic set." - << hex << chars.d_ptr->handle - << handleId; - } - } - if (!lastStep) { - service.d_ptr->m_step++; - service.d_ptr->connected = true; - emit q_ptr->connected(service); - } - lastStep = true; - } - } - } - } - - // READING ADVERTISEMENT FROM THE BLE DEVICE - if (reply.contains(QStringLiteral("Notification handle"))) { - QStringList update, row; - update = reply.split(QStringLiteral("\n")); - for (int i = 0; i< update.size(); i ++) { - if (update.at(i).contains(QStringLiteral("Notification handle"))) { - row = update.at(i).split(QRegularExpression(QStringLiteral("\\W+")), QString::SkipEmptyParts); - for (int j = 0; j < m_leServices.size(); j++) { - for (int k = 0; k < m_leServices.at(j).characteristics().size(); k++) { - if (m_leServices.at(j).characteristics().at(k).handle() == row.at(2).toUShort(0, 0)) { - - QString notificationValue = QStringLiteral(""); - for (int s = 4 ; s< row.size(); s++) - notificationValue += row.at(s); - m_leServices.at(j).characteristics().at(k).d_ptr->value = notificationValue.toUtf8(); - emit q_ptr->valueChanged(m_leServices.at(j).characteristics().at(k)); - } - } - } - } - - } - } - } -} - -void QLowEnergyControllerPrivate::disconnectAllServices() -{ - for (int i = 0; i < m_leServices.size(); i++) { - process = process->instance(); - process->endProcess(); - m_leServices.at(i).d_ptr->m_step = 0; - m_leServices.at(i).d_ptr->m_valueCounter = 0; - if (m_leServices.at(i).isConnected()) { - m_leServices.at(i).d_ptr->connected = false; - emit q_ptr->disconnected(m_leServices.at(i)); - } - if (error != QLowEnergyController::NoError) - emit q_ptr->error(m_leServices.at(i), error); - m_step = 0; - } - m_leServices.clear(); -} - -void QLowEnergyControllerPrivate::connectToTerminal() -{ - process->executeCommand(QStringLiteral("connect")); - for (int i = 0; i < m_leServices.size(); i++) - m_leServices.at(i).d_ptr->m_step = 1; - m_step++; -} - -void QLowEnergyControllerPrivate::setHandles() -{ - process->executeCommand(QStringLiteral("primary")); - m_step++; -} - -void QLowEnergyControllerPrivate::setCharacteristics(int a) -{ - const QString command = QStringLiteral("characteristics ") + m_leServices.at(a).d_ptr->startingHandle - + QStringLiteral(" ") + m_leServices.at(a).d_ptr->endingHandle; - process->executeCommand(command); - m_leServices.at(a).d_ptr->m_step++; -} - -void QLowEnergyControllerPrivate::setNotifications() -{ - // TODO at the moment we only search for 2902 descriptors - // it doesn't show all 2902's and we leave a lot of other descriptors out - process->executeCommand(QStringLiteral("char-read-uuid 2902")); -} - -void QLowEnergyControllerPrivate::readCharacteristicValue(int index) -{ - bool charReadRequested = false; - - QLowEnergyServiceInfo info = m_leServices.at(index); - for (int i = 0; i < info.d_ptr->characteristicList.size(); i++) { - if ((info.d_ptr->characteristicList.at(i).d_ptr->properties & QLowEnergyCharacteristicInfo::Read)) { - const QString uuidHandle = info.d_ptr->characteristicList.at(i).uuid().toString().remove(QLatin1Char('{')).remove(QLatin1Char('}')); - const QString command = QStringLiteral("char-read-uuid ") + uuidHandle; - process->executeCommand(command); - charReadRequested = true; - } - } - info.d_ptr->m_step++; - - // Sometimes the service doesn't have readable characteristics - // Finish service connect request - if (!charReadRequested) { - info.d_ptr->connected = true; - emit q_ptr->connected(info); - } -} - -void QLowEnergyControllerPrivate::writeValue(QLowEnergyHandle handle, const QByteArray &value) -{ - process = process->instance(); - QString command = QStringLiteral("char-write-req ") + QString::number(handle, 16) - + QStringLiteral(" ") - + QString::fromLocal8Bit(value.constData()); - process->executeCommand(command); -} - -bool QLowEnergyControllerPrivate::enableNotification(const QLowEnergyCharacteristicInfo &characteristic) -{ - const QBluetoothUuid descUuid((ushort)0x2902); - for (int i = 0; i < m_leServices.size(); i++) { - for (int j = 0; j < m_leServices.at(i).characteristics().size(); j++) { - if (m_leServices.at(i).characteristics().at(j).uuid() == characteristic.uuid()) { - for (int k = 0; k < m_leServices.at(i).characteristics().at(j).descriptors().size(); k++) { - if (m_leServices.at(i).characteristics().at(j).descriptors().at(k).uuid() == descUuid){ - QByteArray val; - val.append(48); - val.append(49); - val.append(48); - val.append(48); - writeValue(m_leServices.at(i).characteristics().at(j).descriptors().at(k).handle(), val); - return true; - } - } - } - } - } - error = QLowEnergyController::UnknownError; - errorString = QStringLiteral("Characteristic or notification descriptor not found."); - emit q_ptr->error(characteristic, error); - return false; -} - -void QLowEnergyControllerPrivate::disableNotification(const QLowEnergyCharacteristicInfo &characteristic) -{ - const QBluetoothUuid descUuid((ushort)0x2902); - for (int i = 0; i < m_leServices.size(); i++) { - for (int j = 0; j < m_leServices.at(i).characteristics().size(); j++) { - if (m_leServices.at(i).characteristics().at(j).uuid() == characteristic.uuid()) { - for (int k = 0; k < m_leServices.at(i).characteristics().at(j).descriptors().size(); k++) { - if (m_leServices.at(i).characteristics().at(j).descriptors().at(k).uuid() == descUuid){ - QByteArray val; - val.append(48); - val.append(48); - val.append(48); - val.append(48); - writeValue(m_leServices.at(i).characteristics().at(j).descriptors().at(k).handle(), val); - } - } - } - } - } -} - -bool QLowEnergyControllerPrivate::write(const QLowEnergyCharacteristicInfo &characteristic) -{ - if (process->isConnected() && characteristic.isValid()) { - if (QLowEnergyCharacteristicInfo::Write & characteristic.properties()) { - writeValue(characteristic.handle(), characteristic.value()); - return true; - } else { - error = QLowEnergyController::PermissionError; - errorString = QStringLiteral("This characteristic does not support write operations."); - } - } else { - error = QLowEnergyController::OperationError; - errorString = QStringLiteral("The device is not connected or characteristic is not valid"); - } - - emit q_ptr->error(characteristic, error); - return false; -} - -bool QLowEnergyControllerPrivate::write(const QLowEnergyDescriptorInfo &descriptor) -{ - if (process->isConnected()) { - writeValue(descriptor.handle(), descriptor.value()); - return true; - } - - return false; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergycontroller_p.cpp b/src/bluetooth/qlowenergycontroller_p.cpp deleted file mode 100644 index 07d58fdd..00000000 --- a/src/bluetooth/qlowenergycontroller_p.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergycontroller_p.h" -#include "moc_qlowenergycontroller.cpp" - -QT_BEGIN_NAMESPACE - -QLowEnergyControllerPrivate::QLowEnergyControllerPrivate(): - error(QLowEnergyController::NoError) -{ - -} - -QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate() -{ - -} - -void QLowEnergyControllerPrivate::connectService(const QLowEnergyServiceInfo &service) -{ - Q_UNUSED(service); -} - -void QLowEnergyControllerPrivate::disconnectService(const QLowEnergyServiceInfo &leService) -{ - Q_UNUSED(leService); -} - -void QLowEnergyControllerPrivate::disconnectAllServices() -{ - -} - -bool QLowEnergyControllerPrivate::enableNotification(const QLowEnergyCharacteristicInfo &characteristic) -{ - Q_UNUSED(characteristic); - return false; -} - -void QLowEnergyControllerPrivate::disableNotification(const QLowEnergyCharacteristicInfo &characteristic) -{ - Q_UNUSED(characteristic); -} - -bool QLowEnergyControllerPrivate::write(const QLowEnergyCharacteristicInfo &characteristic) -{ - Q_UNUSED(characteristic); - return false; -} - -bool QLowEnergyControllerPrivate::write(const QLowEnergyDescriptorInfo &descriptor) -{ - Q_UNUSED(descriptor); - return false; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergycontroller_p.h b/src/bluetooth/qlowenergycontroller_p.h deleted file mode 100644 index 92d06f36..00000000 --- a/src/bluetooth/qlowenergycontroller_p.h +++ /dev/null @@ -1,99 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QLOWENERGYCONTROLLER_P_H -#define QLOWENERGYCONTROLLER_P_H -#include "qlowenergycontroller.h" - -QT_BEGIN_NAMESPACE - -class QLowEnergyProcess; - -class QLowEnergyControllerPrivate -{ - Q_DECLARE_PUBLIC(QLowEnergyController) -public: - QLowEnergyControllerPrivate(); - ~QLowEnergyControllerPrivate(); - void connectService(const QLowEnergyServiceInfo &service); - void disconnectService(const QLowEnergyServiceInfo &leService = QLowEnergyServiceInfo()); - bool enableNotification(const QLowEnergyCharacteristicInfo &characteristic); - void disableNotification(const QLowEnergyCharacteristicInfo &characteristic); - bool write(const QLowEnergyCharacteristicInfo &characteristic); - bool write(const QLowEnergyDescriptorInfo &descriptor); - void disconnectAllServices(); - - QList<QLowEnergyServiceInfo> m_leServices; - QString errorString; - QLowEnergyController::Error error; - -#ifdef QT_QNX_BLUETOOTH - static void serviceConnected(const char*, const char*, int, int, short unsigned int, short unsigned int, short unsigned int, void*); - static void serviceUpdate(const char *, int , short unsigned int, short unsigned int, short unsigned int, void *); - static void serviceDisconnected(const char *, const char *, int, int, void *); - static void serviceNotification(int, short unsigned int, const char unsigned *, short unsigned int, void *); - void readDescriptors(QLowEnergyCharacteristicInfo &characteristic); - void readValue(QLowEnergyCharacteristicInfo &characteristic); - void writeValue(const int &instance, QLowEnergyHandle handle, const QByteArray &value); -#endif - -#if defined(QT_BLUEZ_BLUETOOTH) && !defined(QT_BLUEZ_NO_BTLE) - void connectToTerminal(); - void setHandles(); - void setCharacteristics(int); - void setNotifications(); - void readCharacteristicValue(int); - void writeValue(QLowEnergyHandle, const QByteArray &); -public slots: - void _q_replyReceived(const QString &reply); -#endif -private: - bool m_randomAddress; - QLowEnergyProcess *process; - QBluetoothAddress localAdapter; -#if defined(QT_BLUEZ_BLUETOOTH) && !defined(QT_BLUEZ_NO_BTLE) - int m_step; - bool m_deviceConnected; - bool m_commandStarted; -#endif - QLowEnergyController *q_ptr; -}; -QT_END_NAMESPACE -#endif // QLOWENERGYCONTROLLER_P_H diff --git a/src/bluetooth/qlowenergycontroller_qnx.cpp b/src/bluetooth/qlowenergycontroller_qnx.cpp deleted file mode 100644 index df2e8b3b..00000000 --- a/src/bluetooth/qlowenergycontroller_qnx.cpp +++ /dev/null @@ -1,676 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtCore/QLoggingCategory> -#include "qlowenergycontroller_p.h" -#include "qlowenergyserviceinfo_p.h" -#include "qlowenergycharacteristicinfo.h" -#include "qlowenergycharacteristicinfo_p.h" -#include "qlowenergydescriptorinfo.h" -#include "qlowenergydescriptorinfo_p.h" -#include "qlowenergyprocess_p.h" -#include <btapi/btdevice.h> -#include <btapi/btgatt.h> -#include <btapi/btspp.h> -#include <btapi/btle.h> -#include <errno.h> -#include <QSharedPointer> - -QT_BEGIN_NAMESPACE - -Q_DECLARE_LOGGING_CATEGORY(QT_BT_QNX) - -int hexValue(QChar inChar) -{ - if (inChar.isDigit()) - return (inChar.unicode() - '0'); - else - return (inChar.toUpper().unicode() - 'A' + 10); - return -1; -} - -int stringToBuffer(const QString &stringData, quint8 *buffer, int bufferLength) -{ - int consumed = 0; - for (int i = 0; i < bufferLength; i++) { - const int hex = hexValue(stringData.at(i).toLatin1()); - if (hex >= 0) { - if ((consumed % 2) == 0) { - buffer[(consumed / 2)] = hex << 4; - } else { - buffer[(consumed / 2)] |= hex; - } - - consumed++; - } - } - - // Round up the number of bytes we consumed to a multiple of 2. - if ((consumed % 2) != 0) - ++consumed; - - return consumed; -} - -void QLowEnergyControllerPrivate::serviceConnected(const char *bdaddr, const char *service, int instance, - int err, short unsigned int connInt, short unsigned int latency, - short unsigned int superTimeout, void *userData) -{ - Q_UNUSED(latency); - Q_UNUSED(connInt); - Q_UNUSED(superTimeout); - QSharedPointer<QLowEnergyControllerPrivate> *classPointer = - static_cast<QSharedPointer<QLowEnergyControllerPrivate> *>(userData); - QLowEnergyControllerPrivate *p = classPointer->data(); - - qCDebug(QT_BT_QNX) << "---------------------------------------------------"; - qCDebug(QT_BT_QNX) << "[SERVICE: Connected] (instance):" << instance; - qCDebug(QT_BT_QNX) << "[SERVICE: Connected] Device address: " << bdaddr; - qCDebug(QT_BT_QNX) << "[SERVICE: Connected] Device service: " << service; - qCDebug(QT_BT_QNX) << "[SERVICE: Connected] Possible error: " << err; - - QString lowEnergyUuid = QLatin1String(service); - QBluetoothUuid leUuid; - - //In case of custom UUIDs (e.g. Texas Instruments SenstorTag LE Device) - if (lowEnergyUuid.length() > 6) { - lowEnergyUuid.remove(0,2); - leUuid = QBluetoothUuid(lowEnergyUuid); - } else { // Official UUIDs are presented in 6 characters (for instance 0x180A) - leUuid = QBluetoothUuid(lowEnergyUuid.toUShort(0,0)); - } - qCDebug(QT_BT_QNX) << leUuid; - - int index = -1; - for (int i = 0; i < p->m_leServices.size(); i++) { - if (p->m_leServices.at(i).serviceUuid() == leUuid) { - index = i; - break; - } - } - - if (err != 0) { - qCDebug(QT_BT_QNX) << "An error occurred in service connected callback: " << qt_error_string(err); - p->error = QLowEnergyController::OperationError; - p->errorString = qt_error_string(err); - Q_EMIT p->q_ptr->error(p->m_leServices.at(index), p->error); - } - if (index != -1) { - p->m_leServices.at(index).d_ptr->characteristicList.clear(); - bt_gatt_characteristic_t* data; - data = (bt_gatt_characteristic_t*) malloc(sizeof(bt_gatt_characteristic_t)); - if (!data) { - qCDebug(QT_BT_QNX) << "[SERVICE: Connected] GATT characteristics: Not enough memory"; - bt_gatt_disconnect_instance(instance); - p->error = QLowEnergyController::OperationError; - p->errorString = QStringLiteral("GATT characteristics: Not enough memory"); - Q_EMIT p->q_ptr->error(p->m_leServices.at(index), p->error); - return; - } - - int num_characteristics = bt_gatt_characteristics_count(instance); - - if (num_characteristics > -1) { - qCDebug(QT_BT_QNX) << "Characteristics number: "<< num_characteristics; - bt_gatt_characteristic_t *allCharacteristicList; - - allCharacteristicList = (bt_gatt_characteristic_t*) malloc(num_characteristics * sizeof(bt_gatt_characteristic_t)); - if (!allCharacteristicList) { - qCDebug(QT_BT_QNX) <<" GATT characteristics: Not enough memory"; - bt_gatt_disconnect_instance(instance); - p->error = QLowEnergyController::OperationError; - p->errorString = QStringLiteral("GATT characteristics: Not enough memory"); - Q_EMIT p->q_ptr->error(p->m_leServices.at(index), p->error); - return; - } - - /* BEGIN WORKAROUND - Temporary fix to address race condition */ - int number = 0; - do { - number = bt_gatt_characteristics(instance, allCharacteristicList, num_characteristics); - } while ((number == -1) && (errno == EBUSY)); - //Using sub to subscribe notification callback only once - bool sub = false; - int characteristicListSize = number; - - for (int i = 0; i < characteristicListSize; i++) { - qCDebug(QT_BT_QNX) << "Characteristic: uuid,handle,value_handle, properties:" - << allCharacteristicList[i].uuid << "," << allCharacteristicList[i].handle - << "," << allCharacteristicList[i].value_handle - << ", " << allCharacteristicList[i].properties; - QString charUuid = QString::fromLatin1(allCharacteristicList[i].uuid); - QBluetoothUuid characteristicUuid; - if (!charUuid.toUShort(0,0)) { - charUuid = charUuid.remove(0,2); - characteristicUuid = QBluetoothUuid(charUuid); - } else { - characteristicUuid = QBluetoothUuid(charUuid.toUShort(0,0)); - } - QLowEnergyCharacteristicInfo characteristicInfo(characteristicUuid); - characteristicInfo.d_ptr->handle = allCharacteristicList[i].value_handle; - characteristicInfo.d_ptr->instance = instance; - characteristicInfo.d_ptr->characteristic = allCharacteristicList[i]; - characteristicInfo.d_ptr->properties = - static_cast<QLowEnergyCharacteristicInfo::PropertyType>( - allCharacteristicList[i].properties); - p->readDescriptors(characteristicInfo); - p->readValue(characteristicInfo); - //Subscribe only once since it is static function - if (!sub) { - int rc = bt_gatt_reg_notifications(instance, &(p->serviceNotification)); - if (!rc) { - qCDebug(QT_BT_QNX) << "[SERVICE: Connected] bt_gatt_reg_notifications failed." << errno << qt_error_string(errno); - p->error = QLowEnergyController::OperationError; - p->errorString = qt_error_string(errno); - Q_EMIT p->q_ptr->error(p->m_leServices.at(index), p->error); - } else { - qCDebug(QT_BT_QNX) << "[SERVICE: Connected] bt_gatt_reg_notifications was presumably OK"; - } - sub = true; - } - p->m_leServices.at(index).d_ptr->characteristicList.append(characteristicInfo); - - } - - if (!allCharacteristicList) { - free(allCharacteristicList); - allCharacteristicList = 0; - } - - /* END WORKAROUND */ - } - - p->m_leServices.at(index).d_ptr->connected = true; - - qCDebug(QT_BT_QNX) << p; - Q_EMIT p->q_ptr->connected(p->m_leServices.at(index)); - qCDebug(QT_BT_QNX) << "---------------------------------------------------------------------------------"; - } else { - qCDebug(QT_BT_QNX) << "Unregistered service connected"; - } -} - -void QLowEnergyControllerPrivate::serviceNotification(int instance, short unsigned int handle, - const unsigned char*val, short unsigned int len, void *userData) -{ - if (!val) - return; - QSharedPointer<QLowEnergyControllerPrivate> *ClassPointer - = static_cast<QSharedPointer<QLowEnergyControllerPrivate> *>(userData); - QLowEnergyControllerPrivate *p = ClassPointer->data(); - - qCDebug(QT_BT_QNX) << "---------------------------------------------------"; - qCDebug(QT_BT_QNX) << "[Notification] received (handle, value, instance):" << handle << val << instance; - qCDebug(QT_BT_QNX) << "---------------------------------------------------"; - - //Check if the notification from wanted characteristic - bool current = false; - QLowEnergyCharacteristicInfo chars; - for (int i = 0; i < p->m_leServices.size(); i++) { - for (int j = 0; j < p->m_leServices.at(i).characteristics().size(); j++) { - -// QString charHandle; -// charHandle.setNum(handle); -// charHandle = charHandle; - if (handle == p->m_leServices.at(i).d_ptr->characteristicList.at(j).handle() ) { - chars = QLowEnergyCharacteristicInfo(p->m_leServices.at(i).d_ptr->characteristicList.at(j)); - QByteArray receivedValue; - - for (int k = 0; k < len; k++) { - QByteArray hexadecimal; - hexadecimal.append(val[k]); - receivedValue.append(hexadecimal.toHex()); - } - - p->m_leServices.at(i).d_ptr->characteristicList.at(j).d_ptr->notification = true; - p->m_leServices.at(i).d_ptr->characteristicList.at(j).d_ptr->value = receivedValue; - Q_EMIT p->q_ptr->valueChanged(p->m_leServices.at(i).d_ptr->characteristicList.at(j)); - current = true; - } - } - } - - if (!current) - qCDebug(QT_BT_QNX) << "Notificiation received and does not belong to this characteristic."; -} - -void QLowEnergyControllerPrivate::serviceUpdate(const char *bdaddr, int instance, - short unsigned int connInt, short unsigned int latency, - short unsigned int superTimeout, void *userData) -{ - Q_UNUSED(latency); - Q_UNUSED(connInt); - Q_UNUSED(superTimeout); - Q_UNUSED(userData); - qCDebug(QT_BT_QNX) << "---------------------------------------------------"; - qCDebug(QT_BT_QNX) << "[SERVICE: Update] (instance):" << instance; - qCDebug(QT_BT_QNX) << "[SERVICE: Update] Device address: " << bdaddr; - qCDebug(QT_BT_QNX) << "---------------------------------------------------"; -} - -void QLowEnergyControllerPrivate::serviceDisconnected(const char *bdaddr, const char *service, - int instance, int reason, void *userData) -{ - QSharedPointer<QLowEnergyControllerPrivate> *classPointer = static_cast<QSharedPointer<QLowEnergyControllerPrivate> *>(userData); - QLowEnergyControllerPrivate *p = classPointer->data(); - QString lowEnergyUuid = QLatin1String(service); - qCDebug(QT_BT_QNX) << "LE Service: " << lowEnergyUuid << service; - QBluetoothUuid leUuid; - - //In case of custom UUIDs (e.g. Texas Instruments SenstorTag LE Device) - if ( lowEnergyUuid.length() > 4 ) { - leUuid = QBluetoothUuid(lowEnergyUuid); - } - else {// Official UUIDs are presented in 4 characters (for instance 180A) - lowEnergyUuid = QStringLiteral("0x") + lowEnergyUuid; - leUuid = QBluetoothUuid(lowEnergyUuid.toUShort(0,0)); - } - QLowEnergyServiceInfo leService(leUuid); - Q_EMIT p->q_ptr->connected(leService); - - qCDebug(QT_BT_QNX) << "---------------------------------------------------"; - qCDebug(QT_BT_QNX) << "[SERVICE: Disconnect] (service, instance, reason):" << service << instance << reason; - qCDebug(QT_BT_QNX) << "[SERVICE: Disconnect] Device address: " << bdaddr; - qCDebug(QT_BT_QNX) << "---------------------------------------------------"; - delete p; - delete classPointer; -} - -QLowEnergyControllerPrivate::QLowEnergyControllerPrivate(): - error(QLowEnergyController::NoError) -{ - qRegisterMetaType<QLowEnergyServiceInfo>("QLowEnergyServiceInfo"); - qRegisterMetaType<QLowEnergyCharacteristicInfo>("QLowEnergyCharacteristicInfo"); -} - -QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate() -{ - -} - -void QLowEnergyControllerPrivate::connectService(const QLowEnergyServiceInfo &service) -{ - Q_Q(QLowEnergyController); - if (!service.isValid()) { - error = QLowEnergyController::UnknownError; - errorString = QStringLiteral("Service not valid."); - Q_EMIT q->error(service, error); - return; - } - - bool add = true; - for (int i = 0; i < m_leServices.size(); i++) { - if (m_leServices.at(i).serviceUuid() == service.serviceUuid()) { - if (m_leServices.at(i).isConnected()) { - error = QLowEnergyController::OperationError; - errorString = QStringLiteral("Service already connected"); - Q_EMIT q->error(m_leServices.at(i), error); - } - else { - m_leServices.replace(i, service); - add = false; - break; - } - } - } - if (add) - m_leServices.append(service); - - bt_gatt_callbacks_t gatt_callbacks = {&(this->serviceConnected), this->serviceDisconnected, this->serviceUpdate}; - - errno = 0; - process = process->instance(); - if (!process->isConnected()) { - qCDebug(QT_BT_QNX) << "[INIT] Init problem." << errno << qt_error_string(errno); - error = QLowEnergyController::InputOutputError; - errorString = QStringLiteral("Initialization of device falied. ") + qt_error_string(errno); - Q_EMIT q->error(service, error); - return; - } - - errno = 0; - if (bt_gatt_init(&gatt_callbacks) < 0) { - qCDebug(QT_BT_QNX) << "[INIT] GAT Init problem." << errno << qt_error_string(errno); - error = QLowEnergyController::UnknownError; - errorString = QStringLiteral("Callbacks initialization failed. ") + qt_error_string(errno); - Q_EMIT q->error(service, error); - return; - } - if (bt_le_init(0) != EOK) { - qWarning() << "LE initialization failure " << errno; - } - - QSharedPointer<QLowEnergyControllerPrivate> *classPointer = new QSharedPointer<QLowEnergyControllerPrivate>(this); - process->addPointer(classPointer->data()); - QString serviceUuid = service.serviceUuid().toString().remove(QLatin1Char('{')).remove(QLatin1Char('}')); - if (service.serviceName() == QStringLiteral("Unknown Service")) - serviceUuid = QStringLiteral("0x") + serviceUuid.toUpper(); - else - serviceUuid = QStringLiteral("0x") + serviceUuid[4] + serviceUuid[5] + serviceUuid[6] + serviceUuid[7]; - errno = 0; - - bt_gatt_conn_parm_t conParm; - conParm.minConn = 0x30; - conParm.maxConn = 0x50; - conParm.latency = 0; - conParm.superTimeout = 50; - - if (bt_gatt_connect_service(service.device().address().toString().toLocal8Bit().constData(), serviceUuid.toLocal8Bit().constData(), 0, &conParm, classPointer) < 0) { - qCDebug(QT_BT_QNX) << "[SERVICE] Connection to service failed." << errno << qt_error_string(errno); - error = QLowEnergyController::OperationError; - errorString = QStringLiteral("[SERVICE] Connection to service failed.") + qt_error_string(errno); - Q_EMIT q->error(service, error); - } - qCDebug(QT_BT_QNX) << "errno after connect: " << errno; -} - -void QLowEnergyControllerPrivate::disconnectService(const QLowEnergyServiceInfo &leService) -{ - Q_Q(QLowEnergyController); - if (leService.isValid()){ - QString serviceUuid = leService.serviceUuid().toString().remove(QLatin1Char('{')).remove(QLatin1Char('}')); - if (leService.serviceName() == QStringLiteral("Unknown Service")) - serviceUuid = QStringLiteral("0x") + serviceUuid.toUpper(); - else - serviceUuid = QStringLiteral("0x") + serviceUuid[4] + serviceUuid[5] + serviceUuid[6] + serviceUuid[7]; - if (leService.isConnected()) { - if (bt_gatt_disconnect_service(leService.device().address().toString().toLocal8Bit().constData(), serviceUuid.toLocal8Bit().constData()) < 0) { - qCDebug(QT_BT_QNX) << "[SERVICE] Disconnect service request failed. " << errno << qt_error_string(errno); - error = QLowEnergyController::OperationError; - errorString = QStringLiteral("[SERVICE] Disconnect service request failed. ") + qt_error_string(errno); - Q_EMIT q->error(leService, error); - } else { - for (int i = 0; i < m_leServices.size(); i++) { - if (leService.serviceUuid() == m_leServices.at(i).serviceUuid()) { - m_leServices.removeAt(i); - break; - } - } - leService.d_ptr->connected = false; - Q_EMIT q->disconnected(leService); - qCDebug(QT_BT_QNX) << "[SERVICE] Disconnected from service OK."; - } - } else { - error = QLowEnergyController::UnknownError; - errorString = QStringLiteral("Service is not connected"); - Q_EMIT q->error(leService, error); - } - } else { - disconnectAllServices(); - } -} - -void QLowEnergyControllerPrivate::disconnectAllServices() -{ - Q_Q(QLowEnergyController); - for (int i = 0; i < m_leServices.size(); i++) { - QString serviceUuid = m_leServices.at(i).serviceUuid().toString().remove(QLatin1Char('{')).remove(QLatin1Char('}')); - if (m_leServices.at(i).serviceName() == QStringLiteral("Unknown Service")) - serviceUuid = QStringLiteral("0x") + serviceUuid.toUpper(); - else - serviceUuid = QStringLiteral("0x") + serviceUuid[4] + serviceUuid[5] + serviceUuid[6] + serviceUuid[7]; - - if (m_leServices.at(i).isConnected()) { - qCDebug(QT_BT_QNX) << m_leServices.at(i).device().address().toString().toLocal8Bit().constData() << serviceUuid.toLocal8Bit().constData(); - if (bt_gatt_disconnect_service( m_leServices.at(i).device().address().toString().toLocal8Bit().constData(), serviceUuid.toLocal8Bit().constData()) < 0) { - qCDebug(QT_BT_QNX) << "[SERVICE] Disconnect service request failed. " << errno << qt_error_string(errno); - error = QLowEnergyController::OperationError; - errorString = QStringLiteral("[SERVICE] Disconnect service request failed. ") + qt_error_string(errno); - Q_EMIT q->error( m_leServices.at(i), error); - } else { - m_leServices.at(i).d_ptr->connected = false; - Q_EMIT q->disconnected(m_leServices.at(i)); - qCDebug(QT_BT_QNX) << "[SERVICE] Disconnected from service OK."; - } - } - } - m_leServices.clear(); -} - -bool QLowEnergyControllerPrivate::enableNotification(const QLowEnergyCharacteristicInfo &characteristic) -{ - Q_Q(QLowEnergyController); - if (characteristic.d_ptr->instance == -1) { - qCDebug(QT_BT_QNX) << " GATT service not connected "; - error = QLowEnergyController::UnknownError; - errorString = QStringLiteral("Service is not connected"); - Q_EMIT q->error(characteristic, error); - return false; - } - if (!(characteristic.d_ptr->properties & QLowEnergyCharacteristicInfo::Notify)) { - qCDebug(QT_BT_QNX) << "Notification changes not allowed"; - error = QLowEnergyController::PermissionError; - errorString = QStringLiteral("This characteristic does not support notifications."); - Q_EMIT q->error(characteristic, error); - return false; - } - - int rc = bt_gatt_enable_notify(characteristic.d_ptr->instance, &characteristic.d_ptr->characteristic, 1); - if (!rc) { - qCDebug(QT_BT_QNX) << "bt_gatt_enable_notify errno=" << errno << qt_error_string(errno); - error = QLowEnergyController::OperationError; - errorString = qt_error_string(errno); - Q_EMIT q->error(characteristic, error); - return false; - } else { - qCDebug(QT_BT_QNX) << "bt_gatt_enable_notify was presumably OK"; - return true; - } -} - -void QLowEnergyControllerPrivate::disableNotification(const QLowEnergyCharacteristicInfo &characteristic) -{ - int rc = bt_gatt_enable_notify(characteristic.d_ptr->instance, &characteristic.d_ptr->characteristic, 0); - if (!rc) - qCDebug(QT_BT_QNX) << "bt_gatt_enable_notify errno=" << errno << qt_error_string(errno); - else - qCDebug(QT_BT_QNX) << "bt_gatt_enable_notify was presumably OK"; -} - -bool QLowEnergyControllerPrivate::write(const QLowEnergyCharacteristicInfo &characteristic) -{ - Q_Q(QLowEnergyController); - if (!characteristic.isValid()) { - error = QLowEnergyController::UnknownError; - errorString = QStringLiteral("Characteristic not valid."); - Q_EMIT q->error(characteristic, error); - return false; - } - - if (characteristic.properties() & QLowEnergyCharacteristicInfo::Write) { - writeValue(characteristic.d_ptr->instance, characteristic.d_ptr->handle, characteristic.d_ptr->value); - if (errorString == QString()) { - return true; - } else { - error = QLowEnergyController::OperationError; - Q_EMIT q->error(characteristic, error); - return false; - } - } else { - error = QLowEnergyController::PermissionError; - errorString = QStringLiteral("Characteristic does not allow write operations. The wanted value was not written to the device."); - Q_EMIT q->error(characteristic, error); - return false; - } - -} - -bool QLowEnergyControllerPrivate::write(const QLowEnergyDescriptorInfo &descriptor) -{ - Q_UNUSED(descriptor); - return false; -} - -void QLowEnergyControllerPrivate::readDescriptors(QLowEnergyCharacteristicInfo &characteristic) -{ - characteristic.d_ptr->descriptorsList.clear(); - int count = bt_gatt_descriptors_count(characteristic.d_ptr->instance, &characteristic.d_ptr->characteristic); - - if (count == -1) { - qWarning() << "GATT descriptors count failed:" << errno << "(" << qt_error_string(errno) << ")"; - bt_gatt_disconnect_instance(characteristic.d_ptr->instance); - return; - } - - bt_gatt_descriptor_t *descriptorList = 0; - if (count > 0) { - descriptorList = (bt_gatt_descriptor_t*)alloca(count * sizeof(bt_gatt_descriptor_t)); - if (!descriptorList) { - qCDebug(QT_BT_QNX) <<"GATT descriptors: Not enough memory"; - bt_gatt_disconnect_instance(characteristic.d_ptr->instance); - return; - } - - /* BEGIN WORKAROUND - Temporary fix to address race condition */ - int number = 0; - do { - number = bt_gatt_descriptors(characteristic.d_ptr->instance, &characteristic.d_ptr->characteristic, descriptorList, count); - } while ((number == -1) && (errno == EBUSY)); - - count = number; - /* END WORKAROUND */ - } - - if (count == -1) { - qCDebug(QT_BT_QNX) << "GATT descriptors failed: %1 (%2)" << errno << qt_error_string(errno); - bt_gatt_disconnect_instance(characteristic.d_ptr->instance); - return; - } - - characteristic.d_ptr->characteristicMtu = bt_gatt_get_mtu(characteristic.d_ptr->instance); - - uint8_t *descriptorBuffer = (uint8_t *)alloca(characteristic.d_ptr->characteristicMtu); - if (!descriptorBuffer) { - qCDebug(QT_BT_QNX) <<"GATT descriptors: Not enough memory"; - bt_gatt_disconnect_instance(characteristic.d_ptr->instance); - return; - } - - for (int i = 0; i < count; i++) { - QString descriptorUuid = QLatin1String(descriptorList[i].uuid); - QBluetoothUuid descUuid(descriptorUuid); - QLowEnergyDescriptorInfo descriptor(descUuid, QBluetoothUuid::CharacteristicExtendedProperties, descriptorList[i].handle); //TODO set proper descriptor type - - uint8_t more = 1; - int byteCount; - for (int offset = 0; more; offset += byteCount) { - byteCount = bt_gatt_read_value(characteristic.d_ptr->instance, descriptorList[i].handle, offset, descriptorBuffer, characteristic.d_ptr->characteristicMtu, &more); - if (byteCount < 0) { - qCDebug(QT_BT_QNX) << "Unable to read descriptor value:"<< errno<< qt_error_string(errno); - break; - } - descriptor.d_ptr->m_value = QByteArray(); - for (int j = 0; j < byteCount; j++) { - QString hexadecimal; - hexadecimal.setNum(descriptorBuffer[j], 16); - descriptor.d_ptr->m_value.append(hexadecimal.toLatin1()); - } - - } - descriptor.d_ptr->instance = characteristic.d_ptr->instance; - characteristic.d_ptr->descriptorsList.append(descriptor); - } - - if (!descriptorList) { - free(descriptorList); - descriptorList = 0; - } -} - -void QLowEnergyControllerPrivate::readValue(QLowEnergyCharacteristicInfo &characteristic) -{ - if (!(characteristic.d_ptr->properties & QLowEnergyCharacteristicInfo::Read)) { - qCDebug(QT_BT_QNX) << "GATT characteristic: Read not permitted"; - return; - } - - uint8_t *characteristicBuffer = (uint8_t *)alloca(characteristic.d_ptr->characteristicMtu); - if (!characteristicBuffer) { - qCDebug(QT_BT_QNX) << "GATT characteristic: Not enough memory"; - bt_gatt_disconnect_instance(characteristic.d_ptr->instance); - return; - } - - int byteCount = 0; - uint8_t more = 1; - for (int offset = 0; more; offset += byteCount) { - byteCount = bt_gatt_read_value(characteristic.d_ptr->instance, - characteristic.d_ptr->handle, offset, characteristicBuffer, - characteristic.d_ptr->characteristicMtu, &more); - if (byteCount < 0) { - qCDebug(QT_BT_QNX) << "Unable to read characteristic value: " << errno << qt_error_string(errno); - break; - } - characteristic.d_ptr->value = QByteArray(); - for (int j = 0; j < byteCount; j++) { - QString hexadecimal; - hexadecimal.setNum(characteristicBuffer[j], 16); - characteristic.d_ptr->value.append(hexadecimal.toLatin1()); - } - } -} - -void QLowEnergyControllerPrivate::writeValue(const int &instance, QLowEnergyHandle handle, const QByteArray &value) -{ - errorString = QString(); - const int characteristicLen = value.size(); - uint8_t *characteristicBuffer = (uint8_t *)alloca(characteristicLen / 2 + 1); - if (!characteristicBuffer) { - qCDebug(QT_BT_QNX) << "GATT characteristic: Not enough memory"; - errorString = QStringLiteral("Not enough memory."); - bt_gatt_disconnect_instance(instance); - return; - } - - const int consumed = stringToBuffer(QString::fromLocal8Bit(value), characteristicBuffer, characteristicLen); - - if (consumed > 0) { - int byteCount; - byteCount = bt_gatt_write_value(instance, handle, 0, characteristicBuffer, (consumed / 2)); - - if (byteCount < 0) { - qCDebug(QT_BT_QNX) << "Unable to write characteristic value: " << errno << qt_error_string(errno); - errorString = QStringLiteral("Unable to write characteristic value: ") + qt_error_string(errno); - } - } -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergydescriptorinfo.cpp b/src/bluetooth/qlowenergydescriptorinfo.cpp deleted file mode 100644 index b4789670..00000000 --- a/src/bluetooth/qlowenergydescriptorinfo.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergydescriptorinfo.h" -#include "qlowenergydescriptorinfo_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QLowEnergyDescriptorInfo - \inmodule QtBluetooth - \brief The QLowEnergyDescriptorInfo class stores information about the Bluetooth - Low Energy descriptor. - \since 5.4 - - QLowEnergyDescriptorInfo provides information about a Bluetooth Low Energy - descriptor's name, UUID, value and handle. Descriptors are contained in the - Bluetooth Low Energy characteristic and they provide additional information - about the characteristic (data format, notification activation, etc). -*/ - -QLowEnergyDescriptorInfoPrivate::QLowEnergyDescriptorInfoPrivate(const QBluetoothUuid &uuid, QLowEnergyHandle handle) - : m_uuid(uuid), m_handle(handle), - m_type(QBluetoothUuid::ClientCharacteristicConfiguration) //by default a notification -{ -#ifdef QT_QNX_BLUETOOTH - instance = -1; -#endif -} - -QLowEnergyDescriptorInfoPrivate::~QLowEnergyDescriptorInfoPrivate() -{ - -} - -/*! - Construct a new QLowEnergyCharacteristicInfo with given \a uuid. -*/ -QLowEnergyDescriptorInfo::QLowEnergyDescriptorInfo(const QBluetoothUuid &uuid): - d_ptr(new QLowEnergyDescriptorInfoPrivate(uuid, 0u)) -{ -} - -/*! - \internal - Construct a new QLowEnergyDescriptorInfo with given parent - characteristic \a uuid, descriptor \a type and \a handle. -*/ -QLowEnergyDescriptorInfo::QLowEnergyDescriptorInfo(const QBluetoothUuid &uuid, - QBluetoothUuid::DescriptorType type, - QLowEnergyHandle handle): - d_ptr(new QLowEnergyDescriptorInfoPrivate(uuid, handle)) -{ - d_ptr->m_type = type; -} - -/*! - Destroys the QLowEnergyDescriptorInfo object. -*/ -QLowEnergyDescriptorInfo::~QLowEnergyDescriptorInfo() -{ - -} - -/*! - Makes a copy of the \a other and assigns it to this QLowEnergyDescriptorInfo object. - The two copies continue to share the same service and registration details. -*/ -QLowEnergyDescriptorInfo &QLowEnergyDescriptorInfo::operator=(const QLowEnergyDescriptorInfo &other) -{ - d_ptr = other.d_ptr; - return *this; -} - -/*! - Returns the UUID of the characteristic that this descriptor belongs to. -*/ - -//TODO should this return the characteristic uuid or indeed 0x2902? -QBluetoothUuid QLowEnergyDescriptorInfo::uuid() const -{ - return d_ptr->m_uuid; -} - -/*! - Returns the handle of the descriptor. -*/ -QLowEnergyHandle QLowEnergyDescriptorInfo::handle() const -{ - return d_ptr->m_handle; -} - -/*! - Returns the value of the descriptor. -*/ -QByteArray QLowEnergyDescriptorInfo::value() const -{ - return d_ptr->m_value; -} - -/*! - Returns the name of the descriptor type. - - \sa type() -*/ -//TODO check that we really need this function. The static -// QBluetoothUuid::descriptorToString should actually be sufficient. -QString QLowEnergyDescriptorInfo::name() const -{ - return QBluetoothUuid::descriptorToString( - static_cast<QBluetoothUuid::DescriptorType>(d_ptr->m_type)); -} - -/*! - Returns the type of descriptor. - */ -QBluetoothUuid::DescriptorType QLowEnergyDescriptorInfo::type() const -{ - return d_ptr->m_type; -} - -/*! - Sets the value \a value of the descriptor. This only caches the value. To write - a value directly to the device QLowEnergyController class must be used. - - \sa QLowEnergyController::writeDescriptor() -*/ -void QLowEnergyDescriptorInfo::setValue(const QByteArray &value) -{ - d_ptr->m_value = value; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergydescriptorinfo.h b/src/bluetooth/qlowenergydescriptorinfo.h deleted file mode 100644 index 9f56ef38..00000000 --- a/src/bluetooth/qlowenergydescriptorinfo.h +++ /dev/null @@ -1,86 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QLOWENERGYDESCRIPTORINFO_H -#define QLOWENERGYDESCRIPTORINFO_H - -#include <QtCore/QSharedPointer> -#include <QtCore/QVariantMap> -#include <QtBluetooth/qbluetooth.h> -#include <QtBluetooth/QBluetoothUuid> - -QT_BEGIN_NAMESPACE - -class QLowEnergyCharacteristicInfo; -class QLowEnergyDescriptorInfoPrivate; - -//TODO rename to QLowEnergyDescriptor -class Q_BLUETOOTH_EXPORT QLowEnergyDescriptorInfo -{ - friend class QLowEnergyControllerPrivate; -public: - //TODO - add QLowEnergyDescriptorInfo() <- for invalid descriptor object - // - remove QLowEnergyDescriptorInfo(QBluetoothUuid) <- not really needed - explicit QLowEnergyDescriptorInfo(const QBluetoothUuid &uuid); - ~QLowEnergyDescriptorInfo(); - - QLowEnergyDescriptorInfo &operator=(const QLowEnergyDescriptorInfo &other); - - QByteArray value() const; - void setValue(const QByteArray &value); - - QBluetoothUuid uuid() const; - QLowEnergyHandle handle() const; - QString name() const; - - QBluetoothUuid::DescriptorType type() const; - -private: - QSharedPointer<QLowEnergyDescriptorInfoPrivate> d_ptr; - QLowEnergyDescriptorInfo(const QBluetoothUuid &uuid, - QBluetoothUuid::DescriptorType desc, - QLowEnergyHandle handle); -}; - -QT_END_NAMESPACE - -#endif // QLOWENERGYDESCRIPTORINFO_H diff --git a/src/bluetooth/qlowenergydescriptorinfo_p.h b/src/bluetooth/qlowenergydescriptorinfo_p.h deleted file mode 100644 index 921e4992..00000000 --- a/src/bluetooth/qlowenergydescriptorinfo_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (C) 2013 BlackBerry Limited all rights reserved -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QLOWENERGYDESCRIPTORINFO_P_H -#define QLOWENERGYDESCRIPTORINFO_P_H - -#include <QtBluetooth/qbluetooth.h> -#include <QtBluetooth/QBluetoothUuid> - -QT_BEGIN_NAMESPACE - -class QLowEnergyDescriptorInfoPrivate -{ -public: - QLowEnergyDescriptorInfoPrivate(const QBluetoothUuid &uuid, QLowEnergyHandle handle); - ~QLowEnergyDescriptorInfoPrivate(); - QByteArray m_value; - QBluetoothUuid m_uuid; - QLowEnergyHandle m_handle; - QBluetoothUuid::DescriptorType m_type; -#ifdef QT_QNX_BLUETOOTH - int instance; -#endif -}; -QT_END_NAMESPACE -#endif // QLOWENERGYDESCRIPTORINFO_P_H diff --git a/src/bluetooth/qlowenergyprocess_bluez.cpp b/src/bluetooth/qlowenergyprocess_bluez.cpp deleted file mode 100644 index 9f94da4f..00000000 --- a/src/bluetooth/qlowenergyprocess_bluez.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergyprocess_p.h" - -#include <QtCore/QLoggingCategory> - -QT_BEGIN_NAMESPACE - -Q_GLOBAL_STATIC(QLowEnergyProcess, processInstance) -Q_DECLARE_LOGGING_CATEGORY(QT_BT_BLUEZ) - -/* - Private constructor. Constructs the new QLowEnergyProcess, sets variables and connects - signal to a slot. -*/ -QLowEnergyProcess::QLowEnergyProcess() -{ - m_process = new QProcess(); - connected = false; - m_counter = 0; - connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(replyRead())); -} - -/* - Destroys the QLowEnergyProcess object. -*/ -QLowEnergyProcess::~QLowEnergyProcess() -{ - m_process->kill(); - delete m_process; -} - -/* - Returns the singleton instance of this class. -*/ - -QLowEnergyProcess *QLowEnergyProcess::instance() -{ - return processInstance(); -} - -/* - Slot that emits a signal replySend. This slot is connected with QProcess signal - and it is called whenever something comes to output. -*/ -void QLowEnergyProcess::replyRead() -{ - QByteArray result = m_process->readAll(); - QString back = QString::fromLocal8Bit(result.data()); - if (back.size() > 10) - emit replySend(back); -} - -/* - Starts the process with \a command. This method is used only when starting the - process. - - \sa executeCommand() -*/ -void QLowEnergyProcess::startCommand(const QString &command) -{ - m_process->start(command); - if (!m_process->waitForStarted()) - qDebug() << "Could not start the process under the command: "<<command; -} - -/* - Executes the \a command. This method is called after process started. - - \sa startCommand() -*/ -void QLowEnergyProcess::executeCommand(const QString &command) -{ - qCDebug(QT_BT_BLUEZ) << "gatttool command:" << command; - QByteArray cmd(command.toUtf8() + '\n'); - m_process->write(cmd.constData()); -} - -/* - Terminate running process. -*/ -void QLowEnergyProcess::endProcess() -{ - m_counter--; - if (m_counter == 0) { - executeCommand(QStringLiteral("disconnect")); - connected = false; - } -} - -bool QLowEnergyProcess::isConnected() const -{ - return connected; -} - -void QLowEnergyProcess::addConnection() -{ - m_counter++; - connected = true; -} - -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergyprocess_p.cpp b/src/bluetooth/qlowenergyprocess_p.cpp deleted file mode 100644 index 3bbacdbf..00000000 --- a/src/bluetooth/qlowenergyprocess_p.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergyprocess_p.h" - -QLowEnergyProcess::QLowEnergyProcess() -{ - -} - -/* - Destroys the QLowEnergyProcess object. -*/ -QLowEnergyProcess::~QLowEnergyProcess() -{ - -} - -/* - Returns the singleton instance of this class. -*/ -QLowEnergyProcess *QLowEnergyProcess::instance() -{ - return 0; -} - -bool QLowEnergyProcess::isConnected() const -{ - return false; -} diff --git a/src/bluetooth/qlowenergyprocess_p.h b/src/bluetooth/qlowenergyprocess_p.h deleted file mode 100644 index 5d3fb0ed..00000000 --- a/src/bluetooth/qlowenergyprocess_p.h +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QLOWENERGYPROCESS_H -#define QLOWENERGYPROCESS_H - -#include <QtCore> -#include <QObject> -#ifdef QT_QNX_BLUETOOTH -#include <QList> -#include <QPointer> -#include "qlowenergycontroller_p.h" -#endif -#ifdef QT_BLUEZ_BLUETOOTH -#include <QProcess> -#endif -QT_BEGIN_NAMESPACE - -class QLowEnergyProcess: public QObject -{ - Q_OBJECT - friend class QLowEnergyServiceInfoPrivate; -public: - QLowEnergyProcess(); - ~QLowEnergyProcess(); - - static QLowEnergyProcess *instance(); - bool isConnected() const; -#ifdef QT_QNX_BLUETOOTH - static void handleEvent(const int, const char *, const char *); - void addPointer(QLowEnergyControllerPrivate* classPointer); -#endif -#if defined(QT_BLUEZ_BLUETOOTH) && !defined(QT_BLUEZ_NO_BTLE) - void startCommand(const QString &command); - void executeCommand(const QString &command); - void endProcess(); - void addConnection(); - -Q_SIGNALS: - void replySend(const QString &reply); - -private slots: - void replyRead(); -#endif - -private: -#ifdef QT_BLUEZ_BLUETOOTH - QProcess *m_process; - int m_counter; -#endif -#ifdef QT_QNX_BLUETOOTH - QList<QLowEnergyControllerPrivate*> m_classPointers; -#endif - bool connected; -}; -QT_END_NAMESPACE - -#endif // QLOWENERGYPROCESS_H diff --git a/src/bluetooth/qlowenergyprocess_qnx.cpp b/src/bluetooth/qlowenergyprocess_qnx.cpp deleted file mode 100644 index f7e298de..00000000 --- a/src/bluetooth/qlowenergyprocess_qnx.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/*************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qlowenergyprocess_p.h" -#include <btapi/btdevice.h> -#include <errno.h> -#include <btapi/btgatt.h> -QT_BEGIN_NAMESPACE - -Q_GLOBAL_STATIC(QLowEnergyProcess, processInstance) - -void QLowEnergyProcess::handleEvent(const int event, const char *bt_address, const char *event_data) -{ - qDebug() << "[HANDLE Event] (event, address, event data): " << event << bt_address << event_data; -} - -QLowEnergyProcess::QLowEnergyProcess() -{ - connected = false; - if (bt_device_init( &(this->handleEvent) ) < 0) - qDebug() << "[INIT] Init problem." << errno << strerror(errno); - else - connected = true; - -} - -/* - Destroys the QLowEnergyProcess object. -*/ -QLowEnergyProcess::~QLowEnergyProcess() -{ - bt_device_deinit(); - bt_gatt_deinit(); - qDeleteAll(m_classPointers); - m_classPointers.clear(); -} - -/* - Returns the singleton instance of this class. -*/ - -QLowEnergyProcess *QLowEnergyProcess::instance() -{ - return processInstance(); -} - -bool QLowEnergyProcess::isConnected() const -{ - return connected; -} - -void QLowEnergyProcess::addPointer(QLowEnergyControllerPrivate* classPointer) -{ - m_classPointers.append(classPointer); -} -QT_END_NAMESPACE diff --git a/src/bluetooth/qlowenergyservice.cpp b/src/bluetooth/qlowenergyservice.cpp index 401468f4..8c7a7d02 100644 --- a/src/bluetooth/qlowenergyservice.cpp +++ b/src/bluetooth/qlowenergyservice.cpp @@ -42,7 +42,6 @@ #include <QtCore/QCoreApplication> #include <QtCore/QPointer> #include <QtBluetooth/QLowEnergyService> -#include <QtBluetooth/QLowEnergyCharacteristicInfo> #include <algorithm> diff --git a/src/bluetooth/qlowenergyserviceinfo.cpp b/src/bluetooth/qlowenergyserviceinfo.cpp index 80b0038b..5ed9690a 100644 --- a/src/bluetooth/qlowenergyserviceinfo.cpp +++ b/src/bluetooth/qlowenergyserviceinfo.cpp @@ -120,15 +120,6 @@ QBluetoothUuid QLowEnergyServiceInfo::serviceUuid() const } /*! - Returns the list of service characteristics. If service was not connected, an empty - list will be returned. -*/ -QList<QLowEnergyCharacteristicInfo> QLowEnergyServiceInfo::characteristics() const -{ - return d_ptr->characteristicList; -} - -/*! Returns the service name. */ QString QLowEnergyServiceInfo::serviceName() const diff --git a/src/bluetooth/qlowenergyserviceinfo.h b/src/bluetooth/qlowenergyserviceinfo.h index 8365236a..626203bf 100644 --- a/src/bluetooth/qlowenergyserviceinfo.h +++ b/src/bluetooth/qlowenergyserviceinfo.h @@ -45,7 +45,6 @@ #include <QtBluetooth/QBluetoothAddress> #include <QtBluetooth/QBluetoothDeviceInfo> #include <QtBluetooth/QBluetoothUuid> -#include <QtBluetooth/QLowEnergyCharacteristicInfo> QT_BEGIN_NAMESPACE @@ -74,8 +73,6 @@ public: QBluetoothUuid serviceUuid() const; - QList<QLowEnergyCharacteristicInfo> characteristics() const; - QString serviceName() const; void setServiceType(QLowEnergyServiceInfo::ServiceType type); diff --git a/src/bluetooth/qlowenergyserviceinfo_bluez.cpp b/src/bluetooth/qlowenergyserviceinfo_bluez.cpp index 09748470..5946205d 100644 --- a/src/bluetooth/qlowenergyserviceinfo_bluez.cpp +++ b/src/bluetooth/qlowenergyserviceinfo_bluez.cpp @@ -41,11 +41,6 @@ #include "qlowenergyserviceinfo_p.h" #include "qlowenergyserviceinfo.h" -#include "qlowenergycharacteristicinfo.h" -#include "qlowenergycharacteristicinfo_p.h" -#include "qlowenergyprocess_p.h" -#include "qlowenergydescriptorinfo.h" -#include "qlowenergydescriptorinfo_p.h" #ifdef QT_LOWENERGYSERVICE_DEBUG #include <QtCore/QDebug> diff --git a/src/bluetooth/qlowenergyserviceinfo_p.h b/src/bluetooth/qlowenergyserviceinfo_p.h index 3f03ca02..fcdb0555 100644 --- a/src/bluetooth/qlowenergyserviceinfo_p.h +++ b/src/bluetooth/qlowenergyserviceinfo_p.h @@ -43,15 +43,12 @@ #define QLOWENERGYSERVICEINFO_P_H #include "qbluetoothuuid.h" #include "qlowenergyserviceinfo.h" -#include "qlowenergycharacteristicinfo.h" #include <QPointer> QT_BEGIN_NAMESPACE class QBluetoothUuid; class QLowEnergyServiceInfo; -class QLowEnergyCharacteristicInfo; -class QLowEnergyProcess; class QLowEnergyServiceInfoPrivate { @@ -63,7 +60,6 @@ public: QBluetoothUuid uuid; - QList<QLowEnergyCharacteristicInfo> characteristicList; QLowEnergyServiceInfo::ServiceType serviceType; bool connected; QBluetoothDeviceInfo deviceInfo; @@ -72,10 +68,6 @@ public: QString endingHandle; #endif -#ifdef QT_QNX_BLUETOOTH - static void serviceNotification(int, short unsigned int, const char unsigned *, short unsigned int, void *); -#endif - private: #if defined(QT_BLUEZ_BLUETOOTH) && !defined(QT_BLUEZ_NO_BTLE) int m_step; diff --git a/src/bluetooth/qlowenergyserviceinfo_qnx.cpp b/src/bluetooth/qlowenergyserviceinfo_qnx.cpp index c310a5db..26d0e9d9 100644 --- a/src/bluetooth/qlowenergyserviceinfo_qnx.cpp +++ b/src/bluetooth/qlowenergyserviceinfo_qnx.cpp @@ -1,4 +1,3 @@ - /*************************************************************************** ** ** Copyright (C) 2013 BlackBerry Limited. All rights reserved. @@ -40,22 +39,11 @@ ** ****************************************************************************/ -#include <QtCore/QLoggingCategory> #include "qlowenergyserviceinfo_p.h" -#include "qlowenergycharacteristicinfo.h" -#include "qlowenergycharacteristicinfo_p.h" -#include "qlowenergyprocess_p.h" -#include <btapi/btdevice.h> -#include <btapi/btgatt.h> -#include <btapi/btspp.h> -#include <btapi/btle.h> -#include <errno.h> -#include <QPointer> -#include "qnx/ppshelpers_p.h" QT_BEGIN_NAMESPACE -Q_DECLARE_LOGGING_CATEGORY(QT_BT_QNX) +Q_DECLARE_LOGGING_CATEGORY(QT_BT_QNX); QLowEnergyServiceInfoPrivate::QLowEnergyServiceInfoPrivate() { diff --git a/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp b/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp index 75c1c821..398fb1ad 100644 --- a/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp +++ b/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp @@ -52,8 +52,6 @@ #include <qbluetoothserver.h> #include <qbluetoothserviceinfo.h> #include <qlowenergyserviceinfo.h> -#include <qlowenergycontroller.h> -#include <qlowenergycharacteristicinfo.h> QT_USE_NAMESPACE @@ -376,8 +374,7 @@ void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscovery() QFETCH(QBluetoothDeviceInfo, deviceInfo); QFETCH(QList<QBluetoothUuid>, uuidFilter); QFETCH(QBluetoothServiceDiscoveryAgent::Error, serviceDiscoveryError); - QLowEnergyController leController; - bool leDevice = false; + QBluetoothLocalDevice localDevice; qDebug() << "Scanning address" << deviceInfo.address().toString(); QBluetoothServiceDiscoveryAgent discoveryAgent(localDevice.address()); @@ -406,8 +403,6 @@ void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscovery() connect(&discoveryAgent, SIGNAL(error(QBluetoothServiceDiscoveryAgent::Error)), this, SLOT(serviceError(QBluetoothServiceDiscoveryAgent::Error))); - QSignalSpy leConnectedSpy(&leController, SIGNAL(connected(QLowEnergyServiceInfo))); - discoveryAgent.start(); /* @@ -469,7 +464,7 @@ void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscovery() } } - int leCounter = 0; + while (!leDiscoveredSpy.isEmpty()) { const QVariant v = leDiscoveredSpy.takeFirst().at(0); if (v.userType() == qMetaTypeId<QLowEnergyServiceInfo>()) @@ -478,72 +473,13 @@ void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscovery() *reinterpret_cast<const QLowEnergyServiceInfo*>(v.constData()); QVERIFY(info.isValid()); - if (info.device().coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration) { - leDevice = true; - leController.connectToService(info); - leCounter ++; - } - + QVERIFY(info.device().coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration); } else { QFAIL("Unknown type returned by service discovery"); } } - // In case it is not LE device next steps will be skipped. - // In case of regular Bluetooth devices there is no need to go in to the loop below. - if (leDevice) { - scanTime = MaxScanTime; - while (leConnectedSpy.count() != leCounter && scanTime > 0) { - QTest::qWait(1000); - scanTime -= 1000; - } - int leTestCounter = 0; - QSignalSpy leDisonnectedSpy(&leController, SIGNAL(disconnected(QLowEnergyServiceInfo))); - while (!leConnectedSpy.isEmpty()) { - const QVariant v = leConnectedSpy.takeFirst().at(0); - if (v.userType() == qMetaTypeId<QLowEnergyServiceInfo>()) - { - const QLowEnergyServiceInfo info = - *reinterpret_cast<const QLowEnergyServiceInfo*>(v.constData()); - - QVERIFY(info.isValid()); - QCOMPARE(leController.errorString(), QString()); - QCOMPARE(leController.error(), QLowEnergyController::NoError); - QVERIFY((info.characteristics().size() > 0)); - qDebug() << "LE Service Connected: " << info.serviceName() << info.serviceUuid(); - leTestCounter++; - for (int i = 0; i < info.characteristics().size(); i++) - QVERIFY(info.characteristics().at(i).isValid()); - leController.disconnectFromService(info); - } else { - QFAIL("Unknown type returned by service discovery"); - } - - } - QCOMPARE(leCounter, leTestCounter); - scanTime = MaxScanTime; - while (leDisonnectedSpy.count() != leTestCounter && scanTime > 0) { - QTest::qWait(1000); - scanTime -= 1000; - } - - while (!leDisonnectedSpy.isEmpty()) { - const QVariant v = leDisonnectedSpy.takeFirst().at(0); - if (v.userType() == qMetaTypeId<QLowEnergyServiceInfo>()) - { - const QLowEnergyServiceInfo info = - *reinterpret_cast<const QLowEnergyServiceInfo*>(v.constData()); - - QVERIFY(info.isValid()); - qDebug() << "LE Service Disconnected: " << info.serviceName() << info.serviceUuid(); - } else { - QFAIL("Unknown type returned by service discovery"); - } - - } - } - QVERIFY(discoveryAgent.discoveredServices().count() != 0); discoveryAgent.clear(); QVERIFY(discoveryAgent.discoveredServices().count() == 0); diff --git a/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp b/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp index 8a4c5af7..3d501351 100644 --- a/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp +++ b/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp @@ -191,7 +191,6 @@ void tst_QLowEnergyController::tst_verifyAllServices() info.serviceUuid().toString().toLatin1()); } - QVERIFY(info.characteristics().isEmpty()); QCOMPARE(remoteDevice, info.device().address()); } } @@ -1351,7 +1350,7 @@ void tst_QLowEnergyController::verifyServiceProperties( // value different in other revisions and test may fail QCOMPARE(chars[0].handle(), QLowEnergyHandle(0x82)); QCOMPARE(chars[0].properties(), - (QLowEnergyCharacteristic::Notify|QLowEnergyCharacteristic::Write|QLowEnergyCharacteristicInfo::WriteNoResponse)); + (QLowEnergyCharacteristic::Notify|QLowEnergyCharacteristic::Write|QLowEnergyCharacteristic::WriteNoResponse)); QCOMPARE(chars[0].value(), QByteArray("")); QVERIFY(chars[0].isValid()); QVERIFY(info->contains(chars[0])); @@ -1385,7 +1384,7 @@ void tst_QLowEnergyController::verifyServiceProperties( // value different in other revisions and test may fail QCOMPARE(chars[1].handle(), QLowEnergyHandle(0x86)); QCOMPARE(chars[1].properties(), - (QLowEnergyCharacteristic::Notify|QLowEnergyCharacteristic::Write|QLowEnergyCharacteristicInfo::WriteNoResponse)); + (QLowEnergyCharacteristic::Notify|QLowEnergyCharacteristic::Write|QLowEnergyCharacteristic::WriteNoResponse)); QCOMPARE(chars[1].value(), QByteArray("")); QVERIFY(chars[1].isValid()); QVERIFY(info->contains(chars[1])); diff --git a/tests/auto/qlowenergyserviceinfo/tst_qlowenergyserviceinfo.cpp b/tests/auto/qlowenergyserviceinfo/tst_qlowenergyserviceinfo.cpp index 84631a9c..e908ae97 100644 --- a/tests/auto/qlowenergyserviceinfo/tst_qlowenergyserviceinfo.cpp +++ b/tests/auto/qlowenergyserviceinfo/tst_qlowenergyserviceinfo.cpp @@ -104,7 +104,6 @@ void tst_QLowEnergyServiceInfo::tst_construction() QCOMPARE(serviceInfo.serviceUuid().toString(), QBluetoothUuid().toString()); QCOMPARE(serviceInfo.serviceType(), QLowEnergyServiceInfo::PrimaryService); QCOMPARE(serviceInfo.isConnected(), false); - QCOMPARE(serviceInfo.characteristics().size(), 0); QCOMPARE(serviceInfo.device(), QBluetoothDeviceInfo()); } @@ -223,7 +222,6 @@ void tst_QLowEnergyServiceInfo::tst_assignment() QCOMPARE(copyInfo.device().coreConfigurations(), coreConfiguration); QCOMPARE(copyInfo.serviceType(), serviceType); QCOMPARE(copyInfo.isConnected(), false); - QCOMPARE(copyInfo.characteristics().size(), 0); QCOMPARE(copyInfo.device(), deviceInfo); } @@ -265,8 +263,6 @@ void tst_QLowEnergyServiceInfo::tst_assignment() QCOMPARE(copyInfo2.device().coreConfigurations(), coreConfiguration); QCOMPARE(copyInfo1.isConnected(), false); QCOMPARE(copyInfo2.isConnected(), false); - QCOMPARE(copyInfo1.characteristics().size(), 0); - QCOMPARE(copyInfo2.characteristics().size(), 0); QCOMPARE(copyInfo1.device(), deviceInfo); QCOMPARE(copyInfo2.device(), deviceInfo); } |