summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNedim Hadzic <nhadzic@blackberry.com>2013-08-29 12:46:56 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-05 10:23:47 +0200
commitecb93e0f63f317039c0bba2c6c754c67b80a9d5e (patch)
treeb98cc16f8d5416e4dabc9dce101ab068136cecf5 /src
parentfcb5d4d992b660305c764d54ee70d977c0833602 (diff)
Make Bluetooth adapter choosable for device and service search
In case there are more Bluetooth adapter, device and service search might give different results. Addition to Change-Id: Ideddb39460985c18547baec986b15e43946c85de - added option for setting the device adapter for service search. QBluetoothLocalDevice was used in both classes (device and service search) for passing an argument for setting adapter. The reason for this to keep the same approach, because in QBluetoothServiceDiscoveryAgent class there is already a constructor with QBluetoothAddress argument. Auto tests and examples updated. Change-Id: Ib5d7ff23e4846d9d42dae68d8d424031748811e5 Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent.cpp8
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent.h2
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp10
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_p.cpp4
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_p.h6
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_qnx.cpp4
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent.cpp42
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent.h4
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp22
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent_p.cpp4
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent_p.h6
-rw-r--r--src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp4
12 files changed, 74 insertions, 42 deletions
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent.cpp
index 333c3697..64d0b1a0 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent.cpp
@@ -134,12 +134,12 @@ QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(QObject *parent)
}
/*!
- Constructs a new Bluetooth device discovery agent with parent \a parent and uses the adapter with
- address \a address for the device search. If \a address is default constructed the resulting
+ Constructs a new Bluetooth device discovery agent with parent \a parent and uses the adapter \a deviceAdapter
+ for the device search. If \a deviceAdapter is default constructed the resulting
QBluetoothDeviceDiscoveryAgent object will use the local default Bluetooth adapter.
*/
-QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &address, QObject *parent)
- : QObject(parent), d_ptr(new QBluetoothDeviceDiscoveryAgentPrivate(address))
+QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent)
+ : QObject(parent), d_ptr(new QBluetoothDeviceDiscoveryAgentPrivate(deviceAdapter))
{
d_ptr->q_ptr = this;
}
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent.h b/src/bluetooth/qbluetoothdevicediscoveryagent.h
index cf0e3a62..c3a00a69 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent.h
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent.h
@@ -75,7 +75,7 @@ public:
};
QBluetoothDeviceDiscoveryAgent(QObject *parent = 0);
- explicit QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &address, QObject *parent = 0);
+ explicit QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = 0);
~QBluetoothDeviceDiscoveryAgent();
QBluetoothDeviceDiscoveryAgent::InquiryType inquiryType() const;
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
index 46a6361b..2b4e7f93 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
@@ -52,9 +52,9 @@
QT_BEGIN_NAMESPACE_BLUETOOTH
-QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &address)
- : lastError(QBluetoothDeviceDiscoveryAgent::NoError), m_deviceAddress(address),
- pendingCancel(false), pendingStart(false), adapter(0)
+QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter)
+ : lastError(QBluetoothDeviceDiscoveryAgent::NoError), m_adapterAddress(deviceAdapter), pendingCancel(false), pendingStart(false),
+ adapter(0)
{
manager = new OrgBluezManagerInterface(QLatin1String("org.bluez"), QLatin1String("/"),
QDBusConnection::systemBus());
@@ -86,10 +86,10 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start()
discoveredDevices.clear();
QDBusPendingReply<QDBusObjectPath> reply;
- if (m_deviceAddress.isNull())
+ if (m_adapterAddress.isNull())
reply = manager->DefaultAdapter();
else
- reply = manager->FindAdapter(m_deviceAddress.toString());
+ reply = manager->FindAdapter(m_adapterAddress.toString());
reply.waitForFinished();
if (reply.isError()) {
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_p.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_p.cpp
index 952f17d2..638ff66e 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_p.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_p.cpp
@@ -48,9 +48,9 @@
QT_BEGIN_NAMESPACE_BLUETOOTH
-QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &address)
+QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter)
{
- Q_UNUSED(address);
+ Q_UNUSED(deviceAdapter);
inquiryType = QBluetoothDeviceDiscoveryAgent::GeneralUnlimitedInquiry;
lastError = QBluetoothDeviceDiscoveryAgent::NoError;
}
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_p.h b/src/bluetooth/qbluetoothdevicediscoveryagent_p.h
index df3282c9..3f9dd2b3 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_p.h
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_p.h
@@ -48,6 +48,8 @@
#include <qbluetoothaddress.h>
+#include <qbluetoothlocaldevice.h>
+
#ifdef QT_BLUEZ_BLUETOOTH
class OrgBluezManagerInterface;
class OrgBluezAdapterInterface;
@@ -71,7 +73,7 @@ class QBluetoothDeviceDiscoveryAgentPrivate
#endif
Q_DECLARE_PUBLIC(QBluetoothDeviceDiscoveryAgent)
public:
- QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &address);
+ QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter);
~QBluetoothDeviceDiscoveryAgentPrivate();
void start();
@@ -91,7 +93,7 @@ private:
QString errorString;
#ifdef QT_BLUEZ_BLUETOOTH
- QBluetoothAddress m_deviceAddress;
+ QBluetoothAddress m_adapterAddress;
bool pendingCancel;
bool pendingStart;
OrgBluezManagerInterface *manager;
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_qnx.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_qnx.cpp
index 02e360d3..2e63771e 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_qnx.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_qnx.cpp
@@ -49,11 +49,11 @@
QT_BEGIN_NAMESPACE_BLUETOOTH
-QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &address):
+QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter):
QObject(0), lastError(QBluetoothDeviceDiscoveryAgent::NoError),
m_rdfd(-1), m_active(false), m_nextOp(None), m_currentOp(None)
{
- Q_UNUSED(address);
+ Q_UNUSED(deviceAdapter);
inquiryType = QBluetoothDeviceDiscoveryAgent::GeneralUnlimitedInquiry;
ppsRegisterControl();
ppsRegisterForEvent(QStringLiteral("device_added"), this);
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent.cpp b/src/bluetooth/qbluetoothservicediscoveryagent.cpp
index 136ec8e5..89149941 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent.cpp
@@ -119,18 +119,14 @@ QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent
}
/*!
- Constructs a new QBluetoothServiceDiscoveryAgent for \a remoteAddress and with \a parent.
+ Constructs a new QBluetoothServiceDiscoveryAgent for \a deviceAdapter and with \a parent.
- If \a remoteAddress is null, services will be discovred on all contactable Bluetooth
- devices.
+ If \a deviceAdapter is null, the default adapter will be used.
*/
-QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &remoteAddress, QObject *parent)
-: QObject(parent), d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(remoteAddress))
+QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent)
+: QObject(parent), d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(deviceAdapter))
{
d_ptr->q_ptr = this;
- if (!remoteAddress.isNull()) {
- d_ptr->singleDevice = true;
- }
}
/*!
@@ -196,6 +192,36 @@ QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const
}
/*!
+ Sets remote device address to \a address. If \a address is null, services will be discovered
+ on all contactable Bluetooth devices. A new remote address can only be set while there is
+ no service discovery in progress; otherwise this function returns false.
+
+*/
+bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)
+{
+ if (isActive())
+ return false;
+ if (!address.isNull())
+ d_ptr->singleDevice = true;
+ d_ptr->deviceAddress = address;
+
+ return true;
+}
+
+/*!
+ Returns the remote device address. If setRemoteAddress is not called, the function
+ will return default QBluetoothAddress.
+
+*/
+QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const
+{
+ if (d_ptr->singleDevice == true)
+ return d_ptr->deviceAddress;
+ else
+ return QBluetoothAddress();
+}
+
+/*!
Starts service discovery. \a mode specifies the type of service discovery to perform.
On Blackberry devices device discovery may lead to pairing requests.
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent.h b/src/bluetooth/qbluetoothservicediscoveryagent.h
index 4e3cdf42..0a67030b 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent.h
+++ b/src/bluetooth/qbluetoothservicediscoveryagent.h
@@ -72,7 +72,7 @@ public:
};
QBluetoothServiceDiscoveryAgent(QObject *parent = 0);
- explicit QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &remoteAddress, QObject *parent = 0);
+ explicit QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = 0);
~QBluetoothServiceDiscoveryAgent();
bool isActive() const;
@@ -85,6 +85,8 @@ public:
void setUuidFilter(const QList<QBluetoothUuid> &uuids);
void setUuidFilter(const QBluetoothUuid &uuid);
QList<QBluetoothUuid> uuidFilter() const;
+ bool setRemoteAddress(const QBluetoothAddress &address);
+ QBluetoothAddress remoteAddress() const;
public Q_SLOTS:
void start(DiscoveryMode mode = MinimalDiscovery);
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp
index a8893a5b..1474cc02 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp
@@ -56,10 +56,10 @@
QT_BEGIN_NAMESPACE_BLUETOOTH
-QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &address)
-: error(QBluetoothServiceDiscoveryAgent::NoError), state(Inactive), deviceAddress(address),
- deviceDiscoveryAgent(0), mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery),
- singleDevice(false), manager(0), device(0)
+QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter)
+: error(QBluetoothServiceDiscoveryAgent::NoError), state(Inactive), deviceDiscoveryAgent(0),
+ mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery), singleDevice(false),
+ manager(0), device(0), m_deviceAdapterAddress(deviceAdapter)
{
qRegisterMetaType<ServiceMap>("ServiceMap");
qDBusRegisterMetaType<ServiceMap>();
@@ -81,15 +81,17 @@ void QBluetoothServiceDiscoveryAgentPrivate::start(const QBluetoothAddress &addr
manager = new OrgBluezManagerInterface(QLatin1String("org.bluez"), QLatin1String("/"),
QDBusConnection::systemBus());
+ QDBusPendingReply<QDBusObjectPath> reply;
+ if (m_deviceAdapterAddress.isNull())
+ reply = manager->DefaultAdapter();
+ else
+ reply = manager->FindAdapter(m_deviceAdapterAddress.toString());
- QDBusPendingReply<QDBusObjectPath> reply = manager->DefaultAdapter();
reply.waitForFinished();
if (reply.isError()) {
- if (singleDevice) {
- error = QBluetoothServiceDiscoveryAgent::DeviceDiscoveryError;
- errorString = QBluetoothServiceDiscoveryAgent::tr("Unable to find default adapter");
- emit q->error(error);
- }
+ error = QBluetoothServiceDiscoveryAgent::DeviceDiscoveryError;
+ errorString = QBluetoothServiceDiscoveryAgent::tr("Unable to find appointed local adapter");
+ emit q->error(error);
_q_serviceDiscoveryFinished();
return;
}
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_p.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_p.cpp
index 508270d7..063fc4bd 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent_p.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent_p.cpp
@@ -44,9 +44,9 @@
QT_BEGIN_NAMESPACE_BLUETOOTH
-QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &address)
+QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter)
{
- Q_UNUSED(address);
+ Q_UNUSED(deviceAdapter);
}
QBluetoothServiceDiscoveryAgentPrivate::~QBluetoothServiceDiscoveryAgentPrivate()
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_p.h b/src/bluetooth/qbluetoothservicediscoveryagent_p.h
index b1b1d635..e19a090f 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent_p.h
+++ b/src/bluetooth/qbluetoothservicediscoveryagent_p.h
@@ -87,7 +87,7 @@ public:
ServiceDiscovery,
};
- QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &address);
+ QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter);
~QBluetoothServiceDiscoveryAgentPrivate();
void startDeviceDiscovery();
@@ -134,13 +134,12 @@ private:
public:
QBluetoothServiceDiscoveryAgent::Error error;
QString errorString;
-
+ QBluetoothAddress deviceAddress;
QList<QBluetoothServiceInfo> discoveredServices;
QList<QBluetoothDeviceInfo> discoveredDevices;
private:
DiscoveryState state;
- QBluetoothAddress deviceAddress;
QList<QBluetoothUuid> uuidFilter;
QBluetoothDeviceDiscoveryAgent *deviceDiscoveryAgent;
@@ -153,6 +152,7 @@ private:
OrgBluezManagerInterface *manager;
OrgBluezAdapterInterface *adapter;
OrgBluezDeviceInterface *device;
+ QBluetoothAddress m_deviceAdapterAddress;
#endif
protected:
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp
index eb942303..6c8d9f23 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent_qnx.cpp
@@ -54,8 +54,8 @@
QT_BEGIN_NAMESPACE_BLUETOOTH
-QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &address)
- : m_rdfd(-1), rdNotifier(0), error(QBluetoothServiceDiscoveryAgent::NoError), state(Inactive), deviceAddress(address),
+QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter)
+ : m_rdfd(-1), rdNotifier(0), error(QBluetoothServiceDiscoveryAgent::NoError), state(Inactive), deviceAddress(deviceAdapter),
deviceDiscoveryAgent(0), mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery)
{
ppsRegisterControl();