diff options
Diffstat (limited to 'src/serialport/qserialport.cpp')
-rw-r--r-- | src/serialport/qserialport.cpp | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/src/serialport/qserialport.cpp b/src/serialport/qserialport.cpp index 5534bb8..7853f1a 100644 --- a/src/serialport/qserialport.cpp +++ b/src/serialport/qserialport.cpp @@ -101,13 +101,12 @@ QSerialPortPrivate::QSerialPortPrivate() , isBreakEnabled(false) #if defined(Q_OS_WIN32) , handle(INVALID_HANDLE_VALUE) - , readChunkBuffer(ReadChunkSize, 0) + , readChunkBuffer(QSERIALPORT_BUFFERSIZE, 0) , communicationStarted(false) , writeStarted(false) , readStarted(false) , notifier(0) , startAsyncWriteTimer(0) - , originalEventMask(0) , triggeredEventMask(0) #elif defined(Q_OS_UNIX) , descriptor(-1) @@ -122,7 +121,8 @@ QSerialPortPrivate::QSerialPortPrivate() , writeSequenceStarted(false) #endif { - writeBufferChunkSize = InitialBufferSize; + writeBufferChunkSize = QSERIALPORT_BUFFERSIZE; + readBufferChunkSize = QSERIALPORT_BUFFERSIZE; } void QSerialPortPrivate::setError(const QSerialPortErrorInfo &errorInfo) @@ -1244,10 +1244,9 @@ qint64 QSerialPort::readBufferSize() const void QSerialPort::setReadBufferSize(qint64 size) { Q_D(QSerialPort); - - if (d->readBufferMaxSize == size) - return; d->readBufferMaxSize = size; + if (isReadable()) + d->startAsyncRead(); } /*! @@ -1436,21 +1435,9 @@ qint64 QSerialPort::readData(char *data, qint64 maxSize) Q_UNUSED(data); Q_UNUSED(maxSize); -#if defined(Q_OS_WIN32) - // We need try to start async reading to read a remainder from a driver's queue - // in case we have a limited read buffer size. Because the read notification can - // be stalled since Windows do not re-triggered an EV_RXCHAR event if a driver's - // buffer has a remainder of data ready to read until a new data will be received. - Q_D(QSerialPort); - if (d->readBufferMaxSize || d->flowControl == QSerialPort::HardwareControl) - d->startAsyncRead(); -#elif defined(Q_OS_UNIX) - // We need try to re-trigger the read notification to read a remainder from a - // driver's queue in case we have a limited read buffer size. - Q_D(QSerialPort); - if (d->readBufferMaxSize && !d->isReadNotificationEnabled()) - d->setReadNotificationEnabled(true); -#endif + // In any case we need to start the notifications if they were + // disabled by the read handler. If enabled, next call does nothing. + d_func()->startAsyncRead(); // return 0 indicating there may be more data in the future return qint64(0); |