GSERIAL.H
上传用户:b2s168
上传日期:2007-10-24
资源大小:9k
文件大小:8k
开发平台:

DOS

  1. /*---------------------------------------------------------------------*
  2.    FILENAME: GSERIAL.H
  3.    This file is used to define const and class for GSERIAL.CPP
  4. *--------------------------------------------------------------------*/
  5. #define COM1            1
  6. #define COM2            2
  7. #define COM3            3
  8. #define COM4            4
  9. #define COM5            5
  10. #define COM6            6
  11. #define COM1BASE        0x3F8   /*  Base port address for COM1  */
  12. #define COM2BASE        0x2F8   /*  Base port address for COM2  */
  13. #define COM3BASE        0x3E8   /*  Base port address for COM3  */
  14. #define COM4BASE        0x2E8   /*  Base port address for COM4  */
  15. #define COM5BASE        0x3A8   /*  Base port address for COM5  */
  16. #define COM6BASE        0x2A8   /*  Base port address for COM6  */
  17. /*
  18.     The 8250 UART has 10 registers accessible through 7 port addresses.
  19.     Here are their addresses relative to COM1BASE and COM2BASE. Note
  20.     that the baud rate registers, (DLL) and (DLH) are active only when
  21.     the Divisor-Latch Access-Bit (DLAB除数锁存器访问位) is on. The (DLAB) 
  22. is bit 7 of the (LCR--Line Control Register线路控制寄存器).
  23. * TXR Output data to the serial port.
  24. * RXR Input data from the serial port.
  25. * LCR Initialize the serial port.
  26. * IER Controls interrupt generation.
  27. * IIR Identifies interrupts.
  28. * MCR Send contorl signals to the modem.
  29. * LSR Monitor the status of the serial port.
  30. * MSR Receive status of the modem.
  31. * DLL Low byte of baud rate divisor.
  32. * DHH High byte of baud rate divisor.
  33. */
  34. /*The following is the adress of the registers               DLAB status */
  35. #define TXR             0       /*  Transmit register (WRITE)   0 */
  36. #define RXR             0       /*  Receive register  (READ) 0 */
  37. #define IER             1       /*  Interrupt Enable x */
  38. #define IIR             2       /*  Interrupt ID x */
  39. #define LCR             3       /*  Line control x */
  40. #define MCR             4       /*  Modem control x */
  41. #define LSR             5       /*  Line Status x */
  42. #define MSR             6       /*  Modem Status x */
  43. #define DLL             0       /*  Divisor Latch Low 1 */
  44. #define DLH             1       /*  Divisor latch High 1 */
  45. /*-------------------------------------------------------------------*
  46.   Bit values held in the Line Control Register (LCR).
  47. bit meaning
  48. --- -------
  49. 0-1 00=5 bits, 01=6 bits, 10=7 bits, 11=8 bits. /word length select bit
  50. 2 Stop bits. /
  51. 3 0=parity off, 1=parity on. /Parity Enable=1
  52. 4 0=parity odd, 1=parity even. /Odd or Even select
  53. 5 Sticky parity. /
  54. 6 Set break.
  55. 7 Toggle port addresses. /1:access 
  56.  *-------------------------------------------------------------------*/
  57. #define LCR_NO_PARITY       0x00
  58. #define LCR_EVEN_PARITY     0x18
  59. #define LCR_ODD_PARITY      0x08
  60. /*-------------------------------------------------------------------*
  61.   Bit values held in the Line Status Register (LSR).
  62. bit meaning
  63. --- -------
  64. 0 Data ready.
  65. 1 Overrun error - Data register overwritten.
  66. 2 Parity error - bad transmission.
  67. 3 Framing error - No stop bit was found.
  68. 4 Break detect - End to transmission requested.
  69. 5 Transmitter holding register is empty.
  70. 6 Transmitter shift register is empty.
  71. 7               Time out - off line.
  72.  *-------------------------------------------------------------------*/
  73. #define LSR_RCVRDY          0x01
  74. #define LSR_OVRERR          0x02
  75. #define LSR_PRTYERR         0x04
  76. #define LSR_FRMERR          0x08
  77. #define LSR_BRKERR          0x10
  78. #define LSR_XMTRDY          0x20
  79. #define LSR_XMTRSR          0x40
  80. #define LSR_TIMEOUT 0x80
  81. /*-------------------------------------------------------------------*
  82.   Bit values held in the Modem Output Control Register (MCR).
  83. bit      meaning
  84. --- -------
  85. 0 Data Terminal Ready. Computer ready to go.
  86. 1 Request To Send. Computer wants to send data.
  87. 2 auxillary output #1.
  88. 3 auxillary output #2.(Note: This bit must be
  89. set to allow the communications card to send
  90. interrupts to the system)
  91. 4 UART ouput looped back as input.
  92. 5-7 not used.
  93.  *------------------------------------------------------------------*/
  94. #define MCR_DTR             0x01
  95. #define MCR_RTS             0x02
  96. #define MCR_INT 0x08
  97. /*------------------------------------------------------------------*
  98.   Bit values held in the Modem Input Status Register (MSR).
  99. bit meaning
  100. --- -------
  101. 0 delta Clear To Send.
  102. 1 delta Data Set Ready.
  103. 2 delta Ring Indicator.
  104. 3 delta Data Carrier Detect.
  105. 4 Clear To Send.
  106. 5 Data Set Ready.
  107. 6 Ring Indicator.
  108. 7 Data Carrier Detect.
  109.  *------------------------------------------------------------------*/
  110. #define MSR_CTS             0x10
  111. #define MSR_DSR             0x20
  112. /*------------------------------------------------------------------*
  113.   Bit values held in the Interrupt Enable Register (IER).
  114. bit meaning
  115. --- -------
  116. 0 Interrupt when data received.
  117. 1 Interrupt when transmitter holding reg. empty.
  118. 2 Interrupt when data reception error.
  119. 3 Interrupt when change in modem status register.
  120. 4-7 Not used.
  121.  *------------------------------------------------------------------*/
  122. #define IER_RX_INT          0x01
  123. #define IER_TX_INT          0x02
  124. /*------------------------------------------------------------------*
  125.   Bit values held in the Interrupt Identification Register (IIR).
  126. bit meaning
  127. --- -------
  128. 0 Interrupt pending
  129. 1-2             Interrupt ID code
  130. 00=Change in modem status register,
  131. 01=Transmitter holding register empty,
  132. 10=Data received,
  133. 11=reception error, or break encountered.
  134. 3-7 Not used.
  135.  *------------------------------------------------------------------*/
  136. #define IIR_MS_ID           0x00   // Modem status
  137. #define IIR_RX_ID           0x04   // Rceived data OK,and to read the receive buffer
  138. #define IIR_TX_ID           0x02   // Transmitter holding register empty
  139. #define IIR_MASK 0x07   // Get the low 3 bits of IIR 
  140. /*
  141. These are the port addresses of the 8259 Programmable Interrupt
  142.     Controller (PIC).
  143. */
  144. #define PIC8259_IMR             0x21   /* Interrupt Mask Register port */
  145. #define PIC8259_ICR             0x20   /* Interrupt Control Port       */
  146. /*
  147.     An end of interrupt needs to be sent to the Control Port of
  148.     the 8259 when a hardware interrupt ends.
  149. */
  150. #define PIC8259_EOI            0x20   /* End Of Interrupt */
  151. /*
  152. The (IMR) tells the (PIC) to service an interrupt only if it
  153. is not masked (FALSE).
  154. */
  155. #define IRQ3            0xF7  /* COM2 */
  156. #define IRQ4            0xEF  /* COM1 */
  157. class serial{
  158.    int flag;
  159.    int  SetSerial();
  160.    int  SetOthers(int Parity, int Bits, int StopBit);
  161.    int  SetSpeed(int Speed);
  162.    int  SetPort(int Port);
  163.    void init_serial(void);
  164.    void comm_on(void);
  165.    void comm_off(void);
  166. public:
  167.    serial(int Port, int Speed, int Parity, int Bits, int StopBit);
  168.    serial &operator<<( char ch );
  169.    serial &operator<<( char *str );
  170.    serial &operator>>( char &ch );
  171.    ~serial();
  172. };
  173. #define VERSION 0x0101
  174. #define FALSE 0
  175. #define TRUE 1
  176. #define NO_ERROR 0       /* No error               */
  177. #define BUF_OVFL 1       /* Buffer overflowed      */
  178. #define IBUF_LEN 2048    // Incoming buffer
  179. #define OBUF_LEN 1024    // Outgoing buffer
  180. extern int            SError          = NO_ERROR;
  181.   extern int            portbase        = 0;
  182. extern void           interrupt(*oldvects[2])(...);
  183. // char  ccbuf[SBUFSIZ];
  184.  unsigned int   startbuf        = 0;
  185.  unsigned int   endbuf          = 0;
  186.  unsigned int   inhead          = 0;
  187.  unsigned int   intail          = 0;
  188.  unsigned int   outhead         = 0;
  189.  unsigned int   outtail         = 0;
  190. char  inbuf[IBUF_LEN]; // in buffer
  191. char  outbuf[OBUF_LEN]; // out buffer