ntddser.h 17.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * DDK definitions for serial port
 *
 * Copyright (C) 2006 Eric Pouech
 * From w32api package
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398
 */

#ifndef _NTDDSER_H_
#define _NTDDSER_H_

#ifdef __cplusplus
extern "C" {
#endif

#define IOCTL_SERIAL_CLEAR_STATS                                        \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 36, 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_CLR_RTS                                            \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SERIAL_CONFIG_SIZE                                        \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 32, 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_CHARS                                          \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 22, 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_GET_DTRRTS                                         \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 30, 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_GET_LINE_CONTROL                                   \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_MODEM_CONTROL                                  \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 37, 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_PROPERTIES                                     \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 29, 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_GET_TIMEOUTS                                       \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 8, 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_IMMEDIATE_CHAR                                     \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#ifndef IOCTL_SERIAL_LSRMST_INSERT
/* it's already defined in winioctl.h */
#define IOCTL_SERIAL_LSRMST_INSERT                             \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
#define IOCTL_SERIAL_PURGE                                              \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 19, 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_BAUD_RATE                                      \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 1, 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_SET_CHARS                                          \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 23, 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_SET_FIFO_CONTROL                                   \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 39, 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_SET_LINE_CONTROL                                   \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_MODEM_CONTROL                                  \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 38, 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_RTS                                            \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 12, 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_SET_WAIT_MASK                                      \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 17, 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_WAIT_ON_MASK                                       \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SERIAL_XOFF_COUNTER                                       \
    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 28, METHOD_BUFFERED, FILE_ANY_ACCESS)

typedef struct _SERIAL_BAUD_RATE
{
    ULONG       BaudRate;
} SERIAL_BAUD_RATE, *PSERIAL_BAUD_RATE;

/* SERIAL_BAUD_RATE.BaudRate constants */
#define SERIAL_BAUD_075                   0x00000001
#define SERIAL_BAUD_110                   0x00000002
#define SERIAL_BAUD_134_5                 0x00000004
#define SERIAL_BAUD_150                   0x00000008
#define SERIAL_BAUD_300                   0x00000010
#define SERIAL_BAUD_600                   0x00000020
#define SERIAL_BAUD_1200                  0x00000040
#define SERIAL_BAUD_1800                  0x00000080
#define SERIAL_BAUD_2400                  0x00000100
#define SERIAL_BAUD_4800                  0x00000200
#define SERIAL_BAUD_7200                  0x00000400
#define SERIAL_BAUD_9600                  0x00000800
#define SERIAL_BAUD_14400                 0x00001000
#define SERIAL_BAUD_19200                 0x00002000
#define SERIAL_BAUD_38400                 0x00004000
#define SERIAL_BAUD_56K                   0x00008000
#define SERIAL_BAUD_128K                  0x00010000
#define SERIAL_BAUD_115200                0x00020000
#define SERIAL_BAUD_57600                 0x00040000
#define SERIAL_BAUD_USER                  0x10000000

typedef struct _SERIAL_CHARS
{
    UCHAR       EofChar;
    UCHAR       ErrorChar;
    UCHAR       BreakChar;
    UCHAR       EventChar;
    UCHAR       XonChar;
    UCHAR       XoffChar;
} SERIAL_CHARS, *PSERIAL_CHARS;

typedef struct _SERIAL_STATUS
{
    ULONG       Errors;
    ULONG       HoldReasons;
    ULONG       AmountInInQueue;
    ULONG       AmountInOutQueue;
    BOOLEAN     EofReceived;
    BOOLEAN     WaitForImmediate;
} SERIAL_STATUS, *PSERIAL_STATUS;

typedef struct _SERIAL_HANDFLOW
{
    ULONG       ControlHandShake;
    ULONG       FlowReplace;
    LONG        XonLimit;
    LONG        XoffLimit;
} SERIAL_HANDFLOW, *PSERIAL_HANDFLOW;

#define SERIAL_DTR_MASK                   0x00000003
#define SERIAL_DTR_CONTROL                0x00000001
#define SERIAL_DTR_HANDSHAKE              0x00000002
#define SERIAL_CTS_HANDSHAKE              0x00000008
#define SERIAL_DSR_HANDSHAKE              0x00000010
#define SERIAL_DCD_HANDSHAKE              0x00000020
#define SERIAL_OUT_HANDSHAKEMASK          0x00000038
#define SERIAL_DSR_SENSITIVITY            0x00000040
#define SERIAL_ERROR_ABORT                0x80000000
#define SERIAL_CONTROL_INVALID            0x7fffff84
#define SERIAL_AUTO_TRANSMIT              0x00000001
#define SERIAL_AUTO_RECEIVE               0x00000002
#define SERIAL_ERROR_CHAR                 0x00000004
#define SERIAL_NULL_STRIPPING             0x00000008
#define SERIAL_BREAK_CHAR                 0x00000010
#define SERIAL_RTS_MASK                   0x000000c0
#define SERIAL_RTS_CONTROL                0x00000040
#define SERIAL_RTS_HANDSHAKE              0x00000080
#define SERIAL_TRANSMIT_TOGGLE            0x000000c0
#define SERIAL_XOFF_CONTINUE              0x80000000
#define SERIAL_FLOW_INVALID               0x7fffff20

typedef struct _SERIAL_LINE_CONTROL
{
    UCHAR       StopBits;
    UCHAR       Parity;
    UCHAR       WordLength;
} SERIAL_LINE_CONTROL, *PSERIAL_LINE_CONTROL;

/* SERIAL_LINE_CONTROL.StopBits constants */
#define STOP_BIT_1                        0x00
#define STOP_BITS_1_5                     0x01
#define STOP_BITS_2                       0x02

/* SERIAL_LINE_CONTROL.Parity constants */
#define NO_PARITY                         0x00
#define ODD_PARITY                        0x01
#define EVEN_PARITY                       0x02
#define MARK_PARITY                       0x03
#define SPACE_PARITY                      0x04

/* IOCTL_SERIAL_(GET_MODEM_CONTROL, SET_MODEM_CONTROL) flags */
#define SERIAL_IOC_MCR_DTR                0x00000001
#define SERIAL_IOC_MCR_RTS                0x00000002
#define SERIAL_IOC_MCR_OUT1               0x00000004
#define SERIAL_IOC_MCR_OUT2               0x00000008
#define SERIAL_IOC_MCR_LOOP               0x00000010

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;

/* SERIAL_COMMPROP.SettableParams flags */
#define SERIAL_SP_PARITY                  0x0001
#define SERIAL_SP_BAUD                    0x0002
#define SERIAL_SP_DATABITS                0x0004
#define SERIAL_SP_STOPBITS                0x0008
#define SERIAL_SP_HANDSHAKING             0x0010
#define SERIAL_SP_PARITY_CHECK            0x0020
#define SERIAL_SP_CARRIER_DETECT          0x0040

/* SERIAL_COMMPROP.ProvCapabilities flags */
#define SERIAL_PCF_DTRDSR                 0x00000001
#define SERIAL_PCF_RTSCTS                 0x00000002
#define SERIAL_PCF_CD                     0x00000004
#define SERIAL_PCF_PARITY_CHECK           0x00000008
#define SERIAL_PCF_XONXOFF                0x00000010
#define SERIAL_PCF_SETXCHAR               0x00000020
#define SERIAL_PCF_TOTALTIMEOUTS          0x00000040
#define SERIAL_PCF_INTTIMEOUTS            0x00000080
#define SERIAL_PCF_SPECIALCHARS           0x00000100
#define SERIAL_PCF_16BITMODE              0x00000200

/* SERIAL_COMMPROP.SettableData flags */
#define SERIAL_DATABITS_5                 0x0001
#define SERIAL_DATABITS_6                 0x0002
#define SERIAL_DATABITS_7                 0x0004
#define SERIAL_DATABITS_8                 0x0008
#define SERIAL_DATABITS_16                0x0010
#define SERIAL_DATABITS_16X               0x0020

/* SERIAL_COMMPROP.SettableStopParity flags */
#define SERIAL_STOPBITS_10                0x0001
#define SERIAL_STOPBITS_15                0x0002
#define SERIAL_STOPBITS_20                0x0004
#define SERIAL_PARITY_NONE                0x0100
#define SERIAL_PARITY_ODD                 0x0200
#define SERIAL_PARITY_EVEN                0x0400
#define SERIAL_PARITY_MARK                0x0800
#define SERIAL_PARITY_SPACE               0x1000

typedef struct _SERIALPERF_STATS
{
    ULONG       ReceivedCount;
    ULONG       TransmittedCount;
    ULONG       FrameErrorCount;
    ULONG       SerialOverrunErrorCount;
    ULONG       BufferOverrunErrorCount;
    ULONG       ParityErrorCount;
} SERIALPERF_STATS, *PSERIALPERF_STATS;

typedef struct _SERIAL_TIMEOUTS
{
    ULONG       ReadIntervalTimeout;
    ULONG       ReadTotalTimeoutMultiplier;
    ULONG       ReadTotalTimeoutConstant;
    ULONG       WriteTotalTimeoutMultiplier;
    ULONG       WriteTotalTimeoutConstant;
} SERIAL_TIMEOUTS, *PSERIAL_TIMEOUTS;

/* IOCTL_SERIAL_(GET_WAIT_MASK, SET_WAIT_MASK, WAIT_ON_MASK) flags */
#define SERIAL_EV_RXCHAR                  0x0001
#define SERIAL_EV_RXFLAG                  0x0002
#define SERIAL_EV_TXEMPTY                 0x0004
#define SERIAL_EV_CTS                     0x0008
#define SERIAL_EV_DSR                     0x0010
#define SERIAL_EV_RLSD                    0x0020
#define SERIAL_EV_BREAK                   0x0040
#define SERIAL_EV_ERR                     0x0080
#define SERIAL_EV_RING                    0x0100
#define SERIAL_EV_PERR                    0x0200
#define SERIAL_EV_RX80FULL                0x0400
#define SERIAL_EV_EVENT1                  0x0800
#define SERIAL_EV_EVENT2                  0x1000

/* IOCTL_SERIAL_LSRMST_INSERT constants */
#define SERIAL_LSRMST_LSR_DATA            0x01
#define SERIAL_LSRMST_LSR_NODATA          0x02
#define SERIAL_LSRMST_MST                 0x03
#define SERIAL_LSRMST_ESCAPE              0x00

/* IOCTL_SERIAL_PURGE constants */
#define SERIAL_PURGE_TXABORT              0x00000001
#define SERIAL_PURGE_RXABORT              0x00000002
#define SERIAL_PURGE_TXCLEAR              0x00000004
#define SERIAL_PURGE_RXCLEAR              0x00000008

/* IOCTL_SERIAL_SET_FIFO_CONTROL constants */
#define SERIAL_IOC_FCR_FIFO_ENABLE        0x00000001
#define SERIAL_IOC_FCR_RCVR_RESET         0x00000002
#define SERIAL_IOC_FCR_XMIT_RESET         0x00000004
#define SERIAL_IOC_FCR_DMA_MODE           0x00000008
#define SERIAL_IOC_FCR_RES1               0x00000010
#define SERIAL_IOC_FCR_RES2               0x00000020
#define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB   0x00000040
#define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB   0x00000080

typedef struct _SERIAL_QUEUE_SIZE
{
    ULONG       InSize;
    ULONG       OutSize;
} SERIAL_QUEUE_SIZE, *PSERIAL_QUEUE_SIZE;

typedef struct _SERIAL_XOFF_COUNTER
{
    ULONG       Timeout;
    LONG        Counter;
    UCHAR       XoffChar;
} SERIAL_XOFF_COUNTER, *PSERIAL_XOFF_COUNTER;

typedef struct _SERIAL_BASIC_SETTINGS
{
    SERIAL_TIMEOUTS     Timeouts;
    SERIAL_HANDFLOW     HandFlow;
    ULONG       RxFifo;
    ULONG       TxFifo;
} SERIAL_BASIC_SETTINGS, *PSERIAL_BASIC_SETTINGS;

#define SERIAL_ERROR_BREAK                0x00000001
#define SERIAL_ERROR_FRAMING              0x00000002
#define SERIAL_ERROR_OVERRUN              0x00000004
#define SERIAL_ERROR_QUEUEOVERRUN         0x00000008
#define SERIAL_ERROR_PARITY               0x00000010

#define SERIAL_SP_UNSPECIFIED             0x00000000
#define SERIAL_SP_RS232                   0x00000001
#define SERIAL_SP_PARALLEL                0x00000002
#define SERIAL_SP_RS422                   0x00000003
#define SERIAL_SP_RS423                   0x00000004
#define SERIAL_SP_RS449                   0x00000005
#define SERIAL_SP_MODEM                   0X00000006
#define SERIAL_SP_FAX                     0x00000021
#define SERIAL_SP_SCANNER                 0x00000022
#define SERIAL_SP_BRIDGE                  0x00000100
#define SERIAL_SP_LAT                     0x00000101
#define SERIAL_SP_TELNET                  0x00000102
#define SERIAL_SP_X25                     0x00000103
#define SERIAL_SP_SERIALCOMM              0x00000001

#define SERIAL_TX_WAITING_FOR_CTS         0x00000001
#define SERIAL_TX_WAITING_FOR_DSR         0x00000002
#define SERIAL_TX_WAITING_FOR_DCD         0x00000004
#define SERIAL_TX_WAITING_FOR_XON         0x00000008
#define SERIAL_TX_WAITING_XOFF_SENT       0x00000010
#define SERIAL_TX_WAITING_ON_BREAK        0x00000020
#define SERIAL_RX_WAITING_FOR_DSR         0x00000040

#define SERIAL_DTR_STATE                  0x00000001
#define SERIAL_RTS_STATE                  0x00000002
#define SERIAL_CTS_STATE                  0x00000010
#define SERIAL_DSR_STATE                  0x00000020
#define SERIAL_RI_STATE                   0x00000040
#define SERIAL_DCD_STATE                  0x00000080

typedef struct _SERIALCONFIG
{
    ULONG       Size;
    USHORT      Version;
    ULONG       SubType;
    ULONG       ProvOffset;
    ULONG       ProviderSize;
    WCHAR       ProviderData[1];
} SERIALCONFIG,*PSERIALCONFIG;

#ifdef __cplusplus
}
#endif

#endif /* _NTDDSER_H_ */