Structure for a tty device
typedef struct ttydev_entry {
	iofunc_attr_t			attr;
	iofunc_mount_t			mount;
	TTYWAIT					*waiting_read;
	TTYWAIT					*waiting_write;
	TTYWAIT					*waiting_drain;
	int						c_cflag;
	int						c_iflag;
	int						c_lflag;
	int						c_oflag;
	volatile unsigned		flags;
	volatile unsigned       xflags;
    int						bcnt;
	int						fwdcnt;
	struct ttydev_entry		*timer;
	int			 			timeout;
	int			 			timeout_reset;
	union {
		int					tmrs;
		struct {
			char			spare_tmr;
			char			tx_tmr;
			char			brk_tmr;
			char			dtr_tmr;
		}	s;
	} 		un;
	pid_t					brkpgrp;
	pid_t			 		huppid;
    cc_t			 		c_cc[NCCS];
	unsigned char		 	fifo;
	unsigned char		 	fwd;
	unsigned char		 	prefix_cnt;
	unsigned char		 	oband_data;
	int			 			highwater;
	int			 			baud;
	struct winsize			winsize;
	TTYBUF	 				obuf;
	TTYBUF	 				ibuf;
	TTYBUF	 				cbuf;
	iofunc_notify_t		 	notify[3];
	struct ttydev_entry		*extra;
	TTYWAIT					*waiting_open;	
	void					*reserved2;		/* reserved for use by io-char */
	int						(*io_devctlext)(resmgr_context_t *ctp, io_devctl_t *msg, iofunc_ocb_t *ocb);
	char			 		name[TTY_NAME_MAX];
	} TTYDEV;
A character driver shares the TTYDEV structure with the
io-char library.
This structure is used to handle devices shared between the driver and io-char. 
The members include:
- attr
- A resource manager attribute
- mount
- Related to resource manager information
- waiting_read
- The queue to store blocking clients waiting to read
- waiting_write
- The queue to store blocking clients waiting to write
- waiting_drain
- The queue to store blocking clients waiting to drain.
- c_cflag
- POSIX termios flag describing the hardware control of the terminal
- c_iflag
- POSIX termios flag describing the basic terminal input control
- c_lflag
- POSIX termios flag used to control various terminal functions
- c_oflag
- POSIX termios flag describing the basic terminal output control
- flags
- The following flags are currently defined:
- OHW_PAGED  --  the output hardware flow control (set by io-char and 
used by the driver)
- IHW_PAGED  --  input hardware flow control is asserted; the device's highwater mark has been reached and doen't want to receive any more data. This flag also asserts the RTS
line.
- OSW_PAGED  --  output software flow control is asserted; the device should not transmit any data (set by io-char 
and used by the driver)
- ISW_PAGED  --  input software flow control is asserted; the device's highwater mark has been reached and doesn't want to receive any more data. This flag also transmits VSTOP. 
- EDIT_INSERT  --  for edit mode. Insert or overstrike typing mode.
- EDIT_PREFIX  --  for edit mode. Look for edit keys which begin with
a fixed prefix, e.g. ESC [ ansi" used with POSIX c_cc[VPREFIX].
- OBAND_DATA  --  indicates that out-of-band data is available
- LOSES_TX_INTR  --  set if the hardware loses the tx interrupt. Causes 
a periodic timer to call tto() to transmit data. 
- TIMER_ACTIVE  --  used by io-char
- TIMER_KEEP  --  used by io-char
- NOTTY  --  used by PTYs
- NL_INSERT  --  used to notify application if a \n
was changed to a \r
- ISAPTY  --  used by PTYs
- PTY_MASTER_ONLY  --  used by PTYs
- LITERAL  --  used by io-char
- FIRST_TIME_ALONE  --  used by io-char
 
- xflags
- OSW_PAGED_OVERRIDE  --  override OSW_PAGED to allow transmission of
controlled characters when in a software flow control suspend state. This flag is set by
io-char and is used and cleared by the driver.
- bcnt
- Internal to io-char and used to determine the number of bytes needed to notify a read client.
- fwdcnt
- Internal to io-char and used to determine the number of fwd counts.
- timer
- Used by io-char.
- timeout
- Used by io-char.
- timeout_reset
- Used by io-char.
- tmrs
- One of several available for io-char to use.
- spare_tmr
- Spare used only by io-char for drain.
- tx_tmr
- Enabled by LOSES_TX_INTR. The timer causes tto() to be called to
work around some parts that lose transmit interrupts.
- brk_tmr
- Used only by io-char sending break; calls tto() (TTO_CTRL, dtrchg).  
- dtr_tmr
- Used by io-char to set dtr line i.e. generate SIGHUP calls tto() (TTO_CTRL, dtrchg).
- brkpgrp
- Used by io-char.
- huppid
- Used by io-char.
- c_cc
- POSIX special control-characters.
- fifo
- Used only by the driver.
- fwd
- Forward character used by io-char. It's used with fwdcnt to 
implement forward, described in readcond().
- prefix_cnt
- For io-char only.
- oband_data
- Out-of-band data set by the driver in <intr.c>. The application gets it
from io-char via a devctl().
- highwater
- Set by the driver and used by io-char to determine when to invoke flow control. 
(Make sure this value is LESS than the input buffer size).
- baud
- The device's baud rate.
- winsize
- Used only by io-char.
- obuf
- The output buffer.
- ibuf
- The input buffer. 
- cbuf
- The canonical buffer.
- notify
- The notify list. It implements iofunc_notify_trigger() resource manager
information. The following arguments are used:
  
- notify[0]  --  notify for input used by io-char
  
- notify[1]  --  notify for output to the driver, <tto.c>
  
- notify[2]  --  notify for data that out-of=band to the driver, <intr.c>
  
 
- extra
- Used for PTYs.
- waiting_open
- The queue to store blocking clients waiting to open.
- io_devctlext
- Custom devctl command.
- name
- The device's name i.e. /dev/ser1
QNX Neutrino
TTYCTRL