/* Remote serial support interface definitions for GDB, the GNU Debugger.
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000
- Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2004,
+ 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GDB.
#ifndef SERIAL_H
#define SERIAL_H
+#ifdef USE_WIN32API
+#include <windows.h>
+#endif
+
struct ui_file;
/* For most routines, if a failure is indicated, then errno should be
extern struct serial *serial_open (const char *name);
+/* Find an already opened serial stream using a file handle. */
+
+extern struct serial *serial_for_fd (int fd);
+
/* Open a new serial stream using a file handle. */
extern struct serial *serial_fdopen (const int fd);
struct serial
{
int fd; /* File descriptor */
+ /* File descriptor for a separate error stream that should be
+ immediately forwarded to gdb_stderr. This may be -1.
+ If != -1, this descriptor should be non-blocking or
+ ops->avail should be non-NULL. */
+ int error_fd;
struct serial_ops *ops; /* Function vector */
void *state; /* Local context info for open FD */
serial_ttystate ttystate; /* Not used (yet) */
/* Perform a low-level write operation, writing (at most) COUNT
bytes from BUF. */
int (*write_prim)(struct serial *scb, const void *buf, size_t count);
+ /* Return that number of bytes that can be read from FD
+ without blocking. Return value of -1 means that the
+ the read will not block even if less that requested bytes
+ are available. */
+ int (*avail)(struct serial *scb, int fd);
+
+#ifdef USE_WIN32API
+ /* Return a handle to wait on, indicating available data from SCB
+ when signaled, in *READ. Return a handle indicating errors
+ in *EXCEPT. */
+ void (*wait_handle) (struct serial *scb, HANDLE *read, HANDLE *except);
+ void (*done_wait_handle) (struct serial *scb);
+#endif /* USE_WIN32API */
};
/* Add a new serial interface to the interface list */
extern void serial_log_command (const char *);
+#ifdef USE_WIN32API
+
+/* Windows-only: find or create handles that we can wait on for this
+ serial device. */
+extern void serial_wait_handle (struct serial *, HANDLE *, HANDLE *);
+
+/* Windows-only: signal that we are done with the wait handles. */
+extern void serial_done_wait_handle (struct serial *);
+
+#endif /* USE_WIN32API */
+
#endif /* SERIAL_H */