Remove unused struct serial::name field
[deliverable/binutils-gdb.git] / gdb / serial.c
CommitLineData
c906108c 1/* Generic serial interface routines
4fcf66da 2
618f726f 3 Copyright (C) 1992-2016 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
21#include <ctype.h>
22#include "serial.h"
c906108c 23#include "gdbcmd.h"
529480d0 24#include "cli/cli-utils.h"
c906108c 25
c2c6d25f 26extern void _initialize_serial (void);
392a587b 27
c378eb4e 28/* Is serial being debugged? */
2acceee2 29
ccce17b0 30static unsigned int global_serial_debug_p;
2acceee2 31
fcd488ca
TT
32typedef const struct serial_ops *serial_ops_p;
33DEF_VEC_P (serial_ops_p);
c906108c 34
fcd488ca
TT
35/* Serial I/O handlers. */
36
37VEC (serial_ops_p) *serial_ops_list = NULL;
c906108c 38
5eb3b062
PA
39/* Pointer to list of scb's. */
40
41static struct serial *scb_base;
42
c906108c 43/* Non-NULL gives filename which contains a recording of the remote session,
c378eb4e 44 suitable for playback by gdbserver. */
c906108c
SS
45
46static char *serial_logfile = NULL;
d9fcf2fb 47static struct ui_file *serial_logfp = NULL;
c906108c 48
fcd488ca 49static const struct serial_ops *serial_interface_lookup (const char *);
3e43a32a
MS
50static void serial_logchar (struct ui_file *stream,
51 int ch_type, int ch, int timeout);
53904c9e
AC
52static const char logbase_hex[] = "hex";
53static const char logbase_octal[] = "octal";
54static const char logbase_ascii[] = "ascii";
40478521 55static const char *const logbase_enums[] =
c5aa993b 56{logbase_hex, logbase_octal, logbase_ascii, NULL};
53904c9e 57static const char *serial_logbase = logbase_ascii;
c906108c 58\f
c5aa993b 59
c906108c
SS
60static int serial_current_type = 0;
61
c378eb4e 62/* Log char CH of type CHTYPE, with TIMEOUT. */
c906108c
SS
63
64/* Define bogus char to represent a BREAK. Should be careful to choose a value
65 that can't be confused with a normal char, or an error code. */
66#define SERIAL_BREAK 1235
67
68static void
d9fcf2fb 69serial_logchar (struct ui_file *stream, int ch_type, int ch, int timeout)
c906108c
SS
70{
71 if (ch_type != serial_current_type)
72 {
2acceee2 73 fprintf_unfiltered (stream, "\n%c ", ch_type);
c906108c
SS
74 serial_current_type = ch_type;
75 }
76
77 if (serial_logbase != logbase_ascii)
2acceee2 78 fputc_unfiltered (' ', stream);
c906108c
SS
79
80 switch (ch)
81 {
82 case SERIAL_TIMEOUT:
2acceee2 83 fprintf_unfiltered (stream, "<Timeout: %d seconds>", timeout);
c906108c
SS
84 return;
85 case SERIAL_ERROR:
2acceee2 86 fprintf_unfiltered (stream, "<Error: %s>", safe_strerror (errno));
c906108c
SS
87 return;
88 case SERIAL_EOF:
2acceee2 89 fputs_unfiltered ("<Eof>", stream);
c906108c
SS
90 return;
91 case SERIAL_BREAK:
2acceee2 92 fputs_unfiltered ("<Break>", stream);
c906108c
SS
93 return;
94 default:
95 if (serial_logbase == logbase_hex)
2acceee2 96 fprintf_unfiltered (stream, "%02x", ch & 0xff);
c906108c 97 else if (serial_logbase == logbase_octal)
2acceee2 98 fprintf_unfiltered (stream, "%03o", ch & 0xff);
c906108c
SS
99 else
100 switch (ch)
101 {
c5aa993b 102 case '\\':
2acceee2 103 fputs_unfiltered ("\\\\", stream);
c5aa993b
JM
104 break;
105 case '\b':
2acceee2 106 fputs_unfiltered ("\\b", stream);
c5aa993b
JM
107 break;
108 case '\f':
2acceee2 109 fputs_unfiltered ("\\f", stream);
c5aa993b
JM
110 break;
111 case '\n':
2acceee2 112 fputs_unfiltered ("\\n", stream);
c5aa993b
JM
113 break;
114 case '\r':
2acceee2 115 fputs_unfiltered ("\\r", stream);
c5aa993b
JM
116 break;
117 case '\t':
2acceee2 118 fputs_unfiltered ("\\t", stream);
c5aa993b
JM
119 break;
120 case '\v':
2acceee2 121 fputs_unfiltered ("\\v", stream);
c5aa993b
JM
122 break;
123 default:
3e43a32a
MS
124 fprintf_unfiltered (stream,
125 isprint (ch) ? "%c" : "\\x%02x", ch & 0xFF);
c5aa993b 126 break;
c906108c
SS
127 }
128 }
129}
130
131void
4ab76ea3 132serial_log_command (struct target_ops *self, const char *cmd)
c906108c
SS
133{
134 if (!serial_logfp)
135 return;
136
137 serial_current_type = 'c';
138
139 fputs_unfiltered ("\nc ", serial_logfp);
140 fputs_unfiltered (cmd, serial_logfp);
141
142 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 143 in case we are getting ready to dump core or something. */
c906108c
SS
144 gdb_flush (serial_logfp);
145}
146
c2c6d25f 147\f
fcd488ca 148static const struct serial_ops *
58f07bae 149serial_interface_lookup (const char *name)
c906108c 150{
fcd488ca
TT
151 const struct serial_ops *ops;
152 int i;
c906108c 153
fcd488ca 154 for (i = 0; VEC_iterate (serial_ops_p, serial_ops_list, i, ops); ++i)
c906108c
SS
155 if (strcmp (name, ops->name) == 0)
156 return ops;
157
158 return NULL;
159}
160
161void
fcd488ca 162serial_add_interface (const struct serial_ops *optable)
c906108c 163{
fcd488ca 164 VEC_safe_push (serial_ops_p, serial_ops_list, optable);
c906108c
SS
165}
166
5eb3b062
PA
167/* Return the open serial device for FD, if found, or NULL if FD is
168 not already opened. */
169
170struct serial *
171serial_for_fd (int fd)
172{
173 struct serial *scb;
174
175 for (scb = scb_base; scb; scb = scb->next)
176 if (scb->fd == fd)
177 return scb;
178
179 return NULL;
180}
181
c378eb4e 182/* Open up a device or a network socket, depending upon the syntax of NAME. */
c906108c 183
819cc324 184struct serial *
c2c6d25f 185serial_open (const char *name)
c906108c 186{
819cc324 187 struct serial *scb;
fcd488ca 188 const struct serial_ops *ops;
c2c6d25f 189 const char *open_name = name;
c906108c 190
50a9e2f1 191 if (strcmp (name, "pc") == 0)
c906108c 192 ops = serial_interface_lookup ("pc");
61012eef 193 else if (startswith (name, "lpt"))
c906108c 194 ops = serial_interface_lookup ("parallel");
61012eef 195 else if (startswith (name, "|"))
c2c6d25f
JM
196 {
197 ops = serial_interface_lookup ("pipe");
8b9e3a15
VP
198 /* Discard ``|'' and any space before the command itself. */
199 ++open_name;
529480d0 200 open_name = skip_spaces_const (open_name);
c2c6d25f 201 }
2821caf1
JB
202 /* Check for a colon, suggesting an IP address/port pair.
203 Do this *after* checking for all the interesting prefixes. We
204 don't want to constrain the syntax of what can follow them. */
205 else if (strchr (name, ':'))
206 ops = serial_interface_lookup ("tcp");
c906108c
SS
207 else
208 ops = serial_interface_lookup ("hardwire");
209
210 if (!ops)
211 return NULL;
212
70ba0933 213 scb = XNEW (struct serial);
c906108c
SS
214
215 scb->ops = ops;
216
217 scb->bufcnt = 0;
218 scb->bufp = scb->buf;
65cc4390 219 scb->error_fd = -1;
ddefb60f 220 scb->refcnt = 1;
c906108c 221
766062f6 222 /* `...->open (...)' would get expanded by the open(2) syscall macro. */
652aaa24 223 if ((*scb->ops->open) (scb, open_name))
c906108c 224 {
b8c9b27d 225 xfree (scb);
c906108c
SS
226 return NULL;
227 }
228
5eb3b062 229 scb->next = scb_base;
2acceee2
JM
230 scb->debug_p = 0;
231 scb->async_state = 0;
c2c6d25f
JM
232 scb->async_handler = NULL;
233 scb->async_context = NULL;
5eb3b062 234 scb_base = scb;
c906108c
SS
235
236 if (serial_logfile != NULL)
237 {
238 serial_logfp = gdb_fopen (serial_logfile, "w");
239 if (serial_logfp == NULL)
240 perror_with_name (serial_logfile);
241 }
242
243 return scb;
244}
245
58f07bae
PA
246/* Open a new serial stream using a file handle, using serial
247 interface ops OPS. */
248
249static struct serial *
fcd488ca 250serial_fdopen_ops (const int fd, const struct serial_ops *ops)
c906108c 251{
819cc324 252 struct serial *scb;
c906108c 253
0ea3f30e 254 if (!ops)
58f07bae
PA
255 {
256 ops = serial_interface_lookup ("terminal");
257 if (!ops)
258 ops = serial_interface_lookup ("hardwire");
259 }
c906108c
SS
260
261 if (!ops)
262 return NULL;
263
fc270c35 264 scb = XCNEW (struct serial);
c906108c
SS
265
266 scb->ops = ops;
267
268 scb->bufcnt = 0;
269 scb->bufp = scb->buf;
58f07bae 270 scb->error_fd = -1;
ddefb60f 271 scb->refcnt = 1;
c906108c 272
5eb3b062 273 scb->next = scb_base;
2acceee2
JM
274 scb->debug_p = 0;
275 scb->async_state = 0;
c2c6d25f
JM
276 scb->async_handler = NULL;
277 scb->async_context = NULL;
5eb3b062 278 scb_base = scb;
c906108c 279
58f07bae
PA
280 if ((ops->fdopen) != NULL)
281 (*ops->fdopen) (scb, fd);
282 else
283 scb->fd = fd;
284
c906108c
SS
285 return scb;
286}
287
58f07bae
PA
288struct serial *
289serial_fdopen (const int fd)
290{
291 return serial_fdopen_ops (fd, NULL);
292}
293
c2c6d25f 294static void
819cc324 295do_serial_close (struct serial *scb, int really_close)
c906108c 296{
819cc324 297 struct serial *tmp_scb;
c906108c 298
c906108c
SS
299 if (serial_logfp)
300 {
301 fputs_unfiltered ("\nEnd of log\n", serial_logfp);
302 serial_current_type = 0;
303
c378eb4e 304 /* XXX - What if serial_logfp == gdb_stdout or gdb_stderr? */
d9fcf2fb 305 ui_file_delete (serial_logfp);
c906108c
SS
306 serial_logfp = NULL;
307 }
308
c378eb4e 309 /* ensure that the FD has been taken out of async mode. */
c2c6d25f
JM
310 if (scb->async_handler != NULL)
311 serial_async (scb, NULL, NULL);
312
c906108c
SS
313 if (really_close)
314 scb->ops->close (scb);
315
ddefb60f
PA
316 /* For serial_is_open. */
317 scb->bufp = NULL;
318
5eb3b062
PA
319 if (scb_base == scb)
320 scb_base = scb_base->next;
321 else
322 for (tmp_scb = scb_base; tmp_scb; tmp_scb = tmp_scb->next)
323 {
324 if (tmp_scb->next != scb)
325 continue;
326
327 tmp_scb->next = tmp_scb->next->next;
328 break;
329 }
330
ddefb60f 331 serial_unref (scb);
c906108c
SS
332}
333
c2c6d25f 334void
819cc324 335serial_close (struct serial *scb)
c2c6d25f
JM
336{
337 do_serial_close (scb, 1);
338}
339
340void
819cc324 341serial_un_fdopen (struct serial *scb)
c2c6d25f
JM
342{
343 do_serial_close (scb, 0);
344}
345
ddefb60f
PA
346int
347serial_is_open (struct serial *scb)
348{
349 return scb->bufp != NULL;
350}
351
352void
353serial_ref (struct serial *scb)
354{
355 scb->refcnt++;
356}
357
358void
359serial_unref (struct serial *scb)
360{
361 --scb->refcnt;
362 if (scb->refcnt == 0)
363 xfree (scb);
364}
365
c2c6d25f 366int
819cc324 367serial_readchar (struct serial *scb, int timeout)
c2c6d25f
JM
368{
369 int ch;
370
2df3850c 371 /* FIXME: cagney/1999-10-11: Don't enable this check until the ASYNC
c378eb4e 372 code is finished. */
2cd58942 373 if (0 && serial_is_async_p (scb) && timeout < 0)
8e65ff28 374 internal_error (__FILE__, __LINE__,
e2e0b3e5 375 _("serial_readchar: blocking read in async mode"));
2df3850c 376
c2c6d25f
JM
377 ch = scb->ops->readchar (scb, timeout);
378 if (serial_logfp != NULL)
379 {
2acceee2 380 serial_logchar (serial_logfp, 'r', ch, timeout);
c2c6d25f
JM
381
382 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 383 in case we are getting ready to dump core or something. */
c2c6d25f
JM
384 gdb_flush (serial_logfp);
385 }
2cd58942 386 if (serial_debug_p (scb))
2acceee2
JM
387 {
388 fprintf_unfiltered (gdb_stdlog, "[");
389 serial_logchar (gdb_stdlog, 'r', ch, timeout);
390 fprintf_unfiltered (gdb_stdlog, "]");
391 gdb_flush (gdb_stdlog);
392 }
c2c6d25f
JM
393
394 return (ch);
395}
396
397int
c628b528 398serial_write (struct serial *scb, const void *buf, size_t count)
c2c6d25f
JM
399{
400 if (serial_logfp != NULL)
401 {
19ba03f4 402 const char *str = (const char *) buf;
c628b528 403 size_t c;
c2c6d25f 404
c628b528
PA
405 for (c = 0; c < count; c++)
406 serial_logchar (serial_logfp, 'w', str[c] & 0xff, 0);
c2c6d25f
JM
407
408 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 409 in case we are getting ready to dump core or something. */
c2c6d25f
JM
410 gdb_flush (serial_logfp);
411 }
9214d371
DE
412 if (serial_debug_p (scb))
413 {
19ba03f4 414 const char *str = (const char *) buf;
c628b528 415 size_t c;
9214d371 416
c628b528 417 for (c = 0; c < count; c++)
9214d371
DE
418 {
419 fprintf_unfiltered (gdb_stdlog, "[");
0e58ee40 420 serial_logchar (gdb_stdlog, 'w', str[c] & 0xff, 0);
9214d371
DE
421 fprintf_unfiltered (gdb_stdlog, "]");
422 }
423 gdb_flush (gdb_stdlog);
424 }
c2c6d25f 425
c628b528 426 return (scb->ops->write (scb, buf, count));
c2c6d25f
JM
427}
428
429void
819cc324 430serial_printf (struct serial *desc, const char *format,...)
c2c6d25f
JM
431{
432 va_list args;
433 char *buf;
434 va_start (args, format);
435
e623b504 436 buf = xstrvprintf (format, args);
2cd58942 437 serial_write (desc, buf, strlen (buf));
c2c6d25f 438
b8c9b27d 439 xfree (buf);
c2c6d25f
JM
440 va_end (args);
441}
442
443int
819cc324 444serial_drain_output (struct serial *scb)
c2c6d25f
JM
445{
446 return scb->ops->drain_output (scb);
447}
448
449int
819cc324 450serial_flush_output (struct serial *scb)
c2c6d25f
JM
451{
452 return scb->ops->flush_output (scb);
453}
454
455int
819cc324 456serial_flush_input (struct serial *scb)
c2c6d25f
JM
457{
458 return scb->ops->flush_input (scb);
459}
460
461int
819cc324 462serial_send_break (struct serial *scb)
c2c6d25f
JM
463{
464 if (serial_logfp != NULL)
2acceee2 465 serial_logchar (serial_logfp, 'w', SERIAL_BREAK, 0);
c2c6d25f
JM
466
467 return (scb->ops->send_break (scb));
468}
469
470void
819cc324 471serial_raw (struct serial *scb)
c2c6d25f
JM
472{
473 scb->ops->go_raw (scb);
474}
475
476serial_ttystate
819cc324 477serial_get_tty_state (struct serial *scb)
c2c6d25f
JM
478{
479 return scb->ops->get_tty_state (scb);
480}
481
1e182ce8
UW
482serial_ttystate
483serial_copy_tty_state (struct serial *scb, serial_ttystate ttystate)
484{
485 return scb->ops->copy_tty_state (scb, ttystate);
486}
487
c2c6d25f 488int
819cc324 489serial_set_tty_state (struct serial *scb, serial_ttystate ttystate)
c2c6d25f
JM
490{
491 return scb->ops->set_tty_state (scb, ttystate);
492}
493
494void
819cc324 495serial_print_tty_state (struct serial *scb,
c2c6d25f 496 serial_ttystate ttystate,
d9fcf2fb 497 struct ui_file *stream)
c2c6d25f
JM
498{
499 scb->ops->print_tty_state (scb, ttystate, stream);
500}
501
502int
819cc324 503serial_noflush_set_tty_state (struct serial *scb,
c2c6d25f
JM
504 serial_ttystate new_ttystate,
505 serial_ttystate old_ttystate)
506{
507 return scb->ops->noflush_set_tty_state (scb, new_ttystate, old_ttystate);
508}
509
510int
819cc324 511serial_setbaudrate (struct serial *scb, int rate)
c2c6d25f
JM
512{
513 return scb->ops->setbaudrate (scb, rate);
514}
515
516int
819cc324 517serial_setstopbits (struct serial *scb, int num)
c2c6d25f
JM
518{
519 return scb->ops->setstopbits (scb, num);
520}
521
236af5e3
YG
522/* See serial.h. */
523
524int
525serial_setparity (struct serial *scb, int parity)
526{
527 return scb->ops->setparity (scb, parity);
528}
529
c2c6d25f 530int
819cc324 531serial_can_async_p (struct serial *scb)
c2c6d25f
JM
532{
533 return (scb->ops->async != NULL);
534}
535
536int
819cc324 537serial_is_async_p (struct serial *scb)
c2c6d25f
JM
538{
539 return (scb->ops->async != NULL) && (scb->async_handler != NULL);
540}
541
542void
819cc324 543serial_async (struct serial *scb,
c2c6d25f
JM
544 serial_event_ftype *handler,
545 void *context)
546{
05ce04a4 547 int changed = ((scb->async_handler == NULL) != (handler == NULL));
433759f7 548
c2c6d25f
JM
549 scb->async_handler = handler;
550 scb->async_context = context;
05ce04a4
VP
551 /* Only change mode if there is a need. */
552 if (changed)
553 scb->ops->async (scb, handler != NULL);
c2c6d25f
JM
554}
555
2acceee2 556void
819cc324 557serial_debug (struct serial *scb, int debug_p)
2acceee2
JM
558{
559 scb->debug_p = debug_p;
560}
561
562int
819cc324 563serial_debug_p (struct serial *scb)
2acceee2
JM
564{
565 return scb->debug_p || global_serial_debug_p;
566}
567
0ea3f30e
DJ
568#ifdef USE_WIN32API
569void
570serial_wait_handle (struct serial *scb, HANDLE *read, HANDLE *except)
571{
572 if (scb->ops->wait_handle)
573 scb->ops->wait_handle (scb, read, except);
574 else
575 {
576 *read = (HANDLE) _get_osfhandle (scb->fd);
577 *except = NULL;
578 }
579}
c3e2b812
DJ
580
581void
582serial_done_wait_handle (struct serial *scb)
583{
584 if (scb->ops->done_wait_handle)
585 scb->ops->done_wait_handle (scb);
586}
0ea3f30e 587#endif
2acceee2 588
58f07bae
PA
589int
590serial_pipe (struct serial *scbs[2])
591{
fcd488ca 592 const struct serial_ops *ops;
58f07bae
PA
593 int fildes[2];
594
595 ops = serial_interface_lookup ("pipe");
596 if (!ops)
597 {
598 errno = ENOSYS;
599 return -1;
600 }
601
602 if (gdb_pipe (fildes) == -1)
603 return -1;
604
605 scbs[0] = serial_fdopen_ops (fildes[0], ops);
606 scbs[1] = serial_fdopen_ops (fildes[1], ops);
607 return 0;
608}
609
e3abfe1d
AC
610/* Serial set/show framework. */
611
612static struct cmd_list_element *serial_set_cmdlist;
613static struct cmd_list_element *serial_show_cmdlist;
614
615static void
616serial_set_cmd (char *args, int from_tty)
617{
3e43a32a
MS
618 printf_unfiltered ("\"set serial\" must be followed "
619 "by the name of a command.\n");
635c7e8a 620 help_list (serial_set_cmdlist, "set serial ", all_commands, gdb_stdout);
e3abfe1d
AC
621}
622
623static void
624serial_show_cmd (char *args, int from_tty)
625{
626 cmd_show_list (serial_show_cmdlist, from_tty, "");
627}
628
0d12017b
JB
629/* Baud rate specified for talking to serial target systems. Default
630 is left as -1, so targets can choose their own defaults. */
631/* FIXME: This means that "show serial baud" and gr_files_info can
632 print -1 or (unsigned int)-1. This is a Bad User Interface. */
633
634int baud_rate = -1;
635
636static void
637serial_baud_show_cmd (struct ui_file *file, int from_tty,
638 struct cmd_list_element *c, const char *value)
639{
640 fprintf_filtered (file, _("Baud rate for remote serial I/O is %s.\n"),
641 value);
642}
e3abfe1d 643
236af5e3
YG
644/* Parity for serial port. */
645
646int serial_parity = GDBPARITY_NONE;
647
648static const char parity_none[] = "none";
649static const char parity_odd[] = "odd";
650static const char parity_even[] = "even";
651static const char *const parity_enums[] =
652 {parity_none, parity_odd, parity_even, NULL};
653static const char *parity = parity_none;
654
655/* Set serial_parity value. */
656
657static void
658set_parity (char *ignore_args, int from_tty, struct cmd_list_element *c)
659{
660 if (parity == parity_odd)
661 serial_parity = GDBPARITY_ODD;
662 else if (parity == parity_even)
663 serial_parity = GDBPARITY_EVEN;
664 else
665 serial_parity = GDBPARITY_NONE;
666}
667
c906108c 668void
c2c6d25f 669_initialize_serial (void)
c906108c
SS
670{
671#if 0
1bedd215
AC
672 add_com ("connect", class_obscure, connect_command, _("\
673Connect the terminal directly up to the command monitor.\n\
674Use <CR>~. or <CR>~^D to break out."));
c906108c
SS
675#endif /* 0 */
676
1bedd215
AC
677 add_prefix_cmd ("serial", class_maintenance, serial_set_cmd, _("\
678Set default serial/parallel port configuration."),
e3abfe1d
AC
679 &serial_set_cmdlist, "set serial ",
680 0/*allow-unknown*/,
681 &setlist);
682
1bedd215
AC
683 add_prefix_cmd ("serial", class_maintenance, serial_show_cmd, _("\
684Show default serial/parallel port configuration."),
e3abfe1d
AC
685 &serial_show_cmdlist, "show serial ",
686 0/*allow-unknown*/,
687 &showlist);
688
0d12017b
JB
689 /* If target is open when baud changes, it doesn't take effect until
690 the next open (I think, not sure). */
691 add_setshow_zinteger_cmd ("baud", no_class, &baud_rate, _("\
692Set baud rate for remote serial I/O."), _("\
693Show baud rate for remote serial I/O."), _("\
694This value is used to set the speed of the serial port when debugging\n\
695using remote targets."),
696 NULL,
697 serial_baud_show_cmd,
698 &serial_set_cmdlist, &serial_show_cmdlist);
699
236af5e3
YG
700 add_setshow_enum_cmd ("parity", no_class, parity_enums,
701 &parity, _("\
702Set parity for remote serial I/O"), _("\
703Show parity for remote serial I/O"), NULL,
704 set_parity,
705 NULL, /* FIXME: i18n: */
706 &serial_set_cmdlist, &serial_show_cmdlist);
707
f397e303
AC
708 add_setshow_filename_cmd ("remotelogfile", no_class, &serial_logfile, _("\
709Set filename for remote session recording."), _("\
710Show filename for remote session recording."), _("\
c906108c 711This file is used to record the remote session for future playback\n\
f397e303
AC
712by gdbserver."),
713 NULL,
714 NULL, /* FIXME: i18n: */
715 &setlist, &showlist);
c906108c 716
7ab04401
AC
717 add_setshow_enum_cmd ("remotelogbase", no_class, logbase_enums,
718 &serial_logbase, _("\
719Set numerical base for remote session logging"), _("\
720Show numerical base for remote session logging"), NULL,
721 NULL,
722 NULL, /* FIXME: i18n: */
723 &setlist, &showlist);
2acceee2 724
ccce17b0
YQ
725 add_setshow_zuinteger_cmd ("serial", class_maintenance,
726 &global_serial_debug_p, _("\
85c07804
AC
727Set serial debugging."), _("\
728Show serial debugging."), _("\
729When non-zero, serial port debugging is enabled."),
ccce17b0
YQ
730 NULL,
731 NULL, /* FIXME: i18n: */
732 &setdebuglist, &showdebuglist);
c906108c 733}
This page took 2.326935 seconds and 4 git commands to generate.