diff options
author | Christian Fetzer <christian.fetzer@nokia.com> | 2012-05-09 15:27:35 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-29 13:58:18 +0200 |
commit | 287285aafd0cb34ffc0e4fe150ee59a5e7dabc2d (patch) | |
tree | cc793349e6248fe51d27c3cca080825fa99ad951 | |
parent | 74f47b50fa9b102448413cff5477a32ea4b030fe (diff) | |
download | qtconnectivity-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.cpp | 54 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_p.h | 5 |
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 |