* include/sys/termios.h: Define TIOCMBIS and TIOCMBIC.

* fhandler.h (class fhandler_serial): Declare switch_modem_lines.
	* fhandler_serial.cc (fhandler_serial::switch_modem_lines): New
	static function to set or clear DTR and/or RTS.
	(fhandler_serial::ioctl): Use switch_modem_lines for TIOCMSET
	and new TIOCMBIS and TIOCMBIC.
	* include/cygwin/version.h: Bump API minor number.
This commit is contained in:
Corinna Vinschen 2005-08-02 09:17:15 +00:00
parent 88c5a50f9f
commit 723d64e667
5 changed files with 76 additions and 39 deletions

View File

@ -1,3 +1,13 @@
2005-08-02 Yitzchak Scott-Thoennes <sthoenna@efn.org>
* include/sys/termios.h: Define TIOCMBIS and TIOCMBIC.
* fhandler.h (class fhandler_serial): Declare switch_modem_lines.
* fhandler_serial.cc (fhandler_serial::switch_modem_lines): New
static function to set or clear DTR and/or RTS.
(fhandler_serial::ioctl): Use switch_modem_lines for TIOCMSET
and new TIOCMBIS and TIOCMBIC.
* include/cygwin/version.h: Bump API minor number.
2005-07-29 Christopher Faylor <cgf@timesys.com>
* fhandler_disk_file.cc (fhandler_base::pread): Don't move file offset

View File

@ -722,6 +722,7 @@ class fhandler_serial: public fhandler_base
int tcdrain ();
int tcflow (int);
int ioctl (unsigned int cmd, void *);
int switch_modem_lines (int set, int clr);
int tcsetattr (int a, const struct termios *t);
int tcgetattr (struct termios *t);
_off64_t lseek (_off64_t, int) { return 0; }

View File

@ -376,6 +376,56 @@ fhandler_serial::tcflow (int action)
}
/* switch_modem_lines: set or clear RTS and/or DTR */
int
fhandler_serial::switch_modem_lines (int set, int clr)
{
int res = 0;
if (set & TIOCM_RTS)
{
if (EscapeCommFunction (get_handle (), SETRTS))
rts = TIOCM_RTS;
else
{
__seterrno ();
res = -1;
}
}
else if (clr & TIOCM_RTS)
{
if (EscapeCommFunction (get_handle (), CLRRTS))
rts = 0;
else
{
__seterrno ();
res = -1;
}
}
if (set & TIOCM_DTR)
{
if (EscapeCommFunction (get_handle (), SETDTR))
rts = TIOCM_DTR;
else
{
__seterrno ();
res = -1;
}
}
else if (clr & TIOCM_DTR)
{
if (EscapeCommFunction (get_handle (), CLRDTR))
rts = 0;
else
{
__seterrno ();
res = -1;
}
}
return res;
}
/* ioctl: */
int
fhandler_serial::ioctl (unsigned int cmd, void *buffer)
@ -432,44 +482,17 @@ fhandler_serial::ioctl (unsigned int cmd, void *buffer)
}
break;
case TIOCMSET:
if (ipbuffer & TIOCM_RTS)
{
if (EscapeCommFunction (get_handle (), SETRTS))
rts = TIOCM_RTS;
else
{
__seterrno ();
res = -1;
}
}
else
{
if (EscapeCommFunction (get_handle (), CLRRTS))
rts = 0;
else
{
__seterrno ();
res = -1;
}
}
if (ipbuffer & TIOCM_DTR)
{
if (EscapeCommFunction (get_handle (), SETDTR))
dtr = TIOCM_DTR;
else
{
__seterrno ();
res = -1;
}
}
else if (EscapeCommFunction (get_handle (), CLRDTR))
dtr = 0;
else
{
__seterrno ();
res = -1;
}
if (switch_modem_lines (ipbuffer, ~ipbuffer))
res = -1;
break;
case TIOCMBIS:
if (switch_modem_lines (ipbuffer, 0))
res = -1;
break;
case TIOCMBIC:
if (switch_modem_lines (0, ipbuffer))
res = -1;
break;
case TIOCCBRK:
if (ClearCommBreak (get_handle ()) == 0)
{

View File

@ -262,12 +262,13 @@ details. */
133: Export __getline, __getdelim.
134: Export getline, getdelim.
135: Export pread, pwrite
136: Add TIOCMBIS/TIOCMBIC ioctl codes.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
#define CYGWIN_VERSION_API_MINOR 135
#define CYGWIN_VERSION_API_MINOR 136
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible

View File

@ -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 @@ details. */
#define _SYS_TERMIOS_H
#define TIOCMGET 0x5415
#define TIOCMBIS 0x5416
#define TIOCMBIC 0x5417
#define TIOCMSET 0x5418
#define TIOCINQ 0x541B