Rs232 - mathfur/minix GitHub Wiki

呼出元

概要

実装

typedef struct rs232 {
  tty_t *tty;

  int icount;	// 入力バイト数
  char *ihead;	// input buffer上の、次の空いている場所
  char *itail;	// first byte to give to TTY
  bool_t idevready;	// すでに受信可能か?
  char cts;	// CLOCALならMS_CTS(=Modem Statel ..)、それ以外は0

  unsigned char ostate;		// 以下のフラグの集合
#define ODONE          1	// 出力済み (< 出力可能ビットs)
#define ORAW           2	// rawモード for xoff無効 (< enab. bits)
#define OWAKEUP        4	// tty_wakeup保留 (asmコードのみ)
#define ODEVREADY MS_CTS	// 外部デバイスのハードウエアが準備完了
#define OQUEUED     0x20	// obufが空ではない
#define OSWREADY    0x40	/* external device software ready (no xoff) */
#define ODEVHUP  MS_RLSD	/* external device has dropped carrier */
#define OSOFTBITS  (ODONE | ORAW | OWAKEUP | OQUEUED | OSWREADY)
				/* user-defined bits */
#if (OSOFTBITS | ODEVREADY | ODEVHUP) == OSOFTBITS
				/* a weak sanity check */
#error				/* bits are not unique */
#endif
  unsigned char oxoff;		// 出力停止用キャラクタ
  bool_t inhibited;		// 出力停止中
  bool_t drain;			/* if set drain output and reconfigure line */
  int ocount;			// obufのバイト数
  char *ohead;			// obufの次の空部分
  char *otail;			// 次の出力キャラクタ

#if (MACHINE == IBM_PC)
  port_t xmit_port;		/* i/o ports */
  port_t recv_port;
  port_t div_low_port;
  port_t div_hi_port;
  port_t int_enab_port;
  port_t int_id_port;
  port_t line_ctl_port;
  port_t modem_ctl_port;
  port_t line_status_port;
  port_t modem_status_port;
#endif

  unsigned char lstatus;	/* last line status */
  unsigned char pad;		/* ensure alignment for 16-bit ints */
  unsigned framing_errors;	/* error counts (no reporting yet) */
  unsigned overrun_errors;
  unsigned parity_errors;
  unsigned break_interrupts;

  int irq;			/* irq for this line */
  int irq_hook_id;		/* interrupt hook */

  char ibuf[RS_IBUFSIZE];	// 入力バッファ
  char obuf[RS_OBUFSIZE];	// 出力バッファ
} rs232_t;

コメント