From 23776285b76dc215c60997f27ed37f37dbc63165 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Tue, 22 May 2007 10:57:12 +0000 Subject: [PATCH] gdb/: * ser-unix.c (show_serial_hwflow): New function. (hardwire_raw): Add hardware flow control support. (_initialize_ser_hardwire): Add "set/show remoteflow". * Makefile.in (ser-unix.o): Depend on $(gdbcmd_h). * NEWS: Document the new command. gdb/doc/: * gdb.texinfo (Remote Configuration): Document "set/show remoteflow". --- gdb/ChangeLog | 9 +++++++++ gdb/Makefile.in | 2 +- gdb/NEWS | 5 +++++ gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 10 ++++++++++ gdb/ser-unix.c | 40 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 70 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6847009f250..d24db0b8010 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2007-05-22 Chris Dearman + Maciej W. Rozycki + + * ser-unix.c (show_serial_hwflow): New function. + (hardwire_raw): Add hardware flow control support. + (_initialize_ser_hardwire): Add "set/show remoteflow". + * Makefile.in (ser-unix.o): Depend on $(gdbcmd_h). + * NEWS: Document the new command. + 2007-05-21 Ulrich Weigand * config/i386/tm-linux.h (sys_quotactl): Do not define. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index fe3bfade26e..5077e6760b1 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -2541,7 +2541,7 @@ ser-pipe.o: ser-pipe.c $(defs_h) $(serial_h) $(ser_base_h) $(ser_unix_h) \ ser-tcp.o: ser-tcp.c $(defs_h) $(serial_h) $(ser_base_h) $(ser_tcp_h) \ $(gdb_string_h) ser-unix.o: ser-unix.c $(defs_h) $(serial_h) $(ser_base_h) $(ser_unix_h) \ - $(terminal_h) $(gdb_select_h) $(gdb_string_h) + $(terminal_h) $(gdb_select_h) $(gdb_string_h) $(gdbcmd_h) ser-mingw.o: ser-mingw.c $(defs_h) $(serial_h) $(ser_base_h) \ $(ser_tcp_h) $(gdb_assert_h) $(gdb_string_h) sh64-tdep.o: sh64-tdep.c $(defs_h) $(frame_h) $(frame_base_h) \ diff --git a/gdb/NEWS b/gdb/NEWS index c64b59789a8..ed7ae7c7614 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -39,6 +39,11 @@ has been rewritten to use the standard GDB remote protocol. * New commands +set remoteflow +show remoteflow + Enable or disable hardware flow control (RTS/CTS) on the serial port + when debugging using remote targets. + set mem inaccessible-by-default show mem inaccessible-by-default If the target supplies a memory map, for instance via the remote diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 48dff96d4ec..d11eaf03269 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2007-05-22 Maciej W. Rozycki + + * gdb.texinfo (Remote Configuration): Document "set/show + remoteflow". + 2007-05-16 Daniel Jacobowitz * gdb.texinfo (MIPS): Remove documentation for set mips saved-gpreg-size, diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 45005f3cf35..c8051274103 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -12792,6 +12792,16 @@ expect to see @samp{Ctrl-C} as the interrupt signal. Show whether @value{GDBN} sends @code{BREAK} or @samp{Ctrl-C} to interrupt the remote program. +@item set remoteflow on +@itemx set remoteflow off +@kindex set remoteflow +Enable or disable hardware flow control (@code{RTS}/@code{CTS}) +on the serial port used to communicate to the remote target. + +@item show remoteflow +@kindex show remoteflow +Show the current setting of hardware flow control. + @item set remotelogbase @var{base} Set the base (a.k.a.@: radix) of logging serial protocol communications to @var{base}. Supported values of @var{base} are: diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c index c45bfc611c0..3a24ac1895c 100644 --- a/gdb/ser-unix.c +++ b/gdb/ser-unix.c @@ -33,6 +33,7 @@ #include "gdb_select.h" #include "gdb_string.h" +#include "gdbcmd.h" #ifdef HAVE_TERMIOS @@ -40,6 +41,18 @@ struct hardwire_ttystate { struct termios termios; }; + +#ifdef CRTSCTS +/* Boolean to explicitly enable or disable h/w flow control. */ +static int serial_hwflow; +static void +show_serial_hwflow (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Hardware flow control is %s.\n"), value); +} +#endif + #endif /* termios */ #ifdef HAVE_TERMIO @@ -387,6 +400,19 @@ hardwire_raw (struct serial *scb) state.termios.c_lflag = 0; state.termios.c_cflag &= ~(CSIZE | PARENB); state.termios.c_cflag |= CLOCAL | CS8; +#ifdef CRTSCTS + /* h/w flow control. */ + if (serial_hwflow) + state.termios.c_cflag |= CRTSCTS; + else + state.termios.c_cflag &= ~CRTSCTS; +#ifdef CRTS_IFLOW + if (serial_hwflow) + state.termios.c_cflag |= CRTS_IFLOW; + else + state.termios.c_cflag &= ~CRTS_IFLOW; +#endif +#endif state.termios.c_cc[VMIN] = 0; state.termios.c_cc[VTIME] = 0; #endif @@ -892,6 +918,20 @@ _initialize_ser_hardwire (void) ops->read_prim = ser_unix_read_prim; ops->write_prim = ser_unix_write_prim; serial_add_interface (ops); + +#ifdef HAVE_TERMIOS +#ifdef CRTSCTS + add_setshow_boolean_cmd ("remoteflow", no_class, + &serial_hwflow, _("\ +Set use of hardware flow control for remote serial I/O."), _("\ +Show use of hardware flow control for remote serial I/O."), _("\ +Enable or disable hardware flow control (RTS/CTS) on the serial port\n\ +when debugging using remote targets."), + NULL, + show_serial_hwflow, + &setlist, &showlist); +#endif +#endif } int