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

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

preliminary changes for new overlapped io framework

File size: 7.9 KB
Line 
1/* $Id: hmcomm.h,v 1.12 2001-12-05 14:15:59 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 overlapped;
93 DWORD *lpfdwEvtMask;
94 BOOL fCancelIo;
95 DWORD dwLastError;
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 (LPCSTR lpFileName,
129 PHMHANDLEDATA pHMHandleData,
130 PVOID lpSecurityAttributes,
131 PHMHANDLEDATA pHMHandleDataTemplate);
132
133 /* this is a handler method for calls to GetFileType() */
134 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
135
136 /* this is the handler method for calls to CloseHandle() */
137 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
138
139 /* this is the handler method for SetComm() */
140 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
141 LPDWORD lpfdwEvtMask,
142 LPOVERLAPPED lpo);
143
144 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
145 LPCOMMPROP lpcmmp);
146 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
147 LPDWORD lpfdwEvtMask);
148 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
149 DWORD fdwEvtMask);
150 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
151 DWORD fdwAction);
152 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
153 LPDWORD lpdwErrors,
154 LPCOMSTAT lpcst);
155 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
156 LPDCB lpdcb) ;
157 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
158 LPDCB lpdcb);
159 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
160 LPDWORD lpModemStat );
161 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
162 LPCOMMTIMEOUTS lpctmo);
163 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
164 LPCOMMTIMEOUTS lpctmo);
165 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
166 CHAR cChar );
167 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
168 LPCOMMCONFIG lpCC,
169 DWORD dwSize );
170 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
171 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
172 LPCOMMCONFIG lpCC,
173 LPDWORD lpdwSize );
174 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
175 UINT dwFunc );
176 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
177 DWORD dwInQueue,
178 DWORD dwOutQueue);
179 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
180 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
181 LPCOMMCONFIG lpCC,
182 DWORD dwSize);
183 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
184 LPCOMMCONFIG lpCC,
185 LPDWORD lpdwSize);
186
187 /* this is a handler method for calls to ReadFile/Ex */
188 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
189 LPCVOID lpBuffer,
190 DWORD nNumberOfBytesToRead,
191 LPDWORD lpNumberOfBytesRead,
192 LPOVERLAPPED lpOverlapped,
193 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
194
195 /* this is a handler method for calls to WriteFile/Ex */
196 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
197 LPCVOID lpBuffer,
198 DWORD nNumberOfBytesToWrite,
199 LPDWORD lpNumberOfBytesWritten,
200 LPOVERLAPPED lpOverlapped,
201 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
202
203 virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData);
204
205 /* this is a handler method for calls to GetOverlappedResult */
206 virtual BOOL GetOverlappedResult(PHMHANDLEDATA pHMHandleData,
207 LPOVERLAPPED arg2,
208 LPDWORD arg3,
209 BOOL arg4);
210
211 private:
212 APIRET SetLine( PHMHANDLEDATA pHMHandleData,
213 UCHAR ucSize,UCHAR Parity, UCHAR Stop);
214 APIRET SetOS2DCB( PHMHANDLEDATA pHMHandleData,
215 BOOL fOutxCtsFlow, BOOL fOutxDsrFlow,
216 UCHAR ucDtrControl, BOOL fDsrSensitivity,
217 BOOL fTXContinueOnXoff, BOOL fOutX,
218 BOOL fInX, BOOL fErrorChar,
219 BOOL fNull, UCHAR ucRtsControl,
220 BOOL fAbortOnError, BYTE XonChar,
221 BYTE XoffChar,BYTE ErrorChar);
222 APIRET SetBaud( PHMHANDLEDATA pHMHandleData,
223 DWORD dwNewBaud);
224};
225
226
227#endif // _HM_COMM_H_
Note: See TracBrowser for help on using the repository browser.