aboutsummaryrefslogtreecommitdiff
path: root/gdb/ser-mingw.c
diff options
context:
space:
mode:
authorYury Grechishchev <yury.grechishchev@yotadevices.com>2015-03-24 00:15:42 +0300
committerJoel Brobecker <brobecker@adacore.com>2015-03-23 15:34:42 -0700
commit236af5e336970a6b58cd17e0a2981bd96f3d09a0 (patch)
tree82297660721160db864fe9d48fcd135af23fce10 /gdb/ser-mingw.c
parent32b40af94e919e235c21486110311647cbeecf2e (diff)
downloadgdb-236af5e336970a6b58cd17e0a2981bd96f3d09a0.zip
gdb-236af5e336970a6b58cd17e0a2981bd96f3d09a0.tar.gz
gdb-236af5e336970a6b58cd17e0a2981bd96f3d09a0.tar.bz2
GDB: Add set/show serial parity command.
The "set serial parity" command allows the user to control which parity to use when communicating over a serial connection, rather than having the parity hardcoded to none. gdb/ChangeLog: * NEWS: Mention set/show serial parity command. * monitor.c (monitor_open): Call serial_setparity. * remote.c (remote_open_1): Likewise. * ser-base.c (ser_base_serparity): New function. * ser-base.h (ser_base_setparity): Add declaration. * ser-go32.c (dos_ops): Set "setparity" field. * ser-mingw.c (ser_windows_raw): Do not set state.fParity and state.Parity. (ser_windows_setparity): New function. (hardwire_ops): Add ser_windows_setparity. (tty_ops): Add NULL for setparity field. (pipe_ops): Add ser_base_setparity. (tcp_ops): Likewise. * ser-pipe.c (pipe_ops): Likewise. * ser-tcp.c (tcp_ops): Likewise. * ser-unix.c (hardwire_setparity): Add declaration. (hardwire_raw): Don't reset PARENB flag. (hardwire_setparity): New function. (hardwire_ops): Add hardwire_setparity. * serial.c (serial_setparity): New function. (serial_parity): New global. (parity_none, parity_odd, parity_even, parity_enums, parity): New static globals. (set_parity): New function. (_initialize_serial): Add set/show serial parity commands. * serial.h (GDBPARITY_NONE): Define. (GDBPARITY_ODD): Define. (GDBPARITY_EVEN): Define. (serial_setparity) Add declaration. (struct serial_ops): Add setparity field. * target.h (serial_parity): Add declaration. gdb/doc/ChangeLog: * gdb.texinfo (Remote configuration): Document "set/show serial parity" command.
Diffstat (limited to 'gdb/ser-mingw.c')
-rw-r--r--gdb/ser-mingw.c40
1 files changed, 38 insertions, 2 deletions
diff --git a/gdb/ser-mingw.c b/gdb/ser-mingw.c
index 7f335e9..6d383ac 100644
--- a/gdb/ser-mingw.c
+++ b/gdb/ser-mingw.c
@@ -153,7 +153,6 @@ ser_windows_raw (struct serial *scb)
if (GetCommState (h, &state) == 0)
return;
- state.fParity = FALSE;
state.fOutxCtsFlow = FALSE;
state.fOutxDsrFlow = FALSE;
state.fDtrControl = DTR_CONTROL_ENABLE;
@@ -163,7 +162,6 @@ ser_windows_raw (struct serial *scb)
state.fNull = FALSE;
state.fAbortOnError = FALSE;
state.ByteSize = 8;
- state.Parity = NOPARITY;
scb->current_timeout = 0;
@@ -198,6 +196,40 @@ ser_windows_setstopbits (struct serial *scb, int num)
return (SetCommState (h, &state) != 0) ? 0 : -1;
}
+/* Implement the "setparity" serial_ops callback. */
+
+static int
+ser_windows_setparity (struct serial *scb, int parity)
+{
+ HANDLE h = (HANDLE) _get_osfhandle (scb->fd);
+ DCB state;
+
+ if (GetCommState (h, &state) == 0)
+ return -1;
+
+ switch (parity)
+ {
+ case GDBPARITY_NONE:
+ state.Parity = NOPARITY;
+ state.fParity = FALSE;
+ break;
+ case GDBPARITY_ODD:
+ state.Parity = ODDPARITY;
+ state.fParity = TRUE;
+ break;
+ case GDBPARITY_EVEN:
+ state.Parity = EVENPARITY;
+ state.fParity = TRUE;
+ break;
+ default:
+ internal_warning (__FILE__, __LINE__,
+ "Incorrect parity value: %d", parity);
+ return -1;
+ }
+
+ return (SetCommState (h, &state) != 0) ? 0 : -1;
+}
+
static int
ser_windows_setbaudrate (struct serial *scb, int rate)
{
@@ -1227,6 +1259,7 @@ static const struct serial_ops hardwire_ops =
ser_base_noflush_set_tty_state,
ser_windows_setbaudrate,
ser_windows_setstopbits,
+ ser_windows_setparity,
ser_windows_drain_output,
ser_base_async,
ser_windows_read_prim,
@@ -1257,6 +1290,7 @@ static const struct serial_ops tty_ops =
ser_base_noflush_set_tty_state,
NULL,
NULL,
+ NULL,
ser_base_drain_output,
NULL,
NULL,
@@ -1287,6 +1321,7 @@ static const struct serial_ops pipe_ops =
ser_base_noflush_set_tty_state,
ser_base_setbaudrate,
ser_base_setstopbits,
+ ser_base_setparity,
ser_base_drain_output,
ser_base_async,
pipe_windows_read,
@@ -1317,6 +1352,7 @@ static const struct serial_ops tcp_ops =
ser_base_noflush_set_tty_state,
ser_base_setbaudrate,
ser_base_setstopbits,
+ ser_base_setparity,
ser_base_drain_output,
ser_base_async,
net_read_prim,