]> sourceware.org Git - newlib-cygwin.git/commit
Cygwin: fix TIOCMBIS/TIOCMBIC not working when using usbser.sys
authorCarlo Bramini <30959007+carlo-bramini@users.noreply.github.com>
Fri, 11 Nov 2022 10:15:27 +0000 (11:15 +0100)
committerCorinna Vinschen <corinna@vinschen.de>
Fri, 11 Nov 2022 12:01:23 +0000 (13:01 +0100)
commit2dab880c963ce0204c3513d664f610b587a3e6a6
tree2adf6cc1b7f309ea427a9a8f60be3e5a652221ef
parent5c79aa4b22df09b6fb3e97538fee7f108f9fd768
Cygwin: fix TIOCMBIS/TIOCMBIC not working when using usbser.sys

In winsup/cygwin/fhandler/serial.cc, the function
fhandler_serial::switch_modem_lines() is called when TIOCMBIS/TIOCMBIC
are used in an ioctl() call.

This function uses EscapeCommFunction() for setting and resetting RTS
and DTR signals of a serial port.  Unfortunately, this function does not
work on USB CDC devices.

This is not a true bug of CYGWIN but an issue of the usbser.sys driver,
from Windows 2000 to the latest Windows 11.  Both 32bit and 64bit
versions of the operating system are affected.  Actually, I tested
EscapeCommFunction() also when using a real UART, based on the
traditional 16550 driver and it works fine.  Using thirdy party CDC
drivers, like the one provided by FTDI for their USB bridge chips,
probably also works.

However, it is also possible to drive the RTS/DTR signals by writing
their state with SetCommState(), which proved to be working fine all
types of connection.  This is also a better solution for handling these
signals since RTS/DTR can be set at the same time rather than having two
separate calls with a visible delay between them.
winsup/cygwin/fhandler/serial.cc
This page took 0.028347 seconds and 5 git commands to generate.