]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
improved event-size checking. Sets error bit and reads until buffer end is reached. WK
authorhadaq <hadaq>
Thu, 7 Nov 2002 10:39:04 +0000 (10:39 +0000)
committerhadaq <hadaq>
Thu, 7 Nov 2002 10:39:04 +0000 (10:39 +0000)
hadaq/hwtip.c

index 5515850f2cf7dc55b2ac7d6b4489f17890fa879f..7c8a5944785d48202d2d5c0731961e9efd81ccfc 100644 (file)
@@ -1,4 +1,4 @@
-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>
@@ -21,6 +21,9 @@ static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hada
 #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)
@@ -112,6 +115,7 @@ int HwTip_readSubEvt(HwTip * my, void *subEvt)
        unsigned long currAddr = my->currAddr;
        unsigned long header;
        int size;
+       int byteSize;
        int statusWord, crateNumber = 0xff;
        int foundCBLTTrailerFlag = 0;
        int foundCBLTHeaderFlag = 0;
@@ -120,23 +124,24 @@ int HwTip_readSubEvt(HwTip * my, void *subEvt)
        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) {
@@ -144,7 +149,9 @@ int HwTip_readSubEvt(HwTip * my, void *subEvt)
          /* *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 */
@@ -186,7 +193,7 @@ int HwTip_readSubEvt(HwTip * my, void *subEvt)
 #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;
            }
@@ -207,6 +214,7 @@ int HwTip_readSubEvt(HwTip * my, void *subEvt)
            
        }
        
+#ifdef BUFFER_PRINTOUT_ENABLED
        if(errorFlag) {
          str[0] = 0;
          for(i=0;i < arrayCounter; i++) {
@@ -223,6 +231,7 @@ int HwTip_readSubEvt(HwTip * my, void *subEvt)
          }
 
        }
+#endif 
 
        return header;