00001 #include "l3TrgReader.h"
00002 #include <rtsLog.h>
00003 #include <stdio.h>
00004
00005 #ifndef TRG_VERSION
00006 #define TRG_VERSION 0x32
00007 #endif
00008
00009 #include "daqFormats.h"
00010
00011
00012 #include <string.h>
00013
00014 int l3TrgReader::readL3P(L3_P *l3p)
00015 {
00016 if (l3p == NULL) return -1;
00017
00018 if (l3p->trig.off == 0) return -1;
00019
00020 char *trgBuf = (char*)l3p + l3p->trig.off*4;
00021
00022
00023 unsigned char version;
00024
00025 if (l3p->bh.format_number <= 7) {
00026 version = ((unsigned char *)trgBuf)[0];
00027
00028 if (version > 0x20) {
00029 LOG(ERR,"L3_P fn=%d should not contain TRG=0x%x",
00030 l3p->bh.format_number,version,0,0,0);
00031 return -1;
00032 }
00033 } else {
00034 version = ((TrgDataType*)trgBuf)->EvtDesc.TrgDataFmtVer;
00035
00036 if (version <= 0x20) {
00037 LOG(ERR,"L3_P fn=%d should not contain TRG=0x%x",
00038 l3p->bh.format_number,version,0,0,0);
00039 return -1;
00040 }
00041 }
00042
00043
00044 switch (version) {
00045
00046 case 0x12:
00047 case 0x13:
00048 return readV12(trgBuf);
00049
00050 case 0x20:
00051 return readV20(trgBuf);
00052
00053 case 0x21:
00054 return readV21(trgBuf);
00055
00056 default:
00057 LOG(ERR,"l3Trg: Unknown trigger format: 0x%x (0x%08x) %s\n",
00058 version, *((long*)trgBuf), (char*)trgBuf,0,0,0);
00059 return -1;
00060 }
00061
00062
00063 }
00064
00065
00066 int l3TrgReader::read(void *buffer)
00067 {
00068 LOG(ERR,"WARNING: l3TrgReader::read is obsolete",0,0,0,0,0);
00069
00070 unsigned char version = ((unsigned char *)buffer)[0];
00071
00072 switch (version) {
00073
00074 case 0x12:
00075 case 0x13:
00076
00077 return readV12(buffer);
00078
00079 case 0x20:
00080
00081 return readV20(buffer);
00082
00083 case 0x21:
00084
00085
00086
00087
00088 return readV21(buffer);
00089
00090 default:
00091
00092 return -1;
00093 }
00094 }
00095
00096
00097 void l3TrgReader::reset()
00098 {
00099 token = 0;
00100 bunchXing_hi = 0;
00101 bunchXing_lo = 0;
00102
00103 physicsWord = 0;
00104 triggerWord = 0;
00105
00106 memset(ZDC, 0, 16);
00107 memset(CTB, 0, 256);
00108 }