]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Might contain some improvements. Just in case. W. Koenig
authorhadaq <hadaq>
Fri, 19 Apr 2002 19:12:11 +0000 (19:12 +0000)
committerhadaq <hadaq>
Fri, 19 Apr 2002 19:12:11 +0000 (19:12 +0000)
hadaq/hwrace.c

index 422c5107ea907f15593ee01e5102c07340d36be3..33d58153c35ada610fe9a4208fd371837ca15f56 100644 (file)
@@ -1,4 +1,4 @@
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.16 2002-04-08 14:46:07 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.17 2002-04-19 19:12:11 hadaq Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
@@ -80,27 +80,6 @@ void HwRace_requestBuffer(HwRace *my)
        my->bankRequested = my->bankRequested == 1 ? 0 : 1;
        Rc_setSwrq(my->rc);
        Rc_clrSwrq(my->rc);
-/* Fix to use only one bank of two
- * Events in the "bad" bank are skipped without
- * being readout.
- */
-#if 0
-       my->currAddr = 0;
-       if((bankRequested(my) == 1)&&(bankConfirmed(my) == 1))
-       {
-               Rc_setSwrq(my->rc);
-               Rc_clrSwrq(my->rc);
-               while(bankConfirmed(my) == 1)
-               {
-                        struct timespec tS, *t = &tS;
-                        t->tv_sec = 0;
-                        t->tv_nsec = 020000000;
-                        nanosleep(t, NULL);
-               }
-       }
-       Rc_setSwrq(my->rc);
-       Rc_clrSwrq(my->rc);
-#endif
 }
 
 int HwRace_isBusy(HwRace *my)
@@ -117,25 +96,39 @@ int HwRace_isEmpty(HwRace *my)
 {
        return my->currAddr >= endOfData(my);
 }
-
+#define MAXRACELENGTH 99997 /* in bytes */
 int HwRace_readSubEvt(HwRace *my, void *subEvt)
 {
        uint32_t *data = (uint32_t *) subEvt;
        int lastAddr;
+       int currAddr;
        int size;
 
-       size = Rc_readMem(my->rc, my->currAddr);
-       *data++ = size;
-       lastAddr = my->currAddr + size;
-
-       /* copy one sub evt from RC to memory */
-       while ((my->currAddr+= 4) < lastAddr) {
-               *data++ = Rc_readMem(my->rc, my->currAddr);
+       currAddr = my->currAddr;
+       size = Rc_readMem(my->rc, currAddr);
+       lastAddr = currAddr + size;
+#if 1
+       if (size > MAXRACELENGTH ) {
+         *data++ = 16;
+         currAddr+=4;
+         *data++ = Rc_readMem(my->rc, currAddr);
+         currAddr+=4;
+         *data++ = Rc_readMem(my->rc, currAddr) | 0x80000000UL;
+         currAddr+=4;
+         *data++ = Rc_readMem(my->rc, currAddr) |(size<<16);
+       } else {
+         *data++ = size;
+         /* copy one sub evt from RC to memory */
+         while ((currAddr+=4) < lastAddr) {
+               *data++ = Rc_readMem(my->rc, currAddr);
+         }
        }
-
+#endif
        /* align currAddr to next page */
-       if ((my->currAddr & 0xff) != 0) {
-               my->currAddr = (my->currAddr / RCPAGESIZE + 1) * RCPAGESIZE;
+       if ((lastAddr & 0xff) != 0) {
+               my->currAddr = (lastAddr / RCPAGESIZE + 1) * RCPAGESIZE;
+       } else {
+               my->currAddr = lastAddr;
        }
 #ifndef NDEBUG
        syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt));