diff options
author | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2016-05-20 19:31:55 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2016-05-20 19:31:55 +0200 |
commit | 5110f89b2bb1ca22b9f2bd254287696636082332 (patch) | |
tree | b20b5c97a7a38339af134b1ba8ff4729b54877ce /src/serialport | |
parent | add8cb835b7e519955f1260244f7033b049d4930 (diff) | |
parent | 9e8daaed0466d760e047c5da58811e55e7807c0a (diff) | |
download | qtserialport-5110f89b2bb1ca22b9f2bd254287696636082332.tar.gz |
Merge 5.7 into 5.7.0
Change-Id: I2e0737fab1c12657d8dc7de5d1882ecb73bbb5f2
Diffstat (limited to 'src/serialport')
-rw-r--r-- | src/serialport/doc/qtserialport.qdocconf | 2 | ||||
-rw-r--r-- | src/serialport/qserialport_p.h | 2 | ||||
-rw-r--r-- | src/serialport/qserialport_unix.cpp | 16 | ||||
-rw-r--r-- | src/serialport/qserialport_win.cpp | 29 | ||||
-rw-r--r-- | src/serialport/qserialportinfo.cpp | 14 | ||||
-rw-r--r-- | src/serialport/qserialportinfo_freebsd.cpp | 15 | ||||
-rw-r--r-- | src/serialport/qserialportinfo_unix.cpp | 11 | ||||
-rw-r--r-- | src/serialport/qserialportinfo_win.cpp | 7 |
8 files changed, 55 insertions, 41 deletions
diff --git a/src/serialport/doc/qtserialport.qdocconf b/src/serialport/doc/qtserialport.qdocconf index ac1fc1e..78c1b35 100644 --- a/src/serialport/doc/qtserialport.qdocconf +++ b/src/serialport/doc/qtserialport.qdocconf @@ -34,7 +34,7 @@ exampledirs += ../../../examples/serialport imagedirs += images excludedirs += ../qt4support -examplesinstallpath = qtserialport/serialport +examplesinstallpath = serialport depends += qtcore qtdoc qtnetwork qmake diff --git a/src/serialport/qserialport_p.h b/src/serialport/qserialport_p.h index ae2089d..cb300ad 100644 --- a/src/serialport/qserialport_p.h +++ b/src/serialport/qserialport_p.h @@ -188,6 +188,8 @@ public: bool getDcb(DCB *dcb); OVERLAPPED *waitForNotified(int msecs); + qint64 queuedBytesCount(QSerialPort::Direction direction) const; + bool completeAsyncCommunication(qint64 bytesTransferred); bool completeAsyncRead(qint64 bytesTransferred); bool completeAsyncWrite(qint64 bytesTransferred); diff --git a/src/serialport/qserialport_unix.cpp b/src/serialport/qserialport_unix.cpp index d830085..7078040 100644 --- a/src/serialport/qserialport_unix.cpp +++ b/src/serialport/qserialport_unix.cpp @@ -125,7 +125,7 @@ QString serialPortLockFilePath(const QString &portName) QString lockFilePath; - foreach (const QString &lockDirectoryPath, lockDirectoryPaths) { + for (const QString &lockDirectoryPath : lockDirectoryPaths) { const QString filePath = lockDirectoryPath + fileName; QFileInfo lockDirectoryInfo(lockDirectoryPath); @@ -139,7 +139,7 @@ QString serialPortLockFilePath(const QString &portName) if (lockFilePath.isEmpty()) { qWarning("The following directories are not readable or writable for detaling with lock files\n"); - foreach (const QString &lockDirectoryPath, lockDirectoryPaths) + for (const QString &lockDirectoryPath : lockDirectoryPaths) qWarning("\t%s\n", qPrintable(lockDirectoryPath)); return QString(); } @@ -250,15 +250,11 @@ void QSerialPortPrivate::close() ::ioctl(descriptor, TIOCNXCL); #endif - if (readNotifier) { - delete readNotifier; - readNotifier = Q_NULLPTR; - } + delete readNotifier; + readNotifier = Q_NULLPTR; - if (writeNotifier) { - delete writeNotifier; - writeNotifier = Q_NULLPTR; - } + delete writeNotifier; + writeNotifier = Q_NULLPTR; qt_safe_close(descriptor); diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index 762deba..412e20c 100644 --- a/src/serialport/qserialport_win.cpp +++ b/src/serialport/qserialport_win.cpp @@ -112,15 +112,11 @@ void QSerialPortPrivate::close() { ::CancelIo(handle); - if (notifier) { - delete notifier; - notifier = Q_NULLPTR; - } + delete notifier; + notifier = Q_NULLPTR; - if (startAsyncWriteTimer) { - delete startAsyncWriteTimer; - startAsyncWriteTimer = Q_NULLPTR; - } + delete startAsyncWriteTimer; + startAsyncWriteTimer = Q_NULLPTR; communicationStarted = false; readStarted = false; @@ -443,10 +439,13 @@ bool QSerialPortPrivate::completeAsyncRead(qint64 bytesTransferred) readStarted = false; bool result = true; - if (bytesTransferred == ReadChunkSize) + if (bytesTransferred == ReadChunkSize + || queuedBytesCount(QSerialPort::Input) > 0) { result = startAsyncRead(); - else if (readBufferMaxSize == 0 || readBufferMaxSize > buffer.size()) + } else if (readBufferMaxSize == 0 + || readBufferMaxSize > buffer.size()) { result = startAsyncCommunication(); + } if (bytesTransferred > 0) emitReadyRead(); @@ -604,6 +603,16 @@ OVERLAPPED *QSerialPortPrivate::waitForNotified(int msecs) return overlapped; } +qint64 QSerialPortPrivate::queuedBytesCount(QSerialPort::Direction direction) const +{ + COMSTAT comstat; + if (::ClearCommError(handle, Q_NULLPTR, &comstat) == 0) + return -1; + return (direction == QSerialPort::Input) + ? comstat.cbInQue + : ((direction == QSerialPort::Output) ? comstat.cbOutQue : -1); +} + inline bool QSerialPortPrivate::initialize() { Q_Q(QSerialPort); diff --git a/src/serialport/qserialportinfo.cpp b/src/serialport/qserialportinfo.cpp index 76c18da..acd0179 100644 --- a/src/serialport/qserialportinfo.cpp +++ b/src/serialport/qserialportinfo.cpp @@ -88,9 +88,10 @@ QSerialPortInfo::QSerialPortInfo(const QSerialPortInfo &other) */ QSerialPortInfo::QSerialPortInfo(const QSerialPort &port) { - foreach (const QSerialPortInfo &serialPortInfo, availablePorts()) { - if (port.portName() == serialPortInfo.portName()) { - *this = serialPortInfo; + const auto infos = QSerialPortInfo::availablePorts(); + for (const QSerialPortInfo &info : infos) { + if (port.portName() == info.portName()) { + *this = info; break; } } @@ -105,9 +106,10 @@ QSerialPortInfo::QSerialPortInfo(const QSerialPort &port) */ QSerialPortInfo::QSerialPortInfo(const QString &name) { - foreach (const QSerialPortInfo &serialPortInfo, availablePorts()) { - if (name == serialPortInfo.portName()) { - *this = serialPortInfo; + const auto infos = QSerialPortInfo::availablePorts(); + for (const QSerialPortInfo &info : infos) { + if (name == info.portName()) { + *this = info; break; } } diff --git a/src/serialport/qserialportinfo_freebsd.cpp b/src/serialport/qserialportinfo_freebsd.cpp index f3bf92e..291cfac 100644 --- a/src/serialport/qserialportinfo_freebsd.cpp +++ b/src/serialport/qserialportinfo_freebsd.cpp @@ -122,7 +122,7 @@ static QVector<int> nextOid(const QVector<int> &previousOid) QVector<int> mib; mib.append(0); // Magic undocumented code (CTL_UNSPEC ?) mib.append(2); // Magic undocumented code - foreach (int code, previousOid) + for (int code : previousOid) mib.append(code); size_t requiredLength = 0; @@ -144,7 +144,7 @@ static NodeInfo nodeForOid(const QVector<int> &oid) QVector<int> mib; mib.append(0); // Magic undocumented code (CTL_UNSPEC ?) mib.append(1); // Magic undocumented code - foreach (int code, oid) + for (int code : oid) mib.append(code); // query node name @@ -234,7 +234,8 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() QList<QSerialPortInfo> cuaCandidates; QList<QSerialPortInfo> ttyCandidates; - foreach (const QString &portName, deviceDir.entryList()) { + const auto portNames = deviceDir.entryList(); + for (const QString &portName : portNames) { if (portName.endsWith(QLatin1String(".init")) || portName.endsWith(QLatin1String(".lock"))) { continue; @@ -244,7 +245,7 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() priv.portName = portName; priv.device = QSerialPortInfoPrivate::portNameToSystemLocation(portName); - foreach (const NodeInfo &node, nodes) { + for (const NodeInfo &node : nodes) { const int pnpinfoindex = node.name.indexOf(QLatin1String("\%pnpinfo")); if (pnpinfoindex == -1) continue; @@ -288,7 +289,7 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() const QString descnode = QString(QLatin1String("%1\%desc")).arg(nodebase); // search for description and manufacturer properties - foreach (const NodeInfo &node, nodes) { + for (const NodeInfo &node : nodes) { if (node.name != descnode) continue; @@ -313,10 +314,10 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() QList<QSerialPortInfo> serialPortInfoList; - foreach (const QSerialPortInfo &cuaCandidate, cuaCandidates) { + for (const QSerialPortInfo &cuaCandidate : qAsConst(cuaCandidates)) { const QString cuaPortName = cuaCandidate.portName(); const QString cuaToken = deviceProperty(cuaPortName, "cua"); - foreach (const QSerialPortInfo &ttyCandidate, ttyCandidates) { + for (const QSerialPortInfo &ttyCandidate : qAsConst(ttyCandidates)) { const QString ttyPortName = ttyCandidate.portName(); const QString ttyToken = deviceProperty(ttyPortName, "tty"); if (cuaToken != ttyToken) diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp index a93ac05..08e75c1 100644 --- a/src/serialport/qserialportinfo_unix.cpp +++ b/src/serialport/qserialportinfo_unix.cpp @@ -90,7 +90,8 @@ static QStringList filteredDeviceFilePaths() deviceDir.setNameFilters(deviceFileNameFilterList); deviceDir.setFilter(QDir::Files | QDir::System | QDir::NoSymLinks); QStringList deviceFilePaths; - foreach (const QFileInfo &deviceFileInfo, deviceDir.entryInfoList()) { + const auto deviceFileInfos = deviceDir.entryInfoList(); + for (const QFileInfo &deviceFileInfo : deviceFileInfos) { const QString deviceAbsoluteFilePath = deviceFileInfo.absoluteFilePath(); #ifdef Q_OS_FREEBSD @@ -115,7 +116,8 @@ QList<QSerialPortInfo> availablePortsByFiltersOfDevices(bool &ok) { QList<QSerialPortInfo> serialPortInfoList; - foreach (const QString &deviceFilePath, filteredDeviceFilePaths()) { + const auto deviceFilePaths = filteredDeviceFilePaths(); + for (const QString &deviceFilePath : deviceFilePaths) { QSerialPortInfoPrivate priv; priv.device = deviceFilePath; priv.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(deviceFilePath); @@ -155,7 +157,7 @@ static bool isRfcommDevice(const QString &portName) return false; bool ok; - const int portNumber = portName.mid(6).toInt(&ok); + const int portNumber = portName.midRef(6).toInt(&ok); if (!ok || (portNumber < 0) || (portNumber > 255)) return false; return true; @@ -250,7 +252,8 @@ QList<QSerialPortInfo> availablePortsBySysfs(bool &ok) QList<QSerialPortInfo> serialPortInfoList; ttySysClassDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); - foreach (const QFileInfo &fileInfo, ttySysClassDir.entryInfoList()) { + const auto fileInfos = ttySysClassDir.entryInfoList(); + for (const QFileInfo &fileInfo : fileInfos) { if (!fileInfo.isSymLink()) continue; diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp index bb9b18f..995f1d7 100644 --- a/src/serialport/qserialportinfo_win.cpp +++ b/src/serialport/qserialportinfo_win.cpp @@ -344,9 +344,10 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() ::SetupDiDestroyDeviceInfoList(deviceInfoSet); } - foreach (const QString &portName, portNamesFromHardwareDeviceMap()) { - if (std::find_if(serialPortInfoList.begin(), serialPortInfoList.end(), - SerialPortNameEqualFunctor(portName)) == serialPortInfoList.end()) { + const auto portNames = portNamesFromHardwareDeviceMap(); + for (const QString &portName : portNames) { + if (std::find_if(serialPortInfoList.cbegin(), serialPortInfoList.cend(), + SerialPortNameEqualFunctor(portName)) == serialPortInfoList.cend()) { QSerialPortInfoPrivate priv; priv.portName = portName; priv.device = QSerialPortInfoPrivate::portNameToSystemLocation(portName); |