summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent_p.h3
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp39
-rw-r--r--src/bluetooth/qbluetoothserviceinfo_qnx.cpp5
-rw-r--r--src/bluetooth/qnx/ppshelpers.cpp4
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;
}
}