summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFabian Bumberger <fbumberger@rim.com>2012-11-16 19:04:02 +0100
committerPeter Hartmann <phartmann@rim.com>2012-11-22 09:53:56 +0100
commit23d47eb487107bd0a66949a3962c6c3d5403c0ef (patch)
tree646fb17f504fac1eadbbffa77a4781f996bc0dc4 /src
parentab0b1ffb6fc2ba9818f9c53b49e33eba3234e7d3 (diff)
QNX: Adding the local bluetooth device
Change-Id: I44d7c6ccf16fb8f537f7f4627d4a6cd42ffd0fdd Reviewed-by: Mehdi Fekari <mfekari@rim.com> Reviewed-by: Alex <ablasche@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/bluetooth/bluetooth.pro4
-rw-r--r--src/bluetooth/qbluetoothlocaldevice_p.h29
-rw-r--r--src/bluetooth/qbluetoothlocaldevice_qnx.cpp198
3 files changed, 229 insertions, 2 deletions
diff --git a/src/bluetooth/bluetooth.pro b/src/bluetooth/bluetooth.pro
index 5f889daf..4f2af002 100644
--- a/src/bluetooth/bluetooth.pro
+++ b/src/bluetooth/bluetooth.pro
@@ -80,13 +80,13 @@ config_bluez:contains(QT_CONFIG, dbus) {
ql2capserver_bluez.cpp
} else:qnx{
- DEFINES += QTM_BLACKBERRY_BLUETOOTH #BT_BBPPSDEBUG
+ DEFINES += QTM_QNX_BLUETOOTH #BT_BBPPSDEBUG
include(qnx/qnx.pri)
SOURCES += \
qbluetoothdevicediscoveryagent_p.cpp \
- qbluetoothlocaldevice_p.cpp \
+ qbluetoothlocaldevice_qnx.cpp \
qbluetoothserviceinfo_p.cpp \
qbluetoothservicediscoveryagent_p.cpp \
qbluetoothsocket_p.cpp \
diff --git a/src/bluetooth/qbluetoothlocaldevice_p.h b/src/bluetooth/qbluetoothlocaldevice_p.h
index e69f9e87..b20f0bc5 100644
--- a/src/bluetooth/qbluetoothlocaldevice_p.h
+++ b/src/bluetooth/qbluetoothlocaldevice_p.h
@@ -59,6 +59,9 @@ QT_BEGIN_NAMESPACE
class QDBusPendingCallWatcher;
QT_END_NAMESPACE
+#elif defined(QTM_QNX_BLUETOOTH)
+#include <QSocketNotifier>
+#include "qnx/ppshelpers_p.h"
#endif
QT_BEGIN_HEADER
@@ -109,6 +112,32 @@ private:
void initializeAdapter();
};
+#elif defined(QTM_QNX_BLUETOOTH)
+
+class QBluetoothLocalDevicePrivate : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PUBLIC(QBluetoothLocalDevice)
+public:
+ QBluetoothLocalDevicePrivate();
+ ~QBluetoothLocalDevicePrivate();
+
+ static QString name();
+ static QBluetoothAddress address();
+
+ void powerOn();
+ void powerOff();
+
+ void setHostMode(QBluetoothLocalDevice::HostMode mode);
+ QBluetoothLocalDevice::HostMode hostMode() const;
+
+ void setAccess(int);
+
+ Q_INVOKABLE void controlReply(ppsResult res);
+
+private:
+ QBluetoothLocalDevice *q_ptr;
+};
#else
class QBluetoothLocalDevicePrivate : public QObject
{
diff --git a/src/bluetooth/qbluetoothlocaldevice_qnx.cpp b/src/bluetooth/qbluetoothlocaldevice_qnx.cpp
new file mode 100644
index 00000000..9b128b44
--- /dev/null
+++ b/src/bluetooth/qbluetoothlocaldevice_qnx.cpp
@@ -0,0 +1,198 @@
+/***************************************************************************
+**
+** Copyright (C) 2012 Research In Motion
+** 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 "qbluetoothlocaldevice.h"
+#include "qbluetoothaddress.h"
+#include "qbluetoothlocaldevice_p.h"
+#include "qnx/ppshelpers_p.h"
+
+QTBLUETOOTH_BEGIN_NAMESPACE
+
+QBluetoothLocalDevice::QBluetoothLocalDevice(QObject *parent)
+: QObject(parent)
+{
+ this->d_ptr = new QBluetoothLocalDevicePrivate();
+}
+
+QBluetoothLocalDevice::QBluetoothLocalDevice(const QBluetoothAddress &address, QObject *parent)
+: QObject(parent)
+{
+ Q_UNUSED(address)
+ this->d_ptr = new QBluetoothLocalDevicePrivate();
+}
+
+QString QBluetoothLocalDevice::name() const
+{
+ return this->d_ptr->name();
+}
+
+QBluetoothAddress QBluetoothLocalDevice::address() const
+{
+ return this->d_ptr->address();
+}
+
+void QBluetoothLocalDevice::powerOn()
+{
+ this->d_ptr->powerOn();
+}
+
+void QBluetoothLocalDevice::setHostMode(QBluetoothLocalDevice::HostMode mode)
+{
+ this->d_ptr->setHostMode(mode);
+}
+
+QBluetoothLocalDevice::HostMode QBluetoothLocalDevice::hostMode() const
+{
+ return this->d_ptr->hostMode();
+}
+
+QList<QBluetoothHostInfo> QBluetoothLocalDevice::allDevices()
+{
+ //We only have one device
+ QList<QBluetoothHostInfo> localDevices;
+ QBluetoothHostInfo hostInfo;
+ hostInfo.setName(QBluetoothLocalDevicePrivate::name());
+ hostInfo.setAddress(QBluetoothLocalDevicePrivate::address());
+ localDevices.append(hostInfo);
+ return localDevices;
+}
+
+void QBluetoothLocalDevice::requestPairing(const QBluetoothAddress &address, Pairing pairing)
+{
+ Q_UNUSED(pairing);
+ ppsSendControlMessage("initiate_pairing", QStringLiteral("{\"addr\":\"%1\"}").arg(address.toString()), this);
+}
+
+QBluetoothLocalDevice::Pairing QBluetoothLocalDevice::pairingStatus(const QBluetoothAddress &address) const
+{
+ QVariant status = ppsRemoteDeviceStatus(address.toString().toLocal8Bit(), "paired");
+ if (status.toBool())
+ return Paired;
+ return Unpaired;
+}
+
+void QBluetoothLocalDevice::pairingConfirmation(bool confirmation)
+{
+ Q_UNUSED(confirmation);
+}
+
+QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate()
+{
+ ppsRegisterControl();
+}
+
+QBluetoothLocalDevicePrivate::~QBluetoothLocalDevicePrivate()
+{
+ ppsUnregisterControl();
+}
+
+QBluetoothAddress QBluetoothLocalDevicePrivate::address()
+{
+ return QBluetoothAddress(ppsReadSetting("btaddr").toString());
+}
+
+QString QBluetoothLocalDevicePrivate::name()
+{
+ return ppsReadSetting("name").toString();
+}
+
+void QBluetoothLocalDevicePrivate::powerOn()
+{
+ ppsSendControlMessage("radio_init", this);
+}
+
+void QBluetoothLocalDevicePrivate::powerOff()
+{
+ ppsSendControlMessage("radio_shutdown", this);
+}
+
+void QBluetoothLocalDevicePrivate::setHostMode(QBluetoothLocalDevice::HostMode mode)
+{
+ //if (m_currentMode==mode){
+ // return;
+ //}
+ //If the device is in PowerOff state and the profile is changed then the power has to be turned on
+ //if (m_currentMode == QBluetoothLocalDevice::HostPoweredOff) {
+ // powerOn();
+
+ //}
+
+ if (mode == QBluetoothLocalDevice::HostPoweredOff) {
+ powerOff();
+ }
+ else if (mode == QBluetoothLocalDevice::HostDiscoverable) { //General discoverable and connectable.
+ setAccess(1);
+ }
+ else if (mode == QBluetoothLocalDevice::HostConnectable) { //Connectable but not discoverable.
+ setAccess(3);
+ }
+ else if (mode == QBluetoothLocalDevice::HostDiscoverableLimitedInquiry) { //Limited discoverable and connectable.
+ setAccess(2);
+ }
+}
+QBluetoothLocalDevice::HostMode QBluetoothLocalDevicePrivate::hostMode() const
+{
+ int hostMode = ppsReadSetting("accessibility").toInt();
+
+ if (hostMode == 1) //General discoverable and connectable.
+ return QBluetoothLocalDevice::HostDiscoverable;
+ else if (hostMode == 3) //Connectable but not discoverable.
+ return QBluetoothLocalDevice::HostConnectable;
+ else if (hostMode == 2) //Limited discoverable and connectable.
+ return QBluetoothLocalDevice::HostDiscoverableLimitedInquiry;
+ else
+ return QBluetoothLocalDevice::HostPoweredOff;
+}
+
+void QBluetoothLocalDevicePrivate::setAccess(int access)
+{
+ ppsSendControlMessage("set_access", QStringLiteral("\"access\":n:%1").arg(access), this);
+}
+
+void QBluetoothLocalDevicePrivate::controlReply(ppsResult result)
+{
+ if (!result.errorMsg.isEmpty()) {
+ qWarning() << Q_FUNC_INFO << result.errorMsg;
+ q_ptr->error(QBluetoothLocalDevice::UnknownError);
+ }
+}
+
+QTBLUETOOTH_END_NAMESPACE