📄 netcom.h
字号:
/*****************************************************************************
* netcom.h *
*****************************************************************************
* DESCRIPTION: This file contains a set of routines for doing low-level *
* serial communications on the IBM PC. *
* *
*****************************************************************************/
#include <stdio.h>
#include <conio.h>
#include <dos.h>
/*****************************************************************************
* 8250 Definitions *
*****************************************************************************/
/* Offsets to various 8250 registers. Taken from IBM Technical */
/* Reference Manual, p. 1-225 */
#define TXBUFF 0 /* Transmit buffer register */
#define RXBUFF 0 /* Receive buffer register */
#define DLLSB 0 /* Divisor latch LS byte */
#define DLMSB 1 /* Divisor latch MS byte */
#define IER 1 /* Interrupt enable register */
#define IIR 2 /* Interrupt ID register */
#define LCR 3 /* Line control register */
#define MCR 4 /* Modem control register */
#define LSR 5 /* Line status register */
#define MSR 6 /* Modem status register */
/* Modem control register bits */
#define DTR 0x01 /* Data terminal ready */
#define RTS 0x02 /* Request to send */
#define OUT1 0x04 /* Output #1 */
#define OUT2 0x08 /* Output #2 */
#define LPBK 0x10 /* Loopback mode bit */
/* Modem status register bits */
#define DCTS 0x01 /* Delta clear to send */
#define DDSR 0x02 /* Delta data set ready */
#define TERI 0x04 /* Trailing edge ring indicator */
#define DRLSD 0x08 /* Delta Rx line signal detect */
#define CTS 0x10 /* Clear to send */
#define DSR 0x20 /* Data set ready */
#define RI 0x40 /* Ring indicator */
#define RLSD 0x80 /* Receive line signal detect */
/* Line control register bits */
#define DATA5 0x00 /* 5 Data bits */
#define DATA6 0x01 /* 6 Data bits */
#define DATA7 0x02 /* 7 Data bits */
#define DATA8 0x03 /* 8 Data bits */
#define STOP1 0x00 /* 1 Stop bit */
#define STOP2 0x04 /* 2 Stop bits */
#define NOPAR 0x00 /* No parity */
#define ODDPAR 0x08 /* Odd parity */
#define EVNPAR 0x18 /* Even parity */
#define STKPAR 0x28 /* Stick parity */
#define ZROPAR 0x38 /* Zero parity */
/* Line status register bits */
#define RDR 0x01 /* Receive data ready */
#define ERRS 0x1E /* All the error bits */
#define TXR 0x20 /* Transmitter ready */
/* Interrupt enable register bits */
#define DR 0x01 /* Data ready */
#define THRE 0x02 /* Tx buffer empty */
#define RLS 0x04 /* Receive line status */
/*****************************************************************************
* Names for Numbers *
*****************************************************************************/
#define MAX_PORT 4
#define TRUE 1
#define FALSE 0
/*****************************************************************************
* Global Data *
*****************************************************************************/
/* Ash communication values */
#define SOH 0x01 /* consult file header */
#define EOH 0x02 /* consult file end */
#define CONSULT_INTER_ON 0x03 /* consult interrupt the ash to act */
#define CONSULT_INTER_OFF 0x04
#define CONSULT_RECEIVE_START 0x05 /* consult file begin to transfer */
#define CONSULT_RECEIVE_END 0x06 /* consult file is ready */
#define CONSULT_TRANSFER_START 0x07
#define CONSULT_TRANSFER_END 0x08
#define CONSULT_READ_START 0x09
#define CONSULT_READ_END 0x0a
#define WAIT_ON 0x0b
#define WAIT_OFF 0x0c
#define SPEED 9600
#define ASH_MIN 0x00
#define ASH_HOUR 0x01
#define ASH_INTER 0x02
#define ASH_MONTH 0X03
#define ASH_DATA 0x04
#define ASH_SPY_ON 0X05
#define ASH_PARA 0X06
#define ASH_SPY_OFF 0X07
#define ASH_ON 1
#define ASH_OFF 2
#define ASH1 1
#define ASH2 2
/* UART i/o addresses. Values depend upon which COMM port is selected */
int uart1_data; /* Data register */
int uart1_ier; /* Interrupt enable register */
int uart1_iir; /* Interrupt identification register */
int uart1_lcr; /* Line control register */
int uart1_mcr; /* Modem control register */
int uart1_lsr; /* Line status register */
int uart1_msr; /* Modem status register */
char com1_installed; /* Flag: Communications routines installed */
int intnum1; /* Interrupt vector number for chosen port */
char i8259bit1; /* 8259 bit mask */
char old1_i8259_mask; /* Copy as it was when we were called */
char old1_ier; /* Modem register contents saved for */
char old1_mcr; /* restoring when we're done */
int uart2_data; /* Data register */
int uart2_ier; /* Interrupt enable register */
int uart2_iir; /* Interrupt identification register */
int uart2_lcr; /* Line control register */
int uart2_mcr; /* Modem control register */
int uart2_lsr; /* Line status register */
int uart2_msr; /* Modem status register */
char com2_installed; /* Flag: Communications routines installed */
int intnum2; /* Interrupt vector number for chosen port */
char i8259bit2; /* 8259 bit mask */
char old2_i8259_mask; /* Copy as it was when we were called */
char old2_ier; /* Modem register contents saved for */
char old2_mcr; /* restoring when we're done */
void (_cdecl _interrupt *old1_vector)(); /* Place to save COM1 vector */
void (_cdecl _interrupt *old2_vector)(); /* Place to save COM2 vector */
/* Transmit queue. Characters to be transmitted are held here until the */
/* UART is ready to transmit them. */
#define TX_QUENE_SIZE 128 /* Transmit quene size. Change to suit */
char tx1_quene[TX_QUENE_SIZE];
int tx1_in; /* Index of where to store next character */
int tx1_out; /* Index of where to retrieve next character */
int tx1_chars; /* Count of characters in queue */
char tx2_quene[TX_QUENE_SIZE];
int tx2_in; /* Index of where to store next character */
int tx2_out; /* Index of where to retrieve next character */
int tx2_chars; /* Count of characters in queue */
/* Receive queue. Received characters are held here until retrieved by */
/* com_rx() */
#define RX_QUENE_SIZE 8192 /* Receive quene size. Change to suit */
char rx1_quene[RX_QUENE_SIZE];
int rx1_in; /* Index of where to store next character */
int rx1_out; /* Index of where to retrieve next character */
int rx1_chars; /* Count of characters in queue */
char rx2_quene[RX_QUENE_SIZE];
int rx2_in; /* Index of where to store next character */
int rx2_out; /* Index of where to retrieve next character */
int rx2_chars; /* Count of characters in queue */
#define RX_INTER_QUENE_SIZE 256 /* Receive online ash data quene size */
char rx1_inter_quene[RX_INTER_QUENE_SIZE];
int rx1_inter_in; /* Index of where to store next character */
int rx1_inter_out; /* Index of where to retrieve next character */
int rx1_inter_chars; /* Count of characters in quene */
char rx2_inter_quene[RX_INTER_QUENE_SIZE];
int rx2_inter_in; /* Index of where to store next character */
int rx2_inter_out; /* Index of where to retrieve next character */
int rx2_inter_chars; /* Count of characters in quene */
char consult1_transfer_state;
char consult1_receive_state;
char consult1_inter_state;
char consult1_read_state;
char wait1_state;
char consult_10min_state;
char consult2_transfer_state;
char consult2_receive_state;
char consult2_inter_state;
char consult2_read_state;
char wait2_state;
int consult_number;
int receive_char;
unsigned int ash_data_number;
char *data_number;
int ash_state;
int ash1_state;
int ash2_state;
int spy_number;
int ash_consult_state;
/*****************************************************************************
* DESCRIPTION: ANSI C function prototypes and other definitions for the *
* routines in ibmcom.c *
* *
*****************************************************************************/
int com1_carrier(void);
int com2_carrier(void);
void com1_deinstall(void);
void com2_deinstall(void);
void com1_flush_rx(void);
void com1_flush_tx(void);
void com1_flush_rx_inter(void);
void com2_flush_rx(void);
void com2_flush_tx(void);
void com2_flush_rx_inter(void);
int com1_install();
int com2_install();
void (_cdecl _interrupt _far com1_interrupt_driver)();
void (_cdecl _interrupt _far com2_interrupt_driver)();
void com_lower_dtr(void);
void com_raise_dtr(void);
char com_rx();
int com_rx_empty(void);
void com_set_parity(enum par_code parity, int stop_bits);
void com_set_speed(unsigned speed);
void com_tx(char c);
int com_tx_empty(void);
int com_tx_ready(void);
int com_rx_empty(void);
int com_rx_inter_empty(void);
void rs_init(void);
void rs_exit(void);
enum par_code { COM_NONE, COM_EVEN, COM_ODD, COM_ZERO, COM_ONE };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -