Blame winpr/include/winpr/comm.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * WinPR: Windows Portable Runtime
Packit 1fb8d4
 * Serial Communication API
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2011 O.S. Systems Software Ltda.
Packit 1fb8d4
 * Copyright 2011 Eduardo Fiss Beloni <beloni@ossystems.com.br>
Packit 1fb8d4
 * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 * Copyright 2014 Hewlett-Packard Development Company, L.P.
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef WINPR_COMM_H
Packit 1fb8d4
#define WINPR_COMM_H
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/collections.h>
Packit 1fb8d4
#include <winpr/file.h>
Packit 1fb8d4
#include <winpr/winpr.h>
Packit 1fb8d4
#include <winpr/wtypes.h>
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
#if defined __linux__ && !defined ANDROID
Packit 1fb8d4
Packit 1fb8d4
#define NOPARITY		0
Packit 1fb8d4
#define ODDPARITY		1
Packit 1fb8d4
#define EVENPARITY		2
Packit 1fb8d4
#define MARKPARITY		3
Packit 1fb8d4
#define SPACEPARITY		4
Packit 1fb8d4
Packit 1fb8d4
#define ONESTOPBIT		0
Packit 1fb8d4
#define ONE5STOPBITS		1
Packit 1fb8d4
#define TWOSTOPBITS		2
Packit 1fb8d4
Packit 1fb8d4
#ifndef IGNORE
Packit 1fb8d4
#define IGNORE			0
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#define CBR_110			110
Packit 1fb8d4
#define CBR_300			300
Packit 1fb8d4
#define CBR_600			600
Packit 1fb8d4
#define CBR_1200		1200
Packit 1fb8d4
#define CBR_2400		2400
Packit 1fb8d4
#define CBR_4800		4800
Packit 1fb8d4
#define CBR_9600		9600
Packit 1fb8d4
#define CBR_14400		14400
Packit 1fb8d4
#define CBR_19200		19200
Packit 1fb8d4
#define CBR_38400		38400
Packit 1fb8d4
#define CBR_56000		56000
Packit 1fb8d4
#define CBR_57600		57600
Packit 1fb8d4
#define CBR_115200		115200
Packit 1fb8d4
#define CBR_128000		128000
Packit 1fb8d4
#define CBR_256000		256000
Packit 1fb8d4
Packit 1fb8d4
#define CE_RXOVER		0x0001
Packit 1fb8d4
#define CE_OVERRUN		0x0002
Packit 1fb8d4
#define CE_RXPARITY		0x0004
Packit 1fb8d4
#define CE_FRAME		0x0008
Packit 1fb8d4
#define CE_BREAK		0x0010
Packit 1fb8d4
#define CE_TXFULL		0x0100
Packit 1fb8d4
#define CE_PTO			0x0200
Packit 1fb8d4
#define CE_IOE			0x0400
Packit 1fb8d4
#define CE_DNS			0x0800
Packit 1fb8d4
#define CE_OOP			0x1000
Packit 1fb8d4
#define CE_MODE			0x8000
Packit 1fb8d4
Packit 1fb8d4
#define IE_BADID		(-1)
Packit 1fb8d4
#define IE_OPEN			(-2)
Packit 1fb8d4
#define IE_NOPEN		(-3)
Packit 1fb8d4
#define IE_MEMORY		(-4)
Packit 1fb8d4
#define IE_DEFAULT		(-5)
Packit 1fb8d4
#define IE_HARDWARE		(-10)
Packit 1fb8d4
#define IE_BYTESIZE		(-11)
Packit 1fb8d4
#define IE_BAUDRATE		(-12)
Packit 1fb8d4
Packit 1fb8d4
#define EV_RXCHAR		0x0001
Packit 1fb8d4
#define EV_RXFLAG		0x0002
Packit 1fb8d4
#define EV_TXEMPTY		0x0004
Packit 1fb8d4
#define EV_CTS			0x0008
Packit 1fb8d4
#define EV_DSR			0x0010
Packit 1fb8d4
#define EV_RLSD			0x0020
Packit 1fb8d4
#define EV_BREAK		0x0040
Packit 1fb8d4
#define EV_ERR			0x0080
Packit 1fb8d4
#define EV_RING			0x0100
Packit 1fb8d4
#define EV_PERR			0x0200
Packit 1fb8d4
#define EV_RX80FULL		0x0400
Packit 1fb8d4
#define EV_EVENT1		0x0800
Packit 1fb8d4
#define EV_EVENT2		0x1000
Packit 1fb8d4
Packit 1fb8d4
#define SETXOFF			1
Packit 1fb8d4
#define SETXON			2
Packit 1fb8d4
#define SETRTS			3
Packit 1fb8d4
#define CLRRTS			4
Packit 1fb8d4
#define SETDTR			5
Packit 1fb8d4
#define CLRDTR			6
Packit 1fb8d4
#define RESETDEV		7
Packit 1fb8d4
#define SETBREAK		8
Packit 1fb8d4
#define CLRBREAK		9
Packit 1fb8d4
Packit 1fb8d4
#define PURGE_TXABORT		0x0001
Packit 1fb8d4
#define PURGE_RXABORT		0x0002
Packit 1fb8d4
#define PURGE_TXCLEAR		0x0004
Packit 1fb8d4
#define PURGE_RXCLEAR		0x0008
Packit 1fb8d4
Packit 1fb8d4
#define LPTx			0x80
Packit 1fb8d4
Packit 1fb8d4
#define MS_CTS_ON		((DWORD)0x0010)
Packit 1fb8d4
#define MS_DSR_ON		((DWORD)0x0020)
Packit 1fb8d4
#define MS_RING_ON		((DWORD)0x0040)
Packit 1fb8d4
#define MS_RLSD_ON		((DWORD)0x0080)
Packit 1fb8d4
Packit 1fb8d4
#define SP_SERIALCOMM		((DWORD)0x00000001)
Packit 1fb8d4
Packit 1fb8d4
#define PST_UNSPECIFIED		((DWORD)0x00000000)
Packit 1fb8d4
#define PST_RS232		((DWORD)0x00000001)
Packit 1fb8d4
#define PST_PARALLELPORT	((DWORD)0x00000002)
Packit 1fb8d4
#define PST_RS422		((DWORD)0x00000003)
Packit 1fb8d4
#define PST_RS423		((DWORD)0x00000004)
Packit 1fb8d4
#define PST_RS449		((DWORD)0x00000005)
Packit 1fb8d4
#define PST_MODEM		((DWORD)0x00000006)
Packit 1fb8d4
#define PST_FAX			((DWORD)0x00000021)
Packit 1fb8d4
#define PST_SCANNER		((DWORD)0x00000022)
Packit 1fb8d4
#define PST_NETWORK_BRIDGE	((DWORD)0x00000100)
Packit 1fb8d4
#define PST_LAT			((DWORD)0x00000101)
Packit 1fb8d4
#define PST_TCPIP_TELNET	((DWORD)0x00000102)
Packit 1fb8d4
#define PST_X25			((DWORD)0x00000103)
Packit 1fb8d4
Packit 1fb8d4
#define PCF_DTRDSR		((DWORD)0x0001)
Packit 1fb8d4
#define PCF_RTSCTS		((DWORD)0x0002)
Packit 1fb8d4
#define PCF_RLSD		((DWORD)0x0004)
Packit 1fb8d4
#define PCF_PARITY_CHECK	((DWORD)0x0008)
Packit 1fb8d4
#define PCF_XONXOFF		((DWORD)0x0010)
Packit 1fb8d4
#define PCF_SETXCHAR		((DWORD)0x0020)
Packit 1fb8d4
#define PCF_TOTALTIMEOUTS	((DWORD)0x0040)
Packit 1fb8d4
#define PCF_INTTIMEOUTS		((DWORD)0x0080)
Packit 1fb8d4
#define PCF_SPECIALCHARS	((DWORD)0x0100)
Packit 1fb8d4
#define PCF_16BITMODE		((DWORD)0x0200)
Packit 1fb8d4
Packit 1fb8d4
#define SP_PARITY		((DWORD)0x0001)
Packit 1fb8d4
#define SP_BAUD			((DWORD)0x0002)
Packit 1fb8d4
#define SP_DATABITS		((DWORD)0x0004)
Packit 1fb8d4
#define SP_STOPBITS		((DWORD)0x0008)
Packit 1fb8d4
#define SP_HANDSHAKING		((DWORD)0x0010)
Packit 1fb8d4
#define SP_PARITY_CHECK		((DWORD)0x0020)
Packit 1fb8d4
#define SP_RLSD			((DWORD)0x0040)
Packit 1fb8d4
Packit 1fb8d4
#define BAUD_075		((DWORD)0x00000001)
Packit 1fb8d4
#define BAUD_110		((DWORD)0x00000002)
Packit 1fb8d4
#define BAUD_134_5		((DWORD)0x00000004)
Packit 1fb8d4
#define BAUD_150		((DWORD)0x00000008)
Packit 1fb8d4
#define BAUD_300		((DWORD)0x00000010)
Packit 1fb8d4
#define BAUD_600		((DWORD)0x00000020)
Packit 1fb8d4
#define BAUD_1200		((DWORD)0x00000040)
Packit 1fb8d4
#define BAUD_1800		((DWORD)0x00000080)
Packit 1fb8d4
#define BAUD_2400		((DWORD)0x00000100)
Packit 1fb8d4
#define BAUD_4800		((DWORD)0x00000200)
Packit 1fb8d4
#define BAUD_7200		((DWORD)0x00000400)
Packit 1fb8d4
#define BAUD_9600		((DWORD)0x00000800)
Packit 1fb8d4
#define BAUD_14400		((DWORD)0x00001000)
Packit 1fb8d4
#define BAUD_19200		((DWORD)0x00002000)
Packit 1fb8d4
#define BAUD_38400		((DWORD)0x00004000)
Packit 1fb8d4
#define BAUD_56K		((DWORD)0x00008000)
Packit 1fb8d4
#define BAUD_128K		((DWORD)0x00010000)
Packit 1fb8d4
#define BAUD_115200		((DWORD)0x00020000)
Packit 1fb8d4
#define BAUD_57600		((DWORD)0x00040000)
Packit 1fb8d4
#define BAUD_USER		((DWORD)0x10000000)
Packit 1fb8d4
Packit 1fb8d4
#define DATABITS_5		((WORD)0x0001)
Packit 1fb8d4
#define DATABITS_6		((WORD)0x0002)
Packit 1fb8d4
#define DATABITS_7		((WORD)0x0004)
Packit 1fb8d4
#define DATABITS_8		((WORD)0x0008)
Packit 1fb8d4
#define DATABITS_16		((WORD)0x0010)
Packit 1fb8d4
#define DATABITS_16X		((WORD)0x0020)
Packit 1fb8d4
Packit 1fb8d4
#define STOPBITS_10		((WORD)0x0001)
Packit 1fb8d4
#define STOPBITS_15		((WORD)0x0002)
Packit 1fb8d4
#define STOPBITS_20		((WORD)0x0004)
Packit 1fb8d4
Packit 1fb8d4
#define PARITY_NONE		((WORD)0x0100)
Packit 1fb8d4
#define PARITY_ODD		((WORD)0x0200)
Packit 1fb8d4
#define PARITY_EVEN		((WORD)0x0400)
Packit 1fb8d4
#define PARITY_MARK		((WORD)0x0800)
Packit 1fb8d4
#define PARITY_SPACE		((WORD)0x1000)
Packit 1fb8d4
Packit 1fb8d4
#define COMMPROP_INITIALIZED	((DWORD)0xE73CF52E)
Packit 1fb8d4
Packit 1fb8d4
#define DTR_CONTROL_DISABLE	0x00
Packit 1fb8d4
#define DTR_CONTROL_ENABLE	0x01
Packit 1fb8d4
#define DTR_CONTROL_HANDSHAKE	0x02
Packit 1fb8d4
Packit 1fb8d4
#define RTS_CONTROL_DISABLE	0x00
Packit 1fb8d4
#define RTS_CONTROL_ENABLE	0x01
Packit 1fb8d4
#define RTS_CONTROL_HANDSHAKE	0x02
Packit 1fb8d4
#define RTS_CONTROL_TOGGLE	0x03
Packit 1fb8d4
Packit 1fb8d4
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa363214%28v=vs.85%29.aspx
Packit 1fb8d4
typedef struct _DCB
Packit 1fb8d4
{
Packit 1fb8d4
	DWORD DCBlength;
Packit 1fb8d4
	DWORD BaudRate;
Packit 1fb8d4
	DWORD fBinary:1;
Packit 1fb8d4
	DWORD fParity:1;
Packit 1fb8d4
	DWORD fOutxCtsFlow:1;
Packit 1fb8d4
	DWORD fOutxDsrFlow:1;
Packit 1fb8d4
	DWORD fDtrControl:2;
Packit 1fb8d4
	DWORD fDsrSensitivity:1;
Packit 1fb8d4
	DWORD fTXContinueOnXoff:1;
Packit 1fb8d4
	DWORD fOutX:1;
Packit 1fb8d4
	DWORD fInX:1;
Packit 1fb8d4
	DWORD fErrorChar:1;
Packit 1fb8d4
	DWORD fNull:1;
Packit 1fb8d4
	DWORD fRtsControl:2;
Packit 1fb8d4
	DWORD fAbortOnError:1;
Packit 1fb8d4
	DWORD fDummy2:17;
Packit 1fb8d4
	WORD wReserved;
Packit 1fb8d4
	WORD XonLim;
Packit 1fb8d4
	WORD XoffLim;
Packit 1fb8d4
	BYTE ByteSize;
Packit 1fb8d4
	BYTE Parity;
Packit 1fb8d4
	BYTE StopBits;
Packit 1fb8d4
	char XonChar;
Packit 1fb8d4
	char XoffChar;
Packit 1fb8d4
	char ErrorChar;
Packit 1fb8d4
	char EofChar;
Packit 1fb8d4
	char EvtChar;
Packit 1fb8d4
	WORD wReserved1;
Packit 1fb8d4
} DCB, *LPDCB;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _COMM_CONFIG
Packit 1fb8d4
{
Packit 1fb8d4
	DWORD dwSize;
Packit 1fb8d4
	WORD wVersion;
Packit 1fb8d4
	WORD wReserved;
Packit 1fb8d4
	DCB dcb;
Packit 1fb8d4
	DWORD dwProviderSubType;
Packit 1fb8d4
	DWORD dwProviderOffset;
Packit 1fb8d4
	DWORD dwProviderSize;
Packit 1fb8d4
	WCHAR wcProviderData[1];
Packit 1fb8d4
} COMMCONFIG, *LPCOMMCONFIG;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _COMMPROP
Packit 1fb8d4
{
Packit 1fb8d4
	WORD wPacketLength;
Packit 1fb8d4
	WORD wPacketVersion;
Packit 1fb8d4
	DWORD dwServiceMask;
Packit 1fb8d4
	DWORD dwReserved1;
Packit 1fb8d4
	DWORD dwMaxTxQueue;
Packit 1fb8d4
	DWORD dwMaxRxQueue;
Packit 1fb8d4
	DWORD dwMaxBaud;
Packit 1fb8d4
	DWORD dwProvSubType;
Packit 1fb8d4
	DWORD dwProvCapabilities;
Packit 1fb8d4
	DWORD dwSettableParams;
Packit 1fb8d4
	DWORD dwSettableBaud;
Packit 1fb8d4
	WORD wSettableData;
Packit 1fb8d4
	WORD wSettableStopParity;
Packit 1fb8d4
	DWORD dwCurrentTxQueue;
Packit 1fb8d4
	DWORD dwCurrentRxQueue;
Packit 1fb8d4
	DWORD dwProvSpec1;
Packit 1fb8d4
	DWORD dwProvSpec2;
Packit 1fb8d4
	WCHAR wcProvChar[1];
Packit 1fb8d4
} COMMPROP, *LPCOMMPROP;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _COMMTIMEOUTS
Packit 1fb8d4
{
Packit 1fb8d4
	DWORD ReadIntervalTimeout;
Packit 1fb8d4
	DWORD ReadTotalTimeoutMultiplier;
Packit 1fb8d4
	DWORD ReadTotalTimeoutConstant;
Packit 1fb8d4
	DWORD WriteTotalTimeoutMultiplier;
Packit 1fb8d4
	DWORD WriteTotalTimeoutConstant;
Packit 1fb8d4
} COMMTIMEOUTS, *LPCOMMTIMEOUTS;
Packit 1fb8d4
Packit 1fb8d4
typedef struct _COMSTAT
Packit 1fb8d4
{
Packit 1fb8d4
	DWORD fCtsHold:1;
Packit 1fb8d4
	DWORD fDsrHold:1;
Packit 1fb8d4
	DWORD fRlsdHold:1;
Packit 1fb8d4
	DWORD fXoffHold:1;
Packit 1fb8d4
	DWORD fXoffSent:1;
Packit 1fb8d4
	DWORD fEof:1;
Packit 1fb8d4
	DWORD fTxim:1;
Packit 1fb8d4
	DWORD fReserved:25;
Packit 1fb8d4
	DWORD cbInQue;
Packit 1fb8d4
	DWORD cbOutQue;
Packit 1fb8d4
} COMSTAT, *LPCOMSTAT;
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
extern "C" {
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL BuildCommDCBA(LPCSTR lpDef, LPDCB lpDCB);
Packit 1fb8d4
WINPR_API BOOL BuildCommDCBW(LPCWSTR lpDef, LPDCB lpDCB);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL BuildCommDCBAndTimeoutsA(LPCSTR lpDef, LPDCB lpDCB, LPCOMMTIMEOUTS lpCommTimeouts);
Packit 1fb8d4
WINPR_API BOOL BuildCommDCBAndTimeoutsW(LPCWSTR lpDef, LPDCB lpDCB, LPCOMMTIMEOUTS lpCommTimeouts);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL CommConfigDialogA(LPCSTR lpszName, HWND hWnd, LPCOMMCONFIG lpCC);
Packit 1fb8d4
WINPR_API BOOL CommConfigDialogW(LPCWSTR lpszName, HWND hWnd, LPCOMMCONFIG lpCC);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL GetCommConfig(HANDLE hCommDev, LPCOMMCONFIG lpCC, LPDWORD lpdwSize);
Packit 1fb8d4
WINPR_API BOOL SetCommConfig(HANDLE hCommDev, LPCOMMCONFIG lpCC, DWORD dwSize);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL GetCommMask(HANDLE hFile, PDWORD lpEvtMask);
Packit 1fb8d4
WINPR_API BOOL SetCommMask(HANDLE hFile, DWORD dwEvtMask);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL GetCommModemStatus(HANDLE hFile, PDWORD lpModemStat);
Packit 1fb8d4
WINPR_API BOOL GetCommProperties(HANDLE hFile, LPCOMMPROP lpCommProp);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL GetCommState(HANDLE hFile, LPDCB lpDCB);
Packit 1fb8d4
WINPR_API BOOL SetCommState(HANDLE hFile, LPDCB lpDCB);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);
Packit 1fb8d4
WINPR_API BOOL SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL GetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize);
Packit 1fb8d4
WINPR_API BOOL GetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL SetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize);
Packit 1fb8d4
WINPR_API BOOL SetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL SetCommBreak(HANDLE hFile);
Packit 1fb8d4
WINPR_API BOOL ClearCommBreak(HANDLE hFile);
Packit 1fb8d4
WINPR_API BOOL ClearCommError(HANDLE hFile, PDWORD lpErrors, LPCOMSTAT lpStat);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL PurgeComm(HANDLE hFile, DWORD dwFlags);
Packit 1fb8d4
WINPR_API BOOL SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL EscapeCommFunction(HANDLE hFile, DWORD dwFunc);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL TransmitCommChar(HANDLE hFile, char cChar);
Packit 1fb8d4
Packit 1fb8d4
WINPR_API BOOL WaitCommEvent(HANDLE hFile, PDWORD lpEvtMask, LPOVERLAPPED lpOverlapped);
Packit 1fb8d4
Packit 1fb8d4
#ifdef UNICODE
Packit 1fb8d4
#define BuildCommDCB		BuildCommDCBW
Packit 1fb8d4
#define BuildCommDCBAndTimeouts	BuildCommDCBAndTimeoutsW
Packit 1fb8d4
#define CommConfigDialog	CommConfigDialogW
Packit 1fb8d4
#define GetDefaultCommConfig	GetDefaultCommConfigW
Packit 1fb8d4
#define SetDefaultCommConfig	SetDefaultCommConfigW
Packit 1fb8d4
#else
Packit 1fb8d4
#define BuildCommDCB		BuildCommDCBA
Packit 1fb8d4
#define BuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsA
Packit 1fb8d4
#define CommConfigDialog	CommConfigDialogA
Packit 1fb8d4
#define GetDefaultCommConfig	GetDefaultCommConfigA
Packit 1fb8d4
#define SetDefaultCommConfig	SetDefaultCommConfigA
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* Extended API */
Packit 1fb8d4
Packit 1fb8d4
/* FIXME: MAXULONG should be defined arround winpr/limits.h */
Packit 1fb8d4
#ifndef MAXULONG
Packit 1fb8d4
#define MAXULONG (4294967295UL)
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * IOCTLs table according the server's serial driver:
Packit 1fb8d4
 * http://msdn.microsoft.com/en-us/library/windows/hardware/dn265347%28v=vs.85%29.aspx
Packit 1fb8d4
 */
Packit 1fb8d4
typedef enum _SERIAL_DRIVER_ID
Packit 1fb8d4
{
Packit 1fb8d4
	SerialDriverUnknown = 0,
Packit 1fb8d4
	SerialDriverSerialSys,
Packit 1fb8d4
	SerialDriverSerCxSys,
Packit 1fb8d4
	SerialDriverSerCx2Sys /* default fallback, see also CommDeviceIoControl() */
Packit 1fb8d4
} SERIAL_DRIVER_ID;
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/*
Packit 1fb8d4
 * About DefineCommDevice() / QueryDosDevice()
Packit 1fb8d4
 *
Packit 1fb8d4
 * Did something close to QueryDosDevice() and DefineDosDevice() but with
Packit 1fb8d4
 * folowing constraints:
Packit 1fb8d4
 *   - mappings are stored in a static array.
Packit 1fb8d4
 *   - QueryCommDevice returns only the mappings that have been defined through DefineCommDevice()
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API BOOL DefineCommDevice(/* DWORD dwFlags,*/ LPCTSTR lpDeviceName, LPCTSTR lpTargetPath);
Packit 1fb8d4
WINPR_API DWORD QueryCommDevice(LPCTSTR lpDeviceName, LPTSTR lpTargetPath, DWORD ucchMax);
Packit 1fb8d4
WINPR_API BOOL IsCommDevice(LPCTSTR lpDeviceName);
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * A handle can only be created on defined devices with DefineCommDevice(). This
Packit 1fb8d4
 * also ensures that CommCreateFileA() has been registered through
Packit 1fb8d4
 * RegisterHandleCreator().
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API HANDLE CommCreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
Packit 1fb8d4
				DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
#define IOCTL_SERIAL_SET_BAUD_RATE	0x001B0004
Packit 1fb8d4
#define IOCTL_SERIAL_GET_BAUD_RATE	0x001B0050
Packit 1fb8d4
#define IOCTL_SERIAL_SET_LINE_CONTROL	0x001B000C
Packit 1fb8d4
#define IOCTL_SERIAL_GET_LINE_CONTROL	0x001B0054
Packit 1fb8d4
#define IOCTL_SERIAL_SET_TIMEOUTS	0x001B001C
Packit 1fb8d4
#define IOCTL_SERIAL_GET_TIMEOUTS	0x001B0020
Packit 1fb8d4
/* GET_CHARS and SET_CHARS are swapped in the RDP docs [MS-RDPESP] */
Packit 1fb8d4
#define IOCTL_SERIAL_GET_CHARS		0x001B0058
Packit 1fb8d4
#define IOCTL_SERIAL_SET_CHARS		0x001B005C
Packit 1fb8d4
Packit 1fb8d4
#define IOCTL_SERIAL_SET_DTR		0x001B0024
Packit 1fb8d4
#define IOCTL_SERIAL_CLR_DTR		0x001B0028
Packit 1fb8d4
#define IOCTL_SERIAL_RESET_DEVICE	0x001B002C
Packit 1fb8d4
#define IOCTL_SERIAL_SET_RTS		0x001B0030
Packit 1fb8d4
#define IOCTL_SERIAL_CLR_RTS		0x001B0034
Packit 1fb8d4
#define IOCTL_SERIAL_SET_XOFF		0x001B0038
Packit 1fb8d4
#define IOCTL_SERIAL_SET_XON		0x001B003C
Packit 1fb8d4
#define IOCTL_SERIAL_SET_BREAK_ON	0x001B0010
Packit 1fb8d4
#define IOCTL_SERIAL_SET_BREAK_OFF	0x001B0014
Packit 1fb8d4
#define IOCTL_SERIAL_SET_QUEUE_SIZE	0x001B0008
Packit 1fb8d4
#define IOCTL_SERIAL_GET_WAIT_MASK	0x001B0040
Packit 1fb8d4
#define IOCTL_SERIAL_SET_WAIT_MASK	0x001B0044
Packit 1fb8d4
#define IOCTL_SERIAL_WAIT_ON_MASK	0x001B0048
Packit 1fb8d4
#define IOCTL_SERIAL_IMMEDIATE_CHAR	0x001B0018
Packit 1fb8d4
#define IOCTL_SERIAL_PURGE		0x001B004C
Packit 1fb8d4
#define IOCTL_SERIAL_GET_HANDFLOW	0x001B0060
Packit 1fb8d4
#define IOCTL_SERIAL_SET_HANDFLOW	0x001B0064
Packit 1fb8d4
#define IOCTL_SERIAL_GET_MODEMSTATUS	0x001B0068
Packit 1fb8d4
#define IOCTL_SERIAL_GET_DTRRTS		0x001B0078
Packit 1fb8d4
Packit 1fb8d4
/* according to [MS-RDPESP] it should be 0x001B0084, but servers send 0x001B006C */
Packit 1fb8d4
#define IOCTL_SERIAL_GET_COMMSTATUS	0x001B006C
Packit 1fb8d4
Packit 1fb8d4
#define IOCTL_SERIAL_GET_PROPERTIES	0x001B0074
Packit 1fb8d4
/* IOCTL_SERIAL_XOFF_COUNTER 0x001B0070 */
Packit 1fb8d4
/* IOCTL_SERIAL_LSRMST_INSERT 0x001B007C */
Packit 1fb8d4
#define IOCTL_SERIAL_CONFIG_SIZE	0x001B0080
Packit 1fb8d4
/* IOCTL_SERIAL_GET_STATS 0x001B008C */
Packit 1fb8d4
/* IOCTL_SERIAL_CLEAR_STATS 0x001B0090 */
Packit 1fb8d4
/* IOCTL_SERIAL_GET_MODEM_CONTROL 0x001B0094 */
Packit 1fb8d4
/* IOCTL_SERIAL_SET_MODEM_CONTROL 0x001B0098 */
Packit 1fb8d4
/* IOCTL_SERIAL_SET_FIFO_CONTROL 0x001B009C */
Packit 1fb8d4
Packit 1fb8d4
/* IOCTL_PAR_QUERY_INFORMATION 0x00160004 */
Packit 1fb8d4
/* IOCTL_PAR_SET_INFORMATION 0x00160008 */
Packit 1fb8d4
/* IOCTL_PAR_QUERY_DEVICE_ID 0x0016000C */
Packit 1fb8d4
/* IOCTL_PAR_QUERY_DEVICE_ID_SIZE 0x00160010 */
Packit 1fb8d4
/* IOCTL_IEEE1284_GET_MODE 0x00160014 */
Packit 1fb8d4
/* IOCTL_IEEE1284_NEGOTIATE 0x00160018 */
Packit 1fb8d4
/* IOCTL_PAR_SET_WRITE_ADDRESS 0x0016001C */
Packit 1fb8d4
/* IOCTL_PAR_SET_READ_ADDRESS 0x00160020 */
Packit 1fb8d4
/* IOCTL_PAR_GET_DEVICE_CAPS 0x00160024 */
Packit 1fb8d4
/* IOCTL_PAR_GET_DEFAULT_MODES 0x00160028 */
Packit 1fb8d4
/* IOCTL_PAR_QUERY_RAW_DEVICE_ID 0x00160030 */
Packit 1fb8d4
/* IOCTL_PAR_IS_PORT_FREE 0x00160054 */
Packit 1fb8d4
Packit 1fb8d4
/* http://msdn.microsoft.com/en-us/library/windows/hardware/ff551803(v=vs.85).aspx */
Packit 1fb8d4
#define IOCTL_USBPRINT_GET_1284_ID	0x220034
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
typedef struct __SERIAL_IOCTL_NAME
Packit 1fb8d4
{
Packit 1fb8d4
	ULONG number;
Packit 1fb8d4
	const char* name;
Packit 1fb8d4
} _SERIAL_IOCTL_NAME;
Packit 1fb8d4
Packit 1fb8d4
static const _SERIAL_IOCTL_NAME _SERIAL_IOCTL_NAMES[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{IOCTL_SERIAL_SET_BAUD_RATE,	"IOCTL_SERIAL_SET_BAUD_RATE"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_BAUD_RATE,	"IOCTL_SERIAL_GET_BAUD_RATE"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_LINE_CONTROL,	"IOCTL_SERIAL_SET_LINE_CONTROL"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_LINE_CONTROL,	"IOCTL_SERIAL_GET_LINE_CONTROL"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_TIMEOUTS,	"IOCTL_SERIAL_SET_TIMEOUTS"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_TIMEOUTS,	"IOCTL_SERIAL_GET_TIMEOUTS"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_CHARS,	"IOCTL_SERIAL_GET_CHARS"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_CHARS,	"IOCTL_SERIAL_SET_CHARS"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_DTR,		"IOCTL_SERIAL_SET_DTR"},
Packit 1fb8d4
	{IOCTL_SERIAL_CLR_DTR,		"IOCTL_SERIAL_CLR_DTR"},
Packit 1fb8d4
	{IOCTL_SERIAL_RESET_DEVICE,	"IOCTL_SERIAL_RESET_DEVICE"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_RTS,		"IOCTL_SERIAL_SET_RTS"},
Packit 1fb8d4
	{IOCTL_SERIAL_CLR_RTS,		"IOCTL_SERIAL_CLR_RTS"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_XOFF,		"IOCTL_SERIAL_SET_XOFF"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_XON,		"IOCTL_SERIAL_SET_XON"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_BREAK_ON,  	"IOCTL_SERIAL_SET_BREAK_ON"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_BREAK_OFF,	"IOCTL_SERIAL_SET_BREAK_OFF"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_QUEUE_SIZE, 	"IOCTL_SERIAL_SET_QUEUE_SIZE"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_WAIT_MASK,	"IOCTL_SERIAL_GET_WAIT_MASK"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_WAIT_MASK,	"IOCTL_SERIAL_SET_WAIT_MASK"},
Packit 1fb8d4
	{IOCTL_SERIAL_WAIT_ON_MASK,	"IOCTL_SERIAL_WAIT_ON_MASK"},
Packit 1fb8d4
	{IOCTL_SERIAL_IMMEDIATE_CHAR,	"IOCTL_SERIAL_IMMEDIATE_CHAR"},
Packit 1fb8d4
	{IOCTL_SERIAL_PURGE,		"IOCTL_SERIAL_PURGE"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_HANDFLOW,	"IOCTL_SERIAL_GET_HANDFLOW"},
Packit 1fb8d4
	{IOCTL_SERIAL_SET_HANDFLOW,	"IOCTL_SERIAL_SET_HANDFLOW"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_MODEMSTATUS,	"IOCTL_SERIAL_GET_MODEMSTATUS"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_DTRRTS,	"IOCTL_SERIAL_GET_DTRRTS"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_COMMSTATUS,	"IOCTL_SERIAL_GET_COMMSTATUS"},
Packit 1fb8d4
	{IOCTL_SERIAL_GET_PROPERTIES,	"IOCTL_SERIAL_GET_PROPERTIES"},
Packit 1fb8d4
	// {IOCTL_SERIAL_XOFF_COUNTER,	"IOCTL_SERIAL_XOFF_COUNTER"},
Packit 1fb8d4
	// {IOCTL_SERIAL_LSRMST_INSERT,	"IOCTL_SERIAL_LSRMST_INSERT"},
Packit 1fb8d4
	{IOCTL_SERIAL_CONFIG_SIZE, 	"IOCTL_SERIAL_CONFIG_SIZE"},
Packit 1fb8d4
	// {IOCTL_SERIAL_GET_STATS,	"IOCTL_SERIAL_GET_STATS"},
Packit 1fb8d4
	// {IOCTL_SERIAL_CLEAR_STATS,	"IOCTL_SERIAL_CLEAR_STATS"},
Packit 1fb8d4
	// {IOCTL_SERIAL_GET_MODEM_CONTROL,"IOCTL_SERIAL_GET_MODEM_CONTROL"},
Packit 1fb8d4
	// {IOCTL_SERIAL_SET_MODEM_CONTROL,"IOCTL_SERIAL_SET_MODEM_CONTROL"},
Packit 1fb8d4
	// {IOCTL_SERIAL_SET_FIFO_CONTROL,	"IOCTL_SERIAL_SET_FIFO_CONTROL"},
Packit 1fb8d4
Packit 1fb8d4
	// {IOCTL_PAR_QUERY_INFORMATION,	"IOCTL_PAR_QUERY_INFORMATION"},
Packit 1fb8d4
	// {IOCTL_PAR_SET_INFORMATION,	"IOCTL_PAR_SET_INFORMATION"},
Packit 1fb8d4
	// {IOCTL_PAR_QUERY_DEVICE_ID,	"IOCTL_PAR_QUERY_DEVICE_ID"},
Packit 1fb8d4
	// {IOCTL_PAR_QUERY_DEVICE_ID_SIZE,"IOCTL_PAR_QUERY_DEVICE_ID_SIZE"},
Packit 1fb8d4
	// {IOCTL_IEEE1284_GET_MODE,	"IOCTL_IEEE1284_GET_MODE"},
Packit 1fb8d4
	// {IOCTL_IEEE1284_NEGOTIATE,	"IOCTL_IEEE1284_NEGOTIATE"},
Packit 1fb8d4
	// {IOCTL_PAR_SET_WRITE_ADDRESS,	"IOCTL_PAR_SET_WRITE_ADDRESS"},
Packit 1fb8d4
	// {IOCTL_PAR_SET_READ_ADDRESS,	"IOCTL_PAR_SET_READ_ADDRESS"},
Packit 1fb8d4
	// {IOCTL_PAR_GET_DEVICE_CAPS,	"IOCTL_PAR_GET_DEVICE_CAPS"},
Packit 1fb8d4
	// {IOCTL_PAR_GET_DEFAULT_MODES,	"IOCTL_PAR_GET_DEFAULT_MODES"},
Packit 1fb8d4
	// {IOCTL_PAR_QUERY_RAW_DEVICE_ID, "IOCTL_PAR_QUERY_RAW_DEVICE_ID"},
Packit 1fb8d4
	// {IOCTL_PAR_IS_PORT_FREE,	"IOCTL_PAR_IS_PORT_FREE"},
Packit 1fb8d4
Packit 1fb8d4
        {IOCTL_USBPRINT_GET_1284_ID,	"IOCTL_USBPRINT_GET_1284_ID"},
Packit 1fb8d4
Packit 1fb8d4
	{0, NULL}
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * FIXME: got a proper function name and place
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API const char* _comm_serial_ioctl_name(ULONG number);
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * FIXME: got a proper function name and place
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API void _comm_setServerSerialDriver(HANDLE hComm, SERIAL_DRIVER_ID);
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * FIXME: got a proper function name and place
Packit 1fb8d4
 *
Packit 1fb8d4
 * permissive mode is disabled by default.
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API BOOL _comm_set_permissive(HANDLE hDevice, BOOL permissive);
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * FIXME: to be moved in comm_ioctl.h
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API BOOL CommDeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize,
Packit 1fb8d4
			LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * FIXME: to be moved in comm_io.h
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API BOOL CommReadFile(HANDLE hDevice, LPVOID lpBuffer, DWORD nNumberOfBytesToRead,
Packit 1fb8d4
		LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * FIXME: to be moved in comm_io.h
Packit 1fb8d4
 */
Packit 1fb8d4
WINPR_API BOOL CommWriteFile(HANDLE hDevice, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,
Packit 1fb8d4
		LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#endif /* __linux__ */
Packit 1fb8d4
Packit 1fb8d4
#endif /* WINPR_COMM_H */
Packit 1fb8d4