diff options
author | Fabian Bumberger <fbumberger@rim.com> | 2013-08-08 15:45:07 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-26 23:53:17 +0200 |
commit | 030a30e7485785c9d419c38f23c9d5dac2b4ce9a (patch) | |
tree | 4d433dc9764b4b9e9f255fd41193b6203a9e2e91 /src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp | |
parent | c79bfde122702144d96a2fb10d0bc5e7dd22c7a8 (diff) |
QNX: Bugfixes for the service discovery agent
Change-Id: I8d977eb9013a9fa98427080baac1df881985d961
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp')
-rw-r--r-- | src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp index 30042e78..eb942303 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp +++ b/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp @@ -58,10 +58,15 @@ QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(c : m_rdfd(-1), rdNotifier(0), error(QBluetoothServiceDiscoveryAgent::NoError), state(Inactive), deviceAddress(address), deviceDiscoveryAgent(0), mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery) { + ppsRegisterControl(); + connect(&m_queryTimer, SIGNAL(timeout()), this, SLOT(queryTimeout())); + ppsRegisterForEvent(QStringLiteral("service_updated"), this); } QBluetoothServiceDiscoveryAgentPrivate::~QBluetoothServiceDiscoveryAgentPrivate() { + ppsUnregisterForEvent(QStringLiteral("service_updated"), this); + ppsUnregisterControl(this); } void QBluetoothServiceDiscoveryAgentPrivate::start(const QBluetoothAddress &address) @@ -74,6 +79,7 @@ void QBluetoothServiceDiscoveryAgentPrivate::start(const QBluetoothAddress &addr error = QBluetoothServiceDiscoveryAgent::DeviceDiscoveryError; errorString = QStringLiteral("Failed to open remote device file"); q->error(error); + _q_serviceDiscoveryFinished(); return; } else { if (rdNotifier) @@ -86,16 +92,21 @@ void QBluetoothServiceDiscoveryAgentPrivate::start(const QBluetoothAddress &addr error = QBluetoothServiceDiscoveryAgent::DeviceDiscoveryError; errorString = QStringLiteral("Failed to connect to rdNotifier"); q->error(error); + _q_serviceDiscoveryFinished(); return; } } - ppsRegisterControl(); - ppsSendControlMessage("service_query", QStringLiteral("{\"addr\":\"%1\"}").arg(address.toString())); - ppsRegisterForEvent(QStringLiteral("service_query"), this); + m_queryTimer.start(10000); + ppsSendControlMessage("service_query", QStringLiteral("{\"addr\":\"%1\"}").arg(address.toString()), this); } void QBluetoothServiceDiscoveryAgentPrivate::stop() { + m_queryTimer.stop(); + discoveredDevices.clear(); + setDiscoveryState(Inactive); + Q_Q(QBluetoothServiceDiscoveryAgent); + emit q->canceled(); if (rdNotifier) delete rdNotifier; rdNotifier = 0; @@ -103,11 +114,12 @@ void QBluetoothServiceDiscoveryAgentPrivate::stop() qt_safe_close (m_rdfd); m_rdfd = -1; } - ppsUnregisterControl(this); } void QBluetoothServiceDiscoveryAgentPrivate::remoteDevicesChanged(int fd) { + if (discoveredDevices.count() == 0) + return; pps_decoder_t ppsDecoder; pps_decoder_initialize(&ppsDecoder, 0); @@ -161,7 +173,6 @@ void QBluetoothServiceDiscoveryAgentPrivate::remoteDevicesChanged(int fd) serviceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup)); - serviceInfo.setDevice(discoveredDevices.at(0)); bool entryExists = false; //Did we already discover this service? @@ -187,8 +198,11 @@ void QBluetoothServiceDiscoveryAgentPrivate::remoteDevicesChanged(int fd) void QBluetoothServiceDiscoveryAgentPrivate::controlReply(ppsResult result) { + qBBBluetoothDebug() << "Control reply" << result.msg << result.dat; + if (!m_queryTimer.isActive()) + return; + m_queryTimer.stop(); Q_Q(QBluetoothServiceDiscoveryAgent); - qBBBluetoothDebug() << "Control event" << result.msg; if (!result.errorMsg.isEmpty()) { qWarning() << Q_FUNC_INFO << result.errorMsg; errorString = result.errorMsg; @@ -201,8 +215,11 @@ void QBluetoothServiceDiscoveryAgentPrivate::controlReply(ppsResult result) void QBluetoothServiceDiscoveryAgentPrivate::controlEvent(ppsResult result) { + qBBBluetoothDebug() << "Control event" << result.msg << result.dat; + if (!m_queryTimer.isActive()) + return; + m_queryTimer.stop(); Q_Q(QBluetoothServiceDiscoveryAgent); - qBBBluetoothDebug() << "Control event" << result.msg; if (!result.errorMsg.isEmpty()) { qWarning() << Q_FUNC_INFO << result.errorMsg; errorString = result.errorMsg; @@ -213,4 +230,12 @@ void QBluetoothServiceDiscoveryAgentPrivate::controlEvent(ppsResult result) } } +void QBluetoothServiceDiscoveryAgentPrivate::queryTimeout() +{ + Q_Q(QBluetoothServiceDiscoveryAgent); + error = QBluetoothServiceDiscoveryAgent::DeviceDiscoveryError; + errorString = QStringLiteral("Service query timed out"); + q->error(error); + _q_serviceDiscoveryFinished(); +} QT_END_NAMESPACE_BLUETOOTH |