diff options
author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-04-07 15:22:00 +0300 |
---|---|---|
committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-04-07 15:22:00 +0300 |
commit | 83ca3a2471560f09d723157322adc0b5c33ed914 (patch) | |
tree | 565dd202b8245ffc41c5697ea9e1069781d43e01 | |
parent | 4dcb2f232e00836830dcbffdc5dafbcde6607c08 (diff) | |
parent | 5466df6f9b9237caba71a3ae323b931de1f7eda9 (diff) |
Merge remote-tracking branch 'origin/tqtc/lts-5.15.4' into tqtc/lts-5.15-opensourcev5.15.4-lts-lgpl
Change-Id: I86f7492c32a43094f37cfb9b21ad1066aa49ba68
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_bluez.cpp | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_osx.mm | 5 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_win.cpp | 8 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_bluezdbus.cpp | 18 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontrollerbase.cpp | 1 | ||||
-rw-r--r-- | tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp | 26 |
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) |