]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Status in nov02 before consolidation for oct02 -- mm
authorhadaq <hadaq>
Tue, 8 Oct 2002 16:04:20 +0000 (16:04 +0000)
committerhadaq <hadaq>
Tue, 8 Oct 2002 16:04:20 +0000 (16:04 +0000)
hadaq/hwrace.c
hadaq/hwrich.c

index 33d58153c35ada610fe9a4208fd371837ca15f56..6b435c71ff16289ae9db880bfe525f58fa24fa85 100644 (file)
@@ -1,4 +1,4 @@
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.17 2002-04-19 19:12:11 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.18 2002-10-08 16:04:20 hadaq Exp $";
 
 
 #define _POSIX_C_SOURCE 199309L
@@ -22,22 +22,6 @@ static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hada
 #include "rc.h"
 #include "hwrace.h"
 
-#define RCPAGESIZE 256
-
-static int bankRequested(HwRace *my)
-{
-       return my->bankRequested;
-}
-
-static int bankConfirmed(HwRace *my)
-{
-       return Rc_bankConfirmed(my->rc);
-}
-
-static int endOfData(HwRace *my)
-{
-       return Rc_getPages(my->rc) * RCPAGESIZE;
-}
 
 int conHwRace(HwRace *my, const char *name, const Param *param)
 {
@@ -62,8 +46,9 @@ int conHwRace(HwRace *my, const char *name, const Param *param)
                syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
                return -1;
        }
+       my->currAddr = 0x7fffffff;
+       my->endOfData = 0;
 
-       my->bankRequested = Rc_bankRequested(my->rc);
        return 0;
 }
 
@@ -77,61 +62,38 @@ void HwRace_requestBuffer(HwRace *my)
 {
        my->currAddr = 0;
 
-       my->bankRequested = my->bankRequested == 1 ? 0 : 1;
        Rc_setSwrq(my->rc);
        Rc_clrSwrq(my->rc);
 }
 
-int HwRace_isBusy(HwRace *my)
-{
-       int br, bc;
-
-       br = bankRequested(my);
-       bc = bankConfirmed(my);
-
-       return br != bc;
-}
-
-int HwRace_isEmpty(HwRace *my)
-{
-       return my->currAddr >= endOfData(my);
-}
-#define MAXRACELENGTH 99997 /* in bytes */
+#define RACE_NODATASIZE 0x10
 int HwRace_readSubEvt(HwRace *my, void *subEvt)
 {
-       uint32_t *data = (uint32_t *) subEvt;
+       uint32_t * data = (uint32_t *) subEvt;
        int lastAddr;
        int currAddr;
        int size;
 
        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 */
+       lastAddr = my->currAddr + size;
+
+       /* align my->currAddr to next page */
        if ((lastAddr & 0xff) != 0) {
-               my->currAddr = (lastAddr / RCPAGESIZE + 1) * RCPAGESIZE;
+               my->currAddr = ((lastAddr >> RCPAGEBITSHIFT) + 1)<< RCPAGEBITSHIFT;
        } else {
                my->currAddr = lastAddr;
        }
+       if (size <= RACE_NODATASIZE) return 0;
+
+       /* copy one sub evt from RC to memory */
+       *data++ = size;
+       while ((currAddr+=4) < lastAddr) {
+               *data++ = Rc_readMem(my->rc, currAddr);
+       }
+
 #ifndef NDEBUG
        syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt));
 #endif
-       return 0;
+       return size;
 }
index bd140140be5696e4597f41c88ea925b35aea37fe..2b62fa974c9c8f64e05c9056645594d99f8d3546 100644 (file)
@@ -1,5 +1,4 @@
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.22 2002-04-19 19:11:01 hadaq Exp $";
-
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.23 2002-10-08 16:04:20 hadaq Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -22,7 +21,6 @@ struct HardwareS {
        size_t maxSubEvtSize;
        HwRace *race[NRACES];
        LInt *lInt[NRACES];
-       LVme *dtu;
 };
 
 #include "hardware.h"
@@ -62,12 +60,6 @@ Hardware *newHardware(void)
                }
                my->lInt[i] = malloc(sizeof(LInt));
                conLInt(my->lInt[i], 100 + i);
-
-       }
-       my->dtu = malloc(sizeof(LVme));
-       if(0 > conLVme(my->dtu, 0x44100000, 0x10000, 0x09, 0x3c, 1)) {
-               syslog(LOG_DEBUG,"Rich DTU not found");
-               return -1;
        }
 
        desParam(param);
@@ -84,9 +76,6 @@ void deleteHardware(Hardware *my)
                desHwRace(my->race[i]);
                free(my->race[i]);
        }
-       desLVme(my->dtu);
-       free(my->dtu);
-
        free(my);
 }
 
@@ -94,7 +83,6 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt)
 {
        int i;
 
-       LVme_setL(my->dtu,0x00 ,0x22); /* dtu busy on */
        for (i = 0; i < NRACES; i++) {
                if (HwRace_isEmpty(my->race[i])) {
                        HwRace_requestBuffer(my->race[i]);
@@ -103,10 +91,11 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt)
 #endif
                }
        }
-       LVme_setL(my->dtu,0x00 ,0x02); /* dtu busy off */
+
        for (i = 0; i < NRACES; i++) {
-               if(HwRace_BufIsRequested(my->race[i])) {
+               if(HwRace_isBufRequested(my->race[i])) {
                        LInt_wait(my->lInt[i]);
+                       HwRace_getEndOfData(my->race[i]);
 #ifndef NDEBUG
                        syslog(LOG_DEBUG, "%d irq received", i);
 #endif
@@ -120,32 +109,36 @@ void Hardware_readout(Hardware *my, void *partEvt)
        void *subEvt = SubEvt_data(partEvt);
        static uint32_t trigNr = 0;
        uint32_t trigTag;
+       int firstRace;
+       int size;
 
        /* init partial event, necessary for  SubEvt_next() */
        SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
        SubEvt_setId(partEvt, 0);
 
        /* read all races, check for common trigger tag */
-       LVme_setL(my->dtu,0x00 ,0x22); /* dtu busy on */
+       firstRace = -1;
        for (i = 0; i < NRACES; i++) {
-               HwRace_readSubEvt(my->race[i], subEvt);
-               if (i == 0) {
+               if((size=HwRace_readSubEvt(my->race[i], subEvt)) > 0) {
+                 if (firstRace < 0) {
                        trigTag = SubEvt_trigNr(subEvt) & 0xff;
-               } else {
+                       firstRace = i;
+                 } else {
                        if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) {
                                SubEvt_setId(subEvt, SubEvt_id(subEvt) | 0x80000000UL);
                                SubEvt_setId(partEvt, SubEvt_id(partEvt) | 0x80000000UL);
-                               syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x != 0x%08x",
-                                       my->race[i]->name,trigTag, SubEvt_trigNr(subEvt));
+                               syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x",
+                                       my->race[i]->name,trigTag,firstRace,SubEvt_trigNr(subEvt));
                        }
+                 }
+                 /* this does 64 bit alignment, should be replaced by a function */
+                 (char *)subEvt += (size+4) & 0xffffff8;
                }
-               subEvt = SubEvt_next(partEvt, subEvt);
        }
-    LVme_setL(my->dtu,0x00 ,0x02); /* dtu busy off */
 
        SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag);
        SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt);
-    trigNr++;
+       trigNr++;
 
        assert(SubEvt_size(partEvt) <= my->maxSubEvtSize);
 #ifndef NDEBUG