I don't have a serial device to test this with, but it's just selected
parts of the TIOCMSET handling slightly adapted.

2005-08-01  Yitzchak Scott-Thoennes  <[EMAIL PROTECTED]>

        * fhandler_serial.cc (fhandler_serial::ioctl): Implement TIOCMBIS and
        TIOCMBIC.
        * include/sys/termios.h: Define TIOCMBIS and TIOCMBIC

.
--- winsup/cygwin/include/sys/termios.h.orig    2005-05-01 20:50:10.000000000 
-0700
+++ winsup/cygwin/include/sys/termios.h 2005-08-01 02:22:34.361969600 -0700
@@ -1,6 +1,6 @@
 /* sys/termios.h
 
-   Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
+   Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -14,6 +14,8 @@
 #define _SYS_TERMIOS_H
 
 #define        TIOCMGET        0x5415
+#define        TIOCMBIS        0x5416
+#define        TIOCMBIC        0x5417
 #define        TIOCMSET        0x5418
 #define        TIOCINQ         0x541B
 
--- winsup/cygwin/fhandler_serial.cc.orig       2005-07-06 13:05:00.000000000 
-0700
+++ winsup/cygwin/fhandler_serial.cc    2005-08-01 02:31:30.993608000 -0700
@@ -470,6 +470,50 @@ fhandler_serial::ioctl (unsigned int cmd
            res = -1;
          }
        break;
+      case TIOCMBIS:
+       if (ipbuffer & TIOCM_RTS)
+         {
+           if (EscapeCommFunction (get_handle (), SETRTS))
+             rts = TIOCM_RTS;
+           else
+             {
+               __seterrno ();
+               res = -1;
+             }
+         }
+       if (ipbuffer & TIOCM_DTR)
+         {
+           if (EscapeCommFunction (get_handle (), SETDTR))
+             dtr = TIOCM_DTR;
+           else
+             {
+               __seterrno ();
+               res = -1;
+             }
+         }
+       break;
+      case TIOCMBIC:
+       if (ipbuffer & TIOCM_RTS)
+         {
+           if (EscapeCommFunction (get_handle (), CLRRTS))
+             rts = 0;
+           else
+             {
+               __seterrno ();
+               res = -1;
+             }
+         }
+       if (ipbuffer & TIOCM_DTR)
+         {
+           if (EscapeCommFunction (get_handle (), CLRDTR))
+             dtr = 0;
+           else
+             {
+               __seterrno ();
+               res = -1;
+             }
+         }
+       break;
       case TIOCCBRK:
        if (ClearCommBreak (get_handle ()) == 0)
          {

Reply via email to