-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.27 2002-10-31 14:13:53 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.28 2002-11-07 10:39:04 hadaq Exp $";
#include <assert.h>
#include <string.h>
#define max(x,y) ( (x>y) ? x : y )
+/* undef if you don't want PRINTOUT if there was an error in the tdc data, mt*/
+#define BUFFER_PRINTOUT_ENABLED
+
static int ourVmeAccessOK;
void sigbusHandler(int sig)
unsigned long currAddr = my->currAddr;
unsigned long header;
int size;
+ int byteSize;
int statusWord, crateNumber = 0xff;
int foundCBLTTrailerFlag = 0;
int foundCBLTHeaderFlag = 0;
unsigned long tdcCounter = 0;
unsigned long tdcEventCounter, trigTag,evtC;
int arrayCounter = 0,i;
+#ifdef BUFFER_PRINTOUT_ENABLED
unsigned long tempArray[500];
+#endif
char str[200], buff[200];
unsigned long lastGeo = 0, currentGeo;
header = LVme_getL(my->lvme, currAddr);
size = header & 0xfff;
- if(size > 0xc00) {
- syslog(LOG_ERR, "size is very large! size: %.8x ",size);
- }
+ byteSize = size<<2;
- my->currAddr += size<<2;
+ my->currAddr += byteSize;
- trigTag = ((header>>16) & 0xff);
- if (size > (TIP_BUFSIZE >> 2)) {
- syslog(LOG_ERR, "header: %.8x , address: %.8x, size too long! ",header,currAddr);
- return (header & 0xfffff000) | 1;
+ if(byteSize > (TIP_BUFSIZE - my->currAddr + my->fifo)) {
+ syslog(LOG_ERR, "size too large! size: %.8x ",size);
+ size = (TIP_BUFSIZE - my->currAddr + my->fifo)>>2;
+ header &= 0x80000000;
}
+ trigTag = ((header>>16) & 0xff);
/* copy one sub evt from RC to memory */
while (--size) {
/* *data++ = LVme_getL(my->lvme, currAddr+=4); */
dataWord = LVme_getL(my->lvme, currAddr+=4);
*data++ = dataWord;
+#ifdef BUFFER_PRINTOUT_ENABLED
tempArray[arrayCounter++] = dataWord;
+#endif
statusWord = ((dataWord>>24) & 0x7);
if( statusWord == 2 ) {
/* Header */
#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 != EvtCounter, (%.8x,%.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;
}
}
+#ifdef BUFFER_PRINTOUT_ENABLED
if(errorFlag) {
str[0] = 0;
for(i=0;i < arrayCounter; i++) {
}
}
+#endif
return header;