Hauptseite | Klassenhierarchie | Auflistung der Klassen | Auflistung der Dateien | Klassen-Elemente | Datei-Elemente | Zusätzliche Informationen

HWIO.H

gehe zur Dokumentation dieser Datei
00001 /* 00002 File : hwio.h 00003 Project : XCTL 00004 Author : Jan Picard <picard@informatik.hu-berlin.de> 2001-2002 00005 Institut fuer Informatik, 00006 Humboldt-Universitaet Berlin 00007 Content : another level of indirection: 00008 providing port I/O depending on Windows version 00009 - for win16 direct inp/outp calls are allowed 00010 - for win32 we use xport, a free generic kernel mode driver 00011 downloadable from www.simtel.net, search for "xport" 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 // that are used only rarely 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 // Treiber IOCTLs 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 // zusätzliche IOCTLs für BraunPSD 00061 #define IOCTL_DC_SET_WFR_CYCLES CTL_CODE( XCTL_TYPE, 0x907, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00062 // Set Wait For Ready Cycles --> ersetzt ASA.DLL SetTimeOut() 00063 // ein ULONG im Systembuffer übergeben mit Zyklenanzahl 00064 00065 #define IOCTL_DC_GET_DATA CTL_CODE( XCTL_TYPE, 0x908, METHOD_BUFFERED, FILE_WRITE_ACCESS) 00066 // Get Data --> ersetzt ASA.DLL GetData() 00067 // Puffer gefüllt mit Struktur IrpParamsGetData übergeben 00068 00070 // Identifier der Detektoren und Motoren 00071 enum EDeviceType {C812= 1, C832, RADICON, BRAUN, GENERIC, STOE}; 00072 00073 00075 // Datentypen 00076 struct WriteBuffer 00077 { 00078 DWORD Offset; 00079 union 00080 { 00081 BYTE bData; 00082 WORD wData; 00083 DWORD dwData; 00084 }; 00085 }; 00086 00087 //Datenstrukturen für den BraunPSD 00088 struct IrpParams 00089 { 00090 ULONG Port; 00091 ULONG Value; 00092 }; 00093 00094 struct IrpParamsGetData 00095 { 00096 PUCHAR pBuffer; //Zeiger auf Puffer in den die Daten eingelesen werden sollen 00097 ULONG MaxCount; //Anzahl der Einzulesenden Wörter -> größe von Buffer in WORD 00098 //WORD ymax; 00099 }; 00100 00102 // allgemeine Hardwareverwaltungsfunktionen 00103 00104 //gibt Fehlermeldung aus 00105 _HWIOCLASS void PrintError(DWORD dwError= 0); 00106 00107 //liefert die Anzahl der Devices zu einem DevivceInterface 00108 _HWIOCLASS DWORD EnumDevices(const GUID& guid); 00109 00110 //liefert den DeviceName des Devices am angegebenen Index der DeviceListe des DeviceInterfaces 00111 //dieser Name kann dann für CreateFile() genutzt werden 00112 _HWIOCLASS bool GetDeviceDriver(const GUID& guid, DWORD devIndex, LPTSTR* pDriverName); 00113 00114 class _HWIOCLASS DeviceListEntry 00115 { 00116 private: 00117 EDeviceType DeviceID; //GUID des Treibers 00118 char HardwareID[9]; //IO-Adresse der Hardware (hex ohne führendes '0x') 00119 char FileName[257]; //friendly name des Treibers 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 //Erstellt eine Tabelle aus DeviceID und zugehörigem Treibernamen 00152 _HWIOCLASS bool RegisterDrivers(DeviceList* Drivers, const GUID& guid, EDeviceType DeviceID); 00153 00154 //kapselt den Zugriff auf die Hardware (über Treiber) 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 //fängt den Zugriff auf die Hardware ab (wenn kein Treiber vorhanden) 00176 class _HWIOCLASS DummyIo : public HardwareIo 00177 { 00178 00179 public: 00180 //DummyIo(); 00181 DummyIo(int DeviceID, LPTSTR HardwareID, bool DoMessage= true); 00182 //virtual ~DummyIo(){} 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 //spezielle Treiberzugriffe für BraunPSD 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 } //von BraunPSD nicht unterstützt 00229 virtual BOOL Read(DWORD Offset, DWORD* Data) 00230 { 00231 return (FALSE); 00232 } //von BraunPSD nicht unterstützt 00233 00234 virtual BOOL Write(DWORD Offset, BYTE Data); 00235 virtual BOOL Write(DWORD Offset, WORD Data) 00236 { 00237 return (FALSE); 00238 } //von BraunPSD nicht unterstützt 00239 virtual BOOL Write(DWORD Offset, DWORD Data) 00240 { 00241 return (FALSE); 00242 } //von BraunPSD nicht unterstützt 00243 00244 virtual BOOL SetTimeout(unsigned long Cycles); 00245 virtual BOOL GetData(IrpParamsGetData *Params); // 31.06.2004 MEMCORRECT (IrpParamsGetData *Params) 00246 }; 00247 00248 //fängt den Zugriff auf die BraunPsd-Hardware ab (wenn kein Treiber vorhanden) 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) // 31.06.2004 MEMCORRECT (IrpParamsGetData *Params) 00290 { 00291 return (FALSE); 00292 } 00293 }; 00294 00295 //Controller-Interface 00296 class _HWIOCLASS Controller 00297 { 00298 protected: 00299 HardwareIo* Hardware; //Hardwarezugriffe 00300 const EDeviceType DeviceID; //GUID des zugehörigen Treibers 00301 char HardwareID[9]; //IO-Adresse des Controllers 00302 unsigned Clients; //Anzahl der durch den Controller verwalteten Geräte 00303 const unsigned MaxClients; //Anzahl der max. zu verwaltenden Geräte 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 //-> Controller ist abstract 00322 virtual BOOL Check()= 0; //Test, ob Hardware angeschlossen 00323 }; 00324 00325 //kapselt das HardwareIo-Objekt für Geräte, die an einen Controller angeschlossen sind 00326 //dies ist lediglich ein Basiscontroller 00327 //- speziellere Controller (z.B. für TC_832) können von diesem ageleitet werden 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; //assigned Controller 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 //legt eine Liste aller in der Hardware.ini eingetragenen Controller an 00378 //(ControllerClass= {Motor, Device}) 00379 _HWIOCLASS bool RegisterControllers(ControllerList* Controllers, LPTSTR pControllerClass); 00380 00381 00382 #endif // #ifndef __HWIO_H 00383 00384

Erzeugt am Sat Nov 13 12:48:06 2004 für XCTL32 von doxygen 1.3.7