summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-01-06 16:30:34 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-01-06 16:30:34 +0100
commitac4d0dc0d17d1f04590b2645b5f1055d1e2bf0d7 (patch)
tree09765a637f18e871c295698d16e0e6668785c29a
parent343bf28e95581476f6f41334e69d21aae5df70bd (diff)
parent007e8063946e66d32e4ab7e345472036517135ff (diff)
downloadqtserialport-ac4d0dc0d17d1f04590b2645b5f1055d1e2bf0d7.tar.gz
Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I535078aafe7a322f3b09e2893a89e30c0028661a
-rw-r--r--examples/serialport/creaderasync/serialportreader.cpp2
-rw-r--r--src/serialport/qserialport_p.h3
-rw-r--r--src/serialport/qserialport_unix.cpp10
-rw-r--r--src/serialport/qserialport_unix_p.h2
-rw-r--r--src/serialport/qserialport_win.cpp28
-rw-r--r--src/serialport/qserialport_win_p.h6
-rw-r--r--src/serialport/qserialport_wince.cpp12
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();