From ec61d7b9e82e6d653c02df14f34acdba8fc060db Mon Sep 17 00:00:00 2001 From: Nedim Hadzic Date: Wed, 23 Oct 2013 17:33:36 +0200 Subject: Implemented Bluetooth Low Energy gatt service and characteristics discovery Bluez v4.x does not have total support for LE devices, a new approach, using gatttool command was implemented. Auto-tests and documentation will be in other commits. Change-Id: Iee711cc111199e15956052eebb7593bd3a5e27c8 Reviewed-by: Alex Blasche --- src/bluetooth/qlowenergyserviceinfo_p.h | 132 ++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 src/bluetooth/qlowenergyserviceinfo_p.h (limited to 'src/bluetooth/qlowenergyserviceinfo_p.h') diff --git a/src/bluetooth/qlowenergyserviceinfo_p.h b/src/bluetooth/qlowenergyserviceinfo_p.h new file mode 100644 index 00000000..a71e09f2 --- /dev/null +++ b/src/bluetooth/qlowenergyserviceinfo_p.h @@ -0,0 +1,132 @@ +/*************************************************************************** +** +** 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 QGATTSERVICEINFO_P_H +#define QGATTSERVICEINFO_P_H +#include "qbluetoothuuid.h" +#include "qlowenergyserviceinfo.h" +#include "qlowenergycharacteristicinfo.h" +#include "stdint.h" +#include + +#ifdef QT_BLUEZ_BLUETOOTH +class OrgBluezCharacteristicInterface; +#endif + +QT_BEGIN_NAMESPACE + +class QBluetoothUuid; +class QLowEnergyServiceInfo; +class QLowEnergyCharacteristicInfo; +class QLowEnergyProcess; + +class QLowEnergyServiceInfoPrivate: public QObject +{ + Q_OBJECT + Q_DECLARE_PUBLIC(QLowEnergyServiceInfo) + +public: + QLowEnergyServiceInfoPrivate(); +#ifdef QT_BLUEZ_BLUETOOTH + QLowEnergyServiceInfoPrivate(const QString &servicePath); +#endif + ~QLowEnergyServiceInfoPrivate(); + + void registerServiceWatcher(); + void unregisterServiceWatcher(); + bool valid(); + + QString serviceName; + + QBluetoothUuid uuid; + + QList characteristicList; + QLowEnergyServiceInfo::ServiceType serviceType; + bool connected; + QBluetoothDeviceInfo deviceInfo; + QString errorString; +#ifdef QT_BLUEZ_BLUETOOTH + QString startingHandle; + QString endingHandle; + QString path; + QBluetoothAddress adapterAddress; + void connectToTerminal(); + void setHandles(); + void setCharacteristics(); + void setNotifications(); + void readCharacteristicValue(); + void readDescriptors(); +public slots: + void replyReceived(const QString &reply); +#endif + +#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 *); + //static void handleEvent(const int, const char *, const char *); +#endif + +Q_SIGNALS: + void finished(); + void connectedToService(const QBluetoothUuid &); + void error(const QBluetoothUuid &); + void disconnectedFromService(const QBluetoothUuid &); + +private: + QLowEnergyProcess *process; +#ifdef QT_BLUEZ_BLUETOOTH + OrgBluezCharacteristicInterface *characteristic; + int m_step; + int m_valueCounter; + int m_readCounter; +#endif + bool randomAddress; + int m_instance; + +protected: + QLowEnergyServiceInfo *q_ptr; +}; + +QT_END_NAMESPACE + +#endif // QGATTSERVICEINFO_P_H -- cgit v1.2.3