diff options
author | Yury Grechishchev <yury.grechishchev@yotadevices.com> | 2015-03-24 00:15:42 +0300 |
---|---|---|
committer | Joel Brobecker <brobecker@adacore.com> | 2015-03-23 15:34:42 -0700 |
commit | 236af5e336970a6b58cd17e0a2981bd96f3d09a0 (patch) | |
tree | 82297660721160db864fe9d48fcd135af23fce10 /gdb/ser-mingw.c | |
parent | 32b40af94e919e235c21486110311647cbeecf2e (diff) | |
download | gdb-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.c | 40 |
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, |