source: trunk/src/kernel32/hmcomm.h@ 7499

Last change on this file since 7499 was 7499, checked in by sandervl, 24 years ago

implemented PurgeComm

File size: 8.6 KB
Line 
1/* $Id: hmcomm.h,v 1.11 2001-11-30 13:52:32 sandervl Exp $ */
2
3/*
4 * Project Odin Software License can be found in LICENSE.TXT
5 *
6 * Win32 COM device access class
7 *
8 * 1999 Achim Hasenmueller <achimha@innotek.de>
9 *
10 */
11
12#ifndef _HM_COMM_H_
13#define _HM_COMM_H_
14
15#define MAGIC_COM 0x12abcd34
16
17typedef struct
18{
19 DWORD dwBaudRate;
20 DWORD dwBaudFlag;
21}BAUDTABLEENTRY;
22
23#define IOCTL_ASYNC 0x01
24#define ASYNC_GETDCBINFO 0x73
25#define ASYNC_SETDCBINFO 0x53
26#define ASYNC_SETLINECTRL 0x42
27#define ASYNC_GETCOMMEVENT 0x72
28#define ASYNC_EXTGETBAUDRATE 0x63
29#define ASYNC_EXTSETBAUDRATE 0x43
30#define ASYNC_GETCOMMERROR 0x6D
31#define ASYNC_GETCOMMSTATUS 0x65
32#define ASYNC_GETINQUECOUNT 0x68
33#define ASYNC_GETOUTQUECOUNT 0x69
34#define ASYNC_GETMODEMINPUT 0x67
35#define ASYNC_TRANSMITIMM 0x44
36#define ASYNC_SETBREAKON 0x4B
37#define ASYNC_SETBREAKOFF 0x45
38#define ASYNC_SETMODEMCTRL 0x46
39#define ASYNC_STARTTRANSMIT 0x48
40#define ASYNC_STOPTRANSMIT 0x47
41#define ASYNC_GETMODEMOUTPUT 0x66
42
43#define IOCTL_GENERAL 0x0B
44#define DEV_FLUSHINPUT 0x01
45#define DEV_FLUSHOUTPUT 0x02
46
47
48#pragma pack(1)
49typedef struct _DCBINFO
50{
51 USHORT usWriteTimeout; /* Time period used for Write Timeout processing. */
52 USHORT usReadTimeout; /* Time period used for Read Timeout processing. */
53 BYTE fbCtlHndShake; /* HandShake Control flag. */
54 BYTE fbFlowReplace; /* Flow Control flag. */
55 BYTE fbTimeOut; /* Timeout flag. */
56 BYTE bErrorReplacementChar; /* Error Replacement Character. */
57 BYTE bBreakReplacementChar; /* Break Replacement Character. */
58 BYTE bXONChar; /* Character XON. */
59 BYTE bXOFFChar; /* Character XOFF. */
60} DCBINFO;
61typedef DCBINFO *PDCBINFO;
62
63
64typedef struct _RXQUEUE
65{
66 USHORT cch; /* Number of characters in the queue. */
67 USHORT cb; /* Size of receive/transmit queue. */
68} RXQUEUE;
69
70typedef RXQUEUE *PRXQUEUE;
71
72
73typedef struct _MODEMSTATUS
74{
75 BYTE fbModemOn; /* Modem Control Signals ON Mask. */
76 BYTE fbModemOff; /* Modem Control Signals OFF Mask. */
77} MODEMSTATUS;
78
79typedef MODEMSTATUS *PMODEMSTATUS;
80
81
82#pragma pack()
83
84typedef struct _HMDEVCOMDATA
85{
86 ULONG ulMagic;
87 // Win32 Device Control Block
88 COMMCONFIG CommCfg;
89 COMMTIMEOUTS CommTOuts;
90 DWORD dwInBuffer, dwOutBuffer;
91 DWORD dwEventMask;
92 //overlapped IO info
93 HANDLE hThread;
94 HANDLE hEventSem;
95 OVERLAPPED overlapped;
96 DWORD dwLastError;
97 DWORD *lpfdwEvtMask;
98 BOOL fClosing;
99 BOOL fCancelIo;
100 //OS/2 Device Control Block
101 DCBINFO dcbOS2;
102} HMDEVCOMDATA, *PHMDEVCOMDATA;
103
104#pragma pack(1)
105typedef struct
106{
107 ULONG ulCurrBaud;
108 UCHAR ucCurrFrac;
109 ULONG ulMinBaud;
110 UCHAR ucMinFrac;
111 ULONG ulMaxBaud;
112 UCHAR ucMaxFrac;
113} EXTBAUDGET, *PEXTBAUDGET;
114
115typedef struct
116{
117 ULONG ulBaud;
118 UCHAR ucFrac;
119} EXTBAUDSET, *PEXTBAUDSET;
120#pragma pack()
121
122class HMDeviceCommClass : public HMDeviceHandler
123{
124 public:
125
126 HMDeviceCommClass(LPCSTR lpDeviceName);
127
128 //checks if device name belongs to this class
129 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength);
130
131 /* this is the handler method for calls to CreateFile() */
132 virtual DWORD CreateFile (HANDLE hHandle,
133 LPCSTR lpFileName,
134 PHMHANDLEDATA pHMHandleData,
135 PVOID lpSecurityAttributes,
136 PHMHANDLEDATA pHMHandleDataTemplate);
137
138 /* this is the handler method for calls to CloseHandle() */
139 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
140
141 /* this is the handler method for SetComm() */
142 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
143 LPDWORD lpfdwEvtMask,
144 LPOVERLAPPED lpo);
145
146 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
147 LPCOMMPROP lpcmmp);
148 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
149 LPDWORD lpfdwEvtMask);
150 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
151 DWORD fdwEvtMask);
152 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
153 DWORD fdwAction);
154 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
155 LPDWORD lpdwErrors,
156 LPCOMSTAT lpcst);
157 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
158 LPDCB lpdcb) ;
159 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
160 LPDCB lpdcb);
161 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
162 LPDWORD lpModemStat );
163 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
164 LPCOMMTIMEOUTS lpctmo);
165 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
166 LPCOMMTIMEOUTS lpctmo);
167 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
168 CHAR cChar );
169 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
170 LPCOMMCONFIG lpCC,
171 DWORD dwSize );
172 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
173 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
174 LPCOMMCONFIG lpCC,
175 LPDWORD lpdwSize );
176 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
177 UINT dwFunc );
178 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
179 DWORD dwInQueue,
180 DWORD dwOutQueue);
181 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
182 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
183 LPCOMMCONFIG lpCC,
184 DWORD dwSize);
185 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
186 LPCOMMCONFIG lpCC,
187 LPDWORD lpdwSize);
188
189 /* this is a handler method for calls to ReadFile() */
190 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
191 LPCVOID lpBuffer,
192 DWORD nNumberOfBytesToRead,
193 LPDWORD lpNumberOfBytesRead,
194 LPOVERLAPPED lpOverlapped);
195
196 /* this is a handler method for calls to ReadFileEx() */
197 virtual BOOL ReadFileEx(PHMHANDLEDATA pHMHandleData,
198 LPVOID lpBuffer,
199 DWORD nNumberOfBytesToRead,
200 LPOVERLAPPED lpOverlapped,
201 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
202
203 /* this is a handler method for calls to WriteFile() */
204 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
205 LPCVOID lpBuffer,
206 DWORD nNumberOfBytesToWrite,
207 LPDWORD lpNumberOfBytesWritten,
208 LPOVERLAPPED lpOverlapped);
209
210 /* this is a handler method for calls to WriteFileEx() */
211 virtual BOOL WriteFileEx(PHMHANDLEDATA pHMHandleData,
212 LPVOID lpBuffer,
213 DWORD nNumberOfBytesToWrite,
214 LPOVERLAPPED lpOverlapped,
215 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
216
217 virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData);
218
219 /* this is a handler method for calls to GetOverlappedResult */
220 virtual BOOL GetOverlappedResult(PHMHANDLEDATA pHMHandleData,
221 LPOVERLAPPED arg2,
222 LPDWORD arg3,
223 BOOL arg4);
224
225 private:
226 APIRET SetLine( PHMHANDLEDATA pHMHandleData,
227 UCHAR ucSize,UCHAR Parity, UCHAR Stop);
228 APIRET SetOS2DCB( PHMHANDLEDATA pHMHandleData,
229 BOOL fOutxCtsFlow, BOOL fOutxDsrFlow,
230 UCHAR ucDtrControl, BOOL fDsrSensitivity,
231 BOOL fTXContinueOnXoff, BOOL fOutX,
232 BOOL fInX, BOOL fErrorChar,
233 BOOL fNull, UCHAR ucRtsControl,
234 BOOL fAbortOnError, BYTE XonChar,
235 BYTE XoffChar,BYTE ErrorChar);
236 APIRET SetBaud( PHMHANDLEDATA pHMHandleData,
237 DWORD dwNewBaud);
238};
239
240
241#endif // _HM_COMM_H_
Note: See TracBrowser for help on using the repository browser.