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