summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarja Sundqvist <tarja.sundqvist@qt.io>2022-04-07 15:22:00 +0300
committerTarja Sundqvist <tarja.sundqvist@qt.io>2022-04-07 15:22:00 +0300
commit83ca3a2471560f09d723157322adc0b5c33ed914 (patch)
tree565dd202b8245ffc41c5697ea9e1069781d43e01
parent4dcb2f232e00836830dcbffdc5dafbcde6607c08 (diff)
parent5466df6f9b9237caba71a3ae323b931de1f7eda9 (diff)
Merge remote-tracking branch 'origin/tqtc/lts-5.15.4' into tqtc/lts-5.15-opensourcev5.15.4-lts-lgpl
-rw-r--r--.qmake.conf2
-rw-r--r--src/bluetooth/qbluetoothsocket_bluez.cpp2
-rw-r--r--src/bluetooth/qbluetoothsocket_osx.mm5
-rw-r--r--src/bluetooth/qbluetoothsocket_win.cpp8
-rw-r--r--src/bluetooth/qlowenergycontroller_bluezdbus.cpp18
-rw-r--r--src/bluetooth/qlowenergycontrollerbase.cpp1
-rw-r--r--tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp26
7 files changed, 48 insertions, 14 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 5fb75cff..163ffef2 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -2,4 +2,4 @@ load(qt_build_config)
DEFINES += QT_NO_FOREACH QT_NO_JAVA_STYLE_ITERATORS QT_NO_LINKED_LIST
-MODULE_VERSION = 5.15.3
+MODULE_VERSION = 5.15.4
diff --git a/src/bluetooth/qbluetoothsocket_bluez.cpp b/src/bluetooth/qbluetoothsocket_bluez.cpp
index e7d06f2e..2c22fde6 100644
--- a/src/bluetooth/qbluetoothsocket_bluez.cpp
+++ b/src/bluetooth/qbluetoothsocket_bluez.cpp
@@ -689,8 +689,8 @@ bool QBluetoothSocketPrivateBluez::setSocketDescriptor(int socketDescriptor, QBl
connectWriteNotifier = new QSocketNotifier(socket, QSocketNotifier::Write, q);
QObject::connect(connectWriteNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_writeNotify()));
- q->setSocketState(socketState);
q->setOpenMode(openMode);
+ q->setSocketState(socketState);
return true;
}
diff --git a/src/bluetooth/qbluetoothsocket_osx.mm b/src/bluetooth/qbluetoothsocket_osx.mm
index 8af085ac..dcb9aa03 100644
--- a/src/bluetooth/qbluetoothsocket_osx.mm
+++ b/src/bluetooth/qbluetoothsocket_osx.mm
@@ -519,8 +519,8 @@ void QBluetoothSocketPrivate::channelOpenComplete()
Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)");
if (!isConnecting) {
- q_ptr->setSocketState(QBluetoothSocket::ConnectedState);
q_ptr->setOpenMode(openMode);
+ q_ptr->setSocketState(QBluetoothSocket::ConnectedState);
emit q_ptr->connected();
} else {
state = QBluetoothSocket::ConnectedState;
@@ -537,10 +537,9 @@ void QBluetoothSocketPrivate::channelClosed()
// (thus close/abort probably will not work).
if (!isConnecting) {
- q_ptr->setSocketState(QBluetoothSocket::UnconnectedState);
q_ptr->setOpenMode(QIODevice::NotOpen);
+ q_ptr->setSocketState(QBluetoothSocket::UnconnectedState);
emit q_ptr->readChannelFinished();
- emit q_ptr->disconnected();
} else {
state = QBluetoothSocket::UnconnectedState;
// We are still in connectToService and do not want
diff --git a/src/bluetooth/qbluetoothsocket_win.cpp b/src/bluetooth/qbluetoothsocket_win.cpp
index 83855323..0fe22f6e 100644
--- a/src/bluetooth/qbluetoothsocket_win.cpp
+++ b/src/bluetooth/qbluetoothsocket_win.cpp
@@ -133,8 +133,8 @@ void QBluetoothSocketPrivateWin::connectToServiceHelper(const QBluetoothAddress
const int error = ::WSAGetLastError();
if (result != SOCKET_ERROR || error == WSAEWOULDBLOCK) {
- q->setSocketState(QBluetoothSocket::ConnectingState);
q->setOpenMode(openMode);
+ q->setSocketState(QBluetoothSocket::ConnectingState);
} else {
errorString = qt_error_string(error);
q->setSocketError(QBluetoothSocket::UnknownSocketError);
@@ -341,10 +341,12 @@ void QBluetoothSocketPrivateWin::abort()
Q_Q(QBluetoothSocket);
const bool wasConnected = q->state() == QBluetoothSocket::ConnectedState;
- q->setSocketState(QBluetoothSocket::UnconnectedState);
if (wasConnected) {
q->setOpenMode(QIODevice::NotOpen);
+ q->setSocketState(QBluetoothSocket::UnconnectedState);
emit q->readChannelFinished();
+ } else {
+ q->setSocketState(QBluetoothSocket::UnconnectedState);
}
}
@@ -509,8 +511,8 @@ bool QBluetoothSocketPrivateWin::setSocketDescriptor(int socketDescriptor,
if (!createNotifiers())
return false;
- q->setSocketState(socketState);
q->setOpenMode(openMode);
+ q->setSocketState(socketState);
if (socketState == QBluetoothSocket::ConnectedState) {
connectWriteNotifier->setEnabled(true);
readNotifier->setEnabled(true);
diff --git a/src/bluetooth/qlowenergycontroller_bluezdbus.cpp b/src/bluetooth/qlowenergycontroller_bluezdbus.cpp
index d69fb6cd..c159e97e 100644
--- a/src/bluetooth/qlowenergycontroller_bluezdbus.cpp
+++ b/src/bluetooth/qlowenergycontroller_bluezdbus.cpp
@@ -60,6 +60,9 @@ QLowEnergyControllerPrivateBluezDBus::QLowEnergyControllerPrivateBluezDBus()
QLowEnergyControllerPrivateBluezDBus::~QLowEnergyControllerPrivateBluezDBus()
{
+ if (state != QLowEnergyController::UnconnectedState) {
+ qCWarning(QT_BT_BLUEZ) << "Low Energy Controller deleted while connected.";
+ }
}
void QLowEnergyControllerPrivateBluezDBus::init()
@@ -208,12 +211,17 @@ void QLowEnergyControllerPrivateBluezDBus::characteristicPropertiesChanged(
emit service->characteristicChanged(changedChar, newValue);
}
-void QLowEnergyControllerPrivateBluezDBus::interfacesRemoved(
- const QDBusObjectPath &objectPath, const QStringList &/*interfaces*/)
+void QLowEnergyControllerPrivateBluezDBus::interfacesRemoved(const QDBusObjectPath &objectPath,
+ const QStringList &interfaces)
{
if (objectPath.path() == device->path()) {
- qCWarning(QT_BT_BLUEZ) << "DBus Device1 was removed";
- executeClose(QLowEnergyController::UnknownRemoteDeviceError);
+ if (interfaces.contains(QStringLiteral("org.bluez.Device1"))) {
+ qCWarning(QT_BT_BLUEZ) << "DBus Device1 was removed";
+ executeClose(QLowEnergyController::UnknownRemoteDeviceError);
+ } else {
+ qCDebug(QT_BT_BLUEZ) << "DBus interfaces" << interfaces << "were removed from"
+ << objectPath.path();
+ }
} else if (objectPath.path() == adapter->path()) {
qCWarning(QT_BT_BLUEZ) << "DBus Adapter was removed";
executeClose(QLowEnergyController::InvalidBluetoothAdapterError);
@@ -385,6 +393,8 @@ void QLowEnergyControllerPrivateBluezDBus::disconnectFromDevice()
qCDebug(QT_BT_BLUEZ) << "BTLE_DBUS::disconnect() failed"
<< reply.reply().errorName()
<< reply.reply().errorMessage();
+ executeClose(QLowEnergyController::UnknownError);
+ } else {
executeClose(QLowEnergyController::NoError);
}
call->deleteLater();
diff --git a/src/bluetooth/qlowenergycontrollerbase.cpp b/src/bluetooth/qlowenergycontrollerbase.cpp
index 059bd41b..d151f871 100644
--- a/src/bluetooth/qlowenergycontrollerbase.cpp
+++ b/src/bluetooth/qlowenergycontrollerbase.cpp
@@ -123,6 +123,7 @@ void QLowEnergyControllerPrivate::setError(
void QLowEnergyControllerPrivate::setState(
QLowEnergyController::ControllerState newState)
{
+ qCDebug(QT_BT) << "QLowEnergyControllerPrivate setting state to" << newState;
Q_Q(QLowEnergyController);
if (state == newState)
return;
diff --git a/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp b/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
index ab393210..bc74c693 100644
--- a/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
+++ b/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
@@ -148,6 +148,8 @@ void tst_QLowEnergyController::initTestCase()
}
#endif
+ // QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));
+
devAgent = new QBluetoothDeviceDiscoveryAgent(this);
devAgent->setLowEnergyDiscoveryTimeout(5000);
@@ -489,10 +491,12 @@ void tst_QLowEnergyController::tst_concurrentDiscovery()
} else {
QCOMPARE(control.state(), QLowEnergyController::ConnectedState);
QCOMPARE(control2.state(), QLowEnergyController::ConnectedState);
+ QTRY_COMPARE(control2.error(), QLowEnergyController::NoError);
control2.disconnectFromDevice();
QTRY_COMPARE(control2.state(), QLowEnergyController::UnconnectedState);
QTRY_COMPARE(control2.error(), QLowEnergyController::NoError);
QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QTRY_COMPARE(control.error(), QLowEnergyController::NoError);
// reconnect control
control.connectToDevice();
@@ -627,6 +631,8 @@ void tst_QLowEnergyController::tst_concurrentDiscovery()
}
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
}
void tst_QLowEnergyController::verifyServiceProperties(
@@ -1738,7 +1744,7 @@ void tst_QLowEnergyController::tst_writeCharacteristic()
QSKIP("Cannot connect to remote device");
}
- QCOMPARE(control.state(), QLowEnergyController::ConnectedState);
+ QTRY_VERIFY_WITH_TIMEOUT(control.state() == QLowEnergyController::ConnectedState, 20000);
QSignalSpy discoveryFinishedSpy(&control, SIGNAL(discoveryFinished()));
QSignalSpy stateSpy(&control, SIGNAL(stateChanged(QLowEnergyController::ControllerState)));
control.discoverServices();
@@ -1866,6 +1872,8 @@ void tst_QLowEnergyController::tst_writeCharacteristic()
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
// *******************************************
// write value while disconnected -> error
errorSpy.clear();
@@ -1945,6 +1953,8 @@ void tst_QLowEnergyController::tst_readWriteDescriptor()
if (!tempData.isValid()) {
delete service;
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
QSKIP("Cannot find temperature data characteristic of TI Sensor");
}
@@ -1955,6 +1965,8 @@ void tst_QLowEnergyController::tst_readWriteDescriptor()
if (!notification.isValid()) {
delete service;
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
QSKIP("Cannot find temperature data notification of TI Sensor");
}
@@ -2131,6 +2143,8 @@ void tst_QLowEnergyController::tst_readWriteDescriptor()
QCOMPARE(notification.value(), QByteArray::fromHex("0000"));
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
// *******************************************
// write value while disconnected -> error
@@ -2319,6 +2333,8 @@ void tst_QLowEnergyController::tst_customProgrammableDevice()
delete service;
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
}
@@ -2544,6 +2560,8 @@ void tst_QLowEnergyController::tst_errorCases()
delete irService;
delete oadService;
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
}
/*
@@ -2576,7 +2594,7 @@ void tst_QLowEnergyController::tst_writeCharacteristicNoResponse()
QSKIP("Cannot connect to remote device");
}
- QCOMPARE(control.state(), QLowEnergyController::ConnectedState);
+ QTRY_VERIFY_WITH_TIMEOUT(control.state() == QLowEnergyController::ConnectedState, 20000);
QSignalSpy discoveryFinishedSpy(&control, SIGNAL(discoveryFinished()));
QSignalSpy stateSpy(&control, SIGNAL(stateChanged(QLowEnergyController::ControllerState)));
control.discoverServices();
@@ -2620,6 +2638,8 @@ void tst_QLowEnergyController::tst_writeCharacteristicNoResponse()
|| !imageIdentityChar.isValid()) {
delete service;
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
QSKIP("Cannot find OAD char/notification");
}
@@ -2829,6 +2849,8 @@ void tst_QLowEnergyController::tst_writeCharacteristicNoResponse()
delete service;
control.disconnectFromDevice();
+ QTRY_COMPARE(control.state(), QLowEnergyController::UnconnectedState);
+ QCOMPARE(control.error(), QLowEnergyController::NoError);
}
QTEST_MAIN(tst_QLowEnergyController)