summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/bluetooth/btchat/remoteselector.cpp20
-rw-r--r--examples/bluetooth/btfiletransfer/remoteselector.cpp16
-rw-r--r--examples/bluetooth/btscanner/device.cpp14
-rw-r--r--examples/bluetooth/btscanner/service.cpp21
-rw-r--r--examples/bluetooth/bttennis/tennis.cpp19
-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
-rw-r--r--tests/auto/qbluetoothdevicediscoveryagent/tst_qbluetoothdevicediscoveryagent.cpp28
-rw-r--r--tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp90
19 files changed, 269 insertions, 55 deletions
diff --git a/examples/bluetooth/btchat/remoteselector.cpp b/examples/bluetooth/btchat/remoteselector.cpp
index 50bebcd3..ee195413 100644
--- a/examples/bluetooth/btchat/remoteselector.cpp
+++ b/examples/bluetooth/btchat/remoteselector.cpp
@@ -43,15 +43,30 @@
#include <qbluetoothdeviceinfo.h>
#include <qbluetoothaddress.h>
+#include <qbluetoothlocaldevice.h>
QT_USE_NAMESPACE_BLUETOOTH
RemoteSelector::RemoteSelector(QWidget *parent)
-: QDialog(parent), ui(new Ui::RemoteSelector),
- m_discoveryAgent(new QBluetoothServiceDiscoveryAgent)
+: QDialog(parent), ui(new Ui::RemoteSelector)
{
ui->setupUi(this);
+ //Using default Bluetooth adapter
+ QBluetoothLocalDevice localDevice;
+ QBluetoothAddress adapterAddress = localDevice.address();
+
+ /*
+ * In case of multiple Bluetooth adapters it is possible to
+ * set which adapter will be used by providing MAC Address.
+ * Example code:
+ *
+ * QBluetoothAddress adapterAddress("XX:XX:XX:XX:XX:XX");
+ * m_discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+ */
+
+ m_discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+
connect(m_discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)),
this, SLOT(serviceDiscovered(QBluetoothServiceInfo)));
connect(m_discoveryAgent, SIGNAL(finished()), this, SLOT(discoveryFinished()));
@@ -60,6 +75,7 @@ RemoteSelector::RemoteSelector(QWidget *parent)
RemoteSelector::~RemoteSelector()
{
delete ui;
+ delete m_discoveryAgent;
}
void RemoteSelector::startDiscovery(const QBluetoothUuid &uuid)
diff --git a/examples/bluetooth/btfiletransfer/remoteselector.cpp b/examples/bluetooth/btfiletransfer/remoteselector.cpp
index 70cde972..b148dab4 100644
--- a/examples/bluetooth/btfiletransfer/remoteselector.cpp
+++ b/examples/bluetooth/btfiletransfer/remoteselector.cpp
@@ -59,10 +59,24 @@ QT_USE_NAMESPACE_BLUETOOTH
RemoteSelector::RemoteSelector(QWidget *parent)
: QDialog(parent), ui(new Ui::RemoteSelector),
- m_discoveryAgent(new QBluetoothServiceDiscoveryAgent), m_localDevice(new QBluetoothLocalDevice), m_pindisplay(0)
+ m_localDevice(new QBluetoothLocalDevice), m_pindisplay(0)
{
ui->setupUi(this);
+ //Using default Bluetooth adapter
+ QBluetoothAddress adapterAddress = m_localDevice->address();
+
+ /*
+ * In case of multiple Bluetooth adapters it is possible to
+ * set which adapter will be used by providing MAC Address.
+ * Example code:
+ *
+ * QBluetoothAddress adapterAddress("XX:XX:XX:XX:XX:XX");
+ * m_discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+ */
+
+ m_discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+
connect(m_discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)),
this, SLOT(serviceDiscovered(QBluetoothServiceInfo)));
connect(m_discoveryAgent, SIGNAL(finished()), this, SLOT(discoveryFinished()));
diff --git a/examples/bluetooth/btscanner/device.cpp b/examples/bluetooth/btscanner/device.cpp
index 1437f612..732eb371 100644
--- a/examples/bluetooth/btscanner/device.cpp
+++ b/examples/bluetooth/btscanner/device.cpp
@@ -48,12 +48,22 @@
#include <QDebug>
DeviceDiscoveryDialog::DeviceDiscoveryDialog(QWidget *parent)
-: QDialog(parent), discoveryAgent(new QBluetoothDeviceDiscoveryAgent),
- localDevice(new QBluetoothLocalDevice),
+: QDialog(parent), localDevice(new QBluetoothLocalDevice),
ui(new Ui_DeviceDiscovery)
{
ui->setupUi(this);
+ /*
+ * In case of multiple Bluetooth adapters it is possible to set adapter
+ * which will be used. Example code:
+ *
+ * QBluetoothAddress address("XX:XX:XX:XX:XX:XX");
+ * discoveryAgent = new QBluetoothDeviceDiscoveryAgent(address);
+ *
+ **/
+
+ discoveryAgent = new QBluetoothDeviceDiscoveryAgent();
+
connect(ui->inquiryType, SIGNAL(toggled(bool)), this, SLOT(setGeneralUnlimited(bool)));
connect(ui->scan, SIGNAL(clicked()), this, SLOT(startScan()));
diff --git a/examples/bluetooth/btscanner/service.cpp b/examples/bluetooth/btscanner/service.cpp
index 7718f518..10df64c5 100644
--- a/examples/bluetooth/btscanner/service.cpp
+++ b/examples/bluetooth/btscanner/service.cpp
@@ -43,15 +43,32 @@
#include <qbluetoothaddress.h>
#include <qbluetoothservicediscoveryagent.h>
#include <qbluetoothserviceinfo.h>
+#include <qbluetoothlocaldevice.h>
ServiceDiscoveryDialog::ServiceDiscoveryDialog(const QString &name,
const QBluetoothAddress &address, QWidget *parent)
-: QDialog(parent), discoveryAgent(new QBluetoothServiceDiscoveryAgent(address)),
- ui(new Ui_ServiceDiscovery)
+: QDialog(parent), ui(new Ui_ServiceDiscovery)
{
ui->setupUi(this);
+ //Using default Bluetooth adapter
+ QBluetoothLocalDevice localDevice;
+ QBluetoothAddress adapterAddress = localDevice.address();
+
+ /*
+ * In case of multiple Bluetooth adapters it is possible to
+ * set which adapter will be used by providing MAC Address.
+ * Example code:
+ *
+ * QBluetoothAddress adapterAddress("XX:XX:XX:XX:XX:XX");
+ * discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+ */
+
+ discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+
+ bool set = discoveryAgent->setRemoteAddress(address);
+
setWindowTitle(name);
connect(discoveryAgent, SIGNAL(serviceDiscovered(const QBluetoothServiceInfo&)),
diff --git a/examples/bluetooth/bttennis/tennis.cpp b/examples/bluetooth/bttennis/tennis.cpp
index bec62aa0..32c6cf44 100644
--- a/examples/bluetooth/bttennis/tennis.cpp
+++ b/examples/bluetooth/bttennis/tennis.cpp
@@ -66,8 +66,8 @@
//#include <qllcpsocket.h>
Tennis::Tennis(QWidget *parent)
-: QDialog(parent), ui(new Ui_Tennis), board(new Board), controller(new Controller), socket(0),
- m_discoveryAgent(new QBluetoothServiceDiscoveryAgent)//, m_handover(0)
+: QDialog(parent), ui(new Ui_Tennis), board(new Board), controller(new Controller), socket(0)
+ //, m_handover(0)
{
// start Bluetooth if not started
QBluetoothLocalDevice *device = new QBluetoothLocalDevice();
@@ -75,6 +75,21 @@ Tennis::Tennis(QWidget *parent)
delete device;
device = 0;
+ //Using default Bluetooth adapter
+ QBluetoothLocalDevice localDevice;
+ QBluetoothAddress adapterAddress = localDevice.address();
+
+ /*
+ * In case of multiple Bluetooth adapters it is possible to
+ * set which adapter will be used by providing MAC Address.
+ * Example code:
+ *
+ * QBluetoothAddress adapterAddress("XX:XX:XX:XX:XX:XX");
+ * m_discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress);
+ */
+
+ m_discoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress, this);
+
//! [Construct UI]
ui->setupUi(this);
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();
diff --git a/tests/auto/qbluetoothdevicediscoveryagent/tst_qbluetoothdevicediscoveryagent.cpp b/tests/auto/qbluetoothdevicediscoveryagent/tst_qbluetoothdevicediscoveryagent.cpp
index ef7cd09b..33b6b204 100644
--- a/tests/auto/qbluetoothdevicediscoveryagent/tst_qbluetoothdevicediscoveryagent.cpp
+++ b/tests/auto/qbluetoothdevicediscoveryagent/tst_qbluetoothdevicediscoveryagent.cpp
@@ -43,6 +43,7 @@
#include <QDebug>
#include <QVariant>
+#include <QList>
#include <qbluetoothaddress.h>
#include <qbluetoothdevicediscoveryagent.h>
@@ -303,7 +304,21 @@ void tst_QBluetoothDeviceDiscoveryAgent::tst_deviceDiscovery()
{
QFETCH(QBluetoothDeviceDiscoveryAgent::InquiryType, inquiryType);
- QBluetoothDeviceDiscoveryAgent discoveryAgent;
+ //Run test in case of multiple Bluetooth adapters
+ QBluetoothLocalDevice localDevice;
+ //We will use default adapter if there is no other adapter
+ QBluetoothAddress address = localDevice.address();
+ int numberOfAdapters = (localDevice.allDevices()).size();
+ QList<QBluetoothAddress> addresses;
+ if (numberOfAdapters > 1) {
+
+ for (int i=0; i < numberOfAdapters; i++) {
+ addresses.append(((QBluetoothHostInfo)localDevice.allDevices().at(i)).address());
+ }
+ address = (QBluetoothAddress)addresses.at(0);
+ }
+
+ QBluetoothDeviceDiscoveryAgent discoveryAgent(address);
QVERIFY(discoveryAgent.error() == discoveryAgent.NoError);
QVERIFY(discoveryAgent.errorString().isEmpty());
QVERIFY(!discoveryAgent.isActive());
@@ -361,7 +376,7 @@ void tst_QBluetoothDeviceDiscoveryAgent::tst_deviceDiscovery()
if (!remoteDevice.isNull())
QVERIFY(discoveredSpy.count() > 0);
-
+ int counter = 0;
// All returned QBluetoothDeviceInfo should be valid.
while (!discoveredSpy.isEmpty()) {
const QBluetoothDeviceInfo info =
@@ -369,7 +384,16 @@ void tst_QBluetoothDeviceDiscoveryAgent::tst_deviceDiscovery()
QVERIFY(info.isValid());
qDebug() << "Discovered device:" << info.address().toString() << info.name();
+ if (numberOfAdapters > 1) {
+ for (int i= 1; i < numberOfAdapters; i++) {
+ if (info.address().toString() == addresses[i].toString())
+ counter++;
+ }
+ }
}
+ //For multiple Bluetooth adapter do the check only for GeneralUnlimitedInquiry
+ if (!(inquiryType == QBluetoothDeviceDiscoveryAgent::LimitedInquiry))
+ QVERIFY((numberOfAdapters-1) == counter);
}
}
diff --git a/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp b/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp
index 2ab0326c..ec5ff840 100644
--- a/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp
+++ b/tests/auto/qbluetoothservicediscoveryagent/tst_qbluetoothservicediscoveryagent.cpp
@@ -43,12 +43,14 @@
#include <QDebug>
#include <QVariant>
-#include <QStringList>
+#include <QList>
#include <qbluetoothaddress.h>
#include <qbluetoothdevicediscoveryagent.h>
#include <qbluetoothservicediscoveryagent.h>
#include <qbluetoothlocaldevice.h>
+#include <qbluetoothserver.h>
+#include <qbluetoothserviceinfo.h>
QT_USE_NAMESPACE_BLUETOOTH
@@ -76,6 +78,7 @@ private slots:
void tst_serviceDiscovery_data();
void tst_serviceDiscovery();
+ void tst_serviceDiscoveryAdapters();
private:
QList<QBluetoothDeviceInfo> devices;
@@ -250,6 +253,84 @@ void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscovery_data()
<< QBluetoothServiceDiscoveryAgent::NoError;
}
+void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscoveryAdapters()
+{
+ QBluetoothLocalDevice localDevice;
+ int numberOfAdapters = (localDevice.allDevices()).size();
+ if (numberOfAdapters>1) {
+ if (devices.isEmpty())
+ QSKIP("This test requires an in-range bluetooth device");
+
+ QList<QBluetoothAddress> addresses;
+
+ for (int i=0; i<numberOfAdapters; i++) {
+ addresses.append(((QBluetoothHostInfo)localDevice.allDevices().at(i)).address());
+ }
+ QBluetoothServer server(QBluetoothServer::RfcommServer);
+ QBluetoothUuid uuid(QBluetoothUuid::Ftp);
+ server.listen(addresses[0]);
+ QBluetoothServiceInfo serviceInfo;
+ serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceName, "serviceName");
+ serviceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList,
+ QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup));
+
+ QBluetoothServiceInfo::Sequence classId;
+ classId << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::SerialPort));
+ serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceClassIds, classId);
+ serviceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList,
+ classId);
+
+ serviceInfo.setServiceUuid(uuid);
+
+ QBluetoothServiceInfo::Sequence protocolDescriptorList;
+ QBluetoothServiceInfo::Sequence protocol;
+ protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap));
+ protocolDescriptorList.append(QVariant::fromValue(protocol));
+ protocol.clear();
+
+ protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm))
+ << QVariant::fromValue(quint8(server.serverPort()));
+
+ protocolDescriptorList.append(QVariant::fromValue(protocol));
+ serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList,
+ protocolDescriptorList);
+ QVERIFY(serviceInfo.registerService());
+
+ QVERIFY(server.isListening());
+ qDebug() << "Scanning address" << addresses[0].toString();
+ QBluetoothServiceDiscoveryAgent discoveryAgent(addresses[1]);
+ bool setAddress = discoveryAgent.setRemoteAddress(addresses[0]);
+
+ QVERIFY(setAddress);
+
+ QVERIFY(!discoveryAgent.isActive());
+
+ QVERIFY(discoveryAgent.discoveredServices().isEmpty());
+
+ QSignalSpy finishedSpy(&discoveryAgent, SIGNAL(finished()));
+
+ discoveryAgent.start();
+ int scanTime = MaxScanTime;
+ while (finishedSpy.count() == 0 && scanTime > 0) {
+ QTest::qWait(1000);
+ scanTime -= 1000;
+ }
+
+ QList<QBluetoothServiceInfo> discServices = discoveryAgent.discoveredServices();
+ QVERIFY(!discServices.empty());
+
+ int counter = 0;
+ for (int i = 0; i<discServices.size(); i++)
+ {
+ QBluetoothServiceInfo service((QBluetoothServiceInfo)discServices.at(i));
+ if (uuid == service.serviceUuid())
+ counter++;
+ }
+ QVERIFY(counter == 1);
+ }
+
+}
+
void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscovery()
{
@@ -263,8 +344,13 @@ void tst_QBluetoothServiceDiscoveryAgent::tst_serviceDiscovery()
QFETCH(QList<QBluetoothUuid>, uuidFilter);
QFETCH(QBluetoothServiceDiscoveryAgent::Error, serviceDiscoveryError);
+ QBluetoothLocalDevice localDevice;
+
qDebug() << "Scanning address" << deviceInfo.address().toString();
- QBluetoothServiceDiscoveryAgent discoveryAgent(deviceInfo.address());
+ QBluetoothServiceDiscoveryAgent discoveryAgent(localDevice.address());
+ bool setAddress = discoveryAgent.setRemoteAddress(deviceInfo.address());
+
+ QVERIFY(setAddress);
QVERIFY(!discoveryAgent.isActive());