diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-01-06 16:30:34 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-01-06 16:30:34 +0100 |
commit | ac4d0dc0d17d1f04590b2645b5f1055d1e2bf0d7 (patch) | |
tree | 09765a637f18e871c295698d16e0e6668785c29a | |
parent | 343bf28e95581476f6f41334e69d21aae5df70bd (diff) | |
parent | 007e8063946e66d32e4ab7e345472036517135ff (diff) | |
download | qtserialport-ac4d0dc0d17d1f04590b2645b5f1055d1e2bf0d7.tar.gz |
Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I535078aafe7a322f3b09e2893a89e30c0028661a
-rw-r--r-- | examples/serialport/creaderasync/serialportreader.cpp | 2 | ||||
-rw-r--r-- | src/serialport/qserialport_p.h | 3 | ||||
-rw-r--r-- | src/serialport/qserialport_unix.cpp | 10 | ||||
-rw-r--r-- | src/serialport/qserialport_unix_p.h | 2 | ||||
-rw-r--r-- | src/serialport/qserialport_win.cpp | 28 | ||||
-rw-r--r-- | src/serialport/qserialport_win_p.h | 6 | ||||
-rw-r--r-- | src/serialport/qserialport_wince.cpp | 12 |
7 files changed, 23 insertions, 40 deletions
diff --git a/examples/serialport/creaderasync/serialportreader.cpp b/examples/serialport/creaderasync/serialportreader.cpp index e238304..a7acf65 100644 --- a/examples/serialport/creaderasync/serialportreader.cpp +++ b/examples/serialport/creaderasync/serialportreader.cpp @@ -63,7 +63,7 @@ SerialPortReader::~SerialPortReader() void SerialPortReader::handleReadyRead() { - m_readData = m_serialPort->readAll(); + m_readData.append(m_serialPort->readAll()); if (!m_timer.isActive()) m_timer.start(5000); diff --git a/src/serialport/qserialport_p.h b/src/serialport/qserialport_p.h index 4140493..2166b47 100644 --- a/src/serialport/qserialport_p.h +++ b/src/serialport/qserialport_p.h @@ -54,8 +54,7 @@ class QSerialPortPrivateData { public: enum IoConstants { - ReadChunkSize = 512, - WriteChunkSize = 512 + ReadChunkSize = 512 }; QSerialPortPrivateData(QSerialPort *q); diff --git a/src/serialport/qserialport_unix.cpp b/src/serialport/qserialport_unix.cpp index 51bb01e..9571767 100644 --- a/src/serialport/qserialport_unix.cpp +++ b/src/serialport/qserialport_unix.cpp @@ -133,7 +133,7 @@ protected: bool event(QEvent *e) Q_DECL_OVERRIDE { bool ret = QSocketNotifier::event(e); if (ret) - dptr->writeNotification(QSerialPortPrivateData::WriteChunkSize); + dptr->writeNotification(); return ret; } @@ -455,7 +455,7 @@ bool QSerialPortPrivate::waitForReadyRead(int msecs) } if (readyToWrite) - writeNotification(WriteChunkSize); + writeNotification(); } while (msecs == -1 || timeoutValue(msecs, stopWatch.elapsed()) > 0); return false; @@ -487,7 +487,7 @@ bool QSerialPortPrivate::waitForBytesWritten(int msecs) return false; if (readyToWrite) - return writeNotification(WriteChunkSize); + return writeNotification(); } return false; } @@ -766,7 +766,7 @@ bool QSerialPortPrivate::readNotification() return true; } -bool QSerialPortPrivate::writeNotification(int maxSize) +bool QSerialPortPrivate::writeNotification() { Q_Q(QSerialPort); @@ -777,7 +777,7 @@ bool QSerialPortPrivate::writeNotification(int maxSize) return false; } - int nextSize = qMin(writeBuffer.nextDataBlockSize(), maxSize); + int nextSize = writeBuffer.nextDataBlockSize(); const char *ptr = writeBuffer.readPointer(); diff --git a/src/serialport/qserialport_unix_p.h b/src/serialport/qserialport_unix_p.h index 7c2b771..dba0ac5 100644 --- a/src/serialport/qserialport_unix_p.h +++ b/src/serialport/qserialport_unix_p.h @@ -124,7 +124,7 @@ public: bool setDataErrorPolicy(QSerialPort::DataErrorPolicy policy); bool readNotification(); - bool writeNotification(int maxSize = INT_MAX); + bool writeNotification(); void exceptionNotification(); static QString portNameToSystemLocation(const QString &port); diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index 506dc94..e460c78 100644 --- a/src/serialport/qserialport_win.cpp +++ b/src/serialport/qserialport_win.cpp @@ -101,8 +101,6 @@ QSerialPortPrivate::QSerialPortPrivate(QSerialPort *q) , descriptor(INVALID_HANDLE_VALUE) , parityErrorOccurred(false) , readChunkBuffer(ReadChunkSize, 0) - , actualWriteBufferSize(0) - , acyncWritePosition(0) , readyReadEmitted(0) , writeSequenceStarted(false) , communicationNotifier(new QWinEventNotifier(q)) @@ -229,8 +227,6 @@ void QSerialPortPrivate::close() writeSequenceStarted = false; writeBuffer.clear(); - actualWriteBufferSize = 0; - acyncWritePosition = 0; readyReadEmitted = false; parityErrorOccurred = false; @@ -311,8 +307,6 @@ bool QSerialPortPrivate::clear(QSerialPort::Directions directions) flags |= PURGE_RXABORT | PURGE_RXCLEAR; if (directions & QSerialPort::Output) { flags |= PURGE_TXABORT | PURGE_TXCLEAR; - actualWriteBufferSize = 0; - acyncWritePosition = 0; writeSequenceStarted = false; } return ::PurgeComm(descriptor, flags); @@ -369,16 +363,13 @@ qint64 QSerialPortPrivate::systemOutputQueueSize () qint64 QSerialPortPrivate::writeToBuffer(const char *data, qint64 maxSize) { char *ptr = writeBuffer.reserve(maxSize); - if (maxSize == 1) { + if (maxSize == 1) *ptr = *data; - actualWriteBufferSize++; - } else { + else ::memcpy(ptr, data, maxSize); - actualWriteBufferSize += maxSize; - } if (!writeSequenceStarted) - startAsyncWrite(WriteChunkSize); + startAsyncWrite(); return maxSize; } @@ -653,15 +644,12 @@ bool QSerialPortPrivate::startAsyncRead() return true; } -bool QSerialPortPrivate::startAsyncWrite(int maxSize) +bool QSerialPortPrivate::startAsyncWrite() { Q_Q(QSerialPort); - qint64 nextSize = 0; - const char *ptr = writeBuffer.readPointerAtPosition(acyncWritePosition, nextSize); - - nextSize = qMin(nextSize, qint64(maxSize)); - acyncWritePosition += nextSize; + qint64 nextSize = writeBuffer.nextDataBlockSize(); + const char *ptr = writeBuffer.readPointer(); // no more data to write if (!ptr || nextSize == 0) @@ -763,8 +751,6 @@ void QSerialPortPrivate::completeAsyncWrite(DWORD numberOfBytes) Q_Q(QSerialPort); writeBuffer.free(numberOfBytes); - actualWriteBufferSize -= qint64(numberOfBytes); - acyncWritePosition -= qint64(numberOfBytes); if (numberOfBytes > 0) emit q->bytesWritten(numberOfBytes); @@ -772,7 +758,7 @@ void QSerialPortPrivate::completeAsyncWrite(DWORD numberOfBytes) if (writeBuffer.isEmpty()) writeSequenceStarted = false; else - startAsyncWrite(WriteChunkSize); + startAsyncWrite(); } bool QSerialPortPrivate::updateDcb() diff --git a/src/serialport/qserialport_win_p.h b/src/serialport/qserialport_win_p.h index 059be87..61e6ce8 100644 --- a/src/serialport/qserialport_win_p.h +++ b/src/serialport/qserialport_win_p.h @@ -101,12 +101,12 @@ public: void _q_canCompleteWrite(); bool startAsyncRead(); - bool startAsyncWrite(int maxSize = INT_MAX); + bool startAsyncWrite(); void completeAsyncRead(DWORD numberOfBytes); void completeAsyncWrite(DWORD numberOfBytes); #else bool notifyRead(); - bool notifyWrite(int maxSize = INT_MAX); + bool notifyWrite(); #endif static QString portNameToSystemLocation(const QString &port); @@ -126,8 +126,6 @@ public: #ifndef Q_OS_WINCE QByteArray readChunkBuffer; - qint64 actualWriteBufferSize; - qint64 acyncWritePosition; bool readyReadEmitted; bool writeSequenceStarted; QWinEventNotifier *communicationNotifier; diff --git a/src/serialport/qserialport_wince.cpp b/src/serialport/qserialport_wince.cpp index 2983071..26ebf64 100644 --- a/src/serialport/qserialport_wince.cpp +++ b/src/serialport/qserialport_wince.cpp @@ -103,7 +103,7 @@ private slots: if (EV_RXCHAR & eventMask) dptr->notifyRead(); if (EV_TXEMPTY & eventMask) - dptr->notifyWrite(QSerialPortPrivateData::WriteChunkSize); + dptr->notifyWrite(); } private: @@ -262,7 +262,7 @@ qint64 QSerialPortPrivate::writeToBuffer(const char *data, qint64 maxSize) ::memcpy(ptr, data, maxSize); // trigger write sequence - notifyWrite(QSerialPortPrivateData::WriteChunkSize); + notifyWrite(); return maxSize; } @@ -291,7 +291,7 @@ bool QSerialPortPrivate::waitForReadyRead(int msec) return true; } if (readyToWrite) - notifyWrite(WriteChunkSize); + notifyWrite(); } return false; } @@ -320,7 +320,7 @@ bool QSerialPortPrivate::waitForBytesWritten(int msec) return false; } if (readyToWrite) { - if (notifyWrite(WriteChunkSize)) + if (notifyWrite()) return true; } } @@ -382,11 +382,11 @@ bool QSerialPortPrivate::notifyRead() return true; } -bool QSerialPortPrivate::notifyWrite(int maxSize) +bool QSerialPortPrivate::notifyWrite() { Q_Q(QSerialPort); - int nextSize = qMin(writeBuffer.nextDataBlockSize(), maxSize); + int nextSize = writeBuffer.nextDataBlockSize(); const char *ptr = writeBuffer.readPointer(); |