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

Last change on this file since 22018 was 8647, checked in by sandervl, 23 years ago

shorter polling delay + time critical poll thread

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