00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
#ifndef __HWIO_H
00015
#define __HWIO_H
00016
00017
#if _MSC_VER > 1000
00018
#pragma once
00019
#endif // _MSC_VER > 1000
00020
00021 #define WIN32_LEAN_AND_MEAN // Do not include parts of windows headers that
00022
00023
00024
#include <windows.h>
00025
#include <setupapi.h>
00026
#include <TCHAR.h>
00027
#include <winioctl.h>
00028
00029
#if defined (Build_Hardware)
00030
#define _HWIOCLASS __declspec(dllexport)
00031
#elif defined(Use_Hardware)
00032
#define _HWIOCLASS __declspec(dllimport)
00033
#else
00034 #define _HWIOCLASS
00035
#endif
00036
00037
#ifdef __cplusplus
00038
extern "C"
00039 {
00040
#endif
00041
LPCSTR
_HWIOCLASS WINAPI
hwGetVersion(
void );
00042 HINSTANCE
_HWIOCLASS WINAPI
hwGetInstance(
void );
00043
#ifdef __cplusplus
00044
}
00045
#endif
00046
00048
00049 #define XCTL_TYPE FILE_DEVICE_UNKNOWN
00050 #define IOCTL_MC_REPORT_ID CTL_CODE(XCTL_TYPE,0x900,METHOD_BUFFERED,FILE_READ_ACCESS)
00051
00052 #define IOCTL_MC_READ_BYTE CTL_CODE(XCTL_TYPE,0x901,METHOD_BUFFERED,FILE_READ_ACCESS)
00053 #define IOCTL_MC_READ_WORD CTL_CODE(XCTL_TYPE,0x902,METHOD_BUFFERED,FILE_READ_ACCESS)
00054 #define IOCTL_MC_READ_DWORD CTL_CODE(XCTL_TYPE,0x903,METHOD_BUFFERED,FILE_READ_ACCESS)
00055
00056 #define IOCTL_MC_WRITE_BYTE CTL_CODE(XCTL_TYPE,0x904,METHOD_BUFFERED,FILE_WRITE_ACCESS)
00057 #define IOCTL_MC_WRITE_WORD CTL_CODE(XCTL_TYPE,0x905,METHOD_BUFFERED,FILE_WRITE_ACCESS)
00058 #define IOCTL_MC_WRITE_DWORD CTL_CODE(XCTL_TYPE,0x906,METHOD_BUFFERED,FILE_WRITE_ACCESS)
00059
00060
00061 #define IOCTL_DC_SET_WFR_CYCLES CTL_CODE( XCTL_TYPE, 0x907, METHOD_BUFFERED, FILE_WRITE_ACCESS)
00062
00063
00064
00065 #define IOCTL_DC_GET_DATA CTL_CODE( XCTL_TYPE, 0x908, METHOD_BUFFERED, FILE_WRITE_ACCESS)
00066
00067
00068
00070
00071 enum EDeviceType {
C812= 1,
C832,
RADICON,
BRAUN,
GENERIC,
STOE};
00072
00073
00075
00076 struct WriteBuffer
00077 {
00078 DWORD
Offset;
00079
union
00080
{
00081 BYTE
bData;
00082 WORD
wData;
00083 DWORD
dwData;
00084 };
00085 };
00086
00087
00088
struct IrpParams
00089 {
00090 ULONG
Port;
00091 ULONG
Value;
00092 };
00093
00094
struct IrpParamsGetData
00095 {
00096 PUCHAR
pBuffer;
00097 ULONG
MaxCount;
00098
00099 };
00100
00102
00103
00104
00105
_HWIOCLASS void PrintError(DWORD dwError= 0);
00106
00107
00108
_HWIOCLASS DWORD
EnumDevices(
const GUID& guid);
00109
00110
00111
00112
_HWIOCLASS bool GetDeviceDriver(
const GUID& guid, DWORD devIndex, LPTSTR* pDriverName);
00113
00114 class _HWIOCLASS DeviceListEntry
00115 {
00116
private:
00117
EDeviceType DeviceID;
00118
char HardwareID[9];
00119
char FileName[257];
00120
00121 DeviceListEntry* prev;
00122 DeviceListEntry* next;
00123
00124
public:
00125 DeviceListEntry(
EDeviceType DeviceID, LPTSTR HardwareID, LPTSTR FileName);
00126
void SetPrevEntry(DeviceListEntry* pEntry);
00127
void SetNextEntry(DeviceListEntry* pEntry);
00128 DeviceListEntry* GetPrevEntry();
00129 DeviceListEntry* GetNextEntry();
00130
int GetDeviceID();
00131 LPTSTR GetHardwareID();
00132 LPTSTR GetFileName();
00133 };
00134
00135 class _HWIOCLASS DeviceList
00136 {
00137
private:
00138 DeviceListEntry* first;
00139 DeviceListEntry* last;
00140
00141
public:
00142 DeviceList();
00143
virtual ~DeviceList();
00144
00145
void Add(
EDeviceType DeviceID, LPTSTR HardwareID, LPTSTR FileName);
00146
void Add(DeviceListEntry* pEntry);
00147
void Clear();
00148 LPTSTR GetFileName(
int DeviceID, LPTSTR HardwareID);
00149 };
00150
00151
00152
_HWIOCLASS bool RegisterDrivers(DeviceList* Drivers,
const GUID& guid, EDeviceType DeviceID);
00153
00154
00155 class _HWIOCLASS HardwareIo
00156 {
00157
protected:
00158 char szDeviceName[257];
00159 HANDLE hDevice;
00160
00161
public:
00162 HardwareIo();
00163 HardwareIo(
char* szDeviceName);
00164
virtual ~HardwareIo();
00165
00166
virtual BOOL Read(DWORD Offset, BYTE* Data);
00167
virtual BOOL Read(DWORD Offset, WORD* Data);
00168
virtual BOOL Read(DWORD Offset, DWORD* Data);
00169
00170
virtual BOOL Write(DWORD Offset, BYTE Data);
00171
virtual BOOL Write(DWORD Offset, WORD Data);
00172
virtual BOOL Write(DWORD Offset, DWORD Data);
00173 };
00174
00175
00176 class _HWIOCLASS DummyIo :
public HardwareIo
00177 {
00178
00179
public:
00180
00181 DummyIo(
int DeviceID, LPTSTR HardwareID,
bool DoMessage=
true);
00182
00183
00184 virtual BOOL Read(DWORD Offset, BYTE* Data)
00185 {
00186 *Data= 0xFF;
00187
return (TRUE);
00188 }
00189 virtual BOOL Read(DWORD Offset, WORD* Data)
00190 {
00191 *Data= 0xFFFF;
00192
return (TRUE);
00193 }
00194 virtual BOOL Read(DWORD Offset, DWORD* Data)
00195 {
00196 *Data= 0xFFFFFFFF;
00197
return (TRUE);
00198 }
00199
00200 virtual BOOL Write(DWORD Offset, BYTE Data)
00201 {
00202
return (TRUE);
00203 }
00204 virtual BOOL Write(DWORD Offset, WORD Data)
00205 {
00206
return (TRUE);
00207 }
00208 virtual BOOL Write(DWORD Offset, DWORD Data)
00209 {
00210
return (TRUE);
00211 }
00212
00213 };
00214
00215
00216 class _HWIOCLASS BraunPsdIo :
public HardwareIo
00217 {
00218
00219
public:
00220 BraunPsdIo();
00221 BraunPsdIo(
char*
id);
00222
virtual ~BraunPsdIo();
00223
00224
virtual BOOL Read(DWORD Offset, BYTE* Data);
00225 virtual BOOL Read(DWORD Offset, WORD* Data)
00226 {
00227
return (FALSE);
00228 }
00229 virtual BOOL Read(DWORD Offset, DWORD* Data)
00230 {
00231
return (FALSE);
00232 }
00233
00234
virtual BOOL Write(DWORD Offset, BYTE Data);
00235 virtual BOOL Write(DWORD Offset, WORD Data)
00236 {
00237
return (FALSE);
00238 }
00239 virtual BOOL Write(DWORD Offset, DWORD Data)
00240 {
00241
return (FALSE);
00242 }
00243
00244
virtual BOOL SetTimeout(
unsigned long Cycles);
00245
virtual BOOL GetData(
IrpParamsGetData *Params);
00246 };
00247
00248
00249 class _HWIOCLASS BraunPsdDummyIo :
public BraunPsdIo
00250 {
00251
00252
public:
00253 BraunPsdDummyIo();
00254 BraunPsdDummyIo(
char*
id);
00255 virtual ~BraunPsdDummyIo()
00256 {}
00257
00258 virtual BOOL Read(DWORD Offset, BYTE* Data)
00259 {
00260
return (FALSE);
00261 }
00262 virtual BOOL Read(DWORD Offset, WORD* Data)
00263 {
00264
return (FALSE);
00265 }
00266 virtual BOOL Read(DWORD Offset, DWORD* Data)
00267 {
00268
return (FALSE);
00269 }
00270
00271 virtual BOOL Write(DWORD Offset, BYTE Data)
00272 {
00273
return (FALSE);
00274 }
00275 virtual BOOL Write(DWORD Offset, WORD Data)
00276 {
00277
return (FALSE);
00278 }
00279 virtual BOOL Write(DWORD Offset, DWORD Data)
00280 {
00281
return (FALSE);
00282 }
00283
00284 virtual BOOL SetTimeout(
unsigned long Cycles)
00285 {
00286
return (FALSE);
00287 }
00288
00289 virtual BOOL GetData(
IrpParamsGetData *Params)
00290 {
00291
return (FALSE);
00292 }
00293 };
00294
00295
00296 class _HWIOCLASS Controller
00297 {
00298
protected:
00299 HardwareIo* Hardware;
00300 const EDeviceType DeviceID;
00301 char HardwareID[9];
00302 unsigned Clients;
00303 const unsigned MaxClients;
00304
00305
public:
00306 Controller(EDeviceType DeviceID, LPTSTR HardwareID,
unsigned MaxClients);
00307 virtual ~Controller(){};
00308
00309
int GetDeviceID();
00310 LPTSTR GetHardwareID();
00311 BOOL AddClient();
00312
00313
virtual BOOL Read(DWORD Offset, BYTE* Data);
00314
virtual BOOL Read(DWORD Offset, WORD* Data);
00315
virtual BOOL Read(DWORD Offset, DWORD* Data);
00316
00317
virtual BOOL Write(DWORD Offset, BYTE Data);
00318
virtual BOOL Write(DWORD Offset, WORD Data);
00319
virtual BOOL Write(DWORD Offset, DWORD Data);
00320
00321
00322
virtual BOOL Check()= 0;
00323 };
00324
00325
00326
00327
00328 class _HWIOCLASS StandardController :
public Controller
00329 {
00330
public:
00331 StandardController(
EDeviceType DeviceID, LPTSTR HardwareID, LPTSTR szDeviceName);
00332 StandardController(
EDeviceType DeviceID, LPTSTR HardwareID, DeviceList* Devices);
00333
virtual ~StandardController();
00334
00335
virtual BOOL
Check();
00336 };
00337
00338 class _HWIOCLASS ControllerListEntry
00339 {
00340
private:
00341 Controller* asController;
00342
00343 ControllerListEntry* prev;
00344 ControllerListEntry* next;
00345
00346
public:
00347 ControllerListEntry(Controller* asController);
00348
virtual ~ControllerListEntry();
00349
00350
void SetPrevEntry(ControllerListEntry* pEntry);
00351
void SetNextEntry(ControllerListEntry* pEntry);
00352 ControllerListEntry* GetPrevEntry();
00353 ControllerListEntry* GetNextEntry();
00354
int GetDeviceID();
00355 LPTSTR GetHardwareID();
00356 Controller*
GetController();
00357 };
00358
00359 class _HWIOCLASS ControllerList
00360 {
00361
private:
00362 ControllerListEntry* first;
00363 ControllerListEntry* last;
00364
00365
public:
00366 ControllerList();
00367
virtual ~ControllerList();
00368
00369
void Add(Controller* asController);
00370
void Add(ControllerListEntry* pEntry);
00371
void Clear();
00372 Controller*
GetController(
int DeviceID, LPTSTR HardwareID);
00373 Controller*
GetController(
unsigned index);
00374 DWORD GetControllerIndex(
int DeviceID, LPTSTR HardwareID);
00375 };
00376
00377
00378
00379
_HWIOCLASS bool RegisterControllers(ControllerList* Controllers, LPTSTR pControllerClass);
00380
00381
00382
#endif // #ifndef __HWIO_H
00383
00384