Annotation of ntddk/src/comm/inc/ntddser.h, revision 1.1

1.1     ! root        1: /*++ BUILD Version: 0001    // Increment this if a change has global effects
        !             2: 
        !             3: Copyright (c) 1990-1993  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     ntddser.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     This is the include file that defines all constants and types for
        !            12:     accessing the Serial device.
        !            13: 
        !            14: Author:
        !            15: 
        !            16:     Steve Wood (stevewo) 27-May-1990
        !            17: 
        !            18: Revision History:
        !            19: 
        !            20: --*/
        !            21: 
        !            22: 
        !            23: //
        !            24: // NtDeviceIoControlFile IoControlCode values for this device.
        !            25: //
        !            26: 
        !            27: #define IOCTL_SERIAL_SET_BAUD_RATE      CTL_CODE(FILE_DEVICE_SERIAL_PORT, 1,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            28: #define IOCTL_SERIAL_SET_QUEUE_SIZE     CTL_CODE(FILE_DEVICE_SERIAL_PORT, 2,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            29: #define IOCTL_SERIAL_SET_LINE_CONTROL   CTL_CODE(FILE_DEVICE_SERIAL_PORT, 3,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            30: #define IOCTL_SERIAL_SET_BREAK_ON       CTL_CODE(FILE_DEVICE_SERIAL_PORT, 4,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            31: #define IOCTL_SERIAL_SET_BREAK_OFF      CTL_CODE(FILE_DEVICE_SERIAL_PORT, 5,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            32: #define IOCTL_SERIAL_IMMEDIATE_CHAR     CTL_CODE(FILE_DEVICE_SERIAL_PORT, 6,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            33: #define IOCTL_SERIAL_SET_TIMEOUTS       CTL_CODE(FILE_DEVICE_SERIAL_PORT, 7,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            34: #define IOCTL_SERIAL_GET_TIMEOUTS       CTL_CODE(FILE_DEVICE_SERIAL_PORT, 8,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            35: #define IOCTL_SERIAL_SET_DTR            CTL_CODE(FILE_DEVICE_SERIAL_PORT, 9,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            36: #define IOCTL_SERIAL_CLR_DTR            CTL_CODE(FILE_DEVICE_SERIAL_PORT,10,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            37: #define IOCTL_SERIAL_RESET_DEVICE       CTL_CODE(FILE_DEVICE_SERIAL_PORT,11,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            38: #define IOCTL_SERIAL_SET_RTS            CTL_CODE(FILE_DEVICE_SERIAL_PORT,12,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            39: #define IOCTL_SERIAL_CLR_RTS            CTL_CODE(FILE_DEVICE_SERIAL_PORT,13,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            40: #define IOCTL_SERIAL_SET_XOFF           CTL_CODE(FILE_DEVICE_SERIAL_PORT,14,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            41: #define IOCTL_SERIAL_SET_XON            CTL_CODE(FILE_DEVICE_SERIAL_PORT,15,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            42: #define IOCTL_SERIAL_GET_WAIT_MASK      CTL_CODE(FILE_DEVICE_SERIAL_PORT,16,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            43: #define IOCTL_SERIAL_SET_WAIT_MASK      CTL_CODE(FILE_DEVICE_SERIAL_PORT,17,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            44: #define IOCTL_SERIAL_WAIT_ON_MASK       CTL_CODE(FILE_DEVICE_SERIAL_PORT,18,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            45: #define IOCTL_SERIAL_PURGE              CTL_CODE(FILE_DEVICE_SERIAL_PORT,19,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            46: #define IOCTL_SERIAL_GET_BAUD_RATE      CTL_CODE(FILE_DEVICE_SERIAL_PORT,20,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            47: #define IOCTL_SERIAL_GET_LINE_CONTROL   CTL_CODE(FILE_DEVICE_SERIAL_PORT,21,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            48: #define IOCTL_SERIAL_GET_CHARS          CTL_CODE(FILE_DEVICE_SERIAL_PORT,22,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            49: #define IOCTL_SERIAL_SET_CHARS          CTL_CODE(FILE_DEVICE_SERIAL_PORT,23,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            50: #define IOCTL_SERIAL_GET_HANDFLOW       CTL_CODE(FILE_DEVICE_SERIAL_PORT,24,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            51: #define IOCTL_SERIAL_SET_HANDFLOW       CTL_CODE(FILE_DEVICE_SERIAL_PORT,25,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            52: #define IOCTL_SERIAL_GET_MODEMSTATUS    CTL_CODE(FILE_DEVICE_SERIAL_PORT,26,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            53: #define IOCTL_SERIAL_GET_COMMSTATUS     CTL_CODE(FILE_DEVICE_SERIAL_PORT,27,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            54: #define IOCTL_SERIAL_XOFF_COUNTER       CTL_CODE(FILE_DEVICE_SERIAL_PORT,28,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            55: #define IOCTL_SERIAL_GET_PROPERTIES     CTL_CODE(FILE_DEVICE_SERIAL_PORT,29,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            56: #define IOCTL_SERIAL_GET_DTRRTS         CTL_CODE(FILE_DEVICE_SERIAL_PORT,30,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            57: 
        !            58: 
        !            59: // begin_winioctl
        !            60: 
        !            61: #define IOCTL_SERIAL_LSRMST_INSERT      CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS)
        !            62: 
        !            63: // end_winioctl
        !            64: 
        !            65: //
        !            66: // NtDeviceIoControlFile InputBuffer/OutputBuffer record structures for
        !            67: // this device.
        !            68: //
        !            69: 
        !            70: //
        !            71: // This structure used to set line parameters.
        !            72: //
        !            73: 
        !            74: typedef struct _SERIAL_LINE_CONTROL {
        !            75:     UCHAR StopBits;
        !            76:     UCHAR Parity;
        !            77:     UCHAR WordLength;
        !            78:     } SERIAL_LINE_CONTROL,*PSERIAL_LINE_CONTROL;
        !            79: 
        !            80: typedef struct _SERIAL_TIMEOUTS {
        !            81:     ULONG ReadIntervalTimeout;
        !            82:     ULONG ReadTotalTimeoutMultiplier;
        !            83:     ULONG ReadTotalTimeoutConstant;
        !            84:     ULONG WriteTotalTimeoutMultiplier;
        !            85:     ULONG WriteTotalTimeoutConstant;
        !            86:     } SERIAL_TIMEOUTS,*PSERIAL_TIMEOUTS;
        !            87: 
        !            88: //
        !            89: // This structure used to resize the input/output buffers.
        !            90: // An error code will be returned if the size exceeds the
        !            91: // drivers capacity.  The driver reserves the right to
        !            92: // allocate a larger buffer.
        !            93: //
        !            94: 
        !            95: typedef struct _SERIAL_QUEUE_SIZE {
        !            96:     ULONG InSize;
        !            97:     ULONG OutSize;
        !            98:     } SERIAL_QUEUE_SIZE,*PSERIAL_QUEUE_SIZE;
        !            99: 
        !           100: 
        !           101: //
        !           102: // This structure used by set baud rate
        !           103: //
        !           104: 
        !           105: typedef struct _SERIAL_BAUD_RATE {
        !           106:     ULONG BaudRate;
        !           107:     } SERIAL_BAUD_RATE,*PSERIAL_BAUD_RATE;
        !           108: 
        !           109: //
        !           110: // Defines the bitmask that the driver can used to notify
        !           111: // app of various changes in the state of the UART.
        !           112: //
        !           113: 
        !           114: #define SERIAL_EV_RXCHAR           0x0001  // Any Character received
        !           115: #define SERIAL_EV_RXFLAG           0x0002  // Received certain character
        !           116: #define SERIAL_EV_TXEMPTY          0x0004  // Transmitt Queue Empty
        !           117: #define SERIAL_EV_CTS              0x0008  // CTS changed state
        !           118: #define SERIAL_EV_DSR              0x0010  // DSR changed state
        !           119: #define SERIAL_EV_RLSD             0x0020  // RLSD changed state
        !           120: #define SERIAL_EV_BREAK            0x0040  // BREAK received
        !           121: #define SERIAL_EV_ERR              0x0080  // Line status error occurred
        !           122: #define SERIAL_EV_RING             0x0100  // Ring signal detected
        !           123: #define SERIAL_EV_PERR             0x0200  // Printer error occured
        !           124: #define SERIAL_EV_RX80FULL         0x0400  // Receive buffer is 80 percent full
        !           125: #define SERIAL_EV_EVENT1           0x0800  // Provider specific event 1
        !           126: #define SERIAL_EV_EVENT2           0x1000  // Provider specific event 2
        !           127: 
        !           128: //
        !           129: // A longword is used to send down a mask that
        !           130: // instructs the driver what to purge.
        !           131: //
        !           132: // SERIAL_PURGE_TXABORT - Implies the current and all pending writes.
        !           133: // SERIAL_PURGE_RXABORT - Implies the current and all pending reads.
        !           134: // SERIAL_PURGE_TXCLEAR - Implies the transmit buffer if exists
        !           135: // SERIAL_PURGE_RXCLEAR - Implies the receive buffer if exists.
        !           136: //
        !           137: 
        !           138: #define SERIAL_PURGE_TXABORT 0x00000001
        !           139: #define SERIAL_PURGE_RXABORT 0x00000002
        !           140: #define SERIAL_PURGE_TXCLEAR 0x00000004
        !           141: #define SERIAL_PURGE_RXCLEAR 0x00000008
        !           142: 
        !           143: //
        !           144: // Communication defines
        !           145: //
        !           146: 
        !           147: #define STOP_BIT_1      0
        !           148: #define STOP_BITS_1_5   1
        !           149: #define STOP_BITS_2     2
        !           150: 
        !           151: #define NO_PARITY        0
        !           152: #define ODD_PARITY       1
        !           153: #define EVEN_PARITY      2
        !           154: #define MARK_PARITY      3
        !           155: #define SPACE_PARITY     4
        !           156: 
        !           157: 
        !           158: //
        !           159: // This structure is used to set and retrieve the special characters
        !           160: // used by the nt serial driver.
        !           161: //
        !           162: // Note that the driver will return an error if xonchar == xoffchar.
        !           163: //
        !           164: 
        !           165: typedef struct _SERIAL_CHARS {
        !           166:     UCHAR EofChar;
        !           167:     UCHAR ErrorChar;
        !           168:     UCHAR BreakChar;
        !           169:     UCHAR EventChar;
        !           170:     UCHAR XonChar;
        !           171:     UCHAR XoffChar;
        !           172:     } SERIAL_CHARS,*PSERIAL_CHARS;
        !           173: 
        !           174: //
        !           175: // This structure is used to contain the flow control
        !           176: // and handshaking setup.
        !           177: //
        !           178: // A reasonably precise explaination of how they all
        !           179: // work can be found in the OS/2 tech references.
        !           180: //
        !           181: // For Xon/Xofflimit:
        !           182: //
        !           183: // When there are more characters then
        !           184: //
        !           185: // (typeaheadbuffersize - xofflimit)
        !           186: //
        !           187: // in the typeahead buffer then the driver will perform all flow
        !           188: // control that the app has enabled so that the sender will (hopefully)
        !           189: // stop sending characters.
        !           190: //
        !           191: // When there are less than xonlimit number of characters in the
        !           192: // typeahead buffer the driver will perform all flow control that
        !           193: // the app has enabled so that the sender will hopefully start sending
        !           194: // characters again.
        !           195: //
        !           196: // It should be noted that if Xoff character is sent then the
        !           197: // driver will also stop transmitting any more characters.  This is to
        !           198: // provide support for those systems that take any character that
        !           199: // follows an Xoff as an implied Xon.
        !           200: //
        !           201: 
        !           202: typedef struct _SERIAL_HANDFLOW {
        !           203:     ULONG ControlHandShake;
        !           204:     ULONG FlowReplace;
        !           205:     LONG XonLimit;
        !           206:     LONG XoffLimit;
        !           207:     } SERIAL_HANDFLOW,*PSERIAL_HANDFLOW;
        !           208: 
        !           209: #define SERIAL_DTR_MASK           ((ULONG)0x03)
        !           210: #define SERIAL_DTR_CONTROL        ((ULONG)0x01)
        !           211: #define SERIAL_DTR_HANDSHAKE      ((ULONG)0x02)
        !           212: #define SERIAL_CTS_HANDSHAKE      ((ULONG)0x08)
        !           213: #define SERIAL_DSR_HANDSHAKE      ((ULONG)0x10)
        !           214: #define SERIAL_DCD_HANDSHAKE      ((ULONG)0x20)
        !           215: #define SERIAL_OUT_HANDSHAKEMASK  ((ULONG)0x38)
        !           216: #define SERIAL_DSR_SENSITIVITY    ((ULONG)0x40)
        !           217: #define SERIAL_ERROR_ABORT        ((ULONG)0x80000000)
        !           218: #define SERIAL_CONTROL_INVALID    ((ULONG)0x7fffff84)
        !           219: #define SERIAL_AUTO_TRANSMIT      ((ULONG)0x01)
        !           220: #define SERIAL_AUTO_RECEIVE       ((ULONG)0x02)
        !           221: #define SERIAL_ERROR_CHAR         ((ULONG)0x04)
        !           222: #define SERIAL_NULL_STRIPPING     ((ULONG)0x08)
        !           223: #define SERIAL_BREAK_CHAR         ((ULONG)0x10)
        !           224: #define SERIAL_RTS_MASK           ((ULONG)0xc0)
        !           225: #define SERIAL_RTS_CONTROL        ((ULONG)0x40)
        !           226: #define SERIAL_RTS_HANDSHAKE      ((ULONG)0x80)
        !           227: #define SERIAL_TRANSMIT_TOGGLE    ((ULONG)0xc0)
        !           228: #define SERIAL_XOFF_CONTINUE      ((ULONG)0x80000000)
        !           229: #define SERIAL_FLOW_INVALID       ((ULONG)0x7fffff20)
        !           230: 
        !           231: //
        !           232: // These are the following reasons that the device could be holding.
        !           233: //
        !           234: #define SERIAL_TX_WAITING_FOR_CTS      ((ULONG)0x00000001)
        !           235: #define SERIAL_TX_WAITING_FOR_DSR      ((ULONG)0x00000002)
        !           236: #define SERIAL_TX_WAITING_FOR_DCD      ((ULONG)0x00000004)
        !           237: #define SERIAL_TX_WAITING_FOR_XON      ((ULONG)0x00000008)
        !           238: #define SERIAL_TX_WAITING_XOFF_SENT    ((ULONG)0x00000010)
        !           239: #define SERIAL_TX_WAITING_ON_BREAK     ((ULONG)0x00000020)
        !           240: #define SERIAL_RX_WAITING_FOR_DSR      ((ULONG)0x00000040)
        !           241: 
        !           242: //
        !           243: // These are the error values that can be returned by the
        !           244: // driver.
        !           245: //
        !           246: #define SERIAL_ERROR_BREAK             ((ULONG)0x00000001)
        !           247: #define SERIAL_ERROR_FRAMING           ((ULONG)0x00000002)
        !           248: #define SERIAL_ERROR_OVERRUN           ((ULONG)0x00000004)
        !           249: #define SERIAL_ERROR_QUEUEOVERRUN      ((ULONG)0x00000008)
        !           250: #define SERIAL_ERROR_PARITY            ((ULONG)0x00000010)
        !           251: 
        !           252: 
        !           253: //
        !           254: // This structure is used to get the current error and
        !           255: // general status of the driver.
        !           256: //
        !           257: 
        !           258: typedef struct _SERIAL_STATUS {
        !           259:     ULONG Errors;
        !           260:     ULONG HoldReasons;
        !           261:     ULONG AmountInInQueue;
        !           262:     ULONG AmountInOutQueue;
        !           263:     BOOLEAN EofReceived;
        !           264:     BOOLEAN WaitForImmediate;
        !           265:     } SERIAL_STATUS,*PSERIAL_STATUS;
        !           266: 
        !           267: //
        !           268: // This structure is used for XOFF counter ioctl.  The xoff ioctl
        !           269: // is used to support those subsystems that feel the need to emulate
        !           270: // the serial chip in software.
        !           271: //
        !           272: // It has the following semantics:
        !           273: //
        !           274: // This io request is placed into the normal device write
        !           275: // queue.  That is, it will be queued behind any writes
        !           276: // already given to the driver.
        !           277: //
        !           278: // When this request becomes the current request, the character
        !           279: // specified in the field XoffChar will be sent, subject to
        !           280: // all other flow control already defined.
        !           281: //
        !           282: // Immediately upon sending the character the driver will
        !           283: // perform the following actions.
        !           284: //
        !           285: // A timer will be initiated that will expire after the
        !           286: // number of milliseconds in the Timeout field of the
        !           287: // SERIAL_XOFF_COUNTER structure.
        !           288: //
        !           289: // The driver will initialize a counter to the value specified
        !           290: // in the Counter field of the SERIAL_XOFF_RECORD.  The driver
        !           291: // will decrement this counter whenever a character is received.
        !           292: //
        !           293: // This request will then be held by the driver.  It will
        !           294: // actually complete under the following circumstances:
        !           295: //
        !           296: // 1) If there is another "write" request behind it in the queue.
        !           297: //    The "xoff" request will be completed with the informational status
        !           298: //    STATUS_SERIAL_MORE_WRITES.  The Information field of the
        !           299: //    IOSTATUS block will be set to 0.
        !           300: //
        !           301: //    Note: By write request we mean another SERIAL_XOFF_COUNTER
        !           302: //    request, or a simple write request.  If the only subsequent
        !           303: //    request is a flush request, the driver WILL NOT automatically
        !           304: //    complete the SERIAL_XOFF_COUNTER request.  NOTE: Transmit
        !           305: //    immediate requests DO NOT count as a normal write, and therefore
        !           306: //    would not cause a counter request to complete.
        !           307: //
        !           308: // 2) The timer expires.  The driver will complete the request
        !           309: //    with the informational status STATUS_SERIAL_COUNTER_TIMEOUT.
        !           310: //    The Information field of the IOSTATUS of the request will be set to 0.
        !           311: //
        !           312: // 3) The driver maintained counter goes to zero.  (By implication,
        !           313: //    at least "Counter" number of characters have been received.)
        !           314: //    The request will be completed with a successful status
        !           315: //    of STATUS_SUCCESS.  The Information field of the
        !           316: //    IOSTATUS of the request will be set to 0.
        !           317: //
        !           318: // 4) This is really a degenerate case of "1" above.  The request
        !           319: //    is started and no request follow it on the queue.  However
        !           320: //    at some point, before "2" or "3" above occur, another "write"
        !           321: //    request is started.  This will cause the completion actions
        !           322: //    stated in "1" to occur.
        !           323: //
        !           324: // NOTE: This request being issued WILL NOT cause the normal flow
        !           325: //       control code of the driver to be invoked.
        !           326: //
        !           327: // NOTE: This request has no interaction with the IOCTL_SERIAL_WAIT_ON_MASK
        !           328: //       request.  An application CAN NOT wait via the above ^^^^^^ ioctl
        !           329: //       on the counter going to zero.  The application must synchronize
        !           330: //       with the particular IOCTL_SERIAL_XOFF_COUNTER request.
        !           331: //
        !           332: // NOTE: The Timeout value equal to zero would cause the counter
        !           333: //       to NEVER timeout.  The only way that such a request could
        !           334: //       be killed at that point would be issue another write, or
        !           335: //       to purge the WRITE queue.
        !           336: //
        !           337: 
        !           338: typedef struct _SERIAL_XOFF_COUNTER {
        !           339:     ULONG Timeout; // Zero based.  In milliseconds
        !           340:     LONG Counter; // Must be greater than zero.
        !           341:     UCHAR XoffChar;
        !           342:     } SERIAL_XOFF_COUNTER,*PSERIAL_XOFF_COUNTER;
        !           343: 
        !           344: //
        !           345: // The following structure (and defines) are passed back by
        !           346: // the serial driver in response to the get properties ioctl.
        !           347: //
        !           348: 
        !           349: #define SERIAL_SP_SERIALCOMM         ((ULONG)0x00000001)
        !           350: 
        !           351: //
        !           352: // Provider subtypes
        !           353: //
        !           354: #define SERIAL_SP_UNSPECIFIED       ((ULONG)0x00000000)
        !           355: #define SERIAL_SP_RS232             ((ULONG)0x00000001)
        !           356: #define SERIAL_SP_PARALLEL          ((ULONG)0x00000002)
        !           357: #define SERIAL_SP_RS422             ((ULONG)0x00000003)
        !           358: #define SERIAL_SP_RS423             ((ULONG)0x00000004)
        !           359: #define SERIAL_SP_RS449             ((ULONG)0x00000005)
        !           360: #define SERIAL_SP_FAX               ((ULONG)0x00000021)
        !           361: #define SERIAL_SP_SCANNER           ((ULONG)0x00000022)
        !           362: #define SERIAL_SP_BRIDGE            ((ULONG)0x00000100)
        !           363: #define SERIAL_SP_LAT               ((ULONG)0x00000101)
        !           364: #define SERIAL_SP_TELNET            ((ULONG)0x00000102)
        !           365: #define SERIAL_SP_X25               ((ULONG)0x00000103)
        !           366: 
        !           367: //
        !           368: // Provider capabilities flags.
        !           369: //
        !           370: 
        !           371: #define SERIAL_PCF_DTRDSR        ((ULONG)0x0001)
        !           372: #define SERIAL_PCF_RTSCTS        ((ULONG)0x0002)
        !           373: #define SERIAL_PCF_CD            ((ULONG)0x0004)
        !           374: #define SERIAL_PCF_PARITY_CHECK  ((ULONG)0x0008)
        !           375: #define SERIAL_PCF_XONXOFF       ((ULONG)0x0010)
        !           376: #define SERIAL_PCF_SETXCHAR      ((ULONG)0x0020)
        !           377: #define SERIAL_PCF_TOTALTIMEOUTS ((ULONG)0x0040)
        !           378: #define SERIAL_PCF_INTTIMEOUTS   ((ULONG)0x0080)
        !           379: #define SERIAL_PCF_SPECIALCHARS  ((ULONG)0x0100)
        !           380: #define SERIAL_PCF_16BITMODE     ((ULONG)0x0200)
        !           381: 
        !           382: //
        !           383: // Comm provider settable parameters.
        !           384: //
        !           385: 
        !           386: #define SERIAL_SP_PARITY         ((ULONG)0x0001)
        !           387: #define SERIAL_SP_BAUD           ((ULONG)0x0002)
        !           388: #define SERIAL_SP_DATABITS       ((ULONG)0x0004)
        !           389: #define SERIAL_SP_STOPBITS       ((ULONG)0x0008)
        !           390: #define SERIAL_SP_HANDSHAKING    ((ULONG)0x0010)
        !           391: #define SERIAL_SP_PARITY_CHECK   ((ULONG)0x0020)
        !           392: #define SERIAL_SP_CARRIER_DETECT ((ULONG)0x0040)
        !           393: 
        !           394: //
        !           395: // Settable baud rates in the provider.
        !           396: //
        !           397: 
        !           398: #define SERIAL_BAUD_075          ((ULONG)0x00000001)
        !           399: #define SERIAL_BAUD_110          ((ULONG)0x00000002)
        !           400: #define SERIAL_BAUD_134_5        ((ULONG)0x00000004)
        !           401: #define SERIAL_BAUD_150          ((ULONG)0x00000008)
        !           402: #define SERIAL_BAUD_300          ((ULONG)0x00000010)
        !           403: #define SERIAL_BAUD_600          ((ULONG)0x00000020)
        !           404: #define SERIAL_BAUD_1200         ((ULONG)0x00000040)
        !           405: #define SERIAL_BAUD_1800         ((ULONG)0x00000080)
        !           406: #define SERIAL_BAUD_2400         ((ULONG)0x00000100)
        !           407: #define SERIAL_BAUD_4800         ((ULONG)0x00000200)
        !           408: #define SERIAL_BAUD_7200         ((ULONG)0x00000400)
        !           409: #define SERIAL_BAUD_9600         ((ULONG)0x00000800)
        !           410: #define SERIAL_BAUD_14400        ((ULONG)0x00001000)
        !           411: #define SERIAL_BAUD_19200        ((ULONG)0x00002000)
        !           412: #define SERIAL_BAUD_38400        ((ULONG)0x00004000)
        !           413: #define SERIAL_BAUD_56K          ((ULONG)0x00008000)
        !           414: #define SERIAL_BAUD_128K         ((ULONG)0x00010000)
        !           415: #define SERIAL_BAUD_115200       ((ULONG)0x00020000)
        !           416: #define SERIAL_BAUD_57600        ((ULONG)0x00040000)
        !           417: #define SERIAL_BAUD_USER         ((ULONG)0x10000000)
        !           418: 
        !           419: //
        !           420: // Settable Data Bits
        !           421: //
        !           422: 
        !           423: #define SERIAL_DATABITS_5        ((USHORT)0x0001)
        !           424: #define SERIAL_DATABITS_6        ((USHORT)0x0002)
        !           425: #define SERIAL_DATABITS_7        ((USHORT)0x0004)
        !           426: #define SERIAL_DATABITS_8        ((USHORT)0x0008)
        !           427: #define SERIAL_DATABITS_16       ((USHORT)0x0010)
        !           428: #define SERIAL_DATABITS_16X      ((USHORT)0x0020)
        !           429: 
        !           430: //
        !           431: // Settable Stop and Parity bits.
        !           432: //
        !           433: 
        !           434: #define SERIAL_STOPBITS_10       ((USHORT)0x0001)
        !           435: #define SERIAL_STOPBITS_15       ((USHORT)0x0002)
        !           436: #define SERIAL_STOPBITS_20       ((USHORT)0x0004)
        !           437: #define SERIAL_PARITY_NONE       ((USHORT)0x0100)
        !           438: #define SERIAL_PARITY_ODD        ((USHORT)0x0200)
        !           439: #define SERIAL_PARITY_EVEN       ((USHORT)0x0400)
        !           440: #define SERIAL_PARITY_MARK       ((USHORT)0x0800)
        !           441: #define SERIAL_PARITY_SPACE      ((USHORT)0x1000)
        !           442: 
        !           443: typedef struct _SERIAL_COMMPROP {
        !           444:     USHORT PacketLength;
        !           445:     USHORT PacketVersion;
        !           446:     ULONG ServiceMask;
        !           447:     ULONG Reserved1;
        !           448:     ULONG MaxTxQueue;
        !           449:     ULONG MaxRxQueue;
        !           450:     ULONG MaxBaud;
        !           451:     ULONG ProvSubType;
        !           452:     ULONG ProvCapabilities;
        !           453:     ULONG SettableParams;
        !           454:     ULONG SettableBaud;
        !           455:     USHORT SettableData;
        !           456:     USHORT SettableStopParity;
        !           457:     ULONG CurrentTxQueue;
        !           458:     ULONG CurrentRxQueue;
        !           459:     ULONG ProvSpec1;
        !           460:     ULONG ProvSpec2;
        !           461:     WCHAR ProvChar[1];
        !           462: } SERIAL_COMMPROP,*PSERIAL_COMMPROP;
        !           463: 
        !           464: //
        !           465: // Define masks for the rs-232 input and output.
        !           466: //
        !           467: 
        !           468: #define SERIAL_DTR_STATE         ((ULONG)0x00000001)
        !           469: #define SERIAL_RTS_STATE         ((ULONG)0x00000002)
        !           470: #define SERIAL_CTS_STATE         ((ULONG)0x00000010)
        !           471: #define SERIAL_DSR_STATE         ((ULONG)0x00000020)
        !           472: #define SERIAL_RI_STATE          ((ULONG)0x00000040)
        !           473: #define SERIAL_DCD_STATE         ((ULONG)0x00000080)
        !           474: 
        !           475: 
        !           476: // begin_winioctl
        !           477: 
        !           478: //
        !           479: // The following values follow the escape designator in the
        !           480: // data stream if the LSRMST_INSERT mode has been turned on.
        !           481: //
        !           482: #define SERIAL_LSRMST_ESCAPE     ((UCHAR)0x00)
        !           483: 
        !           484: //
        !           485: // Following this value is the contents of the line status
        !           486: // register, and then the character in the RX hardware when
        !           487: // the line status register was encountered.
        !           488: //
        !           489: #define SERIAL_LSRMST_LSR_DATA   ((UCHAR)0x01)
        !           490: 
        !           491: //
        !           492: // Following this value is the contents of the line status
        !           493: // register.  No error character follows
        !           494: //
        !           495: #define SERIAL_LSRMST_LSR_NODATA ((UCHAR)0x02)
        !           496: 
        !           497: //
        !           498: // Following this value is the contents of the modem status
        !           499: // register.
        !           500: //
        !           501: #define SERIAL_LSRMST_MST        ((UCHAR)0x03)
        !           502: 
        !           503: // end_winioctl

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.