244 lines
14 KiB
C
244 lines
14 KiB
C
|
/*************************************************************************
|
||
|
**
|
||
|
** Miscelaneous definitions.
|
||
|
*/
|
||
|
typedef unsigned short ushort;
|
||
|
typedef unsigned char uchar;
|
||
|
|
||
|
#define NULL 0
|
||
|
#define FALSE 0
|
||
|
#define TRUE 1
|
||
|
|
||
|
#define LPTx 0x80 /* Mask to indicate cid is for LPT device */ /*081985*/
|
||
|
#define LPTxMask 0x7F /* Mask to get cid for LPT device */ /*081985*/
|
||
|
|
||
|
#define PIOMAX 3 /* Max number of LPTx devices in high level */ /*081985*/
|
||
|
#define CDEVMAX 10 /* Max number of COMx devices in high level */
|
||
|
#define DEVMAX 13 /* Max number of devices in high level */ /*081985*/
|
||
|
|
||
|
/*************************************************************************
|
||
|
**
|
||
|
** device control block.
|
||
|
** This block of information defines the functional parameters of the
|
||
|
** communications software and hardware.
|
||
|
**
|
||
|
** Fields in the DCB are defined as follows:
|
||
|
**
|
||
|
** Id - Comm device ID, set by the device driver.
|
||
|
** BaudRate - Baud rate at which operating.
|
||
|
** ByteSize - Number of bits per transmitted/received byte. (4-8)
|
||
|
** Received data is also masked off to this size.
|
||
|
** Parity - Transmitt/Receive Parity. (0,1,2,3,4) = (None, Odd,
|
||
|
** Even, Mark, Space)
|
||
|
** StopBits - Number of stop bits. (0,1,2) = (1, 1.5, 2)
|
||
|
** RlsTimeout - Amount of time, in milleseconds, to wait for RLSD to
|
||
|
** become high. RLSD, Receive Line Signal Detect is also
|
||
|
** known as CD, Carrier Detect. RLSD flow control can be
|
||
|
** achieved by specifying infinite timeout.
|
||
|
** CtsTimeout - Amount of time, in milleseconds, to wait for CTS,
|
||
|
** Clear To Send, to become high. CTS flow control can
|
||
|
** be achieved by specifying infinite timeout.
|
||
|
** DsrTimeout - Amount of time, in milleseconds, to wait for DSR,
|
||
|
** Data Set Ready, to become high. DSR flow control can
|
||
|
** be acheived by specifying infinite timeout.
|
||
|
** fBinary - Binary Mode flag. In non-binary mode, EofChar is
|
||
|
** recognized and remembered as end of data.
|
||
|
** fRtsDisable - Disable RTS flag. If set, Request To Send is NOT
|
||
|
** used, and remains low. Normally, RTS is asserted when
|
||
|
** the device is openned, and dropped when closed.
|
||
|
** fParity - Enable Parity Checking. Parity errors are not
|
||
|
** reported when 0.
|
||
|
** fOutxCtsFlow - enable output xon/xoff(hardware) using cts
|
||
|
** fOutxDsrFlow - enable output xon/xoff(hardware) using dsr
|
||
|
** fOutX - Indicates that X-ON/X-OFF flow control is to be used
|
||
|
** during transmission. The transmitter will halt if
|
||
|
** an X-OFF character is received, and will start again
|
||
|
** when an X-ON character is received.
|
||
|
** fInX - Indicates that X-ON/X-OFF flow control is to be used
|
||
|
** during reception. An X-OFF character will be
|
||
|
** transmitted when the receive queue comes within 10
|
||
|
** characters of being full, after which an X-ON will be
|
||
|
** transmitted when the queue comes with 10 characters
|
||
|
** of being empty.
|
||
|
** fPeChar - Indicates that characters received with parity errors
|
||
|
** are to be replaced with the character specified in
|
||
|
** PeChar, below.
|
||
|
** fNull - Indicates that received NULL characters are to be
|
||
|
** discarded.
|
||
|
** fChEvt - Indicates that the reception of EvtChar is to be
|
||
|
** flagged as an event by cevt.
|
||
|
** fDtrFlow - Indicates that the DTR signal is to be used for
|
||
|
** receive flow control. (cextfcn can be used to set and
|
||
|
** clear DTR, overriding this definition).
|
||
|
** fRtsFlow - Indicates that the RTS signal is to be used for
|
||
|
** receive flow control. (cextfcn can be used to set and
|
||
|
** clear RTS, overriding this definition).
|
||
|
** XonChar - X-ON character for both transmit and receive
|
||
|
** XoffChar - X-OFF character for both transmit and receive
|
||
|
** XonLim - When the number of characters in the receive queue
|
||
|
** drops below this value, then an X-ON character is
|
||
|
** sent, if enabled, and DTR is set, if enabled.
|
||
|
** XoffLim - When the number of characters in the receive queue
|
||
|
** exceeds this value, then an X-OFF character is sent,
|
||
|
** if enabled, and DTR is dropped, if enabled.
|
||
|
** PeChar - Parity Error replacement character.
|
||
|
** EvtChar - Character which triggers an event flag.
|
||
|
** EofChar - Character which specifies end of input.
|
||
|
** TxDelay - Specifies the minimum amount of time that must pass
|
||
|
** between transmission of characters.
|
||
|
**
|
||
|
** Timeouts are in milleseconds. 0 means ignore the signal. 0xffff means
|
||
|
** infinite timeout.
|
||
|
**
|
||
|
*************************************************************************/
|
||
|
typedef struct {
|
||
|
char Id; /* Internal Device ID */
|
||
|
ushort BaudRate; /* Baudrate at which runing */
|
||
|
char ByteSize; /* Number of bits/byte, 4-8 */
|
||
|
char Parity; /* 0,1,2,3,4 = None,Odd,Even,Mark,Sp*/
|
||
|
char StopBits; /* 0,1,2 = 1, 1.5, 2 */
|
||
|
ushort RlsTimeout; /* Timeout for RLSD to be set */
|
||
|
ushort CtsTimeout; /* Timeout for CTS to be set */
|
||
|
ushort DsrTimeout; /* Timeout for DSR to be set */
|
||
|
|
||
|
uchar fBinary: 1; /* CTRL-Z as EOF flag */
|
||
|
uchar fRtsDisable:1; /* Suppress RTS */
|
||
|
uchar fParity: 1; /* Enable parity check */
|
||
|
uchar fOutxCtsFlow: 1; /* Enable output xon/xoff with cts */
|
||
|
uchar fOutxDsrFlow: 1; /* Enable output xon/xoff with dsr */
|
||
|
uchar fDummy: 3;
|
||
|
|
||
|
uchar fOutX: 1; /* Enable output X-ON/X-OFF */
|
||
|
uchar fInX: 1; /* Enable input X-ON/X-OFF */
|
||
|
uchar fPeChar: 1; /* Enable Parity Err Replacement */
|
||
|
uchar fNull: 1; /* Enable Null stripping */
|
||
|
uchar fChEvt: 1; /* Enable Rx character event. */
|
||
|
uchar fDtrflow: 1; /* Enable DTR flow control */
|
||
|
uchar fRtsflow: 1; /* Enable RTS flow control */
|
||
|
uchar fDummy2: 1;
|
||
|
|
||
|
char XonChar; /* Tx and Rx X-ON character */
|
||
|
char XoffChar; /* Tx and Rx X-OFF character */
|
||
|
ushort XonLim; /* Transmit X-ON threshold */
|
||
|
ushort XoffLim; /* Transmit X-OFF threshold */
|
||
|
char PeChar; /* Parity error replacement char */
|
||
|
char EofChar; /* End of Input character */
|
||
|
char EvtChar; /* Recieved Event character */
|
||
|
ushort TxDelay; /* Amount of time between chars */
|
||
|
} DCB;
|
||
|
|
||
|
/*************************************************************************
|
||
|
**
|
||
|
** COMSTAT
|
||
|
** Status record returned by GetCommError
|
||
|
**
|
||
|
*************************************************************************/
|
||
|
typedef struct {
|
||
|
uchar fCtsHold: 1; /* Transmit is on CTS hold */
|
||
|
uchar fDsrHold: 1; /* Transmit is on DSR hold */
|
||
|
uchar fRlsdHold: 1; /* Transmit is on RLSD hold */
|
||
|
uchar fXoffHold: 1; /* Transmit is on X-Off hold */
|
||
|
uchar fXoffSent: 1; /* Recieve in X-Off or DTR hold */
|
||
|
uchar fEof: 1; /* End of file character found */
|
||
|
uchar fTxim: 1; /* Character being transmitted */
|
||
|
uchar fPerr:1; /* Printer error */ /*081985*/
|
||
|
ushort cbInQue; /* count of characters in Rx Que*/
|
||
|
ushort cbOutQue; /* count of characters in Tx Que*/
|
||
|
} COMSTAT;
|
||
|
|
||
|
/*************************************************************************
|
||
|
**
|
||
|
** DCB field definitions.
|
||
|
**
|
||
|
*************************************************************************/
|
||
|
#define NOPARITY 0
|
||
|
#define ODDPARITY 1
|
||
|
#define EVENPARITY 2
|
||
|
#define MARKPARITY 3
|
||
|
#define SPACEPARITY 4
|
||
|
|
||
|
#define ONESTOPBIT 0
|
||
|
#define ONE5STOPBITS 1
|
||
|
#define TWOSTOPBITS 2
|
||
|
|
||
|
#define IGNORE 0 /* Ignore signal */
|
||
|
#define INFINITE 0xffff /* Infinite timeout */
|
||
|
|
||
|
/*************************************************************************
|
||
|
**
|
||
|
** Comm Device Driver Error Bits.
|
||
|
**
|
||
|
*************************************************************************/
|
||
|
#define CE_RXOVER 0x0001 /* Receive Queue overflow */
|
||
|
#define CE_OVERRUN 0x0002 /* Receive Overrun Error */
|
||
|
#define CE_RXPARITY 0x0004 /* Receive Parity Error */
|
||
|
#define CE_FRAME 0x0008 /* Receive Framing error */
|
||
|
#define CE_CTSTO 0x0020 /* CTS Timeout */
|
||
|
#define CE_DSRTO 0x0040 /* DSR Timeout */
|
||
|
#define CE_RLSDTO 0x0080 /* RLSD Timeout */
|
||
|
#define CE_PTO 0x0100 /* LPTx Timeout */ /*081985*/
|
||
|
#define CE_IOE 0x0200 /* LPTx I/O Error */ /*081985*/
|
||
|
#define CE_DNS 0x0400 /* LPTx Device not selected */ /*081985*/
|
||
|
#define CE_OOP 0x0800 /* LPTx Out-Of-Paper */ /*081985*/
|
||
|
#define CE_MODE 0x8000 /* Requested mode unsupported */
|
||
|
|
||
|
/*************************************************************************
|
||
|
**
|
||
|
** Initialization Error Codes
|
||
|
**
|
||
|
*************************************************************************/
|
||
|
#define IE_BADID -1 /* Invalid or unsupported id */
|
||
|
#define IE_OPEN -2 /* Device Already Open */
|
||
|
#define IE_NOPEN -3 /* Device Not Open */
|
||
|
#define IE_MEMORY -4 /* Unable to allocate queues */
|
||
|
#define IE_DEFAULT -5 /* Error in default parameters */
|
||
|
#define IE_HARDWARE -10 /* Hardware Not Present */
|
||
|
#define IE_BYTESIZE -11 /* Illegal Byte Size */
|
||
|
#define IE_BAUDRATE -12 /* Unsupported BaudRate */
|
||
|
/*************************************************************************
|
||
|
**
|
||
|
** Event mask definitions. Used by SetCommEventMask and GetCommEventMask
|
||
|
**
|
||
|
** RXCHAR - Set when any character is received and placed in the input
|
||
|
** queue.
|
||
|
** RXFLAG - Set when a particular character, as defined in the dcb, is
|
||
|
** received and placed in the input queue.
|
||
|
** TXEMPTY - Set when the last character in the transmit queue is
|
||
|
** transmitted.
|
||
|
** CTS - Set when the CTS signal changes state.
|
||
|
** DSR - Set when the DSR signal changes state.
|
||
|
** RLSD - Set when the RLSD signal changes state.
|
||
|
** BREAK - Set when a break is detected on input.
|
||
|
** ERR - Set when a line status error occurs.
|
||
|
**
|
||
|
*************************************************************************/
|
||
|
#define EV_RXCHAR 0x0001 /* Any Character received */
|
||
|
#define EV_RXFLAG 0x0002 /* Received certain character */
|
||
|
#define EV_TXEMPTY 0x0004 /* Transmitt Queue Empty */
|
||
|
#define EV_CTS 0x0008 /* CTS changed state */
|
||
|
#define EV_DSR 0x0010 /* DSR changed state */
|
||
|
#define EV_RLSD 0x0020 /* RLSD changed state */
|
||
|
#define EV_BREAK 0x0040 /* BREAK received */
|
||
|
#define EV_ERR 0x0080 /* Line Status Error Occurred */
|
||
|
#define EV_RING 0x0100 /* Ring signal detected */
|
||
|
#define EV_PERR 0x0200 /* LPTx error occured */ /*081985*/
|
||
|
|
||
|
/*************************************************************************
|
||
|
**
|
||
|
** Extended Functions
|
||
|
**
|
||
|
** SETXOFF - Causes transmit to behave as if an X-OFF character had
|
||
|
** been received. Valid only if transmit X-ON/X-OFF specified
|
||
|
** in the dcb.
|
||
|
** SETXON - Causes transmit to behave as if an X-ON character had
|
||
|
** been received. Valid only if transmit X-ON/X-OFF specified
|
||
|
** in the dcb.
|
||
|
*************************************************************************/
|
||
|
#define SETXOFF 1 /* Set X-Off for output control */
|
||
|
#define SETXON 2 /* Set X-ON for output control */
|
||
|
#define SETRTS 3 /* Set RTS high */
|
||
|
#define CLRRTS 4 /* Set RTS low */
|
||
|
#define SETDTR 5 /* Set DTR high */
|
||
|
#define CLRDTR 6 /* Set DTR low */
|
||
|
#define RESETDEV 7 /* Reset device if possible */ /*081985*/
|