File: INCLUDE\DETECUSE\detecmes.h
1 /*
2 $Header: /vol/baal-vol3/projekt98/quellen/XCTL_32/INCLUDE/DETECUSE/detecmes.h,v 1.26 2004/07/23 22:23:53 reinecke Exp $
3
4 Projekt : XCTL
5 Subsystem : Detektoren
6 Autor : Jan Picard <picard@informatik.hu-berlin.de> 2001-2002
7 Institut fuer Informatik,
8 Humboldt-Universitaet Berlin
9 Inhalt : Interface-Deklaration fuer die Messadapterklassen
10 */
11
12 #ifndef __M_DEVHW_H
13 #define __M_DEVHW_H
14
15 #include <fstream.h>
16 #include "detecuse\detecuse.h"
17 #include "detecuse\detectorcontroller.h"
18
19 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
20
21 //vormals in evrythng.h
22 #define R_MeasInProcess 205
23 #define R_HardOverflow 217
24
25 //liefert den der spezifizierten id entsprechenden Controller aus der spezifizierten
26 //Controllerliste -> instantiiert ggf. einen neuen Controller
27 Controller* GetController(EDeviceType DeviceID, LPTSTR HardwareID,
28 ControllerList* Controllers, DeviceList* Drivers, DWORD* index= 0);
29
30 //#############################################################################
31 // 0-dimensionale Detektoren
32 //#############################################################################
33
34 class TGenericDetector : public TZeroDimDetector
35 {
36 public:
37 TGenericDetector(int id);
38 virtual ~TGenericDetector();
39
40 BOOL Initialize( void );
41 EDetectorType GetDetectorType() const
42 {
43 return GenericDetector;
44 };
45
46 int MeasureStart( void );
47 int MeasureStop( void );
48 int PollDetector( void );
49
50 void LookUp(LPCSTR Section);
51
52 protected:
53 BOOL _SetParameters( void );
54
55 private:
56 //! Das Hardware-Objekt, das fuer die Hardwarekommunikation zustaendig ist
57 TGenericController* Hardware;
58 int nBaseAddr;
59 float fTimeCorrection;
60 };
61
62 //#############################################################################
63
64 class TRadicon : public TZeroDimDetector
65 {
66
67 public:
68 TRadicon(int id);
69 virtual ~TRadicon( );
70
71 BOOL Initialize( void );
72 BOOL InitializeEvent( HWND, int );
73 static void CALLBACK EventHandler( UINT, UINT, DWORD, DWORD, DWORD );
74 EDetectorType GetDetectorType() const
75 {
76 return CounterDetector;
77 };
78
79 //! Gibt den Wert fuer die Beschleunigungsspannung zurueck
80 WORD GetHighVoltage() const
81 {
82 return wHighVoltage;
83 };
84
85 //! Setzt den Wert fuer die Beschleunigungsspannung
86 void SetHighVoltage(WORD);
87
88 //JP?
89 void SetDacThresh(WORD, WORD);
90
91 //JP?
92 const TRange<WORD>& GetDacThresh() const
93 {
94 return DacThresh;
95 };
96
97 int MeasureStart( void );
98 int MeasureStop( void );
99 int PollDetector( void );
100 BOOL RunSpecificParametersDlg( HWND );
101 BOOL HasSpecificParametersDlg( void ) const
102 {
103 return TRUE;
104 };
105
106 private:
107 BOOL _SetParameters( void );
108 BOOL SetSound( void );
109
110 // nicht überschrieben, wenn auch gleiche Signatur (weil in Basisklasse nicht virtuell)
111 private:
112 void LoadDetectorSettings();
113 void SaveDetectorSettings() const;
114
115 // ATTRIBUT(E)
116 private:
117 double dRealTime;
118
119 //! IO-Port, der fuer die Datenuebergabe verwandt wird
120 int Rdd;
121
122 //! IO-Port, die fuer die Hardwaresteuerung verwandt wird
123 int Rcc;
124
125 //JP? Intervall fuer gultige Werte fuer
126 TRange<WORD> DacThresh;
127 static const TRange<WORD> DacThreshLimits;
128
129 //! Intervall, in dem Werte fuer die Beschleuningungsspannung liegen duerfen
130 static const TRange<WORD> VoltageLimits;
131
132 //! Wert fuer die Beschleunigungsspannung
133 WORD wHighVoltage;
134
135 //! Das Hardware-Objekt, das fuer die Hardwarekommunikation zustaendig ist
136 TRadiconController* Hardware;
137
138 //! Zeiger auf das Hardware-Objekt, dass fuer den Event-Mechanismus verwandt
139 //! wird
140 static TRadiconController* TheEventHardware;
141 };
142
143 //#############################################################################
144 // Test-Detektoren
145 //#############################################################################
146
147 class Testdev : public TZeroDimDetector
148 {
149 /*!
150 Testdev simuliert einen nulldimensionalen Roentgendetektor, dessen
151 Messdaten von den aktuellen Positionen der Motoren CC, TL und DF ab-
152 haengen.
153 Um dieses Verhalten zu realisieren, wurden die Messdaten einer realen
154 Messung in einer Datei abgelegt. Diese Daten werden in den Speicher ge-
155 lesen und zusammen mit einem simulierten Messfehler zurueckgegeben.
156 */
157
158 class TestdevData
159 {
160 /*!
161 TestdevData ist eine eingebettete Klasse, die die Verwaltung der
162 Simulationsdaten kapseln soll. Sie stellt in der Schichtenarchtiktur des
163 Detektoren-Subsystems die Hardware-Klasse, die Herkunft der Messdaten,
164 dar.
165 */
166
167 public:
168 TestdevData();
169 virtual ~TestdevData();
170
171 //! Liefert den Messwert fuer die angegebene Koordinaten
172 long value(int x, int y, int z) const;
173
174 private:
175 //! Parst eine Abschnitt von Daten fuer CC in der testdev.dat
176 BOOL parseCC(ifstream& file);
177
178 //! Parst eine Abschnitt von Daten fuer TL in der testdev.dat
179 long** parseTL(ifstream& file);
180
181 //! Parst eine Abschnitt von Daten fuer DF in der testdev.dat
182 long* parseDF(ifstream& file);
183
184 //! Zaehlt die Anzahl der Instanzen, die das TestdevData-Objekt
185 //! verwenden. Durch das instance counting kann der Speicher
186 //! mit den Simulationsdaten freigegeben werdem, wenn er nicht
187 //! mehr gebraucht wird
188 static int instanceCounter;
189
190 //! Wurzel des Baums mit den Simulationsdaten
191 static long ***data;
192
193 //! Methode parst die testdev.dat und erstellt den Baum mit den
194 //! Simulationsdaten
195 BOOL initData();
196 };
197
198 public:
199 Testdev(int id);
200 virtual ~Testdev();
201
202 int PollDetector( void );
203 EDetectorType GetDetectorType() const
204 {
205 return CounterDetector;
206 };
207
208 private:
209 //! Das Objekt, das die Simulationsdaten verwaltet
210 TestdevData* data;
211
212 //! Ermittelt die Intensitaet
213 double CalculateIntensity() const;
214
215 //! Interpoliert den Messwert fuer nicht vorhandene Simulationsdaten
216 double InterPolate( int ccI, int tlI, int dfI, int tlB ) const;
217 };
218
219 //#############################################################################
220
221 class TZeroDimSimpleTestDetector : public TZeroDimDetector
222 {
223 public:
224 TZeroDimSimpleTestDetector(int id);
225 virtual ~TZeroDimSimpleTestDetector() {}
226
227 int PollDetector( void );
228 };
229
230 //#############################################################################
231
232 class TOneDimTestDetector : public TOneDimDetector
233 {
234 public:
235 TOneDimTestDetector(int id);
236 virtual ~TOneDimTestDetector() {}
237
238 int PsdReadOut( EHowReadOutPsd eReadType);
239 };
240
241 //#############################################################################
242 // 1-dimensionale Detektoren
243 //#############################################################################
244
245 class TStoePsd : public TOneDimDetector
246 {
247 public:
248 TStoePsd(int id);
249 virtual ~TStoePsd( void );
250
251 int PollDetector( void );
252
253 EDetectorType GetDetectorType() const
254 {
255 return PsdDetector;
256 };
257
258 // nicht überschrieben, wenn auch gleiche Signatur (weil in Basisklasse nicht virtuell)
259 private:
260 void LoadDetectorSettings();
261 void SaveDetectorSettings() const;
262
263 // StoePSD unterstützt nur PositionScale= 0 (kein EnergyScale)
264 public:
265 virtual void SetDataType( EPsdDataType ) {
266 eDataType= PsdPositionData;
267 };
268 virtual UINT SetEnergyScale(UINT) {
269 return TOneDimDetector::SetEnergyScale(0);
270 };
271 virtual UINT SetPositionScale(UINT) {
272 return TOneDimDetector::SetPositionScale(0);
273 }
274
275 // ATTRIBUT(E)
276 private:
277 int nBaseAddr;
278 BOOL bLong;
279 BOOL Initialize( void );
280 int PsdReadOut( EHowReadOutPsd );
281 int PsdRead( int, LPWORD );
282 virtual int PsdInit( void );
283 virtual int PsdStart( void );
284 int PsdStop( void );
285
286
287 // 30.02.2004 MEMCORRECT (verwende hStoeBuf) HGLOBAL hReadBuf;
288 LPWORD hStoeBuf;
289
290
291 int nReadBufItems;
292
293 //! Aehnliches Konzept wie bActive, ist zusaetzlich auch vor der ersten
294 //! Messung auf FALSE gesetzt
295 BOOL bReadyForRead;
296
297 HardwareIo Hardware;
298 };
299
300 //#############################################################################
301
302 class TBraunPsd : public TOneDimDetector
303 {
304 public:
305 TBraunPsd(int id);
306 virtual ~TBraunPsd( void );
307
308 BOOL Initialize( void );
309 //int PollDetector( void );
310 virtual int PsdReadOut( EHowReadOutPsd );
311 virtual int PsdInit( void );
312 virtual int PsdStart( void );
313 virtual int PsdStop( void );
314
315 void GetEnergyRange( UINT& ler, UINT& her ) const;
316 BOOL SetEnergyRange( UINT, UINT );
317 virtual int GetBufferSize( void ) const;
318
319 // EnergyScale und PositionScale
320 public:
321 // setzt <EnergyScale>
322 virtual UINT SetEnergyScale(UINT aEnergyScale);
323
324 // setzt <PositionScale>
325 virtual UINT SetPositionScale(UINT aPositionScale);
326
327 private:
328 int nErrorCode;
329 BOOL bSetError;
330 int nHVRegelung_OK;
331 EDetectorType GetDetectorType() const
332 {
333 return PsdDetector;
334 };
335
336 protected:
337 int BuildOperation( BYTE*, BYTE*, int );
338 int LoadHexFile( void );
339 void ResetDelayTime( void );
340 BYTE konvert( char );
341 int SynchronHexFile( BYTE&, BYTE& );
342 int Look_till_BaseAddr1( int );
343
344 // nicht überschrieben, wenn auch gleiche Signatur (weil in Basisklasse nicht virtuell)
345 private:
346 void LoadDetectorSettings();
347 void SaveDetectorSettings() const;
348
349 // ATTRIBUT(E)
350 private:
351 int nBaseAddr;
352
353 static BYTE echo[ 30 ][ 16 ];
354 static BYTE befehl[ 30 ][ 16 ];
355 UINT uMuxTimeDet1;
356 LONG PositionsDatenHeader[ 16 ];
357 UINT uEnergyLow; // hochgerechnet auf <MaxChannels>-Kanäle - siehe PsdReadOut
358 UINT uEnergyHigh; // hochgerechnet auf <MaxChannels>-Kanäle - siehe PsdReadOut
359 //21.06.2004 LONG lPositionStop; // Countstop fuer Positionskanaele
360 // 0..EFFFFFFFFFFF hex
361 BOOL bAbbruchmitShutter; // boolscher Wert
362 int nDeathTime; // min. Impulsabstand 0..99 dec [0..99 *E-6 sec]
363 BOOL bRatemeter; // computed=00, total=01
364 BOOL bRealLifeTime; // Realtime=00, Lifetime=01
365 //21.06.2004 LONG lMeasTime; // Messzeit 1..9999999 dec [sec]
366
367 // 31.06.2004 MEMCORRECT HGLOBAL hReadBuf;
368
369 int nDelayFast;
370 int nDelaySlow;
371 int nReadBufItems;
372 int nHVControl_OK;
373
374 TBraunPsdController* Hardware;
375 };
376 #endif // __M_DEVHW_H
377