diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bluetooth/qbluetoothservicediscoveryagent_p.h | 3 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp | 39 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothserviceinfo_qnx.cpp | 5 | ||||
-rw-r--r-- | src/bluetooth/qnx/ppshelpers.cpp | 4 |
4 files changed, 36 insertions, 15 deletions
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_p.h b/src/bluetooth/qbluetoothservicediscoveryagent_p.h index e9b32491..b1b1d635 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_p.h +++ b/src/bluetooth/qbluetoothservicediscoveryagent_p.h @@ -63,6 +63,7 @@ QT_END_NAMESPACE #include "qnx/ppshelpers_p.h" #include <fcntl.h> #include <unistd.h> +#include <QTimer> #endif QT_BEGIN_NAMESPACE_BLUETOOTH @@ -122,10 +123,12 @@ private Q_SLOTS: void remoteDevicesChanged(int fd); void controlReply(ppsResult result); void controlEvent(ppsResult result); + void queryTimeout(); private: int m_rdfd; QSocketNotifier *rdNotifier; + QTimer m_queryTimer; #endif public: 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 diff --git a/src/bluetooth/qbluetoothserviceinfo_qnx.cpp b/src/bluetooth/qbluetoothserviceinfo_qnx.cpp index 4a9b5a42..b90a570d 100644 --- a/src/bluetooth/qbluetoothserviceinfo_qnx.cpp +++ b/src/bluetooth/qbluetoothserviceinfo_qnx.cpp @@ -54,7 +54,6 @@ QBluetoothServiceInfoPrivate::QBluetoothServiceInfoPrivate() QBluetoothServiceInfoPrivate::~QBluetoothServiceInfoPrivate() { - ppsUnregisterControl(0); } bool QBluetoothServiceInfoPrivate::isRegistered() const @@ -98,10 +97,6 @@ bool QBluetoothServiceInfoPrivate::registerService() const return false; if (__fakeServerPorts.key(serverChannel()) != 0) { - qBBBluetoothDebug() << "Registering server with UUID" << - attributes.value(QBluetoothServiceInfo::ServiceId).value<QBluetoothUuid>() - << " Name" << attributes.value(QBluetoothServiceInfo::ServiceName).toString(); - qDebug() << "Server is" << __fakeServerPorts.key(serverChannel()); if (!ppsSendControlMessage("register_server", 0x1101, attributes.value(QBluetoothServiceInfo::ServiceId).value<QBluetoothUuid>(), QString(), attributes.value(QBluetoothServiceInfo::ServiceName).toString(), __fakeServerPorts.key(serverChannel()), BT_SPP_SERVER_SUBTYPE)) diff --git a/src/bluetooth/qnx/ppshelpers.cpp b/src/bluetooth/qnx/ppshelpers.cpp index 5d05c88c..0028ba95 100644 --- a/src/bluetooth/qnx/ppshelpers.cpp +++ b/src/bluetooth/qnx/ppshelpers.cpp @@ -96,7 +96,6 @@ QPair<int, QObject*> takeObjectInWList(int id) void ppsRegisterControl() { - qBBBluetoothDebug() << "Register for Control"; count++; if (count == 1) { if (ppsCtrlFD != -1) { @@ -115,7 +114,6 @@ void ppsRegisterControl() void ppsUnregisterControl(QObject *obj) { - qBBBluetoothDebug() << "Unregistering Control"; count--; if (count == 0) { //QMetaObject::invokeMethod(&bbSocketNotifier, "closeControlFD",Qt::QueuedConnection); @@ -147,7 +145,7 @@ bool endCtrlMessage(pps_encoder_t *encoder) int res = qt_safe_write(ppsCtrlFD, pps_encoder_buffer(encoder), pps_encoder_length(encoder)); if (res == -1) { qWarning() << Q_FUNC_INFO << "Error when writing to control FD. Is Bluetooth powerd on?" - << errno << ppsCtrlFD; + << errno << ppsCtrlFD << count; return false; } } |