summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qlowenergyprocess_bluez.cpp
diff options
context:
space:
mode:
authorNedim Hadzic <nhadzic@blackberry.com>2013-10-23 17:33:36 +0200
committerAlex Blasche <alexander.blasche@digia.com>2013-11-04 09:35:01 +0100
commitec61d7b9e82e6d653c02df14f34acdba8fc060db (patch)
treed61e73318c11e0dcae471ee7c1f8ed56397b9f75 /src/bluetooth/qlowenergyprocess_bluez.cpp
parentb00388ea1448cfd977c54f53d038d1a270562d53 (diff)
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 <alexander.blasche@digia.com>
Diffstat (limited to 'src/bluetooth/qlowenergyprocess_bluez.cpp')
-rw-r--r--src/bluetooth/qlowenergyprocess_bluez.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/src/bluetooth/qlowenergyprocess_bluez.cpp b/src/bluetooth/qlowenergyprocess_bluez.cpp
new file mode 100644
index 00000000..81a34266
--- /dev/null
+++ b/src/bluetooth/qlowenergyprocess_bluez.cpp
@@ -0,0 +1,143 @@
+
+/***************************************************************************
+**
+** 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"
+
+Q_GLOBAL_STATIC(QLowEnergyProcess, processInstance)
+
+/*!
+ * 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()
+{
+ delete m_process;
+}
+
+/*!
+ Returns the instance of this clas. This class is a singleton class.
+*/
+
+QLowEnergyProcess *QLowEnergyProcess::instance()
+{
+ return processInstance();
+}
+
+/*!
+ Returns the QProcess that this class is using.
+*/
+QProcess *QLowEnergyProcess::getProcess()
+{
+
+ return m_process;
+}
+
+/*!
+ 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(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)
+{
+ m_process->write(command.toUtf8().constData());
+}
+
+/*!
+ Terminate running process.
+*/
+void QLowEnergyProcess::endProcess()
+{
+ m_counter--;
+ if (m_counter == 0) {
+ executeCommand(QStringLiteral("disconnect"));
+ executeCommand(QStringLiteral("\n"));
+ connected = false;
+ m_process->terminate();
+ }
+}
+
+bool QLowEnergyProcess::isConnected() const
+{
+ return connected;
+}
+
+void QLowEnergyProcess::addConnection()
+{
+ m_counter++;
+ connected = true;
+}