]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
adapt to old readout scheme
authorhades <hades>
Mon, 22 Nov 1999 10:45:55 +0000 (10:45 +0000)
committerhades <hades>
Mon, 22 Nov 1999 10:45:55 +0000 (10:45 +0000)
hadaq/hwtbus.c

index c3767cfa8cc23a5683d82558114624b8259bca13..e12f0a7dc5d5f589b389b721adaa1a9426543718 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtbus.c,v 1.1 1999-11-19 16:00:08 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtbus.c,v 1.2 1999-11-22 10:45:55 hades Stab $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -15,29 +15,17 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had
 #define NSUBEVTS 1
 
 struct HardwareS {
-       size_t maxSubEvtSizes[NSUBEVTS];
-       UInt4 subEvtIds[NSUBEVTS];
+       size_t maxSubEvtSize;
        HwDtu *dtu;
 };
 
 #include "hardware.h"
 
-size_t Hardware_maxSubEvtSize(const Hardware *my, int i)
+size_t Hardware_maxSubEvtSize(const Hardware *my)
 {
-       return my->maxSubEvtSizes[i];
+       return my->maxSubEvtSize;
 }
 
-UInt4 Hardware_subEvtId(const Hardware *my, int i)
-{
-       UInt4 retVal;
-
-       if (i >= NSUBEVTS) {
-               retVal = SubEvtId_invalid;
-       } else {
-               retVal =  my->subEvtIds[i];
-       }
-       return retVal;
-}
 
 Hardware *newHardware(void)
 {
@@ -51,8 +39,7 @@ Hardware *newHardware(void)
        }
        my = allocMem(sizeof(Hardware));
 
-       my->subEvtIds[0] = SubEvtId_trigCode;
-       my->maxSubEvtSizes[0] = SubEvt_hdrSize() + 2000 * sizeof(UInt4);
+       my->maxSubEvtSize = SubEvt_hdrSize() + 2000 * sizeof(UInt4);
 
        my->dtu = allocMem(sizeof(HwDtu));
        if (0 > conHwDtu(my->dtu, "dtu", param)) {
@@ -72,45 +59,56 @@ void deleteHardware(Hardware *my)
        freeMem(my);
 }
 
-void Hardware_waitForTrigger(Hardware *my)
+void Hardware_waitForTrigger(Hardware *my, void *subEvt)
 {
-       int doReadOut;
-
-       do {
-               while (HwDtu_isEmpty(my->dtu)) {
-#if 0
-                       struct timespec tS, *t = &tS;
-                       t->tv_sec = 0;
-                       t->tv_nsec = 020000000;
-                       nanosleep(t, NULL);
+       static int nextId = SubEvtId_trigCode;
+       static int doReadOut;
+       static UInt1 trigTag = 0;
+       static unsigned long trigNr = 0;
+
+       switch (nextId) {
+       case SubEvtId_trigCode:
+               do {
+                       while (HwDtu_isEmpty(my->dtu)) {
+#if 1
+                               struct timespec tS, *t = &tS;
+                               t->tv_sec = 0;
+                               t->tv_nsec = 020000000;
+                               nanosleep(t, NULL);
 #endif
-               }
-               HwDtu_read(my->dtu);
-               msglog(LOG_DEBUG, "Dtu: tag: 0x%02x, code: 0x%02x\n", my->dtu->trigTag, my->dtu->trigCode);
-               switch (my->dtu->trigCode & 0x7) {
-               case 0x02:
-               case 0x03:
-                       doReadOut = 0;
-                       break;
-               default:
-                       doReadOut = 1;
-                       break;
-               }
-       } while (!doReadOut);
+                       }
+                       HwDtu_read(my->dtu);
+                       msglog(LOG_DEBUG, "Dtu: tag: 0x%02x, code: 0x%02x\n", my->dtu->trigTag, my->dtu->trigCode);
+                       switch (my->dtu->trigCode & 0x7) {
+                       case 0x02:
+                       case 0x03:
+                               trigTag = my->dtu->trigTag;
+                               doReadOut = 0;
+                               break;
+                       default:
+                               doReadOut = 1;
+                               break;
+                       }
+               } while (!doReadOut);
+               SubEvt_setSize(subEvt, SubEvt_hdrSize());
+               SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
+               SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag);
+               SubEvt_setId(subEvt, SubEvtId_trigCode);
+               nextId = SubEvtId_trigCode;
+               trigTag = my->dtu->trigTag;
+               trigNr++;
+               break;
+       }
 }
 
-void Hardware_readout(Hardware *my, int i, void *subEvt)
+void Hardware_readout(Hardware *my, void *subEvt)
 {
        UInt4 *data = SubEvt_data(subEvt);
        UInt4 *first = data;
        size_t size;
 
-       switch (my->subEvtIds[i]) {
+       switch (SubEvt_pureId(subEvt)) {
        case SubEvtId_trigCode:
-               SubEvt_setSize(subEvt, SubEvt_hdrSize());
-               SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
-               SubEvt_setTrigNr(subEvt, my->dtu->trigTag);
-               SubEvt_setId(subEvt, SubEvtId_trigCode);
                *data++ = my->dtu->trigCode;
 
                if (RAND_MAX / rand() > 2) {
@@ -122,9 +120,9 @@ void Hardware_readout(Hardware *my, int i, void *subEvt)
                break;
        }
        size = SubEvt_size(subEvt) + sizeof(UInt4) * (data - first);
-       if (size > my->maxSubEvtSizes[i]) {
+       if (size > my->maxSubEvtSize) {
                SubEvt_setId(subEvt, SubEvt_id(subEvt) | 0x80000000);
-               size = my->maxSubEvtSizes[i];
+               size = my->maxSubEvtSize;
        }
        SubEvt_setSize(subEvt, size);
 }