]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
TOF and MDC test running
authorhades <hades>
Sun, 12 Nov 2000 14:40:20 +0000 (14:40 +0000)
committerhades <hades>
Sun, 12 Nov 2000 14:40:20 +0000 (14:40 +0000)
hadaq/hwmdc.c
hadaq/hwsam.c
hadaq/hwsam.h
hadaq/param.tcl
hadaq/readout.c

index 3fee4685175c3a1e2b5f948d7195294b55d077a9..6d49270c3e7068e0d068ff0a66fc025e57542de5 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.6 2000-11-08 07:53:23 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.7 2000-11-12 14:40:20 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -12,12 +12,12 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had
 #include "subevt.h"
 #include "hwsam.h"
 
-#define NSAMS 1
+#define NSAMS 10
+#define SAMMASK ((1 << NSAMS) - 1)
 
 struct HardwareS {
        size_t maxSubEvtSize;
        HwSam *sam[NSAMS];
-       unsigned samToRead;
 };
 
 #include "hardware.h"
@@ -38,18 +38,13 @@ Hardware *newHardware(void)
        Param paramS, *param = &paramS;
        int i;
 
-#if 0
-       system("cd /home/hades/ht99/slow; mdc init >/dev/null 2>&1");
-#endif
-
        if (0 > conParam(param)) {
                msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                return NULL;
        }
        my = allocMem(sizeof(Hardware));
 
-       my->maxSubEvtSize = SubEvt_hdrSize() + (2564 * sizeof(UInt4));
-       my->samToRead = 0;
+       my->maxSubEvtSize = SubEvt_hdrSize() + (NSAMS * 2564 * sizeof(UInt4));
 
        for (i = 0; i < NSAMS; i++) {
                char buf[16];
@@ -79,25 +74,62 @@ void deleteHardware(Hardware *my)
        freeMem(my);
 }
 
-void Hardware_waitForTrigger(Hardware *my, void *subEvt)
+void Hardware_waitForTrigger(Hardware *my, void *partEvt)
 {
-       if (HwSam_isEmpty(my->sam[my->samToRead])) {
-               HwSam_requestBuffer(my->sam[my->samToRead]);
-               while (HwSam_isBusy(my->sam[my->samToRead])) {
+       int i;
+       unsigned long anySamIsBusy;
+
+       for (i = 0; i < NSAMS; i++) {
+               if (HwSam_isEmpty(my->sam[i])) {
+                       HwSam_requestBuffer(my->sam[i]);
+               }
+       }
+
+       /* make shure that all SAMS can deliver at least one sub event */
+       anySamIsBusy = SAMMASK;
+       do {
+               for (i = 0; i < NSAMS; i++) {
+                       if ((anySamIsBusy & (1 << i)) && !HwSam_isBusy(my->sam[i])) {
+                               anySamIsBusy &= ~(1 << i);
+                       } else {
 #if 0
-                       struct timespec tS, *t = &tS;
-                       t->tv_sec = 0;
-                       t->tv_nsec = 020000000;
-                       nanosleep(t, NULL);
+                               struct timespec tS, *t = &tS;
+                               t->tv_sec = 0;
+                               t->tv_nsec = 020000000;
+                               nanosleep(t, NULL);
 #endif
+                       }
                }
-       }
+       } while (anySamIsBusy);
 }
 
-void Hardware_readout(Hardware *my, void *subEvt)
+void Hardware_readout(Hardware *my, void *partEvt)
 {
-       HwSam_readSubEvt(my->sam[my->samToRead], subEvt);
-       if (++my->samToRead == NSAMS ) {
-               my->samToRead = 0;
+       int i;
+       void *subEvt = SubEvt_data(partEvt);
+       static UInt4 trigNr = 0;
+       UInt4 trigTag;
+
+       /* init partial event, necessary for  SubEvt_next() */
+       SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
+       SubEvt_setId(partEvt, 0);
+
+       /* read all sams, check for common trigger tag */
+       for (i = 0; i < NSAMS; i++) {
+
+               HwSam_readSubEvt(my->sam[i], subEvt);
+               if (i == 0) {
+                       trigTag = SubEvt_trigNr(subEvt);
+               } else {
+                       if (trigTag != SubEvt_trigNr(subEvt)) {
+                               msglog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x != 0x%08x\n",
+                                       my->sam[i]->name,trigTag, SubEvt_trigNr(subEvt));
+                       }
+               }
+               subEvt = SubEvt_next(partEvt, subEvt);
        }
+
+    SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag);
+       SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt);
+    trigNr++;
 }
index d5b932d7b82de9fe427bc529d6beba0f5c5267bd..73521a57c59cc516674bddc2bd70ab7bb4790c39 100644 (file)
@@ -27,18 +27,6 @@ static int endOfData(HwSam *my) {
   return i + LVme_getL(my->cram, i);
 }
 
-static void standbyMode(HwSam *my) {
-  LVme_clrBitL(my->regs, KSR, 0);
-  do {
-       LVme_setL(my->cram, CRR, 0);
-  } while (LVme_getL(my->cram, CRR) != 0);
-  my->currAddr = BUFSIZE;
-}
-
-static void acquireMode(HwSam *my) {
-  LVme_setBitL(my->regs, KSR, 0);
-}
-
 int conHwSam(HwSam * my, const char *name, const Param *param)
 {
   unsigned long cardBase;
@@ -66,16 +54,13 @@ int conHwSam(HwSam * my, const char *name, const Param *param)
     msglog(LOG_ERR, "HwSam on %p not found\n", cardBase);
     return -1;
   }
-  my->trigNr = 0;
+  my->currAddr = BUFSIZE;
 
-  standbyMode(my);
-  acquireMode(my);
   return 0;
 }
 
 void desHwSam(HwSam * my)
 {
-  standbyMode(my);
   desLVme(my->regs);
   desLVme(my->cram);
 }
@@ -109,14 +94,13 @@ void *HwSam_readSubEvt(HwSam *my, void *subEvt) {
   UInt4 *data = (UInt4 *)subEvt;
   int firstAddr;
   int size;
-  UInt1 trigTag;
 
   msglog(LOG_DEBUG, "readSubEvt in\n");
   size = LVme_getL(my->cram, my->currAddr);
   msglog(LOG_DEBUG, "readSubEvt currAddr: 0x%08x\n", my->currAddr);
 
   if (my->currAddr + size > endOfData(my)) {
-    msglog(LOG_EMERG,"subEvt throw away : %d, %d\n", size, endOfData(my) - my->currAddr);
+    msglog(LOG_CRIT,"subEvt throw away : %d, %d\n", size, endOfData(my) - my->currAddr);
     /* create impossible subEvt */
     SubEvt_setSize(subEvt, SubEvt_hdrSize());
     SubEvt_setDecoding(subEvt, SubEvtDecoding_16bitData);
@@ -128,22 +112,7 @@ void *HwSam_readSubEvt(HwSam *my, void *subEvt) {
     for (firstAddr = my->currAddr; my->currAddr - firstAddr < size; my->currAddr += 4) {
          *data++ = LVme_getL(my->cram, my->currAddr);
     }
-  
     msglog(LOG_DEBUG, "readSubEvt subevt: %s\n", SubEvt_2charP(subEvt));
-
-    /* normal extension of trigger tag */
-    trigTag = SubEvt_trigNr(subEvt);
-  
-    /* BUGBUG if soft & hardware trigNr differ, HW gets precedence */
-    if (trigTag != (my->trigNr & 0xff)) {
-      msglog(LOG_EMERG,"readSubEvt trigTag differ : 0x%08x, 0x%02x\n",my->trigNr, trigTag);
-    }
-    if (trigTag < (my->trigNr & 0xff)) {
-      my->trigNr += 0x100;
-    }
-    my->trigNr = (my->trigNr & 0xffffff00) | trigTag;
-    SubEvt_setTrigNr(subEvt, my->trigNr << 8 | trigTag);
-    my->trigNr++;
   }
 
   msglog(LOG_DEBUG, "readSubEvt out\n");
index 42396a1faa8d256efdc689ebbfab1be649c9b942..876f03602faaba439869cca7f021780b95f39381 100644 (file)
@@ -11,7 +11,6 @@ typedef struct HwSamS {
   LVme *regs;
   int bufSize;
   int currAddr;
-  int trigNr;
 } HwSam;
 
 
index ce077dd674dbcd65a54de70a6f7d66453c9f4143..6ca545ea9dc5c3255b550f7e860c54fd71a8e7e5 100644 (file)
@@ -17,6 +17,16 @@ set readout(file) ./daq_readout
 set readout(stndln) 0
 set readout(priority) -2
 
+set sam0(cardbase) 0x1C000000
+set sam1(cardbase) 0x2C000000
+set sam2(cardbase) 0x3C000000
+set sam3(cardbase) 0x5C000000
+set sam4(cardbase) 0x8C000000
+set sam5(cardbase) 0x9C000000
+set sam6(cardbase) 0xaC000000
+set sam7(cardbase) 0xbC000000
+set sam8(cardbase) 0xdC000000
+set sam9(cardbase) 0xec000000
 set soft(size) 1024
 
 set dtu(cardbase) 0x44100000
index bcb6816e2e9df69fb2e7853c6eb067e6bc3ad556..806bbb90fe3c0735d3c97340b9c748970f032428 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.12 2000-11-12 14:40:20 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.13 2000-11-12 14:42:08 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -133,18 +133,19 @@ void main(int argc, char *argv[])
        Worker_initEnd(worker);
 
        while (setjmp(terminateJmp) == 0) {
+               int n = 0;
                void *hadTu;
                HadTuQueue *hadTuQueue;
                Worker_dump(worker, 1);
 
-               hadTu = ShmTrans_alloc(shmTrans, 192 * 1024);
+               hadTu = ShmTrans_alloc(shmTrans, 60 * 1024);
 #ifndef NDEBUG
                msglog(LOG_DEBUG,
                        "shmTrans: %p = hadTu: %s\n", hadTu, HadTu_2charP(hadTu));
 #endif
                hadTuQueue = allocMem(HadTuQueue_sizeOf());
-               conHadTuQueue(hadTuQueue, hadTu, 192 * 1024);
-               while (NULL != (subEvt = HadTuQueue_alloc(hadTuQueue, Hardware_maxSubEvtSize(hw)))) {
+               conHadTuQueue(hadTuQueue, hadTu, 60 * 1024);
+               while (n++ < 100 && NULL != (subEvt = HadTuQueue_alloc(hadTuQueue, Hardware_maxSubEvtSize(hw)))) {
                        Hardware_waitForTrigger(hw, subEvt);
 
                        Hardware_readout(hw, subEvt);