summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Fetzer <christian.fetzer@nokia.com>2012-05-09 15:27:35 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-29 13:58:18 +0200
commit287285aafd0cb34ffc0e4fe150ee59a5e7dabc2d (patch)
treecc793349e6248fe51d27c3cca080825fa99ad951
parent74f47b50fa9b102448413cff5477a32ea4b030fe (diff)
downloadqtconnectivity-287285aafd0cb34ffc0e4fe150ee59a5e7dabc2d.tar.gz
Make use of Nokia bt services for pairing requests.
Change-Id: I4a4e68c1524b3a83129c20ce7c985fca6c7cc8a5 Reviewed-by: Michael Zanetti <michael.zanetti@nokia.com> Reviewed-by: Alex <alex.blasche@nokia.com>
-rw-r--r--src/bluetooth/qbluetoothlocaldevice_bluez.cpp54
-rw-r--r--src/bluetooth/qbluetoothlocaldevice_p.h5
2 files changed, 59 insertions, 0 deletions
diff --git a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp
index 53512619..9da84795 100644
--- a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp
+++ b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp
@@ -249,6 +249,9 @@ void QBluetoothLocalDevice::requestPairing(const QBluetoothAddress &address, Pai
Q_ARG(QBluetoothLocalDevice::Pairing, QBluetoothLocalDevice::Paired));
}
else {
+#ifdef NOKIA_BT_SERVICES
+ nokiaBtManServiceInstance()->requestPairing(address);
+#else
QDBusPendingReply<QDBusObjectPath> reply =
d_ptr->adapter->CreatePairedDevice(address.toString(),
QDBusObjectPath(d_ptr->agent_path),
@@ -259,6 +262,7 @@ void QBluetoothLocalDevice::requestPairing(const QBluetoothAddress &address, Pai
if(reply.isError())
qDebug() << Q_FUNC_INFO << reply.error() << d_ptr->agent_path;
+#endif
}
}
else if(pairing == Unpaired) {
@@ -311,6 +315,7 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice
initializeAdapter();
#else
connect(nokiaBtManServiceInstance(), SIGNAL(poweredChanged(bool)), SLOT(powerStateChanged(bool)));
+ connect(nokiaBtManServiceInstance(), SIGNAL(pairingCompleted(bool)), SLOT(pairingCompleted(bool)));
nokiaBtManServiceInstance()->acquire();
#endif
}
@@ -495,6 +500,38 @@ void QBluetoothLocalDevicePrivate::pairingCompleted(QDBusPendingCallWatcher *wat
}
+#ifdef NOKIA_BT_SERVICES
+void QBluetoothLocalDevicePrivate::pairingCompleted(bool success)
+{
+ Q_Q(QBluetoothLocalDevice);
+
+ if (!success) {
+ qDebug() << Q_FUNC_INFO << "failed to create pairing";
+ emit q->pairingFinished(address, QBluetoothLocalDevice::Unpaired);
+ return;
+ }
+
+ QDBusPendingReply<QDBusObjectPath> findReply = adapter->FindDevice(address.toString());
+ findReply.waitForFinished();
+ if (findReply.isError()) {
+ qDebug() << Q_FUNC_INFO << "failed to find device" << findReply.error();
+ emit q->pairingFinished(address, QBluetoothLocalDevice::Unpaired);
+ return;
+ }
+
+ OrgBluezDeviceInterface device(QLatin1String("org.bluez"), findReply.value().path(),
+ QDBusConnection::systemBus());
+
+ if (pairing == QBluetoothLocalDevice::AuthorizedPaired) {
+ device.SetProperty(QLatin1String("Trusted"), QDBusVariant(QVariant(true)));
+ emit q->pairingFinished(address, QBluetoothLocalDevice::AuthorizedPaired);
+ } else {
+ device.SetProperty(QLatin1String("Trusted"), QDBusVariant(QVariant(false)));
+ emit q->pairingFinished(address, QBluetoothLocalDevice::Paired);
+ }
+}
+#endif
+
void QBluetoothLocalDevicePrivate::Authorize(const QDBusObjectPath &in0, const QString &in1)
{
qDebug() << "Got authorize for" << in0.path() << in1;
@@ -609,6 +646,7 @@ void NokiaBtManServiceConnection::connectToBtManService()
qDebug() << "connected to service:" << m_btmanService;
connect(m_btmanService, SIGNAL(errorUnrecoverableIPCFault(QService::UnrecoverableIPCError)), SLOT(sfwIPCError(QService::UnrecoverableIPCError)));
connect(m_btmanService, SIGNAL(powerStateChanged(int)), SLOT(powerStateChanged(int)));
+ connect(m_btmanService, SIGNAL(pairingFinished(QString,int,int)), SLOT(pairingFinished(QString,int,int)));
if (powered()) {
emit poweredChanged(true);
}
@@ -698,6 +736,22 @@ void NokiaBtManServiceConnection::powerStateChanged(int powerState)
}
}
+void NokiaBtManServiceConnection::requestPairing(const QBluetoothAddress &address)
+{
+ m_pairingAddress = address.toString();
+ QMetaObject::invokeMethod(m_btmanService, "requestPairing", Q_ARG(QString, m_pairingAddress), Q_ARG(bool, false));
+}
+
+void NokiaBtManServiceConnection::pairingFinished(const QString& address, int direction, int status)
+{
+ // DirectionOutgoing = 0
+ if (m_pairingAddress != address || direction != 0) return;
+ m_pairingAddress.clear();
+
+ // StatusSuccess = 0
+ emit pairingCompleted(status == 0);
+}
+
void NokiaBtManServiceConnection::sfwIPCError(QService::UnrecoverableIPCError error)
{
qDebug() << "Connection to btman service broken:" << error << ". Trying to reconnect...";
diff --git a/src/bluetooth/qbluetoothlocaldevice_p.h b/src/bluetooth/qbluetoothlocaldevice_p.h
index 78d316cb..97ac07c6 100644
--- a/src/bluetooth/qbluetoothlocaldevice_p.h
+++ b/src/bluetooth/qbluetoothlocaldevice_p.h
@@ -106,6 +106,7 @@ public Q_SLOTS: // METHODS
#ifdef NOKIA_BT_SERVICES
void powerStateChanged(bool powered);
+ void pairingCompleted(bool success);
#endif
private:
@@ -129,9 +130,11 @@ public:
void setPowered(bool powered);
bool powered() const;
void setHostMode(QBluetoothLocalDevice::HostMode mode);
+ void requestPairing(const QBluetoothAddress &address);
signals:
void poweredChanged(bool powered);
+ void pairingCompleted(bool success);
private:
QObject *m_btmanService;
@@ -139,12 +142,14 @@ private:
QMutex m_refCountMutex;
bool m_forceDiscoverable;
bool m_forceConnectable;
+ QString m_pairingAddress;
private slots:
void connectToBtManService();
void disconnectFromBtManService();
void sfwIPCError(QService::UnrecoverableIPCError);
void powerStateChanged(int powerState);
+ void pairingFinished(const QString &address, int direction, int status);
};
Q_GLOBAL_STATIC(NokiaBtManServiceConnection, nokiaBtManServiceInstance)
#endif