From 5641fd99e3c61291cf5562b5083e93678c5d6ab4 Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Mon, 23 Nov 2015 13:38:07 +0100 Subject: Doc: corrected issue QSerialPort baud rate Task-number: QTBUG-44994 Change-Id: Id14aaa87bc648e9b775594749eaa2d6a1defdf73 Reviewed-by: Denis Shienkov --- src/serialport/qserialport.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/serialport/qserialport.cpp b/src/serialport/qserialport.cpp index 6832883..38bd150 100644 --- a/src/serialport/qserialport.cpp +++ b/src/serialport/qserialport.cpp @@ -655,8 +655,8 @@ bool QSerialPort::settingsRestoredOnClose() const setting is done automatically in the \l{QSerialPort::open()} method right after that the opening of the port succeeds. - \warning Setting the AllDirections flag is only supported on - the Windows, Windows CE platforms. + \warning Setting the AllDirections flag is supported on all platforms. + Windows and Windows CE support only this mode. \warning Returns equal baud rate in any direction on Windows, Windows CE. -- cgit v1.2.1 From a1a98f1cffedd23fed9f0a29cd297fc255af1978 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 9 Dec 2015 22:28:03 +0300 Subject: Use pre-defined class/interface devices GUIDs Also is added the test for verification of presence of ntddmodm.h file, which contains GUID_DEVINTERFACE_MODEM definition. In case the compiler has not this file, we define GUID_DEVINTERFACE_MODEM himself. Change-Id: I471f76f8eabd2a200702a0970aa538c780208e18 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- config.tests/ntddmodm/main.cpp | 41 ++++++++++++++++++++++++++++++++++ config.tests/ntddmodm/ntddmodm.pro | 4 ++++ qtserialport.pro | 3 +++ src/serialport/qserialportinfo_win.cpp | 20 ++++++++++------- src/serialport/serialport.pro | 2 ++ 5 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 config.tests/ntddmodm/main.cpp create mode 100644 config.tests/ntddmodm/ntddmodm.pro diff --git a/config.tests/ntddmodm/main.cpp b/config.tests/ntddmodm/main.cpp new file mode 100644 index 0000000..4bcb97f --- /dev/null +++ b/config.tests/ntddmodm/main.cpp @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Denis Shienkov +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtSerialPort module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int, char**) +{ + GUID guid = GUID_DEVINTERFACE_MODEM; + return 0; +} diff --git a/config.tests/ntddmodm/ntddmodm.pro b/config.tests/ntddmodm/ntddmodm.pro new file mode 100644 index 0000000..abb9ba8 --- /dev/null +++ b/config.tests/ntddmodm/ntddmodm.pro @@ -0,0 +1,4 @@ +CONFIG -= qt +CONFIG += console + +SOURCES += main.cpp diff --git a/qtserialport.pro b/qtserialport.pro index b8e7231..95eb99b 100644 --- a/qtserialport.pro +++ b/qtserialport.pro @@ -6,4 +6,7 @@ lessThan(QT_MAJOR_VERSION, 5) { requires(!winrt) requires(!ios) +load(configure) +qtCompileTest(ntddmodm) + load(qt_parts) diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp index 06987f2..123b066 100644 --- a/src/serialport/qserialportinfo_win.cpp +++ b/src/serialport/qserialportinfo_win.cpp @@ -44,9 +44,17 @@ #include #include +#include // for GUID_DEVCLASS_PORTS and GUID_DEVCLASS_MODEM +#include // for GUID_DEVINTERFACE_COMPORT #include #include +#ifdef QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM +# include // for GUID_DEVINTERFACE_MODEM +#else + DEFINE_GUID(GUID_DEVINTERFACE_MODEM, 0x2c7089aa, 0x2e0e, 0x11d1, 0xb1, 0x14, 0x00, 0xc0, 0x4f, 0xc2, 0xaa, 0xe4); +#endif + QT_BEGIN_NAMESPACE typedef QPair GuidFlagsPair; @@ -54,14 +62,10 @@ typedef QPair GuidFlagsPair; static inline const QList& guidFlagsPairs() { static const QList guidFlagsPairList = QList() - // Standard Setup Ports Class GUID - << qMakePair(QUuid(0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), DWORD(DIGCF_PRESENT)) - // Standard Setup Modems Class GUID - << qMakePair(QUuid(0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), DWORD(DIGCF_PRESENT)) - // Standard Serial Port Device Interface Class GUID - << qMakePair(QUuid(0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) - // Standard Modem Device Interface Class GUID - << qMakePair(QUuid(0x2C7089AA, 0x2E0E, 0x11D1, 0xB1, 0x14, 0x00, 0xC0, 0x4F, 0xC2, 0xAA, 0xE4), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); + << qMakePair(QUuid(GUID_DEVCLASS_PORTS), DWORD(DIGCF_PRESENT)) + << qMakePair(QUuid(GUID_DEVCLASS_MODEM), DWORD(DIGCF_PRESENT)) + << qMakePair(QUuid(GUID_DEVINTERFACE_COMPORT), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) + << qMakePair(QUuid(GUID_DEVINTERFACE_MODEM), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); return guidFlagsPairList; } diff --git a/src/serialport/serialport.pro b/src/serialport/serialport.pro index 40c0339..92d0795 100644 --- a/src/serialport/serialport.pro +++ b/src/serialport/serialport.pro @@ -3,6 +3,8 @@ QT = core-private QMAKE_DOCS = $$PWD/doc/qtserialport.qdocconf +config_ntddmodm: DEFINES += QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM + load(qt_module) include($$PWD/serialport-lib.pri) -- cgit v1.2.1 From d0da1f79fd8e7215cab9bc927d96c817827ddb41 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 9 Dec 2015 22:52:11 +0300 Subject: Use the C-style array of GUID tokens ... because use QPair and QList it is an overhead. Change-Id: I9ed90f9301ab1fed194890e925c9124e86d3c7dc Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialportinfo_win.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp index 123b066..8a47e22 100644 --- a/src/serialport/qserialportinfo_win.cpp +++ b/src/serialport/qserialportinfo_win.cpp @@ -57,18 +57,6 @@ QT_BEGIN_NAMESPACE -typedef QPair GuidFlagsPair; - -static inline const QList& guidFlagsPairs() -{ - static const QList guidFlagsPairList = QList() - << qMakePair(QUuid(GUID_DEVCLASS_PORTS), DWORD(DIGCF_PRESENT)) - << qMakePair(QUuid(GUID_DEVCLASS_MODEM), DWORD(DIGCF_PRESENT)) - << qMakePair(QUuid(GUID_DEVINTERFACE_COMPORT), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) - << qMakePair(QUuid(GUID_DEVINTERFACE_MODEM), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); - return guidFlagsPairList; -} - static QStringList portNamesFromHardwareDeviceMap() { HKEY hKey = Q_NULLPTR; @@ -287,10 +275,21 @@ static QString deviceSerialNumber(const QString &instanceIdentifier, QList QSerialPortInfo::availablePorts() { + static const struct { + GUID guid; DWORD flags; + } setupTokens[] = { + { GUID_DEVCLASS_PORTS, DIGCF_PRESENT }, + { GUID_DEVCLASS_MODEM, DIGCF_PRESENT }, + { GUID_DEVINTERFACE_COMPORT, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE }, + { GUID_DEVINTERFACE_MODEM, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE } + }; + + static const int setupTokensCount = sizeof(setupTokens) / sizeof(setupTokens[0]); + QList serialPortInfoList; - foreach (const GuidFlagsPair &uniquePair, guidFlagsPairs()) { - const HDEVINFO deviceInfoSet = ::SetupDiGetClassDevs(reinterpret_cast(&uniquePair.first), Q_NULLPTR, Q_NULLPTR, uniquePair.second); + for (int i = 0; i < setupTokensCount; ++i) { + const HDEVINFO deviceInfoSet = ::SetupDiGetClassDevs(&setupTokens[i].guid, Q_NULLPTR, Q_NULLPTR, setupTokens[i].flags); if (deviceInfoSet == INVALID_HANDLE_VALUE) return serialPortInfoList; -- cgit v1.2.1 From d7b5d78ecc1b4d9dc6859f273d46847b1f2fe36d Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 9 Dec 2015 23:01:53 +0300 Subject: Use C-style tokens array for query of device name from registry ... because QStringList it is an overhead in there. Change-Id: Ic5da6243348ee1a934ae2c91707de71fa7e96825 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialportinfo_win.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp index 8a47e22..63cf642 100644 --- a/src/serialport/qserialportinfo_win.cpp +++ b/src/serialport/qserialportinfo_win.cpp @@ -147,17 +147,20 @@ static QString devicePortName(HDEVINFO deviceInfoSet, PSP_DEVINFO_DATA deviceInf if (key == INVALID_HANDLE_VALUE) return QString(); - static const QStringList portNameRegistryKeyList = QStringList() - << QStringLiteral("PortName") - << QStringLiteral("PortNumber"); + static const wchar_t * const keyTokens[] = { + L"PortName\0", + L"PortNumber\0" + }; + + static const int keyTokensCount = sizeof(keyTokens) / sizeof(keyTokens[0]); QString portName; - foreach (const QString &portNameKey, portNameRegistryKeyList) { + for (int i = 0; i < keyTokensCount; ++i) { DWORD dataType = 0; std::vector outputBuffer(MAX_PATH + 1, 0); DWORD bytesRequired = MAX_PATH; forever { - const LONG ret = ::RegQueryValueEx(key, reinterpret_cast(portNameKey.utf16()), Q_NULLPTR, &dataType, + const LONG ret = ::RegQueryValueEx(key, keyTokens[i], Q_NULLPTR, &dataType, reinterpret_cast(&outputBuffer[0]), &bytesRequired); if (ret == ERROR_MORE_DATA) { outputBuffer.resize(bytesRequired / sizeof(wchar_t) + 2, 0); -- cgit v1.2.1 From bd3fb6cc346b3bdbb7a05131b912d450490fa5c8 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Sat, 12 Dec 2015 21:13:01 +0300 Subject: Do not use settingFromBaudRate() on Windows This function makes sense only on *nix platforms. Change-Id: Ia1d107e1b0d9095f4f20e1aa472798aa0af11f0f Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialport_p.h | 2 ++ src/serialport/qserialport_win.cpp | 9 --------- src/serialport/qserialport_wince.cpp | 9 --------- 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/serialport/qserialport_p.h b/src/serialport/qserialport_p.h index 4d37254..4a214e1 100644 --- a/src/serialport/qserialport_p.h +++ b/src/serialport/qserialport_p.h @@ -159,7 +159,9 @@ public: static QString portNameToSystemLocation(const QString &port); static QString portNameFromSystemLocation(const QString &location); +#if defined(Q_OS_UNIX) static qint32 settingFromBaudRate(qint32 baudRate); +#endif static QList standardBaudRates(); diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index 8e7c278..6e1a44f 100644 --- a/src/serialport/qserialport_win.cpp +++ b/src/serialport/qserialport_win.cpp @@ -813,15 +813,6 @@ static const QList standardBaudRatePairList() return standardBaudRatesTable; }; -qint32 QSerialPortPrivate::settingFromBaudRate(qint32 baudRate) -{ - const QList baudRatePairList = standardBaudRatePairList(); - const QList::const_iterator baudRatePairListConstIterator - = std::find(baudRatePairList.constBegin(), baudRatePairList.constEnd(), baudRate); - - return (baudRatePairListConstIterator != baudRatePairList.constEnd()) ? *baudRatePairListConstIterator : 0; -} - QList QSerialPortPrivate::standardBaudRates() { return standardBaudRatePairList(); diff --git a/src/serialport/qserialport_wince.cpp b/src/serialport/qserialport_wince.cpp index b1975af..9221f0e 100644 --- a/src/serialport/qserialport_wince.cpp +++ b/src/serialport/qserialport_wince.cpp @@ -743,15 +743,6 @@ static const QList standardBaudRatePairList() return standardBaudRatesTable; }; -qint32 QSerialPortPrivate::settingFromBaudRate(qint32 baudRate) -{ - const QList baudRatePairList = standardBaudRatePairList(); - const QList::const_iterator baudRatePairListConstIterator - = std::find(baudRatePairList.constBegin(), baudRatePairList.constEnd(), baudRate); - - return (baudRatePairListConstIterator != baudRatePairList.constEnd()) ? *baudRatePairListConstIterator : 0; -} - QList QSerialPortPrivate::standardBaudRates() { return standardBaudRatePairList(); -- cgit v1.2.1 From 0f4cb2f83f24c348c46f52245f1684f99b48f941 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Sat, 12 Dec 2015 21:17:20 +0300 Subject: Remove the Symbian mentioning from the *.pri file Because Qt5 does not support Symbian at all. Change-Id: I8d64db664cc54e7e5f27c031dc4c2f91d5a959f6 Reviewed-by: Oswald Buddenhagen --- src/serialport/serialport-lib.pri | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serialport/serialport-lib.pri b/src/serialport/serialport-lib.pri index c7826ef..c3b00ea 100644 --- a/src/serialport/serialport-lib.pri +++ b/src/serialport/serialport-lib.pri @@ -33,7 +33,7 @@ wince* { $$PWD/qserialportinfo_wince.cpp } -unix:!symbian { +unix { SOURCES += \ $$PWD/qserialport_unix.cpp -- cgit v1.2.1 From 3b21fb04408e08fd58d7f619c45dc087dba5d9e5 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 30 Dec 2015 18:09:22 +0300 Subject: Keep a fractional part of custom baud rate in a debug output Change-Id: I1f7b5436a00dec545f6256d15147abd43f92767b Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialport_unix.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/serialport/qserialport_unix.cpp b/src/serialport/qserialport_unix.cpp index 7eb43a1..960349e 100644 --- a/src/serialport/qserialport_unix.cpp +++ b/src/serialport/qserialport_unix.cpp @@ -524,10 +524,10 @@ bool QSerialPortPrivate::setCustomBaudRate(qint32 baudRate, QSerialPort::Directi } if (serial.custom_divisor * baudRate != serial.baud_base) { - qWarning("Baud rate of serial port %s is set to %d instead of %d: divisor %f unsupported", + qWarning("Baud rate of serial port %s is set to %f instead of %d: divisor %f unsupported", qPrintable(systemLocation), - serial.baud_base / serial.custom_divisor, - baudRate, (float)serial.baud_base / baudRate); + float(serial.baud_base) / serial.custom_divisor, + baudRate, float(serial.baud_base) / baudRate); } if (::ioctl(descriptor, TIOCSSERIAL, &serial) == -1) { -- cgit v1.2.1 From e6481f7636911381cb3169950b092520677f9a0d Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 30 Dec 2015 18:00:30 +0300 Subject: Fix detection of 8250 serial ports type by udev backend We need to pass a full device path into isValidSerial8250() function. Change-Id: I771a2518fa9ec89e9519992fd52413fb0e32a4fe Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialportinfo_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp index f52516f..75da235 100644 --- a/src/serialport/qserialportinfo_unix.cpp +++ b/src/serialport/qserialportinfo_unix.cpp @@ -704,7 +704,7 @@ QList availablePortsByUdev(bool &ok) if (parentdev) { const QString driverName = deviceDriver(parentdev); - if (isSerial8250Driver(driverName) && !isValidSerial8250(priv.portName)) + if (isSerial8250Driver(driverName) && !isValidSerial8250(priv.device)) continue; priv.description = deviceDescription(dev.data()); priv.manufacturer = deviceManufacturer(dev.data()); -- cgit v1.2.1 From afe2f2386ecfdc3d0d3fe46f7d1662ab0b6851ce Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 30 Dec 2015 18:23:59 +0300 Subject: Add simple enumeration of ttyTHSx devices on Linux ... when udev or sysfs are unavailable. Task-number: QTBUG-50223 Change-Id: I90ec57bcb95e6ade70eb080f553f8324b7e84387 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialportinfo_unix.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp index 75da235..f5bbfc6 100644 --- a/src/serialport/qserialportinfo_unix.cpp +++ b/src/serialport/qserialportinfo_unix.cpp @@ -74,6 +74,7 @@ static QStringList filteredDeviceFilePaths() << QStringLiteral("ttyMI*") // MOXA pci/serial converters. << QStringLiteral("ttymxc*") // Motorola IMX serial ports (i.e. Freescale i.MX). << QStringLiteral("ttyAMA*") // AMBA serial device for embedded platform on ARM (i.e. Raspberry Pi). + << QStringLiteral("ttyTHS*") // Serial device for embedded platform on ARM (i.e. Tegra Jetson TK1). << QStringLiteral("rfcomm*") // Bluetooth serial device. << QStringLiteral("ircomm*") // IrDA serial device. << QStringLiteral("tnt*"); // Virtual tty0tty serial device. -- cgit v1.2.1 From 4ff8b20cf2877298c8437fb892ebda600f46e293 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Fri, 18 Dec 2015 22:53:14 +0300 Subject: Suppress error emission when closing When the error signal is connected to a slot which calls QSP::close() and an error occurs in this method, this would lead to infinite recursion. Other Qt I/O classes avoid this problem by not emitting errors while closing the device, so we should not, either. Task-number: QTBUG-50052 Change-Id: Icfbcb19c32b8bd7fc586ab5253dc754e78829f11 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialport_unix.cpp | 12 ++++-------- src/serialport/qserialport_win.cpp | 13 ++++--------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/src/serialport/qserialport_unix.cpp b/src/serialport/qserialport_unix.cpp index 960349e..7153449 100644 --- a/src/serialport/qserialport_unix.cpp +++ b/src/serialport/qserialport_unix.cpp @@ -237,14 +237,11 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode) void QSerialPortPrivate::close() { - if (settingsRestoredOnClose) { - if (::tcsetattr(descriptor, TCSANOW, &restoredTermios) == -1) - setError(getSystemError()); - } + if (settingsRestoredOnClose) + ::tcsetattr(descriptor, TCSANOW, &restoredTermios); #ifdef TIOCNXCL - if (::ioctl(descriptor, TIOCNXCL) == -1) - setError(getSystemError()); + ::ioctl(descriptor, TIOCNXCL); #endif if (readNotifier) { @@ -257,8 +254,7 @@ void QSerialPortPrivate::close() writeNotifier = Q_NULLPTR; } - if (qt_safe_close(descriptor) == -1) - setError(getSystemError()); + qt_safe_close(descriptor); lockFileScopedPointer.reset(Q_NULLPTR); diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index 6e1a44f..f176025 100644 --- a/src/serialport/qserialport_win.cpp +++ b/src/serialport/qserialport_win.cpp @@ -104,8 +104,7 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode) void QSerialPortPrivate::close() { - if (!::CancelIo(handle)) - setError(getSystemError()); + ::CancelIo(handle); if (notifier) { delete notifier; @@ -124,15 +123,11 @@ void QSerialPortPrivate::close() actualBytesToWrite = 0; if (settingsRestoredOnClose) { - if (!::SetCommState(handle, &restoredDcb)) - setError(getSystemError()); - else if (!::SetCommTimeouts(handle, &restoredCommTimeouts)) - setError(getSystemError()); + ::SetCommState(handle, &restoredDcb); + ::SetCommTimeouts(handle, &restoredCommTimeouts); } - if (!::CloseHandle(handle)) - setError(getSystemError()); - + ::CloseHandle(handle); handle = INVALID_HANDLE_VALUE; } -- cgit v1.2.1 From 6dda140ada3d7c683537b069bf1512275a190884 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Sun, 10 Jan 2016 15:31:56 +0300 Subject: Get rid of QSPP::updateCommTimeouts() method This method is used only once when initializing of a device. Thus its code can be moved to an initialization place, and this method can be removed then. Change-Id: Ie9a40da1d6a2980829327f66830893ad7179bd57 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialport_p.h | 2 -- src/serialport/qserialport_win.cpp | 13 +++---------- src/serialport/qserialport_wince.cpp | 13 +++---------- 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/src/serialport/qserialport_p.h b/src/serialport/qserialport_p.h index 4a214e1..29c1d5a 100644 --- a/src/serialport/qserialport_p.h +++ b/src/serialport/qserialport_p.h @@ -182,7 +182,6 @@ public: bool initialize(DWORD eventMask); bool updateDcb(); - bool updateCommTimeouts(); bool waitForReadOrWrite(bool *selectForRead, bool *selectForWrite, bool checkRead, bool checkWrite, @@ -205,7 +204,6 @@ public: bool initialize(); bool setDcb(DCB *dcb); bool getDcb(DCB *dcb); - bool updateCommTimeouts(); OVERLAPPED *waitForNotified(int msecs); bool completeAsyncCommunication(qint64 bytesTransferred); diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index f176025..6d5dac0 100644 --- a/src/serialport/qserialport_win.cpp +++ b/src/serialport/qserialport_win.cpp @@ -631,8 +631,10 @@ inline bool QSerialPortPrivate::initialize() ::ZeroMemory(¤tCommTimeouts, sizeof(currentCommTimeouts)); currentCommTimeouts.ReadIntervalTimeout = MAXDWORD; - if (!updateCommTimeouts()) + if (!::SetCommTimeouts(handle, ¤tCommTimeouts)) { + setError(getSystemError()); return false; + } if (!::SetCommMask(handle, originalEventMask)) { setError(getSystemError()); @@ -672,15 +674,6 @@ bool QSerialPortPrivate::getDcb(DCB *dcb) return true; } -bool QSerialPortPrivate::updateCommTimeouts() -{ - if (!::SetCommTimeouts(handle, ¤tCommTimeouts)) { - setError(getSystemError()); - return false; - } - return true; -} - QSerialPortErrorInfo QSerialPortPrivate::getSystemError(int systemErrorCode) const { if (systemErrorCode == -1) diff --git a/src/serialport/qserialport_wince.cpp b/src/serialport/qserialport_wince.cpp index 9221f0e..6b063e1 100644 --- a/src/serialport/qserialport_wince.cpp +++ b/src/serialport/qserialport_wince.cpp @@ -559,8 +559,10 @@ inline bool QSerialPortPrivate::initialize(DWORD eventMask) ::memset(¤tCommTimeouts, 0, sizeof(currentCommTimeouts)); currentCommTimeouts.ReadIntervalTimeout = MAXDWORD; - if (!updateCommTimeouts()) + if (!::SetCommTimeouts(handle, ¤tCommTimeouts)) { + setError(getSystemError()); return false; + } eventNotifier = new CommEventNotifier(eventMask, this, q); eventNotifier->start(); @@ -589,15 +591,6 @@ bool QSerialPortPrivate::updateDcb() return ret; } -bool QSerialPortPrivate::updateCommTimeouts() -{ - if (!::SetCommTimeouts(handle, ¤tCommTimeouts)) { - setError(getSystemError()); - return false; - } - return true; -} - QSerialPortErrorInfo QSerialPortPrivate::getSystemError(int systemErrorCode) const { if (systemErrorCode == -1) -- cgit v1.2.1