summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dependencies.yaml6
-rw-r--r--dist/changes-5.13.235
-rw-r--r--src/bluetooth/bluez/properties_p.h3
-rw-r--r--src/bluetooth/doc/src/bluetooth-overview.qdoc11
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp29
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_p.h1
-rw-r--r--src/bluetooth/qbluetoothdeviceinfo.cpp2
-rw-r--r--src/bluetooth/qbluetoothserver_bluez.cpp2
-rw-r--r--src/bluetooth/qlowenergycontroller_bluezdbus.cpp17
-rw-r--r--src/nfc/qnearfieldmanager.cpp2
-rw-r--r--src/nfc/qnearfieldtarget.cpp7
-rw-r--r--tests/auto/qlowenergydescriptor/tst_qlowenergydescriptor.cpp14
12 files changed, 93 insertions, 36 deletions
diff --git a/dependencies.yaml b/dependencies.yaml
index fe122b69..a80be7b8 100644
--- a/dependencies.yaml
+++ b/dependencies.yaml
@@ -1,10 +1,10 @@
dependencies:
../qtandroidextras:
- ref: c224f69910ca54b8223cff13f641822756e50238
+ ref: e3ee40f78d3894b5fc62101de2f25ea2563e579c
required: false
../qtbase:
- ref: 63a1a30a014eb75a67c390a16faa9aeb03a4a012
+ ref: 8652c79df0a47264a2d525424484e15744e2462b
required: true
../qtdeclarative:
- ref: 42a977f2c0a4a978bb746a6e340eebd1df062c25
+ ref: d5dc3c4cbdc4455143626d7a3e0f9a9a211515a9
required: false
diff --git a/dist/changes-5.13.2 b/dist/changes-5.13.2
new file mode 100644
index 00000000..22c4b3f5
--- /dev/null
+++ b/dist/changes-5.13.2
@@ -0,0 +1,35 @@
+Qt 5.13.2 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.13.0 through 5.13.1.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.13 series is binary compatible with the 5.12.x series.
+Applications compiled for 5.12 will continue to run with 5.13.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Qt 5.13.2 Changes *
+****************************************************************************
+
+QtBluetooth
+-----------
+
+ - [QTQAINFRA-2139] Fixed QMutex related compile error when using clang on
+ Windows.
+
+ - [QTBUG-78201] Fixed a case where an existing descriptor was not discovered
+ during the service discovery due to not being readable. This issue happened
+ on Android.
+
+ - Fixed a few minor documentation issues.
+
diff --git a/src/bluetooth/bluez/properties_p.h b/src/bluetooth/bluez/properties_p.h
index 16a43e80..d8a7b6cb 100644
--- a/src/bluetooth/bluez/properties_p.h
+++ b/src/bluetooth/bluez/properties_p.h
@@ -58,7 +58,8 @@ public Q_SLOTS: // METHODS
}
Q_SIGNALS: // SIGNALS
- void PropertiesChanged(const QString &interface, const QVariantMap &changed_properties, const QStringList &invalidated_properties);
+ void PropertiesChanged(const QString &interface, const QVariantMap &changed_properties, const QStringList &invalidated_properties,
+ const QDBusMessage &msg);
};
namespace org {
diff --git a/src/bluetooth/doc/src/bluetooth-overview.qdoc b/src/bluetooth/doc/src/bluetooth-overview.qdoc
index 33ccaa33..60e886a3 100644
--- a/src/bluetooth/doc/src/bluetooth-overview.qdoc
+++ b/src/bluetooth/doc/src/bluetooth-overview.qdoc
@@ -49,12 +49,13 @@
Note that the Object Push Profile is not supported on Android and Windows.
- Note that parts of RFCOMM functionality cannot be configured by Qt on Windows.
- A service's \l {ServiceClassIds} and \l {ProtocolDescriptorList} are filled automatically by
- Windows. Therefore registering a service with custom values for these fields might not yield the
- expected result on Windows.
+ \note Parts of RFCOMM functionality cannot be configured by Qt on
+ Windows. A service's \l {QBluetoothServiceInfo::}{ServiceClassIds} and
+ \l {QBluetoothServiceInfo::}{ProtocolDescriptorList} are filled
+ automatically. Therefore, registering a service with custom values for
+ these fields might not yield the expected result on Windows.
- Note that the Received Signal Strength Indicator (RSSI), as well as
+ \note The Received Signal Strength Indicator (RSSI), as well as
the Manufacturer Specific Data advertised by Bluetooth LE devices are
not supported by the Win32 backend. Also, it is only possible to find
devices that have been previously paired through Windows Settings.
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
index 7dce9dae..243be3b2 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_bluez.cpp
@@ -292,6 +292,17 @@ void QBluetoothDeviceDiscoveryAgentPrivate::startBluez5(QBluetoothDeviceDiscover
q, [this](const QString &path){
this->_q_discoveryInterrupted(path);
});
+ OrgFreedesktopDBusPropertiesInterface *prop = new OrgFreedesktopDBusPropertiesInterface(
+ QStringLiteral("org.bluez"), QStringLiteral(""), QDBusConnection::systemBus());
+ QObject::connect(prop, &OrgFreedesktopDBusPropertiesInterface::PropertiesChanged,
+ q, [this](const QString &interface, const QVariantMap &changedProperties,
+ const QStringList &invalidatedProperties,
+ const QDBusMessage &signal) {
+ this->_q_PropertiesChanged(interface, signal.path(), changedProperties, invalidatedProperties);
+ });
+
+ // remember what we have to cleanup
+ propertyMonitors.append(prop);
// collect initial set of information
QDBusPendingReply<ManagedObjectList> reply = managerBluez5->GetManagedObjects();
@@ -476,17 +487,6 @@ void QBluetoothDeviceDiscoveryAgentPrivate::deviceFoundBluez5(const QString &dev
<< "RSSI" << deviceInfo.rssi()
<< "Num ManufacturerData" << deviceInfo.manufacturerData().size();
- OrgFreedesktopDBusPropertiesInterface *prop = new OrgFreedesktopDBusPropertiesInterface(
- QStringLiteral("org.bluez"), devicePath, QDBusConnection::systemBus(), q);
- QObject::connect(prop, &OrgFreedesktopDBusPropertiesInterface::PropertiesChanged,
- q, [this](const QString &interface, const QVariantMap &changedProperties,
- const QStringList &invalidatedProperties) {
- this->_q_PropertiesChanged(interface, changedProperties, invalidatedProperties);
- });
-
- // remember what we have to cleanup
- propertyMonitors.append(prop);
-
// Cache the properties so we do not have to access dbus every time to get a value
devicesProperties[devicePath] = properties;
@@ -641,6 +641,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::_q_discoveryInterrupted(const QStrin
}
void QBluetoothDeviceDiscoveryAgentPrivate::_q_PropertiesChanged(const QString &interface,
+ const QString &path,
const QVariantMap &changed_properties,
const QStringList &invalidated_properties)
{
@@ -648,12 +649,6 @@ void QBluetoothDeviceDiscoveryAgentPrivate::_q_PropertiesChanged(const QString &
if (interface != QStringLiteral("org.bluez.Device1"))
return;
- OrgFreedesktopDBusPropertiesInterface *props =
- qobject_cast<OrgFreedesktopDBusPropertiesInterface *>(q->sender());
- if (!props)
- return;
-
- const QString path = props->path();
if (!devicesProperties.contains(path))
return;
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_p.h b/src/bluetooth/qbluetoothdevicediscoveryagent_p.h
index 263ab9ca..0bff7138 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_p.h
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_p.h
@@ -142,6 +142,7 @@ public:
void _q_discoveryFinished();
void _q_discoveryInterrupted(const QString &path);
void _q_PropertiesChanged(const QString &interface,
+ const QString &path,
const QVariantMap &changed_properties,
const QStringList &invalidated_properties);
void _q_extendedDeviceDiscoveryTimeout();
diff --git a/src/bluetooth/qbluetoothdeviceinfo.cpp b/src/bluetooth/qbluetoothdeviceinfo.cpp
index 443902dc..a5bc7b81 100644
--- a/src/bluetooth/qbluetoothdeviceinfo.cpp
+++ b/src/bluetooth/qbluetoothdeviceinfo.cpp
@@ -611,7 +611,7 @@ QList<QBluetoothUuid> QBluetoothDeviceInfo::serviceUuids(DataCompleteness *compl
#else
-/*!
+/*
Returns the list of service UUIDS supported by the device. Most commonly this
list of uuids represents custom uuids or a uuid value specified by
\l QBluetoothUuid::ServiceClassUuid.
diff --git a/src/bluetooth/qbluetoothserver_bluez.cpp b/src/bluetooth/qbluetoothserver_bluez.cpp
index a98f5398..0daae61f 100644
--- a/src/bluetooth/qbluetoothserver_bluez.cpp
+++ b/src/bluetooth/qbluetoothserver_bluez.cpp
@@ -69,7 +69,7 @@ QBluetoothSocket *QBluetoothServerPrivate::createSocketForServer(
QBluetoothServerPrivate::QBluetoothServerPrivate(QBluetoothServiceInfo::Protocol sType,
QBluetoothServer *parent)
: maxPendingConnections(1), securityFlags(QBluetooth::Authorization), serverType(sType),
- m_lastError(QBluetoothServer::NoError), q_ptr(parent)
+ q_ptr(parent), m_lastError(QBluetoothServer::NoError)
{
if (sType == QBluetoothServiceInfo::RfcommProtocol)
socket = createSocketForServer(QBluetoothServiceInfo::RfcommProtocol);
diff --git a/src/bluetooth/qlowenergycontroller_bluezdbus.cpp b/src/bluetooth/qlowenergycontroller_bluezdbus.cpp
index 2a0fafdf..5dde8774 100644
--- a/src/bluetooth/qlowenergycontroller_bluezdbus.cpp
+++ b/src/bluetooth/qlowenergycontroller_bluezdbus.cpp
@@ -112,6 +112,23 @@ void QLowEnergyControllerPrivateBluezDBus::devicePropertiesChanged(
}
}
}
+
+ if (changedProperties.contains(QStringLiteral("UUIDs"))) {
+ const QStringList newUuidStringList = changedProperties.value(QStringLiteral("UUIDs")).toStringList();
+ QVector<QBluetoothUuid> newUuidList;
+ for (const QString &uuidString : newUuidStringList)
+ newUuidList.append(QBluetoothUuid(uuidString));
+
+ for (const QBluetoothUuid &uuid : serviceList.keys()) {
+ if (!newUuidList.contains(uuid)) {
+ qCDebug(QT_BT_BLUEZ) << __func__ << "Service" << uuid << "has been removed";
+ QSharedPointer<QLowEnergyServicePrivate> service = serviceList.take(uuid);
+ service->setController(nullptr);
+ dbusServices.remove(uuid);
+ }
+ }
+ }
+
} else if (interface == QStringLiteral("org.bluez.Battery1")) {
qCDebug(QT_BT_BLUEZ) << "######" << interface << changedProperties;
if (changedProperties.contains(QStringLiteral("Percentage"))) {
diff --git a/src/nfc/qnearfieldmanager.cpp b/src/nfc/qnearfieldmanager.cpp
index 02e4d918..82a8bfbe 100644
--- a/src/nfc/qnearfieldmanager.cpp
+++ b/src/nfc/qnearfieldmanager.cpp
@@ -150,7 +150,7 @@ QT_BEGIN_NAMESPACE
\since 5.12
- This signal is emitted whenever the state of the NFC adapter changed.
+ This signal is emitted whenever the \a state of the NFC adapter changed.
\note Currently, this signal is only emitted on Android.
*/
diff --git a/src/nfc/qnearfieldtarget.cpp b/src/nfc/qnearfieldtarget.cpp
index 7d83db78..2905c380 100644
--- a/src/nfc/qnearfieldtarget.cpp
+++ b/src/nfc/qnearfieldtarget.cpp
@@ -176,6 +176,13 @@ quint16 qNfcChecksum(const char *data, uint len)
*/
/*!
+ \class QNearFieldTarget::RequestId
+ \inmodule QtHfc
+ \inheaderfile QNearFieldTarget
+ \brief A request id handle.
+*/
+
+/*!
Constructs a new invalid request id handle.
*/
QNearFieldTarget::RequestId::RequestId()
diff --git a/tests/auto/qlowenergydescriptor/tst_qlowenergydescriptor.cpp b/tests/auto/qlowenergydescriptor/tst_qlowenergydescriptor.cpp
index 5ebb0b1d..334a950b 100644
--- a/tests/auto/qlowenergydescriptor/tst_qlowenergydescriptor.cpp
+++ b/tests/auto/qlowenergydescriptor/tst_qlowenergydescriptor.cpp
@@ -63,7 +63,7 @@ private:
};
tst_QLowEnergyDescriptor::tst_QLowEnergyDescriptor() :
- globalControl(0), globalService(0)
+ globalControl(nullptr), globalService(nullptr)
{
QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));
}
@@ -104,13 +104,13 @@ void tst_QLowEnergyDescriptor::initTestCase()
QTRY_VERIFY_WITH_TIMEOUT(spy.count() > 0, 50000);
// find first service with descriptor
- QLowEnergyController *controller = 0;
+ QLowEnergyController *controller = nullptr;
for (const QBluetoothDeviceInfo& remoteDeviceInfo : qAsConst(remoteLeDeviceInfos)) {
controller = QLowEnergyController::createCentral(remoteDeviceInfo, this);
qDebug() << "Connecting to" << remoteDeviceInfo.address();
controller->connectToDevice();
QTRY_IMPL(controller->state() != QLowEnergyController::ConnectingState,
- 20000);
+ 20000)
if (controller->state() != QLowEnergyController::ConnectedState) {
// any error and we skip
delete controller;
@@ -243,7 +243,8 @@ void tst_QLowEnergyDescriptor::tst_assignCompare()
QCOMPARE(target.uuid(), QBluetoothUuid());
QCOMPARE(target.value(), QByteArray());
- int index = -1;
+ int index = 0;
+ bool valueFound = false;
QList<QLowEnergyDescriptor> targets;
const QList<QLowEnergyCharacteristic> chars = globalService->characteristics();
for (const QLowEnergyCharacteristic &ch : chars) {
@@ -253,6 +254,7 @@ void tst_QLowEnergyDescriptor::tst_assignCompare()
// try to get a descriptor we can read
if (targets[i].type() == QBluetoothUuid::CharacteristicUserDescription) {
index = i;
+ valueFound = true;
break;
}
}
@@ -263,8 +265,6 @@ void tst_QLowEnergyDescriptor::tst_assignCompare()
if (targets.isEmpty())
QSKIP("No descriptor found despite prior indication.");
- QVERIFY(index != -1);
-
// test assignment operator
target = targets[index];
QVERIFY(target.isValid());
@@ -272,7 +272,7 @@ void tst_QLowEnergyDescriptor::tst_assignCompare()
QVERIFY(!target.name().isEmpty());
QVERIFY(target.handle() > 0);
QVERIFY(!target.uuid().isNull());
- QVERIFY(!target.value().isEmpty());
+ QVERIFY(!valueFound || !target.value().isEmpty());
QVERIFY(target == targets[index]);
QVERIFY(targets[index] == target);