comm.h (18736B)
1/** 2 * WinPR: Windows Portable Runtime 3 * Serial Communication API 4 * 5 * Copyright 2011 O.S. Systems Software Ltda. 6 * Copyright 2011 Eduardo Fiss Beloni <beloni@ossystems.com.br> 7 * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com> 8 * Copyright 2014 Hewlett-Packard Development Company, L.P. 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); 11 * you may not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 */ 22 23#ifndef WINPR_COMM_H 24#define WINPR_COMM_H 25 26#include <winpr/collections.h> 27#include <winpr/file.h> 28#include <winpr/winpr.h> 29#include <winpr/wtypes.h> 30 31#if defined __linux__ && !defined ANDROID 32 33#define NOPARITY 0 34#define ODDPARITY 1 35#define EVENPARITY 2 36#define MARKPARITY 3 37#define SPACEPARITY 4 38 39#define ONESTOPBIT 0 40#define ONE5STOPBITS 1 41#define TWOSTOPBITS 2 42 43#ifndef IGNORE 44#define IGNORE 0 45#endif 46 47#define CBR_110 110 48#define CBR_300 300 49#define CBR_600 600 50#define CBR_1200 1200 51#define CBR_2400 2400 52#define CBR_4800 4800 53#define CBR_9600 9600 54#define CBR_14400 14400 55#define CBR_19200 19200 56#define CBR_38400 38400 57#define CBR_56000 56000 58#define CBR_57600 57600 59#define CBR_115200 115200 60#define CBR_128000 128000 61#define CBR_256000 256000 62 63#define CE_RXOVER 0x0001 64#define CE_OVERRUN 0x0002 65#define CE_RXPARITY 0x0004 66#define CE_FRAME 0x0008 67#define CE_BREAK 0x0010 68#define CE_TXFULL 0x0100 69#define CE_PTO 0x0200 70#define CE_IOE 0x0400 71#define CE_DNS 0x0800 72#define CE_OOP 0x1000 73#define CE_MODE 0x8000 74 75#define IE_BADID (-1) 76#define IE_OPEN (-2) 77#define IE_NOPEN (-3) 78#define IE_MEMORY (-4) 79#define IE_DEFAULT (-5) 80#define IE_HARDWARE (-10) 81#define IE_BYTESIZE (-11) 82#define IE_BAUDRATE (-12) 83 84#define EV_RXCHAR 0x0001 85#define EV_RXFLAG 0x0002 86#define EV_TXEMPTY 0x0004 87#define EV_CTS 0x0008 88#define EV_DSR 0x0010 89#define EV_RLSD 0x0020 90#define EV_BREAK 0x0040 91#define EV_ERR 0x0080 92#define EV_RING 0x0100 93#define EV_PERR 0x0200 94#define EV_RX80FULL 0x0400 95#define EV_EVENT1 0x0800 96#define EV_EVENT2 0x1000 97 98#define SETXOFF 1 99#define SETXON 2 100#define SETRTS 3 101#define CLRRTS 4 102#define SETDTR 5 103#define CLRDTR 6 104#define RESETDEV 7 105#define SETBREAK 8 106#define CLRBREAK 9 107 108#define PURGE_TXABORT 0x0001 109#define PURGE_RXABORT 0x0002 110#define PURGE_TXCLEAR 0x0004 111#define PURGE_RXCLEAR 0x0008 112 113#define LPTx 0x80 114 115#define MS_CTS_ON ((DWORD)0x0010) 116#define MS_DSR_ON ((DWORD)0x0020) 117#define MS_RING_ON ((DWORD)0x0040) 118#define MS_RLSD_ON ((DWORD)0x0080) 119 120#define SP_SERIALCOMM ((DWORD)0x00000001) 121 122#define PST_UNSPECIFIED ((DWORD)0x00000000) 123#define PST_RS232 ((DWORD)0x00000001) 124#define PST_PARALLELPORT ((DWORD)0x00000002) 125#define PST_RS422 ((DWORD)0x00000003) 126#define PST_RS423 ((DWORD)0x00000004) 127#define PST_RS449 ((DWORD)0x00000005) 128#define PST_MODEM ((DWORD)0x00000006) 129#define PST_FAX ((DWORD)0x00000021) 130#define PST_SCANNER ((DWORD)0x00000022) 131#define PST_NETWORK_BRIDGE ((DWORD)0x00000100) 132#define PST_LAT ((DWORD)0x00000101) 133#define PST_TCPIP_TELNET ((DWORD)0x00000102) 134#define PST_X25 ((DWORD)0x00000103) 135 136#define PCF_DTRDSR ((DWORD)0x0001) 137#define PCF_RTSCTS ((DWORD)0x0002) 138#define PCF_RLSD ((DWORD)0x0004) 139#define PCF_PARITY_CHECK ((DWORD)0x0008) 140#define PCF_XONXOFF ((DWORD)0x0010) 141#define PCF_SETXCHAR ((DWORD)0x0020) 142#define PCF_TOTALTIMEOUTS ((DWORD)0x0040) 143#define PCF_INTTIMEOUTS ((DWORD)0x0080) 144#define PCF_SPECIALCHARS ((DWORD)0x0100) 145#define PCF_16BITMODE ((DWORD)0x0200) 146 147#define SP_PARITY ((DWORD)0x0001) 148#define SP_BAUD ((DWORD)0x0002) 149#define SP_DATABITS ((DWORD)0x0004) 150#define SP_STOPBITS ((DWORD)0x0008) 151#define SP_HANDSHAKING ((DWORD)0x0010) 152#define SP_PARITY_CHECK ((DWORD)0x0020) 153#define SP_RLSD ((DWORD)0x0040) 154 155#define BAUD_075 ((DWORD)0x00000001) 156#define BAUD_110 ((DWORD)0x00000002) 157#define BAUD_134_5 ((DWORD)0x00000004) 158#define BAUD_150 ((DWORD)0x00000008) 159#define BAUD_300 ((DWORD)0x00000010) 160#define BAUD_600 ((DWORD)0x00000020) 161#define BAUD_1200 ((DWORD)0x00000040) 162#define BAUD_1800 ((DWORD)0x00000080) 163#define BAUD_2400 ((DWORD)0x00000100) 164#define BAUD_4800 ((DWORD)0x00000200) 165#define BAUD_7200 ((DWORD)0x00000400) 166#define BAUD_9600 ((DWORD)0x00000800) 167#define BAUD_14400 ((DWORD)0x00001000) 168#define BAUD_19200 ((DWORD)0x00002000) 169#define BAUD_38400 ((DWORD)0x00004000) 170#define BAUD_56K ((DWORD)0x00008000) 171#define BAUD_128K ((DWORD)0x00010000) 172#define BAUD_115200 ((DWORD)0x00020000) 173#define BAUD_57600 ((DWORD)0x00040000) 174#define BAUD_USER ((DWORD)0x10000000) 175 176#define DATABITS_5 ((WORD)0x0001) 177#define DATABITS_6 ((WORD)0x0002) 178#define DATABITS_7 ((WORD)0x0004) 179#define DATABITS_8 ((WORD)0x0008) 180#define DATABITS_16 ((WORD)0x0010) 181#define DATABITS_16X ((WORD)0x0020) 182 183#define STOPBITS_10 ((WORD)0x0001) 184#define STOPBITS_15 ((WORD)0x0002) 185#define STOPBITS_20 ((WORD)0x0004) 186 187#define PARITY_NONE ((WORD)0x0100) 188#define PARITY_ODD ((WORD)0x0200) 189#define PARITY_EVEN ((WORD)0x0400) 190#define PARITY_MARK ((WORD)0x0800) 191#define PARITY_SPACE ((WORD)0x1000) 192 193#define COMMPROP_INITIALIZED ((DWORD)0xE73CF52E) 194 195#define DTR_CONTROL_DISABLE 0x00 196#define DTR_CONTROL_ENABLE 0x01 197#define DTR_CONTROL_HANDSHAKE 0x02 198 199#define RTS_CONTROL_DISABLE 0x00 200#define RTS_CONTROL_ENABLE 0x01 201#define RTS_CONTROL_HANDSHAKE 0x02 202#define RTS_CONTROL_TOGGLE 0x03 203 204// http://msdn.microsoft.com/en-us/library/windows/desktop/aa363214%28v=vs.85%29.aspx 205typedef struct _DCB 206{ 207 DWORD DCBlength; 208 DWORD BaudRate; 209 DWORD fBinary : 1; 210 DWORD fParity : 1; 211 DWORD fOutxCtsFlow : 1; 212 DWORD fOutxDsrFlow : 1; 213 DWORD fDtrControl : 2; 214 DWORD fDsrSensitivity : 1; 215 DWORD fTXContinueOnXoff : 1; 216 DWORD fOutX : 1; 217 DWORD fInX : 1; 218 DWORD fErrorChar : 1; 219 DWORD fNull : 1; 220 DWORD fRtsControl : 2; 221 DWORD fAbortOnError : 1; 222 DWORD fDummy2 : 17; 223 WORD wReserved; 224 WORD XonLim; 225 WORD XoffLim; 226 BYTE ByteSize; 227 BYTE Parity; 228 BYTE StopBits; 229 char XonChar; 230 char XoffChar; 231 char ErrorChar; 232 char EofChar; 233 char EvtChar; 234 WORD wReserved1; 235} DCB, *LPDCB; 236 237typedef struct _COMM_CONFIG 238{ 239 DWORD dwSize; 240 WORD wVersion; 241 WORD wReserved; 242 DCB dcb; 243 DWORD dwProviderSubType; 244 DWORD dwProviderOffset; 245 DWORD dwProviderSize; 246 WCHAR wcProviderData[1]; 247} COMMCONFIG, *LPCOMMCONFIG; 248 249typedef struct _COMMPROP 250{ 251 WORD wPacketLength; 252 WORD wPacketVersion; 253 DWORD dwServiceMask; 254 DWORD dwReserved1; 255 DWORD dwMaxTxQueue; 256 DWORD dwMaxRxQueue; 257 DWORD dwMaxBaud; 258 DWORD dwProvSubType; 259 DWORD dwProvCapabilities; 260 DWORD dwSettableParams; 261 DWORD dwSettableBaud; 262 WORD wSettableData; 263 WORD wSettableStopParity; 264 DWORD dwCurrentTxQueue; 265 DWORD dwCurrentRxQueue; 266 DWORD dwProvSpec1; 267 DWORD dwProvSpec2; 268 WCHAR wcProvChar[1]; 269} COMMPROP, *LPCOMMPROP; 270 271typedef struct _COMMTIMEOUTS 272{ 273 DWORD ReadIntervalTimeout; 274 DWORD ReadTotalTimeoutMultiplier; 275 DWORD ReadTotalTimeoutConstant; 276 DWORD WriteTotalTimeoutMultiplier; 277 DWORD WriteTotalTimeoutConstant; 278} COMMTIMEOUTS, *LPCOMMTIMEOUTS; 279 280typedef struct _COMSTAT 281{ 282 DWORD fCtsHold : 1; 283 DWORD fDsrHold : 1; 284 DWORD fRlsdHold : 1; 285 DWORD fXoffHold : 1; 286 DWORD fXoffSent : 1; 287 DWORD fEof : 1; 288 DWORD fTxim : 1; 289 DWORD fReserved : 25; 290 DWORD cbInQue; 291 DWORD cbOutQue; 292} COMSTAT, *LPCOMSTAT; 293 294#ifdef __cplusplus 295extern "C" 296{ 297#endif 298 299 WINPR_API BOOL BuildCommDCBA(LPCSTR lpDef, LPDCB lpDCB); 300 WINPR_API BOOL BuildCommDCBW(LPCWSTR lpDef, LPDCB lpDCB); 301 302 WINPR_API BOOL BuildCommDCBAndTimeoutsA(LPCSTR lpDef, LPDCB lpDCB, 303 LPCOMMTIMEOUTS lpCommTimeouts); 304 WINPR_API BOOL BuildCommDCBAndTimeoutsW(LPCWSTR lpDef, LPDCB lpDCB, 305 LPCOMMTIMEOUTS lpCommTimeouts); 306 307 WINPR_API BOOL CommConfigDialogA(LPCSTR lpszName, HWND hWnd, LPCOMMCONFIG lpCC); 308 WINPR_API BOOL CommConfigDialogW(LPCWSTR lpszName, HWND hWnd, LPCOMMCONFIG lpCC); 309 310 WINPR_API BOOL GetCommConfig(HANDLE hCommDev, LPCOMMCONFIG lpCC, LPDWORD lpdwSize); 311 WINPR_API BOOL SetCommConfig(HANDLE hCommDev, LPCOMMCONFIG lpCC, DWORD dwSize); 312 313 WINPR_API BOOL GetCommMask(HANDLE hFile, PDWORD lpEvtMask); 314 WINPR_API BOOL SetCommMask(HANDLE hFile, DWORD dwEvtMask); 315 316 WINPR_API BOOL GetCommModemStatus(HANDLE hFile, PDWORD lpModemStat); 317 WINPR_API BOOL GetCommProperties(HANDLE hFile, LPCOMMPROP lpCommProp); 318 319 WINPR_API BOOL GetCommState(HANDLE hFile, LPDCB lpDCB); 320 WINPR_API BOOL SetCommState(HANDLE hFile, LPDCB lpDCB); 321 322 WINPR_API BOOL GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts); 323 WINPR_API BOOL SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts); 324 325 WINPR_API BOOL GetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize); 326 WINPR_API BOOL GetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize); 327 328 WINPR_API BOOL SetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize); 329 WINPR_API BOOL SetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize); 330 331 WINPR_API BOOL SetCommBreak(HANDLE hFile); 332 WINPR_API BOOL ClearCommBreak(HANDLE hFile); 333 WINPR_API BOOL ClearCommError(HANDLE hFile, PDWORD lpErrors, LPCOMSTAT lpStat); 334 335 WINPR_API BOOL PurgeComm(HANDLE hFile, DWORD dwFlags); 336 WINPR_API BOOL SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue); 337 338 WINPR_API BOOL EscapeCommFunction(HANDLE hFile, DWORD dwFunc); 339 340 WINPR_API BOOL TransmitCommChar(HANDLE hFile, char cChar); 341 342 WINPR_API BOOL WaitCommEvent(HANDLE hFile, PDWORD lpEvtMask, LPOVERLAPPED lpOverlapped); 343 344#ifdef UNICODE 345#define BuildCommDCB BuildCommDCBW 346#define BuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsW 347#define CommConfigDialog CommConfigDialogW 348#define GetDefaultCommConfig GetDefaultCommConfigW 349#define SetDefaultCommConfig SetDefaultCommConfigW 350#else 351#define BuildCommDCB BuildCommDCBA 352#define BuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsA 353#define CommConfigDialog CommConfigDialogA 354#define GetDefaultCommConfig GetDefaultCommConfigA 355#define SetDefaultCommConfig SetDefaultCommConfigA 356#endif 357 358/* Extended API */ 359 360/* FIXME: MAXULONG should be defined arround winpr/limits.h */ 361#ifndef MAXULONG 362#define MAXULONG (4294967295UL) 363#endif 364 365 /** 366 * IOCTLs table according the server's serial driver: 367 * http://msdn.microsoft.com/en-us/library/windows/hardware/dn265347%28v=vs.85%29.aspx 368 */ 369 typedef enum _SERIAL_DRIVER_ID 370 { 371 SerialDriverUnknown = 0, 372 SerialDriverSerialSys, 373 SerialDriverSerCxSys, 374 SerialDriverSerCx2Sys /* default fallback, see also CommDeviceIoControl() */ 375 } SERIAL_DRIVER_ID; 376 377 /* 378 * About DefineCommDevice() / QueryDosDevice() 379 * 380 * Did something close to QueryDosDevice() and DefineDosDevice() but with 381 * folowing constraints: 382 * - mappings are stored in a static array. 383 * - QueryCommDevice returns only the mappings that have been defined through 384 * DefineCommDevice() 385 */ 386 WINPR_API BOOL DefineCommDevice(/* DWORD dwFlags,*/ LPCTSTR lpDeviceName, LPCTSTR lpTargetPath); 387 WINPR_API DWORD QueryCommDevice(LPCTSTR lpDeviceName, LPTSTR lpTargetPath, DWORD ucchMax); 388 WINPR_API BOOL IsCommDevice(LPCTSTR lpDeviceName); 389 390 /** 391 * A handle can only be created on defined devices with DefineCommDevice(). This 392 * also ensures that CommCreateFileA() has been registered through 393 * RegisterHandleCreator(). 394 */ 395 WINPR_API HANDLE CommCreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, 396 LPSECURITY_ATTRIBUTES lpSecurityAttributes, 397 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, 398 HANDLE hTemplateFile); 399 400#define IOCTL_SERIAL_SET_BAUD_RATE 0x001B0004 401#define IOCTL_SERIAL_GET_BAUD_RATE 0x001B0050 402#define IOCTL_SERIAL_SET_LINE_CONTROL 0x001B000C 403#define IOCTL_SERIAL_GET_LINE_CONTROL 0x001B0054 404#define IOCTL_SERIAL_SET_TIMEOUTS 0x001B001C 405#define IOCTL_SERIAL_GET_TIMEOUTS 0x001B0020 406/* GET_CHARS and SET_CHARS are swapped in the RDP docs [MS-RDPESP] */ 407#define IOCTL_SERIAL_GET_CHARS 0x001B0058 408#define IOCTL_SERIAL_SET_CHARS 0x001B005C 409 410#define IOCTL_SERIAL_SET_DTR 0x001B0024 411#define IOCTL_SERIAL_CLR_DTR 0x001B0028 412#define IOCTL_SERIAL_RESET_DEVICE 0x001B002C 413#define IOCTL_SERIAL_SET_RTS 0x001B0030 414#define IOCTL_SERIAL_CLR_RTS 0x001B0034 415#define IOCTL_SERIAL_SET_XOFF 0x001B0038 416#define IOCTL_SERIAL_SET_XON 0x001B003C 417#define IOCTL_SERIAL_SET_BREAK_ON 0x001B0010 418#define IOCTL_SERIAL_SET_BREAK_OFF 0x001B0014 419#define IOCTL_SERIAL_SET_QUEUE_SIZE 0x001B0008 420#define IOCTL_SERIAL_GET_WAIT_MASK 0x001B0040 421#define IOCTL_SERIAL_SET_WAIT_MASK 0x001B0044 422#define IOCTL_SERIAL_WAIT_ON_MASK 0x001B0048 423#define IOCTL_SERIAL_IMMEDIATE_CHAR 0x001B0018 424#define IOCTL_SERIAL_PURGE 0x001B004C 425#define IOCTL_SERIAL_GET_HANDFLOW 0x001B0060 426#define IOCTL_SERIAL_SET_HANDFLOW 0x001B0064 427#define IOCTL_SERIAL_GET_MODEMSTATUS 0x001B0068 428#define IOCTL_SERIAL_GET_DTRRTS 0x001B0078 429 430/* according to [MS-RDPESP] it should be 0x001B0084, but servers send 0x001B006C */ 431#define IOCTL_SERIAL_GET_COMMSTATUS 0x001B006C 432 433#define IOCTL_SERIAL_GET_PROPERTIES 0x001B0074 434/* IOCTL_SERIAL_XOFF_COUNTER 0x001B0070 */ 435/* IOCTL_SERIAL_LSRMST_INSERT 0x001B007C */ 436#define IOCTL_SERIAL_CONFIG_SIZE 0x001B0080 437/* IOCTL_SERIAL_GET_STATS 0x001B008C */ 438/* IOCTL_SERIAL_CLEAR_STATS 0x001B0090 */ 439/* IOCTL_SERIAL_GET_MODEM_CONTROL 0x001B0094 */ 440/* IOCTL_SERIAL_SET_MODEM_CONTROL 0x001B0098 */ 441/* IOCTL_SERIAL_SET_FIFO_CONTROL 0x001B009C */ 442 443/* IOCTL_PAR_QUERY_INFORMATION 0x00160004 */ 444/* IOCTL_PAR_SET_INFORMATION 0x00160008 */ 445/* IOCTL_PAR_QUERY_DEVICE_ID 0x0016000C */ 446/* IOCTL_PAR_QUERY_DEVICE_ID_SIZE 0x00160010 */ 447/* IOCTL_IEEE1284_GET_MODE 0x00160014 */ 448/* IOCTL_IEEE1284_NEGOTIATE 0x00160018 */ 449/* IOCTL_PAR_SET_WRITE_ADDRESS 0x0016001C */ 450/* IOCTL_PAR_SET_READ_ADDRESS 0x00160020 */ 451/* IOCTL_PAR_GET_DEVICE_CAPS 0x00160024 */ 452/* IOCTL_PAR_GET_DEFAULT_MODES 0x00160028 */ 453/* IOCTL_PAR_QUERY_RAW_DEVICE_ID 0x00160030 */ 454/* IOCTL_PAR_IS_PORT_FREE 0x00160054 */ 455 456/* http://msdn.microsoft.com/en-us/library/windows/hardware/ff551803(v=vs.85).aspx */ 457#define IOCTL_USBPRINT_GET_1284_ID 0x220034 458 459 typedef struct __SERIAL_IOCTL_NAME 460 { 461 ULONG number; 462 const char* name; 463 } _SERIAL_IOCTL_NAME; 464 465 static const _SERIAL_IOCTL_NAME _SERIAL_IOCTL_NAMES[] = { 466 { IOCTL_SERIAL_SET_BAUD_RATE, "IOCTL_SERIAL_SET_BAUD_RATE" }, 467 { IOCTL_SERIAL_GET_BAUD_RATE, "IOCTL_SERIAL_GET_BAUD_RATE" }, 468 { IOCTL_SERIAL_SET_LINE_CONTROL, "IOCTL_SERIAL_SET_LINE_CONTROL" }, 469 { IOCTL_SERIAL_GET_LINE_CONTROL, "IOCTL_SERIAL_GET_LINE_CONTROL" }, 470 { IOCTL_SERIAL_SET_TIMEOUTS, "IOCTL_SERIAL_SET_TIMEOUTS" }, 471 { IOCTL_SERIAL_GET_TIMEOUTS, "IOCTL_SERIAL_GET_TIMEOUTS" }, 472 { IOCTL_SERIAL_GET_CHARS, "IOCTL_SERIAL_GET_CHARS" }, 473 { IOCTL_SERIAL_SET_CHARS, "IOCTL_SERIAL_SET_CHARS" }, 474 { IOCTL_SERIAL_SET_DTR, "IOCTL_SERIAL_SET_DTR" }, 475 { IOCTL_SERIAL_CLR_DTR, "IOCTL_SERIAL_CLR_DTR" }, 476 { IOCTL_SERIAL_RESET_DEVICE, "IOCTL_SERIAL_RESET_DEVICE" }, 477 { IOCTL_SERIAL_SET_RTS, "IOCTL_SERIAL_SET_RTS" }, 478 { IOCTL_SERIAL_CLR_RTS, "IOCTL_SERIAL_CLR_RTS" }, 479 { IOCTL_SERIAL_SET_XOFF, "IOCTL_SERIAL_SET_XOFF" }, 480 { IOCTL_SERIAL_SET_XON, "IOCTL_SERIAL_SET_XON" }, 481 { IOCTL_SERIAL_SET_BREAK_ON, "IOCTL_SERIAL_SET_BREAK_ON" }, 482 { IOCTL_SERIAL_SET_BREAK_OFF, "IOCTL_SERIAL_SET_BREAK_OFF" }, 483 { IOCTL_SERIAL_SET_QUEUE_SIZE, "IOCTL_SERIAL_SET_QUEUE_SIZE" }, 484 { IOCTL_SERIAL_GET_WAIT_MASK, "IOCTL_SERIAL_GET_WAIT_MASK" }, 485 { IOCTL_SERIAL_SET_WAIT_MASK, "IOCTL_SERIAL_SET_WAIT_MASK" }, 486 { IOCTL_SERIAL_WAIT_ON_MASK, "IOCTL_SERIAL_WAIT_ON_MASK" }, 487 { IOCTL_SERIAL_IMMEDIATE_CHAR, "IOCTL_SERIAL_IMMEDIATE_CHAR" }, 488 { IOCTL_SERIAL_PURGE, "IOCTL_SERIAL_PURGE" }, 489 { IOCTL_SERIAL_GET_HANDFLOW, "IOCTL_SERIAL_GET_HANDFLOW" }, 490 { IOCTL_SERIAL_SET_HANDFLOW, "IOCTL_SERIAL_SET_HANDFLOW" }, 491 { IOCTL_SERIAL_GET_MODEMSTATUS, "IOCTL_SERIAL_GET_MODEMSTATUS" }, 492 { IOCTL_SERIAL_GET_DTRRTS, "IOCTL_SERIAL_GET_DTRRTS" }, 493 { IOCTL_SERIAL_GET_COMMSTATUS, "IOCTL_SERIAL_GET_COMMSTATUS" }, 494 { IOCTL_SERIAL_GET_PROPERTIES, "IOCTL_SERIAL_GET_PROPERTIES" }, 495 // {IOCTL_SERIAL_XOFF_COUNTER, "IOCTL_SERIAL_XOFF_COUNTER"}, 496 // {IOCTL_SERIAL_LSRMST_INSERT, "IOCTL_SERIAL_LSRMST_INSERT"}, 497 { IOCTL_SERIAL_CONFIG_SIZE, "IOCTL_SERIAL_CONFIG_SIZE" }, 498 // {IOCTL_SERIAL_GET_STATS, "IOCTL_SERIAL_GET_STATS"}, 499 // {IOCTL_SERIAL_CLEAR_STATS, "IOCTL_SERIAL_CLEAR_STATS"}, 500 // {IOCTL_SERIAL_GET_MODEM_CONTROL,"IOCTL_SERIAL_GET_MODEM_CONTROL"}, 501 // {IOCTL_SERIAL_SET_MODEM_CONTROL,"IOCTL_SERIAL_SET_MODEM_CONTROL"}, 502 // {IOCTL_SERIAL_SET_FIFO_CONTROL, "IOCTL_SERIAL_SET_FIFO_CONTROL"}, 503 504 // {IOCTL_PAR_QUERY_INFORMATION, "IOCTL_PAR_QUERY_INFORMATION"}, 505 // {IOCTL_PAR_SET_INFORMATION, "IOCTL_PAR_SET_INFORMATION"}, 506 // {IOCTL_PAR_QUERY_DEVICE_ID, "IOCTL_PAR_QUERY_DEVICE_ID"}, 507 // {IOCTL_PAR_QUERY_DEVICE_ID_SIZE,"IOCTL_PAR_QUERY_DEVICE_ID_SIZE"}, 508 // {IOCTL_IEEE1284_GET_MODE, "IOCTL_IEEE1284_GET_MODE"}, 509 // {IOCTL_IEEE1284_NEGOTIATE, "IOCTL_IEEE1284_NEGOTIATE"}, 510 // {IOCTL_PAR_SET_WRITE_ADDRESS, "IOCTL_PAR_SET_WRITE_ADDRESS"}, 511 // {IOCTL_PAR_SET_READ_ADDRESS, "IOCTL_PAR_SET_READ_ADDRESS"}, 512 // {IOCTL_PAR_GET_DEVICE_CAPS, "IOCTL_PAR_GET_DEVICE_CAPS"}, 513 // {IOCTL_PAR_GET_DEFAULT_MODES, "IOCTL_PAR_GET_DEFAULT_MODES"}, 514 // {IOCTL_PAR_QUERY_RAW_DEVICE_ID, "IOCTL_PAR_QUERY_RAW_DEVICE_ID"}, 515 // {IOCTL_PAR_IS_PORT_FREE, "IOCTL_PAR_IS_PORT_FREE"}, 516 517 { IOCTL_USBPRINT_GET_1284_ID, "IOCTL_USBPRINT_GET_1284_ID" }, 518 519 { 0, NULL } 520 }; 521 522 /** 523 * FIXME: got a proper function name and place 524 */ 525 WINPR_API const char* _comm_serial_ioctl_name(ULONG number); 526 527 /** 528 * FIXME: got a proper function name and place 529 */ 530 WINPR_API void _comm_setServerSerialDriver(HANDLE hComm, SERIAL_DRIVER_ID); 531 532 /** 533 * FIXME: got a proper function name and place 534 * 535 * permissive mode is disabled by default. 536 */ 537 WINPR_API BOOL _comm_set_permissive(HANDLE hDevice, BOOL permissive); 538 539 /** 540 * FIXME: to be moved in comm_ioctl.h 541 */ 542 WINPR_API BOOL CommDeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, 543 DWORD nInBufferSize, LPVOID lpOutBuffer, 544 DWORD nOutBufferSize, LPDWORD lpBytesReturned, 545 LPOVERLAPPED lpOverlapped); 546 547 /** 548 * FIXME: to be moved in comm_io.h 549 */ 550 WINPR_API BOOL CommReadFile(HANDLE hDevice, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, 551 LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); 552 553 /** 554 * FIXME: to be moved in comm_io.h 555 */ 556 WINPR_API BOOL CommWriteFile(HANDLE hDevice, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, 557 LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); 558 559#ifdef __cplusplus 560} 561#endif 562 563#endif /* __linux__ */ 564 565#endif /* WINPR_COMM_H */