summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2016-09-10 20:56:42 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2016-09-23 05:39:23 +0000
commitdee818e77a6cf9a6c164fbc7ee132fe875f7f998 (patch)
treefe83d0b841894a8cb2055f942025843e08d510b5 /src
parentfcd6ac231d160afd5c11cc5ef515dcc61c3eca3f (diff)
downloadqtserialport-dee818e77a6cf9a6c164fbc7ee132fe875f7f998.tar.gz
Do not reset RTS after changing other properties on Windows
Changing any of serial port properties drops RTS, which has been set earlier, since the fRtsControl field of DCB structure always has RTS_CONTROL_DISABLE value (except hardware flow control). Thus, using one EscapeCommFunction() function inside of QSP::setRequestToSend() method is not enough. We need set there also the fRtsControl field to RTS_CONTROL_ENABLE(DISABLE) value and keep it unchanged. Task-number: QTBUG-55907 Change-Id: I7e407b0de9f970f5d11f61c0e360d4735a0acb84 Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/serialport/qserialport_win.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp
index 9ab4448..84bf5b9 100644
--- a/src/serialport/qserialport_win.cpp
+++ b/src/serialport/qserialport_win.cpp
@@ -90,6 +90,9 @@ static inline void qt_set_common_props(DCB *dcb)
if (dcb->fDtrControl == DTR_CONTROL_HANDSHAKE)
dcb->fDtrControl = DTR_CONTROL_DISABLE;
+
+ if (dcb->fRtsControl != RTS_CONTROL_HANDSHAKE)
+ dcb->fRtsControl = RTS_CONTROL_DISABLE;
}
static inline void qt_set_baudrate(DCB *dcb, qint32 baudrate)
@@ -152,7 +155,8 @@ static inline void qt_set_flowcontrol(DCB *dcb, QSerialPort::FlowControl flowcon
dcb->fInX = FALSE;
dcb->fOutX = FALSE;
dcb->fOutxCtsFlow = FALSE;
- dcb->fRtsControl = RTS_CONTROL_DISABLE;
+ if (dcb->fRtsControl == RTS_CONTROL_HANDSHAKE)
+ dcb->fRtsControl = RTS_CONTROL_DISABLE;
switch (flowcontrol) {
case QSerialPort::NoFlowControl:
break;
@@ -278,7 +282,12 @@ bool QSerialPortPrivate::setRequestToSend(bool set)
return false;
}
- return true;
+ DCB dcb;
+ if (!getDcb(&dcb))
+ return false;
+
+ dcb.fRtsControl = set ? RTS_CONTROL_ENABLE : RTS_CONTROL_DISABLE;
+ return setDcb(&dcb);
}
bool QSerialPortPrivate::flush()