diff options
Diffstat (limited to '')
-rw-r--r-- | public/sdk/inc/ntddser.h | 529 |
1 files changed, 529 insertions, 0 deletions
diff --git a/public/sdk/inc/ntddser.h b/public/sdk/inc/ntddser.h new file mode 100644 index 000000000..a76a0ff4c --- /dev/null +++ b/public/sdk/inc/ntddser.h @@ -0,0 +1,529 @@ +/*++ BUILD Version: 0001 // Increment this if a change has global effects + +Copyright (c) 1990-1993 Microsoft Corporation + +Module Name: + + ntddser.h + +Abstract: + + This is the include file that defines all constants and types for + accessing the Serial device. + +Author: + + Steve Wood (stevewo) 27-May-1990 + +Revision History: + +--*/ + + +// +// NtDeviceIoControlFile IoControlCode values for this device. +// + +#define IOCTL_SERIAL_SET_BAUD_RATE CTL_CODE(FILE_DEVICE_SERIAL_PORT, 1,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_QUEUE_SIZE CTL_CODE(FILE_DEVICE_SERIAL_PORT, 2,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_LINE_CONTROL CTL_CODE(FILE_DEVICE_SERIAL_PORT, 3,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_BREAK_ON CTL_CODE(FILE_DEVICE_SERIAL_PORT, 4,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_BREAK_OFF CTL_CODE(FILE_DEVICE_SERIAL_PORT, 5,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_IMMEDIATE_CHAR CTL_CODE(FILE_DEVICE_SERIAL_PORT, 6,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_TIMEOUTS CTL_CODE(FILE_DEVICE_SERIAL_PORT, 7,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_TIMEOUTS CTL_CODE(FILE_DEVICE_SERIAL_PORT, 8,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_DTR CTL_CODE(FILE_DEVICE_SERIAL_PORT, 9,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_CLR_DTR CTL_CODE(FILE_DEVICE_SERIAL_PORT,10,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_RESET_DEVICE CTL_CODE(FILE_DEVICE_SERIAL_PORT,11,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_RTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,12,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_CLR_RTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,13,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_XOFF CTL_CODE(FILE_DEVICE_SERIAL_PORT,14,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_XON CTL_CODE(FILE_DEVICE_SERIAL_PORT,15,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_WAIT_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,16,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_WAIT_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,17,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_WAIT_ON_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,18,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_PURGE CTL_CODE(FILE_DEVICE_SERIAL_PORT,19,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_BAUD_RATE CTL_CODE(FILE_DEVICE_SERIAL_PORT,20,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_LINE_CONTROL CTL_CODE(FILE_DEVICE_SERIAL_PORT,21,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_CHARS CTL_CODE(FILE_DEVICE_SERIAL_PORT,22,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_CHARS CTL_CODE(FILE_DEVICE_SERIAL_PORT,23,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_HANDFLOW CTL_CODE(FILE_DEVICE_SERIAL_PORT,24,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_HANDFLOW CTL_CODE(FILE_DEVICE_SERIAL_PORT,25,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_MODEMSTATUS CTL_CODE(FILE_DEVICE_SERIAL_PORT,26,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_COMMSTATUS CTL_CODE(FILE_DEVICE_SERIAL_PORT,27,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_XOFF_COUNTER CTL_CODE(FILE_DEVICE_SERIAL_PORT,28,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_PROPERTIES CTL_CODE(FILE_DEVICE_SERIAL_PORT,29,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_DTRRTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,30,METHOD_BUFFERED,FILE_ANY_ACCESS) + + +// begin_winioctl + +#define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// end_winioctl + +#define IOCTL_SERIAL_CONFIG_SIZE CTL_CODE(FILE_DEVICE_SERIAL_PORT,32,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_GET_COMMCONFIG CTL_CODE(FILE_DEVICE_SERIAL_PORT,33,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_SET_COMMCONFIG CTL_CODE(FILE_DEVICE_SERIAL_PORT,34,METHOD_BUFFERED,FILE_ANY_ACCESS) + +#define IOCTL_SERIAL_GET_STATS CTL_CODE(FILE_DEVICE_SERIAL_PORT,35,METHOD_BUFFERED,FILE_ANY_ACCESS) +#define IOCTL_SERIAL_CLEAR_STATS CTL_CODE(FILE_DEVICE_SERIAL_PORT,36,METHOD_BUFFERED,FILE_ANY_ACCESS) + +typedef struct _SERIALPERF_STATS { + ULONG ReceivedCount; + ULONG TransmittedCount; + ULONG FrameErrorCount; + ULONG SerialOverrunErrorCount; + ULONG BufferOverrunErrorCount; + ULONG ParityErrorCount; +} SERIALPERF_STATS, *PSERIALPERF_STATS; + +typedef struct _SERIALCONFIG { + ULONG Size; + USHORT Version; + ULONG SubType; + ULONG ProvOffset; + ULONG ProviderSize; + WCHAR ProviderData[1]; +} SERIALCONFIG,*PSERIALCONFIG; + +// +// NtDeviceIoControlFile InputBuffer/OutputBuffer record structures for +// this device. +// + +// +// This structure used to set line parameters. +// + +typedef struct _SERIAL_LINE_CONTROL { + UCHAR StopBits; + UCHAR Parity; + UCHAR WordLength; + } SERIAL_LINE_CONTROL,*PSERIAL_LINE_CONTROL; + +typedef struct _SERIAL_TIMEOUTS { + ULONG ReadIntervalTimeout; + ULONG ReadTotalTimeoutMultiplier; + ULONG ReadTotalTimeoutConstant; + ULONG WriteTotalTimeoutMultiplier; + ULONG WriteTotalTimeoutConstant; + } SERIAL_TIMEOUTS,*PSERIAL_TIMEOUTS; + +// +// This structure used to resize the input/output buffers. +// An error code will be returned if the size exceeds the +// drivers capacity. The driver reserves the right to +// allocate a larger buffer. +// + +typedef struct _SERIAL_QUEUE_SIZE { + ULONG InSize; + ULONG OutSize; + } SERIAL_QUEUE_SIZE,*PSERIAL_QUEUE_SIZE; + + +// +// This structure used by set baud rate +// + +typedef struct _SERIAL_BAUD_RATE { + ULONG BaudRate; + } SERIAL_BAUD_RATE,*PSERIAL_BAUD_RATE; + +// +// Defines the bitmask that the driver can used to notify +// app of various changes in the state of the UART. +// + +#define SERIAL_EV_RXCHAR 0x0001 // Any Character received +#define SERIAL_EV_RXFLAG 0x0002 // Received certain character +#define SERIAL_EV_TXEMPTY 0x0004 // Transmitt Queue Empty +#define SERIAL_EV_CTS 0x0008 // CTS changed state +#define SERIAL_EV_DSR 0x0010 // DSR changed state +#define SERIAL_EV_RLSD 0x0020 // RLSD changed state +#define SERIAL_EV_BREAK 0x0040 // BREAK received +#define SERIAL_EV_ERR 0x0080 // Line status error occurred +#define SERIAL_EV_RING 0x0100 // Ring signal detected +#define SERIAL_EV_PERR 0x0200 // Printer error occured +#define SERIAL_EV_RX80FULL 0x0400 // Receive buffer is 80 percent full +#define SERIAL_EV_EVENT1 0x0800 // Provider specific event 1 +#define SERIAL_EV_EVENT2 0x1000 // Provider specific event 2 + +// +// A longword is used to send down a mask that +// instructs the driver what to purge. +// +// SERIAL_PURGE_TXABORT - Implies the current and all pending writes. +// SERIAL_PURGE_RXABORT - Implies the current and all pending reads. +// SERIAL_PURGE_TXCLEAR - Implies the transmit buffer if exists +// SERIAL_PURGE_RXCLEAR - Implies the receive buffer if exists. +// + +#define SERIAL_PURGE_TXABORT 0x00000001 +#define SERIAL_PURGE_RXABORT 0x00000002 +#define SERIAL_PURGE_TXCLEAR 0x00000004 +#define SERIAL_PURGE_RXCLEAR 0x00000008 + +// +// Communication defines +// + +#define STOP_BIT_1 0 +#define STOP_BITS_1_5 1 +#define STOP_BITS_2 2 + +#define NO_PARITY 0 +#define ODD_PARITY 1 +#define EVEN_PARITY 2 +#define MARK_PARITY 3 +#define SPACE_PARITY 4 + + +// +// This structure is used to set and retrieve the special characters +// used by the nt serial driver. +// +// Note that the driver will return an error if xonchar == xoffchar. +// + +typedef struct _SERIAL_CHARS { + UCHAR EofChar; + UCHAR ErrorChar; + UCHAR BreakChar; + UCHAR EventChar; + UCHAR XonChar; + UCHAR XoffChar; + } SERIAL_CHARS,*PSERIAL_CHARS; + +// +// This structure is used to contain the flow control +// and handshaking setup. +// +// A reasonably precise explaination of how they all +// work can be found in the OS/2 tech references. +// +// For Xon/Xofflimit: +// +// When there are more characters then +// +// (typeaheadbuffersize - xofflimit) +// +// in the typeahead buffer then the driver will perform all flow +// control that the app has enabled so that the sender will (hopefully) +// stop sending characters. +// +// When there are less than xonlimit number of characters in the +// typeahead buffer the driver will perform all flow control that +// the app has enabled so that the sender will hopefully start sending +// characters again. +// +// It should be noted that if Xoff character is sent then the +// driver will also stop transmitting any more characters. This is to +// provide support for those systems that take any character that +// follows an Xoff as an implied Xon. +// + +typedef struct _SERIAL_HANDFLOW { + ULONG ControlHandShake; + ULONG FlowReplace; + LONG XonLimit; + LONG XoffLimit; + } SERIAL_HANDFLOW,*PSERIAL_HANDFLOW; + +#define SERIAL_DTR_MASK ((ULONG)0x03) +#define SERIAL_DTR_CONTROL ((ULONG)0x01) +#define SERIAL_DTR_HANDSHAKE ((ULONG)0x02) +#define SERIAL_CTS_HANDSHAKE ((ULONG)0x08) +#define SERIAL_DSR_HANDSHAKE ((ULONG)0x10) +#define SERIAL_DCD_HANDSHAKE ((ULONG)0x20) +#define SERIAL_OUT_HANDSHAKEMASK ((ULONG)0x38) +#define SERIAL_DSR_SENSITIVITY ((ULONG)0x40) +#define SERIAL_ERROR_ABORT ((ULONG)0x80000000) +#define SERIAL_CONTROL_INVALID ((ULONG)0x7fffff84) +#define SERIAL_AUTO_TRANSMIT ((ULONG)0x01) +#define SERIAL_AUTO_RECEIVE ((ULONG)0x02) +#define SERIAL_ERROR_CHAR ((ULONG)0x04) +#define SERIAL_NULL_STRIPPING ((ULONG)0x08) +#define SERIAL_BREAK_CHAR ((ULONG)0x10) +#define SERIAL_RTS_MASK ((ULONG)0xc0) +#define SERIAL_RTS_CONTROL ((ULONG)0x40) +#define SERIAL_RTS_HANDSHAKE ((ULONG)0x80) +#define SERIAL_TRANSMIT_TOGGLE ((ULONG)0xc0) +#define SERIAL_XOFF_CONTINUE ((ULONG)0x80000000) +#define SERIAL_FLOW_INVALID ((ULONG)0x7fffff20) + +// +// These are the following reasons that the device could be holding. +// +#define SERIAL_TX_WAITING_FOR_CTS ((ULONG)0x00000001) +#define SERIAL_TX_WAITING_FOR_DSR ((ULONG)0x00000002) +#define SERIAL_TX_WAITING_FOR_DCD ((ULONG)0x00000004) +#define SERIAL_TX_WAITING_FOR_XON ((ULONG)0x00000008) +#define SERIAL_TX_WAITING_XOFF_SENT ((ULONG)0x00000010) +#define SERIAL_TX_WAITING_ON_BREAK ((ULONG)0x00000020) +#define SERIAL_RX_WAITING_FOR_DSR ((ULONG)0x00000040) + +// +// These are the error values that can be returned by the +// driver. +// +#define SERIAL_ERROR_BREAK ((ULONG)0x00000001) +#define SERIAL_ERROR_FRAMING ((ULONG)0x00000002) +#define SERIAL_ERROR_OVERRUN ((ULONG)0x00000004) +#define SERIAL_ERROR_QUEUEOVERRUN ((ULONG)0x00000008) +#define SERIAL_ERROR_PARITY ((ULONG)0x00000010) + + +// +// This structure is used to get the current error and +// general status of the driver. +// + +typedef struct _SERIAL_STATUS { + ULONG Errors; + ULONG HoldReasons; + ULONG AmountInInQueue; + ULONG AmountInOutQueue; + BOOLEAN EofReceived; + BOOLEAN WaitForImmediate; + } SERIAL_STATUS,*PSERIAL_STATUS; + +// +// This structure is used for XOFF counter ioctl. The xoff ioctl +// is used to support those subsystems that feel the need to emulate +// the serial chip in software. +// +// It has the following semantics: +// +// This io request is placed into the normal device write +// queue. That is, it will be queued behind any writes +// already given to the driver. +// +// When this request becomes the current request, the character +// specified in the field XoffChar will be sent, subject to +// all other flow control already defined. +// +// Immediately upon sending the character the driver will +// perform the following actions. +// +// A timer will be initiated that will expire after the +// number of milliseconds in the Timeout field of the +// SERIAL_XOFF_COUNTER structure. +// +// The driver will initialize a counter to the value specified +// in the Counter field of the SERIAL_XOFF_RECORD. The driver +// will decrement this counter whenever a character is received. +// +// This request will then be held by the driver. It will +// actually complete under the following circumstances: +// +// 1) If there is another "write" request behind it in the queue. +// The "xoff" request will be completed with the informational status +// STATUS_SERIAL_MORE_WRITES. The Information field of the +// IOSTATUS block will be set to 0. +// +// Note: By write request we mean another SERIAL_XOFF_COUNTER +// request, or a simple write request. If the only subsequent +// request is a flush request, the driver WILL NOT automatically +// complete the SERIAL_XOFF_COUNTER request. NOTE: Transmit +// immediate requests DO NOT count as a normal write, and therefore +// would not cause a counter request to complete. +// +// 2) The timer expires. The driver will complete the request +// with the informational status STATUS_SERIAL_COUNTER_TIMEOUT. +// The Information field of the IOSTATUS of the request will be set to 0. +// +// 3) The driver maintained counter goes to zero. (By implication, +// at least "Counter" number of characters have been received.) +// The request will be completed with a successful status +// of STATUS_SUCCESS. The Information field of the +// IOSTATUS of the request will be set to 0. +// +// 4) This is really a degenerate case of "1" above. The request +// is started and no request follow it on the queue. However +// at some point, before "2" or "3" above occur, another "write" +// request is started. This will cause the completion actions +// stated in "1" to occur. +// +// NOTE: This request being issued WILL NOT cause the normal flow +// control code of the driver to be invoked. +// +// NOTE: This request has no interaction with the IOCTL_SERIAL_WAIT_ON_MASK +// request. An application CAN NOT wait via the above ^^^^^^ ioctl +// on the counter going to zero. The application must synchronize +// with the particular IOCTL_SERIAL_XOFF_COUNTER request. +// +// NOTE: The Timeout value equal to zero would cause the counter +// to NEVER timeout. The only way that such a request could +// be killed at that point would be issue another write, or +// to purge the WRITE queue. +// + +typedef struct _SERIAL_XOFF_COUNTER { + ULONG Timeout; // Zero based. In milliseconds + LONG Counter; // Must be greater than zero. + UCHAR XoffChar; + } SERIAL_XOFF_COUNTER,*PSERIAL_XOFF_COUNTER; + +// +// The following structure (and defines) are passed back by +// the serial driver in response to the get properties ioctl. +// + +#define SERIAL_SP_SERIALCOMM ((ULONG)0x00000001) + +// +// Provider subtypes +// +#define SERIAL_SP_UNSPECIFIED ((ULONG)0x00000000) +#define SERIAL_SP_RS232 ((ULONG)0x00000001) +#define SERIAL_SP_PARALLEL ((ULONG)0x00000002) +#define SERIAL_SP_RS422 ((ULONG)0x00000003) +#define SERIAL_SP_RS423 ((ULONG)0x00000004) +#define SERIAL_SP_RS449 ((ULONG)0x00000005) +#define SERIAL_SP_MODEM ((ULONG)0X00000006) +#define SERIAL_SP_FAX ((ULONG)0x00000021) +#define SERIAL_SP_SCANNER ((ULONG)0x00000022) +#define SERIAL_SP_BRIDGE ((ULONG)0x00000100) +#define SERIAL_SP_LAT ((ULONG)0x00000101) +#define SERIAL_SP_TELNET ((ULONG)0x00000102) +#define SERIAL_SP_X25 ((ULONG)0x00000103) + +// +// Provider capabilities flags. +// + +#define SERIAL_PCF_DTRDSR ((ULONG)0x0001) +#define SERIAL_PCF_RTSCTS ((ULONG)0x0002) +#define SERIAL_PCF_CD ((ULONG)0x0004) +#define SERIAL_PCF_PARITY_CHECK ((ULONG)0x0008) +#define SERIAL_PCF_XONXOFF ((ULONG)0x0010) +#define SERIAL_PCF_SETXCHAR ((ULONG)0x0020) +#define SERIAL_PCF_TOTALTIMEOUTS ((ULONG)0x0040) +#define SERIAL_PCF_INTTIMEOUTS ((ULONG)0x0080) +#define SERIAL_PCF_SPECIALCHARS ((ULONG)0x0100) +#define SERIAL_PCF_16BITMODE ((ULONG)0x0200) + +// +// Comm provider settable parameters. +// + +#define SERIAL_SP_PARITY ((ULONG)0x0001) +#define SERIAL_SP_BAUD ((ULONG)0x0002) +#define SERIAL_SP_DATABITS ((ULONG)0x0004) +#define SERIAL_SP_STOPBITS ((ULONG)0x0008) +#define SERIAL_SP_HANDSHAKING ((ULONG)0x0010) +#define SERIAL_SP_PARITY_CHECK ((ULONG)0x0020) +#define SERIAL_SP_CARRIER_DETECT ((ULONG)0x0040) + +// +// Settable baud rates in the provider. +// + +#define SERIAL_BAUD_075 ((ULONG)0x00000001) +#define SERIAL_BAUD_110 ((ULONG)0x00000002) +#define SERIAL_BAUD_134_5 ((ULONG)0x00000004) +#define SERIAL_BAUD_150 ((ULONG)0x00000008) +#define SERIAL_BAUD_300 ((ULONG)0x00000010) +#define SERIAL_BAUD_600 ((ULONG)0x00000020) +#define SERIAL_BAUD_1200 ((ULONG)0x00000040) +#define SERIAL_BAUD_1800 ((ULONG)0x00000080) +#define SERIAL_BAUD_2400 ((ULONG)0x00000100) +#define SERIAL_BAUD_4800 ((ULONG)0x00000200) +#define SERIAL_BAUD_7200 ((ULONG)0x00000400) +#define SERIAL_BAUD_9600 ((ULONG)0x00000800) +#define SERIAL_BAUD_14400 ((ULONG)0x00001000) +#define SERIAL_BAUD_19200 ((ULONG)0x00002000) +#define SERIAL_BAUD_38400 ((ULONG)0x00004000) +#define SERIAL_BAUD_56K ((ULONG)0x00008000) +#define SERIAL_BAUD_128K ((ULONG)0x00010000) +#define SERIAL_BAUD_115200 ((ULONG)0x00020000) +#define SERIAL_BAUD_57600 ((ULONG)0x00040000) +#define SERIAL_BAUD_USER ((ULONG)0x10000000) + +// +// Settable Data Bits +// + +#define SERIAL_DATABITS_5 ((USHORT)0x0001) +#define SERIAL_DATABITS_6 ((USHORT)0x0002) +#define SERIAL_DATABITS_7 ((USHORT)0x0004) +#define SERIAL_DATABITS_8 ((USHORT)0x0008) +#define SERIAL_DATABITS_16 ((USHORT)0x0010) +#define SERIAL_DATABITS_16X ((USHORT)0x0020) + +// +// Settable Stop and Parity bits. +// + +#define SERIAL_STOPBITS_10 ((USHORT)0x0001) +#define SERIAL_STOPBITS_15 ((USHORT)0x0002) +#define SERIAL_STOPBITS_20 ((USHORT)0x0004) +#define SERIAL_PARITY_NONE ((USHORT)0x0100) +#define SERIAL_PARITY_ODD ((USHORT)0x0200) +#define SERIAL_PARITY_EVEN ((USHORT)0x0400) +#define SERIAL_PARITY_MARK ((USHORT)0x0800) +#define SERIAL_PARITY_SPACE ((USHORT)0x1000) + +typedef struct _SERIAL_COMMPROP { + USHORT PacketLength; + USHORT PacketVersion; + ULONG ServiceMask; + ULONG Reserved1; + ULONG MaxTxQueue; + ULONG MaxRxQueue; + ULONG MaxBaud; + ULONG ProvSubType; + ULONG ProvCapabilities; + ULONG SettableParams; + ULONG SettableBaud; + USHORT SettableData; + USHORT SettableStopParity; + ULONG CurrentTxQueue; + ULONG CurrentRxQueue; + ULONG ProvSpec1; + ULONG ProvSpec2; + WCHAR ProvChar[1]; +} SERIAL_COMMPROP,*PSERIAL_COMMPROP; + +// +// Define masks for the rs-232 input and output. +// + +#define SERIAL_DTR_STATE ((ULONG)0x00000001) +#define SERIAL_RTS_STATE ((ULONG)0x00000002) +#define SERIAL_CTS_STATE ((ULONG)0x00000010) +#define SERIAL_DSR_STATE ((ULONG)0x00000020) +#define SERIAL_RI_STATE ((ULONG)0x00000040) +#define SERIAL_DCD_STATE ((ULONG)0x00000080) + + +// begin_winioctl + +// +// The following values follow the escape designator in the +// data stream if the LSRMST_INSERT mode has been turned on. +// +#define SERIAL_LSRMST_ESCAPE ((UCHAR)0x00) + +// +// Following this value is the contents of the line status +// register, and then the character in the RX hardware when +// the line status register was encountered. +// +#define SERIAL_LSRMST_LSR_DATA ((UCHAR)0x01) + +// +// Following this value is the contents of the line status +// register. No error character follows +// +#define SERIAL_LSRMST_LSR_NODATA ((UCHAR)0x02) + +// +// Following this value is the contents of the modem status +// register. +// +#define SERIAL_LSRMST_MST ((UCHAR)0x03) + +// end_winioctl |