OLD | NEW |
1 /* Remote serial support interface definitions for GDB, the GNU Debugger. | 1 /* Remote serial support interface definitions for GDB, the GNU Debugger. |
2 Copyright (C) 1992-1996, 1998-2001, 2004-2012 Free Software | 2 Copyright (C) 1992-1996, 1998-2001, 2004-2012 Free Software |
3 Foundation, Inc. | 3 Foundation, Inc. |
4 | 4 |
5 This file is part of GDB. | 5 This file is part of GDB. |
6 | 6 |
7 This program is free software; you can redistribute it and/or modify | 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 | 8 it under the terms of the GNU General Public License as published by |
9 the Free Software Foundation; either version 3 of the License, or | 9 the Free Software Foundation; either version 3 of the License, or |
10 (at your option) any later version. | 10 (at your option) any later version. |
(...skipping 19 matching lines...) Expand all Loading... |
30 /* For most routines, if a failure is indicated, then errno should be | 30 /* For most routines, if a failure is indicated, then errno should be |
31 examined. */ | 31 examined. */ |
32 | 32 |
33 /* Terminal state pointer. This is specific to each type of | 33 /* Terminal state pointer. This is specific to each type of |
34 interface. */ | 34 interface. */ |
35 | 35 |
36 typedef void *serial_ttystate; | 36 typedef void *serial_ttystate; |
37 struct serial; | 37 struct serial; |
38 | 38 |
39 /* Try to open NAME. Returns a new `struct serial *' on success, NULL | 39 /* Try to open NAME. Returns a new `struct serial *' on success, NULL |
40 on failure. Note that some open calls can block and, if possible, | 40 on failure. The new serial object has a reference count of 1. |
41 should be written to be non-blocking, with calls to ui_look_hook | 41 Note that some open calls can block and, if possible, should be |
42 so they can be cancelled. An async interface for open could be | 42 written to be non-blocking, with calls to ui_look_hook so they can |
43 added to GDB if necessary. */ | 43 be cancelled. An async interface for open could be added to GDB if |
| 44 necessary. */ |
44 | 45 |
45 extern struct serial *serial_open (const char *name); | 46 extern struct serial *serial_open (const char *name); |
46 | 47 |
| 48 /* Returns true if SCB is open. */ |
| 49 |
| 50 extern int serial_is_open (struct serial *scb); |
| 51 |
47 /* Find an already opened serial stream using a file handle. */ | 52 /* Find an already opened serial stream using a file handle. */ |
48 | 53 |
49 extern struct serial *serial_for_fd (int fd); | 54 extern struct serial *serial_for_fd (int fd); |
50 | 55 |
51 /* Open a new serial stream using a file handle. */ | 56 /* Open a new serial stream using a file handle. */ |
52 | 57 |
53 extern struct serial *serial_fdopen (const int fd); | 58 extern struct serial *serial_fdopen (const int fd); |
54 | 59 |
55 /* Push out all buffers, close the device and destroy SCB. */ | 60 /* Push out all buffers, close the device and unref SCB. */ |
56 | 61 |
57 extern void serial_close (struct serial *scb); | 62 extern void serial_close (struct serial *scb); |
58 | 63 |
| 64 /* Increment reference count of SCB. */ |
| 65 |
| 66 extern void serial_ref (struct serial *scb); |
| 67 |
| 68 /* Decrement reference count of SCB. */ |
| 69 |
| 70 extern void serial_unref (struct serial *scb); |
| 71 |
59 /* Create a pipe, and put the read end in files[0], and the write end | 72 /* Create a pipe, and put the read end in files[0], and the write end |
60 in filde[1]. Returns 0 for success, negative value for error (in | 73 in filde[1]. Returns 0 for success, negative value for error (in |
61 which case errno contains the error). */ | 74 which case errno contains the error). */ |
62 | 75 |
63 extern int gdb_pipe (int fildes[2]); | 76 extern int gdb_pipe (int fildes[2]); |
64 | 77 |
65 /* Create a pipe with each end wrapped in a `struct serial' interface. | 78 /* Create a pipe with each end wrapped in a `struct serial' interface. |
66 Put the read end in scbs[0], and the write end in scbs[1]. Returns | 79 Put the read end in scbs[0], and the write end in scbs[1]. Returns |
67 0 for success, negative value for error (in which case errno | 80 0 for success, negative value for error (in which case errno |
68 contains the error). */ | 81 contains the error). */ |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 | 219 |
207 extern void serial_debug (struct serial *scb, int debug_p); | 220 extern void serial_debug (struct serial *scb, int debug_p); |
208 | 221 |
209 extern int serial_debug_p (struct serial *scb); | 222 extern int serial_debug_p (struct serial *scb); |
210 | 223 |
211 | 224 |
212 /* Details of an instance of a serial object. */ | 225 /* Details of an instance of a serial object. */ |
213 | 226 |
214 struct serial | 227 struct serial |
215 { | 228 { |
| 229 /* serial objects are ref counted (but not the underlying |
| 230 connection, just the object's lifetime in memory). */ |
| 231 int refcnt; |
| 232 |
216 int fd; /* File descriptor */ | 233 int fd; /* File descriptor */ |
217 /* File descriptor for a separate error stream that should be | 234 /* File descriptor for a separate error stream that should be |
218 immediately forwarded to gdb_stderr. This may be -1. | 235 immediately forwarded to gdb_stderr. This may be -1. |
219 If != -1, this descriptor should be non-blocking or | 236 If != -1, this descriptor should be non-blocking or |
220 ops->avail should be non-NULL. */ | 237 ops->avail should be non-NULL. */ |
221 int error_fd; | 238 int error_fd; |
222 struct serial_ops *ops; /* Function vector */ | 239 struct serial_ops *ops; /* Function vector */ |
223 void *state; /* Local context info for open FD */ | 240 void *state; /* Local context info for open FD */ |
224 serial_ttystate ttystate; /* Not used (yet) */ | 241 serial_ttystate ttystate; /* Not used (yet) */ |
225 int bufcnt; /* Amount of data remaining in receive | 242 int bufcnt; /* Amount of data remaining in receive |
226 buffer. -ve for sticky errors. */ | 243 buffer. -ve for sticky errors. */ |
227 unsigned char *bufp; /* Current byte */ | 244 unsigned char *bufp; /* Current byte */ |
228 unsigned char buf[BUFSIZ]; /* Da buffer itself */ | 245 unsigned char buf[BUFSIZ]; /* Da buffer itself */ |
229 int current_timeout; /* (ser-unix.c termio{,s} only), last | 246 int current_timeout; /* (ser-unix.c termio{,s} only), last |
230 value of VTIME */ | 247 value of VTIME */ |
231 int timeout_remaining; /* (ser-unix.c termio{,s} only), we | 248 int timeout_remaining; /* (ser-unix.c termio{,s} only), we |
232 still need to wait for this many | 249 still need to wait for this many |
233 more seconds. */ | 250 more seconds. */ |
234 char *name; /* The name of the device or host */ | 251 char *name; /* The name of the device or host */ |
235 struct serial *next; /* Pointer to the next `struct serial *' */ | 252 struct serial *next; /* Pointer to the next `struct serial *' */ |
236 int refcnt; /* Number of pointers to this block */ | |
237 int debug_p; /* Trace this serial devices operation. */ | 253 int debug_p; /* Trace this serial devices operation. */ |
238 int async_state; /* Async internal state. */ | 254 int async_state; /* Async internal state. */ |
239 void *async_context; /* Async event thread's context */ | 255 void *async_context; /* Async event thread's context */ |
240 serial_event_ftype *async_handler;/* Async event handler */ | 256 serial_event_ftype *async_handler;/* Async event handler */ |
241 }; | 257 }; |
242 | 258 |
243 struct serial_ops | 259 struct serial_ops |
244 { | 260 { |
245 char *name; | 261 char *name; |
246 struct serial_ops *next; | 262 struct serial_ops *next; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 /* Windows-only: find or create handles that we can wait on for this | 320 /* Windows-only: find or create handles that we can wait on for this |
305 serial device. */ | 321 serial device. */ |
306 extern void serial_wait_handle (struct serial *, HANDLE *, HANDLE *); | 322 extern void serial_wait_handle (struct serial *, HANDLE *, HANDLE *); |
307 | 323 |
308 /* Windows-only: signal that we are done with the wait handles. */ | 324 /* Windows-only: signal that we are done with the wait handles. */ |
309 extern void serial_done_wait_handle (struct serial *); | 325 extern void serial_done_wait_handle (struct serial *); |
310 | 326 |
311 #endif /* USE_WIN32API */ | 327 #endif /* USE_WIN32API */ |
312 | 328 |
313 #endif /* SERIAL_H */ | 329 #endif /* SERIAL_H */ |
OLD | NEW |