From: hadaq Date: Tue, 8 Jul 2003 14:40:28 +0000 (+0000) Subject: start of unpacker, mt X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=0790305ffed566e226448afe20d5ae1dee143f09;p=daqdata.git start of unpacker, mt --- diff --git a/hadaq/hwtip.c b/hadaq/hwtip.c index 15008f1..7c67608 100644 --- a/hadaq/hwtip.c +++ b/hadaq/hwtip.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.31 2003-05-14 13:54:44 muench Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.32 2003-07-08 14:40:28 hadaq Exp $"; #include #include @@ -51,8 +51,7 @@ int conHwTip(HwTip *my, const char *name, const Param *param) Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase); if (!paramWasFound) { - syslog(LOG_WARNING, - "Parameter %s(%s) not found, default = 0", my->name, "cardbase"); + syslog(LOG_WARNING, "Parameter %s(%s) not found, default = 0", my->name, "cardbase"); cardBase = 0; } syslog(LOG_INFO, "conc cardbase %.8x", cardBase); @@ -108,8 +107,19 @@ void HwTip_requestBuffer(HwTip *my) my->currAddr = my->fifo + 0x4; } + + + int HwTip_readSubEvt(HwTip *my, void *subEvt) { + +#define SUBHEADER_STATE (1) +#define TDC_HEADER_STATE (2) +#define TDC_DATA_STATE (3) +#define TDC_TRAILER_STATE (4) +#define LATCH_STATE (5) + + uint32_t *data = (uint32_t *) subEvt; unsigned long currAddr = my->currAddr; unsigned long header; @@ -119,10 +129,13 @@ int HwTip_readSubEvt(HwTip *my, void *subEvt) int foundCBLTTrailerFlag = 0; int foundCBLTHeaderFlag = 0; int errorFlag = 0; + int calEvtFlag = 0; unsigned long dataWord; unsigned long tdcCounter = 0; - unsigned long tdcEventCounter, trigTag, evtC; + unsigned long tdcEventCounter, trigTag, evtC, subEvtHeader, subEvtHeaderFlag; int arrayCounter = 0, i; + unsigned long presentState; + #ifdef BUFFER_PRINTOUT_ENABLED unsigned long tempArray[500]; #endif @@ -142,6 +155,10 @@ int HwTip_readSubEvt(HwTip *my, void *subEvt) } trigTag = ((header >> 16) & 0xff); + calEvtFlag = ((header >> 24) & 0xf) != 0x9; + + + subEvtHeaderFlag = 1; /* copy one sub evt from RC to memory */ while (--size) { @@ -151,16 +168,18 @@ int HwTip_readSubEvt(HwTip *my, void *subEvt) #ifdef BUFFER_PRINTOUT_ENABLED tempArray[arrayCounter++] = dataWord; #endif - statusWord = ((dataWord >> 24) & 0x7); + + + statusWord = ((dataWord >> 24) & 0x6); if (statusWord == 2) { /* Header */ tdcCounter++; crateNumber = ((dataWord >> 16) & 0xff); if (foundCBLTHeaderFlag == 1) { - syslog(LOG_ERR, "header: %.8x, at least two headers came without a trailer, data: %.8x", - header, dataWord); + syslog(LOG_ERR, "header: %.8x, at least two headers came without a trailer, data: %.8x", header, dataWord); errorFlag = 1; } + currentGeo = (dataWord >> 27) & 0x1f; #if 0 @@ -168,28 +187,40 @@ int HwTip_readSubEvt(HwTip *my, void *subEvt) lastGeo = currentGeo - 1; } if (lastGeo + 1 != currentGeo) { - syslog(LOG_ERR, "header: %.8x, Geo not incremental, crate: %d data: %.8x, lastGeo %d, currentGeo %d", + syslog(LOG_ERR, + "header: %.8x, Geo not incremental, crate: %d data: %.8x, lastGeo %d, currentGeo %d", header, crateNumber, dataWord, lastGeo, currentGeo); errorFlag = 1; } lastGeo = currentGeo; #endif + + + /* TEST COUNTER */ +#if 0 + if ((dataWord & 0xf) != 0) { + syslog(LOG_ERR, "TEST: %.8x != 1", dataWord); + errorFlag = 1; + } +#endif + foundCBLTHeaderFlag = 1; } else if (statusWord == 4) { /* Trailer */ +#if 0 tdcEventCounter = dataWord & 0xffffff; foundCBLTTrailerFlag = 1; if (foundCBLTTrailerFlag == 1 && foundCBLTHeaderFlag == 0) { - syslog(LOG_ERR, "header: %.8x, trailer came before header! data: %.8x", - header, dataWord); + syslog(LOG_ERR, "header: %.8x, trailer came before header! data: %.8x", header, dataWord); errorFlag = 1; } evtC = (tdcEventCounter & 0xff); -#if 1 + if ((tdcEventCounter & 0xff) != trigTag) { /* if( (max(evtC, trigTag) - min(evtC, trigTag) >=2) && (max(evtC, trigTag) - min(evtC, trigTag) <= 0xfe )) { */ - syslog(LOG_ERR, "header: %.8x, crate: %d, tdc_num: %d, tag (%.8x) != EvtCounter (%.8x), dataWord: %.8x ", + syslog(LOG_ERR, + "header: %.8x, crate: %d, tdc_num: %d, tag (%.8x) != EvtCounter (%.8x), dataWord: %.8x ", header, crateNumber, tdcCounter, trigTag, tdcEventCounter, dataWord); errorFlag = 1; } @@ -202,7 +233,9 @@ int HwTip_readSubEvt(HwTip *my, void *subEvt) #if 0 syslog(LOG_ERR, "status word of tdc not 0,2 or 4, header: %.8x, data: %.8x", header, dataWord); errorFlag = 1; + #endif + }