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