]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/serial.h
* gdb.ada/packed_array/pa.adb: New file.
[thirdparty/binutils-gdb.git] / gdb / serial.h
CommitLineData
c906108c 1/* Remote serial support interface definitions for GDB, the GNU Debugger.
b6ba6518
KB
2 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000
3 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
9 the Free Software Foundation; either version 2 of the License, or
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
JM
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
c906108c
SS
21
22#ifndef SERIAL_H
23#define SERIAL_H
24
da3331ec
AC
25struct ui_file;
26
c2c6d25f
JM
27/* For most routines, if a failure is indicated, then errno should be
28 examined. */
c906108c 29
c2c6d25f 30/* Terminal state pointer. This is specific to each type of
2c1ab592 31 interface. */
c906108c 32
c2c6d25f 33typedef void *serial_ttystate;
65e2f740 34struct serial;
c906108c 35
819cc324 36/* Try to open NAME. Returns a new `struct serial *' on success, NULL
63b5bc2f
MH
37 on failure. Note that some open calls can block and, if possible,
38 should be written to be non-blocking, with calls to ui_look_hook
39 so they can be cancelled. An async interface for open could be
2c1ab592 40 added to GDB if necessary. */
c906108c 41
819cc324 42extern struct serial *serial_open (const char *name);
c906108c 43
c2c6d25f 44/* Open a new serial stream using a file handle. */
c906108c 45
819cc324 46extern struct serial *serial_fdopen (const int fd);
c906108c 47
2c1ab592 48/* Push out all buffers, close the device and destroy SCB. */
c906108c 49
819cc324 50extern void serial_close (struct serial *scb);
c906108c 51
819cc324 52/* Push out all buffers and destroy SCB without closing the device. */
c906108c 53
819cc324 54extern void serial_un_fdopen (struct serial *scb);
c906108c 55
c2c6d25f 56/* Read one char from the serial device with TIMEOUT seconds to wait
2df3850c
JM
57 or -1 to wait forever. Use timeout of 0 to effect a poll.
58 Infinite waits are not permitted. Returns unsigned char if ok, else
59 one of the following codes. Note that all error return-codes are
2c1ab592 60 guaranteed to be < 0. */
2acceee2
JM
61
62enum serial_rc {
2c1ab592 63 SERIAL_ERROR = -1, /* General error. */
2df3850c 64 SERIAL_TIMEOUT = -2, /* Timeout or data-not-ready during read.
98bbd631 65 Unfortunately, through
2c1ab592
MS
66 deprecated_ui_loop_hook (), this can also
67 be a QUIT indication. */
2acceee2
JM
68 SERIAL_EOF = -3 /* General end-of-file or remote target
69 connection closed, indication. Includes
2c1ab592 70 things like the line dropping dead. */
2acceee2 71};
c2c6d25f 72
819cc324 73extern int serial_readchar (struct serial *scb, int timeout);
c2c6d25f 74
819cc324 75/* Write LEN chars from STRING to the port SCB. Returns 0 for
c2c6d25f
JM
76 success, non-zero for failure. */
77
819cc324 78extern int serial_write (struct serial *scb, const char *str, int len);
c2c6d25f 79
2c1ab592 80/* Write a printf style string onto the serial port. */
c2c6d25f 81
2c1ab592
MS
82extern void serial_printf (struct serial *desc,
83 const char *,...) ATTR_FORMAT (printf, 2, 3);
c906108c 84
2c1ab592 85/* Allow pending output to drain. */
c906108c 86
819cc324 87extern int serial_drain_output (struct serial *);
c5aa993b 88
c2c6d25f
JM
89/* Flush (discard) pending output. Might also flush input (if this
90 system can't flush only output). */
c906108c 91
819cc324 92extern int serial_flush_output (struct serial *);
c906108c 93
c2c6d25f
JM
94/* Flush pending input. Might also flush output (if this system can't
95 flush only input). */
c906108c 96
819cc324 97extern int serial_flush_input (struct serial *);
c906108c
SS
98
99/* Send a break between 0.25 and 0.5 seconds long. */
100
819cc324 101extern int serial_send_break (struct serial *scb);
c906108c 102
2c1ab592 103/* Turn the port into raw mode. */
c906108c 104
819cc324 105extern void serial_raw (struct serial *scb);
c906108c
SS
106
107/* Return a pointer to a newly malloc'd ttystate containing the state
108 of the tty. */
c2c6d25f 109
819cc324 110extern serial_ttystate serial_get_tty_state (struct serial *scb);
c906108c
SS
111
112/* Set the state of the tty to TTYSTATE. The change is immediate.
113 When changing to or from raw mode, input might be discarded.
c2c6d25f
JM
114 Returns 0 for success, negative value for error (in which case
115 errno contains the error). */
116
819cc324 117extern int serial_set_tty_state (struct serial *scb, serial_ttystate ttystate);
c906108c 118
c2c6d25f
JM
119/* printf_filtered a user-comprehensible description of ttystate on
120 the specified STREAM. FIXME: At present this sends output to the
2c1ab592 121 default stream - GDB_STDOUT. */
c2c6d25f 122
819cc324 123extern void serial_print_tty_state (struct serial *scb, serial_ttystate ttystate, struct ui_file *);
c906108c
SS
124
125/* Set the tty state to NEW_TTYSTATE, where OLD_TTYSTATE is the
126 current state (generally obtained from a recent call to
2cd58942 127 serial_get_tty_state()), but be careful not to discard any input.
c2c6d25f
JM
128 This means that we never switch in or out of raw mode, even if
129 NEW_TTYSTATE specifies a switch. */
130
819cc324 131extern int serial_noflush_set_tty_state (struct serial *scb, serial_ttystate new_ttystate, serial_ttystate old_ttystate);
c906108c 132
c2c6d25f
JM
133/* Set the baudrate to the decimal value supplied. Returns 0 for
134 success, -1 for failure. */
c906108c 135
819cc324 136extern int serial_setbaudrate (struct serial *scb, int rate);
c906108c 137
c2c6d25f
JM
138/* Set the number of stop bits to the value specified. Returns 0 for
139 success, -1 for failure. */
c906108c 140
c2c6d25f 141#define SERIAL_1_STOPBITS 1
2c1ab592 142#define SERIAL_1_AND_A_HALF_STOPBITS 2 /* 1.5 bits, snicker... */
c2c6d25f 143#define SERIAL_2_STOPBITS 3
c906108c 144
819cc324 145extern int serial_setstopbits (struct serial *scb, int num);
c906108c 146
c2c6d25f 147/* Asynchronous serial interface: */
c906108c 148
c2c6d25f 149/* Can the serial device support asynchronous mode? */
c906108c 150
819cc324 151extern int serial_can_async_p (struct serial *scb);
c906108c 152
c2c6d25f 153/* Has the serial device been put in asynchronous mode? */
c906108c 154
819cc324 155extern int serial_is_async_p (struct serial *scb);
c906108c 156
c2c6d25f
JM
157/* For ASYNC enabled devices, register a callback and enable
158 asynchronous mode. To disable asynchronous mode, register a NULL
2c1ab592 159 callback. */
c906108c 160
819cc324
AC
161typedef void (serial_event_ftype) (struct serial *scb, void *context);
162extern void serial_async (struct serial *scb, serial_event_ftype *handler, void *context);
c906108c 163
c2c6d25f
JM
164/* Provide direct access to the underlying FD (if any) used to
165 implement the serial device. This interface is clearly
166 deprecated. Will call internal_error() if the operation isn't
2c1ab592 167 applicable to the current serial device. */
c906108c 168
819cc324 169extern int deprecated_serial_fd (struct serial *scb);
c906108c 170
2acceee2
JM
171/* Trace/debug mechanism.
172
2cd58942 173 serial_debug() enables/disables internal debugging.
2c1ab592 174 serial_debug_p() indicates the current debug state. */
2acceee2 175
819cc324 176extern void serial_debug (struct serial *scb, int debug_p);
2acceee2 177
819cc324 178extern int serial_debug_p (struct serial *scb);
2acceee2 179
c906108c 180
c2c6d25f 181/* Details of an instance of a serial object */
c906108c 182
65e2f740 183struct serial
c2c6d25f
JM
184 {
185 int fd; /* File descriptor */
186 struct serial_ops *ops; /* Function vector */
187 void *state; /* Local context info for open FD */
188 serial_ttystate ttystate; /* Not used (yet) */
2acceee2 189 int bufcnt; /* Amount of data remaining in receive
2c1ab592 190 buffer. -ve for sticky errors. */
c2c6d25f
JM
191 unsigned char *bufp; /* Current byte */
192 unsigned char buf[BUFSIZ]; /* Da buffer itself */
2acceee2
JM
193 int current_timeout; /* (ser-unix.c termio{,s} only), last
194 value of VTIME */
195 int timeout_remaining; /* (ser-unix.c termio{,s} only), we
196 still need to wait for this many
197 more seconds. */
c2c6d25f 198 char *name; /* The name of the device or host */
819cc324 199 struct serial *next; /* Pointer to the next `struct serial *' */
c2c6d25f 200 int refcnt; /* Number of pointers to this block */
2c1ab592
MS
201 int debug_p; /* Trace this serial devices operation. */
202 int async_state; /* Async internal state. */
c2c6d25f
JM
203 void *async_context; /* Async event thread's context */
204 serial_event_ftype *async_handler;/* Async event handler */
205 };
206
207struct serial_ops
208 {
209 char *name;
210 struct serial_ops *next;
819cc324
AC
211 int (*open) (struct serial *, const char *name);
212 void (*close) (struct serial *);
213 int (*readchar) (struct serial *, int timeout);
214 int (*write) (struct serial *, const char *str, int len);
c2c6d25f 215 /* Discard pending output */
819cc324 216 int (*flush_output) (struct serial *);
c2c6d25f 217 /* Discard pending input */
819cc324
AC
218 int (*flush_input) (struct serial *);
219 int (*send_break) (struct serial *);
220 void (*go_raw) (struct serial *);
221 serial_ttystate (*get_tty_state) (struct serial *);
222 int (*set_tty_state) (struct serial *, serial_ttystate);
223 void (*print_tty_state) (struct serial *, serial_ttystate,
224 struct ui_file *);
225 int (*noflush_set_tty_state) (struct serial *, serial_ttystate,
226 serial_ttystate);
227 int (*setbaudrate) (struct serial *, int rate);
228 int (*setstopbits) (struct serial *, int num);
c2c6d25f 229 /* Wait for output to drain */
819cc324 230 int (*drain_output) (struct serial *);
c2c6d25f
JM
231 /* Change the serial device into/out of asynchronous mode, call
232 the specified function when ever there is something
2c1ab592 233 interesting. */
819cc324 234 void (*async) (struct serial *scb, int async_p);
c2c6d25f
JM
235 };
236
237/* Add a new serial interface to the interface list */
c906108c 238
c2c6d25f 239extern void serial_add_interface (struct serial_ops * optable);
c906108c
SS
240
241/* File in which to record the remote debugging session */
242
c2c6d25f 243extern void serial_log_command (const char *);
c906108c
SS
244
245#endif /* SERIAL_H */