diff options
-rw-r--r-- | src/serialport/qserialport.cpp | 1 | ||||
-rw-r--r-- | src/serialport/qserialport_p.h | 5 | ||||
-rw-r--r-- | src/serialport/qserialport_win.cpp | 14 |
3 files changed, 8 insertions, 12 deletions
diff --git a/src/serialport/qserialport.cpp b/src/serialport/qserialport.cpp index 81beb2d..fa780f3 100644 --- a/src/serialport/qserialport.cpp +++ b/src/serialport/qserialport.cpp @@ -107,7 +107,6 @@ QSerialPortPrivate::QSerialPortPrivate() , readStarted(false) , notifier(0) , startAsyncWriteTimer(0) - , originalEventMask(0) , triggeredEventMask(0) #elif defined(Q_OS_UNIX) , descriptor(-1) diff --git a/src/serialport/qserialport_p.h b/src/serialport/qserialport_p.h index b0f3f0c..7512da0 100644 --- a/src/serialport/qserialport_p.h +++ b/src/serialport/qserialport_p.h @@ -157,6 +157,8 @@ public: qint64 writeData(const char *data, qint64 maxSize); + bool initialize(QIODevice::OpenMode mode); + static QString portNameToSystemLocation(const QString &port); static QString portNameFromSystemLocation(const QString &location); @@ -176,7 +178,6 @@ public: #if defined(Q_OS_WIN32) - bool initialize(); bool setDcb(DCB *dcb); bool getDcb(DCB *dcb); OVERLAPPED *waitForNotified(int msecs); @@ -208,14 +209,12 @@ public: OVERLAPPED communicationOverlapped; OVERLAPPED readCompletionOverlapped; OVERLAPPED writeCompletionOverlapped; - DWORD originalEventMask; DWORD triggeredEventMask; #elif defined(Q_OS_UNIX) static qint32 settingFromBaudRate(qint32 baudRate); - bool initialize(QIODevice::OpenMode mode); bool setTermios(const termios *tio); bool getTermios(termios *tio); diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index 84bf5b9..95edf2d 100644 --- a/src/serialport/qserialport_win.cpp +++ b/src/serialport/qserialport_win.cpp @@ -176,12 +176,9 @@ static inline void qt_set_flowcontrol(DCB *dcb, QSerialPort::FlowControl flowcon bool QSerialPortPrivate::open(QIODevice::OpenMode mode) { DWORD desiredAccess = 0; - originalEventMask = 0; - if (mode & QIODevice::ReadOnly) { + if (mode & QIODevice::ReadOnly) desiredAccess |= GENERIC_READ; - originalEventMask |= EV_RXCHAR; - } if (mode & QIODevice::WriteOnly) desiredAccess |= GENERIC_WRITE; @@ -193,7 +190,7 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode) return false; } - if (initialize()) + if (initialize(mode)) return true; ::CloseHandle(handle); @@ -658,7 +655,7 @@ qint64 QSerialPortPrivate::queuedBytesCount(QSerialPort::Direction direction) co : ((direction == QSerialPort::Output) ? comstat.cbOutQue : -1); } -inline bool QSerialPortPrivate::initialize() +inline bool QSerialPortPrivate::initialize(QIODevice::OpenMode mode) { Q_Q(QSerialPort); @@ -691,7 +688,8 @@ inline bool QSerialPortPrivate::initialize() return false; } - if (!::SetCommMask(handle, originalEventMask)) { + const DWORD eventMask = (mode & QIODevice::ReadOnly) ? EV_RXCHAR : 0; + if (!::SetCommMask(handle, eventMask)) { setError(getSystemError()); return false; } @@ -702,7 +700,7 @@ inline bool QSerialPortPrivate::initialize() notifier->setHandle(handle); notifier->setEnabled(true); - if ((originalEventMask & EV_RXCHAR) && !startAsyncCommunication()) + if ((eventMask & EV_RXCHAR) && !startAsyncCommunication()) return false; return true; |