fdhwlib
2.0.25
|
00001 /*************************************************************************** 00002 Slt.h - description 00003 00004 begin : Thu Jun 29 2000 00005 copyright : (C) 2000 by Andreas Kopmann 00006 email : kopmann@hpe.fzk.de 00007 ***************************************************************************/ 00008 00009 00010 #ifndef _HW4_SLTUSCT_H_INCLUDED 00011 #define _HW4_SLTUSCT_H_INCLUDED 00012 00013 #include <hw4/sltdef.h> 00014 #include <hw4/baseregister.h> 00015 #include <hw4/sltlongregister.h> 00016 00017 #include <hw4/sltcontrolreg.h> 00018 #include <hw4/sltstatusreg.h> 00019 #include <hw4/sltcommandreg.h> 00020 #include <hw4/sltinterruptreg.h> 00021 #include <hw4/sltsetsecondcounter.h> 00022 #include <hw4/sltpagemanagementreg.h> 00023 #include <hw4/sltpageselectreg.h> 00024 #include <hw4/slteventstatusmem.h> 00025 #include <hw4/slttimingreg.h> 00026 #include <hw4/sltreadoutcontrolreg.h> 00027 #include <hw4/sltreadoutstatusreg.h> 00028 #include <hw4/sltbyteregister.h> 00029 #include <hw4/sltiiccommandreg.h> 00030 #include <hw4/sltepcscommandreg.h> 00031 #include <hw4/slteepromcontrolreg.h> 00032 #include <hw4/slttime.h> 00033 #include <hw4/sltversion.h> 00034 #include <hw4/baseboardidreg.h> 00035 #include <hw4/sltdatablockreg.h> 00036 #include <hw4/basememory.h> 00037 00038 #include <hw4/subrack.h> 00039 #include <hw4/subrackboard.h> 00040 00041 00042 #define SLT_REGS 50 00043 #define SLT_VREGS 10 00044 00045 00046 class Subrack; 00047 00048 00049 namespace hw4 { 00050 00078 class Slt : public SubrackBoard { 00079 public: 00080 Slt(int ID, const char *inifile = "FE.ini"); 00081 00082 virtual ~Slt(); 00083 00086 bool checkPresence(); 00087 00089 int getVersion(int unit =0); 00090 00098 int getHardwareModelVersion(); 00099 00103 void checkHardwareModelVersion(FILE *fout = stdout, const char *indent=""); 00104 00111 void getActualTime(SltTime *time); 00112 00113 00129 unsigned long setActualTime(); 00130 00131 00162 int checkActualTime(long int *tDiff, long int *tDiffEye, int * tMeas, int *tPhase, 00163 long int *tDiffGps=0, int id=0, int n=1, 00164 const char *gpsserver = "localhost", int gpsport = 0); 00165 00166 00180 int checkTime(double *tDiff=0, int *tSecErr=0, int *tPhase=0, procDuration *tPC = 0); 00181 00182 00195 enum RunMode { 00196 RUN, 00197 CAL, 00198 WAIT, 00199 STOP, 00200 CERR, 00201 UNKNOWN}; 00202 00203 00208 RunMode getRunMode(); 00209 00211 std::string getRunModeText(); 00212 std::string getRunModeText(RunMode mode); 00213 00221 void getActivePages(int time, int *pages, int *continous); 00222 00230 void convertToUTC(time_t *t_utc, unsigned long time); 00231 00232 void convertToUTC(time_t *t_utc, SltTime time); 00233 00235 void convertToGPS(SltTime *time, time_t t_utc); 00236 00237 00239 void checkDeadTime(unsigned long long *tDead, unsigned long long *tVeto, 00240 double *tRecord, double *tPageFull, procDuration *tMeas = 0); 00241 00246 int readDeadTime (unsigned long long *tDead, unsigned long long *tVeto, 00247 unsigned long long *tInhibit); 00248 00249 00251 std::string convertTimeToText(unsigned long long time, int showSubSecs = 0); 00252 00253 public: // members 00254 00255 Subrack* theSubrack; 00256 00257 00259 SltControlReg *control; 00260 00262 SltStatusReg *status; 00263 00265 SltCommandReg *command; 00266 00270 SltInterruptReg *interruptMask; 00271 00279 SltInterruptReg *interruptRequest; 00280 00283 BaseRegister *requestSemaphore; 00284 00290 SltVersion *version; 00291 00293 BaseRegister *pixelBusPError; 00294 00299 SltLongRegister *vetoTime; 00300 00305 SltLongRegister *deadTime; 00306 00307 SltLongRegister *runTime; 00308 00309 BaseRegister * pixelBusEnable; 00310 00311 BaseRegister * pixelBusTest; 00312 00313 BaseRegister * auxBusTest; 00314 00315 BaseRegister * debugStatus; 00316 00318 BaseRegister *usctControl; 00319 00321 BaseRegister *usctFifo; 00322 00323 00325 SltSetSecondCounter * setSecCounter; 00326 00327 /* Second counter register */ 00328 BaseRegister *secCounter; 00329 00330 /* Register for sub second counter */ 00331 BaseRegister *subSecCounter; 00332 00334 SltPageManagementReg *pageManager; 00335 00340 SltTimingReg *triggerTiming; 00341 00343 SltPageSelectReg *pageSelect; 00344 00346 //SltEventStatusReg *eventStatus; 00347 00351 BaseRegister *numberOfPages; 00352 00353 BaseRegister *pageNumbers; 00354 00355 SltEventStatusMem *eventStatus; 00356 00357 SltReadoutControlReg *readoutControl; 00358 00359 SltReadoutStatusReg *readoutStatus; 00360 00361 SltPageSelectReg *bufferSelect; 00362 00363 BaseRegister *readoutDefinition; 00364 00365 BaseRegister *tpTiming; 00366 00367 BaseRegister *tpShape; 00368 00369 SltI2CCommandReg *i2cCommand; 00370 00371 SltEPCSCommandReg *epcsCommand; 00372 00374 BaseBoardIdReg *boardId; 00375 00376 BaseRegister *eepromControl; 00377 00378 BaseRegister *eepromBuffer; 00379 00380 00381 //BaseRegister *triggerData; 00382 00383 BaseMemory *pixelTrigger; 00384 00385 BaseRegister *multiplicity; 00386 00387 BaseRegister *sltTrigger; 00388 00389 BaseRegister *unpackPixelTrigger; 00390 00391 BaseRegister *unpackMultiplicity; 00392 00393 BaseRegister *unpackSltTrigger; 00394 00395 BaseRegister *adcData; 00396 00397 SltDataBlockReg *dataBlock; 00398 00399 00400 #if defined (SLT_VER) && (SLT_VER >= 300) 00401 00403 procDuration deadCheckTime[24]; 00404 00406 unsigned long long deadStart[24]; 00407 00409 unsigned long long vetoStart[24]; 00410 #endif // SLT_VER 00411 }; 00412 00413 } // namespace hw4 00414 00415 #endif // _HW4_SLTUSCT_H_INCLUDED 00416