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

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

com fixes

File size: 8.5 KB
Line 
1/* $Id: hmcomm.h,v 1.10 2001-11-28 15:35:15 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 DWORD *lpfdwEvtMask;
94 BOOL fClosing;
95 BOOL fCancelIo;
96 //OS/2 Device Control Block
97 DCBINFO dcbOS2;
98} HMDEVCOMDATA, *PHMDEVCOMDATA;
99
100#pragma pack(1)
101typedef struct
102{
103 ULONG ulCurrBaud;
104 UCHAR ucCurrFrac;
105 ULONG ulMinBaud;
106 UCHAR ucMinFrac;
107 ULONG ulMaxBaud;
108 UCHAR ucMaxFrac;
109} EXTBAUDGET, *PEXTBAUDGET;
110
111typedef struct
112{
113 ULONG ulBaud;
114 UCHAR ucFrac;
115} EXTBAUDSET, *PEXTBAUDSET;
116#pragma pack()
117
118class HMDeviceCommClass : public HMDeviceHandler
119{
120 public:
121
122 HMDeviceCommClass(LPCSTR lpDeviceName);
123
124 //checks if device name belongs to this class
125 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength);
126
127 /* this is the handler method for calls to CreateFile() */
128 virtual DWORD CreateFile (HANDLE hHandle,
129 LPCSTR lpFileName,
130 PHMHANDLEDATA pHMHandleData,
131 PVOID lpSecurityAttributes,
132 PHMHANDLEDATA pHMHandleDataTemplate);
133
134 /* this is the handler method for calls to CloseHandle() */
135 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
136
137 /* this is the handler method for SetComm() */
138 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
139 LPDWORD lpfdwEvtMask,
140 LPOVERLAPPED lpo);
141
142 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
143 LPCOMMPROP lpcmmp);
144 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
145 LPDWORD lpfdwEvtMask);
146 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
147 DWORD fdwEvtMask);
148 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
149 DWORD fdwAction);
150 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
151 LPDWORD lpdwErrors,
152 LPCOMSTAT lpcst);
153 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
154 LPDCB lpdcb) ;
155 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
156 LPDCB lpdcb);
157 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
158 LPDWORD lpModemStat );
159 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
160 LPCOMMTIMEOUTS lpctmo);
161 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
162 LPCOMMTIMEOUTS lpctmo);
163 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
164 CHAR cChar );
165 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
166 LPCOMMCONFIG lpCC,
167 DWORD dwSize );
168 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
169 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
170 LPCOMMCONFIG lpCC,
171 LPDWORD lpdwSize );
172 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
173 UINT dwFunc );
174 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
175 DWORD dwInQueue,
176 DWORD dwOutQueue);
177 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
178 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
179 LPCOMMCONFIG lpCC,
180 DWORD dwSize);
181 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
182 LPCOMMCONFIG lpCC,
183 LPDWORD lpdwSize);
184
185 /* this is a handler method for calls to ReadFile() */
186 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
187 LPCVOID lpBuffer,
188 DWORD nNumberOfBytesToRead,
189 LPDWORD lpNumberOfBytesRead,
190 LPOVERLAPPED lpOverlapped);
191
192 /* this is a handler method for calls to ReadFileEx() */
193 virtual BOOL ReadFileEx(PHMHANDLEDATA pHMHandleData,
194 LPVOID lpBuffer,
195 DWORD nNumberOfBytesToRead,
196 LPOVERLAPPED lpOverlapped,
197 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
198
199 /* this is a handler method for calls to WriteFile() */
200 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
201 LPCVOID lpBuffer,
202 DWORD nNumberOfBytesToWrite,
203 LPDWORD lpNumberOfBytesWritten,
204 LPOVERLAPPED lpOverlapped);
205
206 /* this is a handler method for calls to WriteFileEx() */
207 virtual BOOL WriteFileEx(PHMHANDLEDATA pHMHandleData,
208 LPVOID lpBuffer,
209 DWORD nNumberOfBytesToWrite,
210 LPOVERLAPPED lpOverlapped,
211 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
212
213 virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData);
214
215 /* this is a handler method for calls to GetOverlappedResult */
216 virtual BOOL GetOverlappedResult(PHMHANDLEDATA pHMHandleData,
217 LPOVERLAPPED arg2,
218 LPDWORD arg3,
219 BOOL arg4);
220
221 private:
222 APIRET SetLine( PHMHANDLEDATA pHMHandleData,
223 UCHAR ucSize,UCHAR Parity, UCHAR Stop);
224 APIRET SetOS2DCB( PHMHANDLEDATA pHMHandleData,
225 BOOL fOutxCtsFlow, BOOL fOutxDsrFlow,
226 UCHAR ucDtrControl, BOOL fDsrSensitivity,
227 BOOL fTXContinueOnXoff, BOOL fOutX,
228 BOOL fInX, BOOL fErrorChar,
229 BOOL fNull, UCHAR ucRtsControl,
230 BOOL fAbortOnError, BYTE XonChar,
231 BYTE XoffChar,BYTE ErrorChar);
232 APIRET SetBaud( PHMHANDLEDATA pHMHandleData,
233 DWORD dwNewBaud);
234};
235
236
237#endif // _HM_COMM_H_
Note: See TracBrowser for help on using the repository browser.