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

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

preliminary work on overlapped serial comm IO

File size: 8.4 KB
Line 
1/* $Id: hmcomm.h,v 1.9 2001-11-26 14:54:00 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
44#pragma pack(1)
45typedef struct _DCBINFO
46{
47 USHORT usWriteTimeout; /* Time period used for Write Timeout processing. */
48 USHORT usReadTimeout; /* Time period used for Read Timeout processing. */
49 BYTE fbCtlHndShake; /* HandShake Control flag. */
50 BYTE fbFlowReplace; /* Flow Control flag. */
51 BYTE fbTimeOut; /* Timeout flag. */
52 BYTE bErrorReplacementChar; /* Error Replacement Character. */
53 BYTE bBreakReplacementChar; /* Break Replacement Character. */
54 BYTE bXONChar; /* Character XON. */
55 BYTE bXOFFChar; /* Character XOFF. */
56} DCBINFO;
57typedef DCBINFO *PDCBINFO;
58
59
60typedef struct _RXQUEUE
61{
62 USHORT cch; /* Number of characters in the queue. */
63 USHORT cb; /* Size of receive/transmit queue. */
64} RXQUEUE;
65
66typedef RXQUEUE *PRXQUEUE;
67
68
69typedef struct _MODEMSTATUS
70{
71 BYTE fbModemOn; /* Modem Control Signals ON Mask. */
72 BYTE fbModemOff; /* Modem Control Signals OFF Mask. */
73} MODEMSTATUS;
74
75typedef MODEMSTATUS *PMODEMSTATUS;
76
77
78#pragma pack()
79
80typedef struct _HMDEVCOMDATA
81{
82 ULONG ulMagic;
83 // Win32 Device Control Block
84 COMMCONFIG CommCfg;
85 COMMTIMEOUTS CommTOuts;
86 DWORD dwInBuffer, dwOutBuffer;
87 DWORD dwEventMask;
88 //overlapped IO info
89 HANDLE hThread;
90 HANDLE hEventSem;
91 OVERLAPPED overlapped;
92 DWORD dwLastError;
93 BOOL fClosing;
94 BOOL fCancelIo;
95 //OS/2 Device Control Block
96 DCBINFO dcbOS2;
97} HMDEVCOMDATA, *PHMDEVCOMDATA;
98
99#pragma pack(1)
100typedef struct
101{
102 ULONG ulCurrBaud;
103 UCHAR ucCurrFrac;
104 ULONG ulMinBaud;
105 UCHAR ucMinFrac;
106 ULONG ulMaxBaud;
107 UCHAR ucMaxFrac;
108} EXTBAUDGET, *PEXTBAUDGET;
109
110typedef struct
111{
112 ULONG ulBaud;
113 UCHAR ucFrac;
114} EXTBAUDSET, *PEXTBAUDSET;
115#pragma pack()
116
117class HMDeviceCommClass : public HMDeviceHandler
118{
119 public:
120
121 HMDeviceCommClass(LPCSTR lpDeviceName);
122
123 //checks if device name belongs to this class
124 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength);
125
126 /* this is the handler method for calls to CreateFile() */
127 virtual DWORD CreateFile (HANDLE hHandle,
128 LPCSTR lpFileName,
129 PHMHANDLEDATA pHMHandleData,
130 PVOID lpSecurityAttributes,
131 PHMHANDLEDATA pHMHandleDataTemplate);
132
133 /* this is the handler method for calls to CloseHandle() */
134 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
135
136 /* this is the handler method for SetComm() */
137 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
138 LPDWORD lpfdwEvtMask,
139 LPOVERLAPPED lpo);
140
141 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
142 LPCOMMPROP lpcmmp);
143 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
144 LPDWORD lpfdwEvtMask);
145 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
146 DWORD fdwEvtMask);
147 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
148 DWORD fdwAction);
149 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
150 LPDWORD lpdwErrors,
151 LPCOMSTAT lpcst);
152 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
153 LPDCB lpdcb) ;
154 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
155 LPDCB lpdcb);
156 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
157 LPDWORD lpModemStat );
158 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
159 LPCOMMTIMEOUTS lpctmo);
160 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
161 LPCOMMTIMEOUTS lpctmo);
162 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
163 CHAR cChar );
164 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
165 LPCOMMCONFIG lpCC,
166 DWORD dwSize );
167 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
168 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
169 LPCOMMCONFIG lpCC,
170 LPDWORD lpdwSize );
171 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
172 UINT dwFunc );
173 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
174 DWORD dwInQueue,
175 DWORD dwOutQueue);
176 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
177 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
178 LPCOMMCONFIG lpCC,
179 DWORD dwSize);
180 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
181 LPCOMMCONFIG lpCC,
182 LPDWORD lpdwSize);
183
184 /* this is a handler method for calls to ReadFile() */
185 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
186 LPCVOID lpBuffer,
187 DWORD nNumberOfBytesToRead,
188 LPDWORD lpNumberOfBytesRead,
189 LPOVERLAPPED lpOverlapped);
190
191 /* this is a handler method for calls to ReadFileEx() */
192 virtual BOOL ReadFileEx(PHMHANDLEDATA pHMHandleData,
193 LPVOID lpBuffer,
194 DWORD nNumberOfBytesToRead,
195 LPOVERLAPPED lpOverlapped,
196 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
197
198 /* this is a handler method for calls to WriteFile() */
199 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
200 LPCVOID lpBuffer,
201 DWORD nNumberOfBytesToWrite,
202 LPDWORD lpNumberOfBytesWritten,
203 LPOVERLAPPED lpOverlapped);
204
205 /* this is a handler method for calls to WriteFileEx() */
206 virtual BOOL WriteFileEx(PHMHANDLEDATA pHMHandleData,
207 LPVOID lpBuffer,
208 DWORD nNumberOfBytesToWrite,
209 LPOVERLAPPED lpOverlapped,
210 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
211
212 virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData);
213
214 /* this is a handler method for calls to GetOverlappedResult */
215 virtual BOOL GetOverlappedResult(PHMHANDLEDATA pHMHandleData,
216 LPOVERLAPPED arg2,
217 LPDWORD arg3,
218 BOOL arg4);
219
220 private:
221 APIRET SetLine( PHMHANDLEDATA pHMHandleData,
222 UCHAR ucSize,UCHAR Parity, UCHAR Stop);
223 APIRET SetOS2DCB( PHMHANDLEDATA pHMHandleData,
224 BOOL fOutxCtsFlow, BOOL fOutxDsrFlow,
225 UCHAR ucDtrControl, BOOL fDsrSensitivity,
226 BOOL fTXContinueOnXoff, BOOL fOutX,
227 BOOL fInX, BOOL fErrorChar,
228 BOOL fNull, UCHAR ucRtsControl,
229 BOOL fAbortOnError, BYTE XonChar,
230 BYTE XoffChar,BYTE ErrorChar);
231 APIRET SetBaud( PHMHANDLEDATA pHMHandleData,
232 DWORD dwNewBaud);
233};
234
235
236#endif // _HM_COMM_H_
Note: See TracBrowser for help on using the repository browser.