-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.33 2003-07-08 16:09:48 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.34 2003-07-09 16:04:57 hadaq Exp $";
#include <assert.h>
#include <string.h>
#define TDC_DATA_STATE (3)
#define TDC_TRAILER_STATE (4)
#define LATCH_STATE (5)
+#define IGNORE_ALL_STATE (6)
uint32_t *data = (uint32_t *) subEvt;
#endif
char str[200], buff[200];
unsigned long lastGeo = 0, currentGeo;
+ unsigned long lastCrate = 0;
header = LVme_getL(my->lvme, currAddr);
size = header & 0xfff;
tempArray[arrayCounter++] = dataWord;
#endif
- switch (presentState) {
- case SUBHEADER_STATE:
- statusWord = ((dataWord >> 24) & 0x6);
- if (statusWord == 2) {
- }
- break;
-
- case TDC_HEADER_STATE:
-
-
- break;
-
- case TDC_DATA_STATE:
-
-
- break;
+ statusWord = ((dataWord >> 24) & 0x6);
- case TDC_TRAILER_STATE:
- break;
+ if (presentState == TDC_DATA_STATE) {
+ if (statusWord == 4) {
+ /* Trailer */
+ presentState = TDC_TRAILER_STATE;
+ }
+ }
- case LATCH_STATE:
+ if (presentState == TDC_HEADER_STATE) {
+ if (statusWord == 0) {
+ /* Ingo TIP Header */
+ presentState = SUBHEADER_STATE;
+ }
+ }
- break;
+ switch (presentState) {
case SUBHEADER_STATE:
+ presentState = IGNORE_ALL_STATE;
break;
- }
-
- statusWord = ((dataWord >> 24) & 0x6);
- if (statusWord == 2) {
- /* Header */
+ case TDC_HEADER_STATE:
tdcCounter++;
crateNumber = ((dataWord >> 16) & 0xff);
+
+ if (lastCrate == 0) {
+ lastCrate = crateNumber;
+ }
+
+ if (lastCrate != crateNumber) {
+ /* reset last Geo, if change of crate */
+ lastGeo = 0;
+ }
+
+ if (statusWord != 2) {
+ syslog(LOG_ERR, "status word of tdc not 2, for header it should be 2, header: %.8x, data: %.8x", header, dataWord);
+ errorFlag = 1;
+ }
if (foundCBLTHeaderFlag == 1) {
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
if (lastGeo == 0) {
lastGeo = currentGeo - 1;
}
- if (lastGeo + 1 != currentGeo) {
+ if (lastGeo >= currentGeo) {
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
+ foundCBLTHeaderFlag = 1;
+ presentState = TDC_DATA_STATE;
+ break;
- /* 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
+ case TDC_DATA_STATE:
+ /* data word, nothing to do..., but check for trailer */
+ break;
+
+ case TDC_TRAILER_STATE:
tdcEventCounter = dataWord & 0xffffff;
foundCBLTTrailerFlag = 1;
if (foundCBLTTrailerFlag == 1 && foundCBLTHeaderFlag == 0) {
header, crateNumber, tdcCounter, trigTag, tdcEventCounter, dataWord);
errorFlag = 1;
}
-#endif
+
foundCBLTTrailerFlag = 0;
foundCBLTHeaderFlag = 0;
- } else if (statusWord == 0) {
- /* data word, nothing to do... */
- } else {
+
+ presentState = TDC_HEADER_STATE;
+ break;
+
+ case LATCH_STATE:
+
+ break;
+
+ case IGNORE_ALL_STATE:
+ break;
+
+ } /* End switch */
+
+
+
+ /* TEST COUNTER */
#if 0
- syslog(LOG_ERR, "status word of tdc not 0,2 or 4, header: %.8x, data: %.8x", header, dataWord);
+ if ((dataWord & 0xf) != 0) {
+ syslog(LOG_ERR, "TEST: %.8x != 1", dataWord);
errorFlag = 1;
-
+ }
#endif
- }
+#if 0
+#endif
}
+
+
+
#ifdef BUFFER_PRINTOUT_ENABLED
if (errorFlag) {
str[0] = 0;