]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
back to old readout scheme
authorhades <hades>
Mon, 22 Nov 1999 09:00:48 +0000 (09:00 +0000)
committerhades <hades>
Mon, 22 Nov 1999 09:00:48 +0000 (09:00 +0000)
hadaq/hardware.h
hadaq/hwsoft.c
hadaq/readout.c

index 4ad3b448eaac8902d7a28c428b6bb7e4e8b496ee..672d42ef949149acdc623505c47feca7a4192263 100644 (file)
@@ -6,9 +6,8 @@ typedef struct HardwareS Hardware;
 Hardware *newHardware(void);
 void deleteHardware(Hardware * my);
 int Hardware_inSpill(const Hardware * my);
-UInt4 Hardware_subEvtId(const Hardware * my, int i);
-size_t Hardware_maxSubEvtSize(const Hardware * my, int i);
-void Hardware_waitForTrigger(Hardware * my);
-void Hardware_readout(Hardware * my, int i, void *subEvt);
+size_t Hardware_maxSubEvtSize(const Hardware * my);
+void Hardware_waitForTrigger(Hardware * my, void *subEvt);
+void Hardware_readout(Hardware * my, void *subEvt);
 
 #endif
index f155402fd66659bc71a83340c3732e25ec52314e..07dbc1ac98b24ce54f1368794a717996d084518b 100644 (file)
@@ -3,37 +3,23 @@
 #include <unistd.h>
 
 #include <sys/time.h>
-#include <hadesstd.h>
-
 
-#include "hardware.h"
 #include "subevt.h"
 #include "param.h"
 
-#define NSUBEVTS 2
-
 struct HardwareS {
-       size_t maxSubEvtSizes[NSUBEVTS];
-       UInt4 subEvtIds[NSUBEVTS];
+       size_t maxSubEvtSize;
 };
 
-size_t Hardware_maxSubEvtSize(const Hardware *my, int i)
-{
-       return my->maxSubEvtSizes[i];
-}
+#include "hardware.h"
 
-UInt4 Hardware_subEvtId(const Hardware *my, int i)
+size_t Hardware_maxSubEvtSize(const Hardware *my)
 {
-       UInt4 retVal;
-
-       if (i >= NSUBEVTS) {
-               retVal = SubEvtId_invalid;
-       } else {
-               retVal =  my->subEvtIds[i];
-       }
-       return retVal;
+       return my->maxSubEvtSize;
 }
 
+#include <hadesstd.h>
+
 int Hardware_inSpill(const Hardware *my)
 {
        return 0;
@@ -45,10 +31,7 @@ Hardware *newHardware(void)
        Param *param;
 
        my = allocMem(sizeof(Hardware));
-       my->subEvtIds[0] = SubEvtId_trigCode;
-       my->maxSubEvtSizes[0] = SubEvt_hdrSize() + 1 * sizeof(UInt4);
-       my->subEvtIds[1] = SubEvtId_test1;
-       my->maxSubEvtSizes[1] = SubEvt_hdrSize() + 401 * sizeof(UInt4);
+       my->maxSubEvtSize = SubEvt_hdrSize() + 401 * sizeof(UInt4);
 
        param = allocMem(sizeof(Param));
        conParam(param, "param.tcl");
@@ -62,56 +45,71 @@ void deleteHardware(Hardware *my)
        freeMem(my);
 }
 
-void Hardware_waitForTrigger(Hardware *my)
+void Hardware_waitForTrigger(Hardware *my, void *subEvt)
 {
+       static int nextId = SubEvtId_trigCode;
        struct timespec tS, *t = &tS;
-#if 1
-       t->tv_sec = 0;
-       t->tv_nsec = 100000000;
-       nanosleep(t, NULL);
-#endif
-}
-
-void Hardware_readout(Hardware *my, int i, void *subEvt)
-{
-       UInt4 *data = SubEvt_data(subEvt);
-       UInt4 *first = data;
+       static unsigned long trigNr = 0;
        static UInt1 trigTag = 0;
-       size_t size;
 
-       switch (my->subEvtIds[i]) {
+
+       switch (nextId) {
        case SubEvtId_trigCode:
+#if 0
+               t->tv_sec = 0;
+               t->tv_nsec = 100000000;
+               nanosleep(t, NULL);
+#endif
+
                SubEvt_setSize(subEvt, SubEvt_hdrSize());
                SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
                SubEvt_setId(subEvt, SubEvtId_trigCode);
-               SubEvt_setTrigNr(subEvt, trigTag);
-               *data++ = 0x00000001;
+               SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag);
+               nextId = SubEvtId_test1;
+
                break;
        case SubEvtId_test1:
                SubEvt_setSize(subEvt, SubEvt_hdrSize());
                SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
                SubEvt_setId(subEvt, SubEvtId_test1);
-               SubEvt_setTrigNr(subEvt, trigTag);
+               SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag);
+               trigNr++;
+               trigTag++;
+               nextId = SubEvtId_trigCode;
 
+               break;
+       }
+}
+
+void Hardware_readout(Hardware *my, void *subEvt)
+{
+       UInt4 *data = SubEvt_data(subEvt);
+       UInt4 *first = data;
+       size_t size;
+
+       switch (SubEvt_pureId(subEvt)) {
+       case SubEvtId_trigCode:
+               *data++ = 0x00000001;
+               break;
+       case SubEvtId_test1:
                *data++ = 0x55aa00FF;
                *data++ = 0x55aa00FF;
                *data++ = 0x55aa00FF;
 #if 1
-               data += (int) ((100.0 * rand()) / RAND_MAX);
-               data += (int) ((100.0 * rand()) / RAND_MAX);
-               data += (int) ((100.0 * rand()) / RAND_MAX);
-               data += (int) ((100.0 * rand()) / RAND_MAX);
-               data += (int) ((100.0 * rand()) / RAND_MAX);
-               data += (int) ((100.0 * rand()) / RAND_MAX);
+               data += (int) ((1000.0 * rand()) / RAND_MAX);
+               data += (int) ((1000.0 * rand()) / RAND_MAX);
+               data += (int) ((1000.0 * rand()) / RAND_MAX);
+               data += (int) ((1000.0 * rand()) / RAND_MAX);
+               data += (int) ((1000.0 * rand()) / RAND_MAX);
+               data += (int) ((1000.0 * rand()) / RAND_MAX);
 #endif
-               trigTag++;
                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);
 }
index cec72ddbdccc7093b82b5ab160bd57089113eb02..635ee0c9fb3710a51453d7e733edff1a18a08f22 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.7 1999-11-21 16:43:31 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.8 1999-11-22 09:00:48 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
@@ -13,7 +13,6 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had
 #include <hadesstd.h>
 
 #include "hardware.h"
-#include "subevt.h"
 #include "shmtrans.h"
 #include "hadtuqueue.h"
 #include "worker.h"
@@ -37,8 +36,6 @@ void main(int argc, char *argv[])
        void *subEvt;
        Worker *worker;
        ShmTrans *shmTrans;
-       void *hadTu;
-       HadTuQueue *hadTuQueue;
        int i;
        int isStandalone;
        char *outPath;
@@ -94,42 +91,37 @@ void main(int argc, char *argv[])
 
        Worker_initEnd(worker);
 
-       hadTuQueue = allocMem(HadTuQueue_sizeOf());
-       hadTu = ShmTrans_alloc(shmTrans, 64 * 1024);
-       conHadTuQueue(hadTuQueue, hadTu, 64 * 1024);
        while (setjmp(terminateJmp) == 0) {
+               void *hadTu;
+               HadTuQueue *hadTuQueue;
                Worker_dump(worker, 1);
 
+               hadTu = ShmTrans_alloc(shmTrans, 64 * 1024);
 #ifndef NDEBUG
                msglog(LOG_DEBUG,
                        "shmTrans: %p = hadTu: %s\n", hadTu, HadTu_2charP(hadTu));
 #endif
-               Hardware_waitForTrigger(hw);
-               for (i = 0; Hardware_subEvtId(hw, i) != SubEvtId_invalid; i++) {
-                       while (NULL == (subEvt = HadTuQueue_alloc(hadTuQueue, Hardware_maxSubEvtSize(hw, i)))) {
-                               desHadTuQueue(hadTuQueue);
-                               ShmTrans_send(shmTrans);
-                               hadTu = ShmTrans_alloc(shmTrans, 32 * 1024);
-                               conHadTuQueue(hadTuQueue, hadTu, 32 * 1024);
-                       }
+               hadTuQueue = allocMem(HadTuQueue_sizeOf());
+               conHadTuQueue(hadTuQueue, hadTu, 64 * 1024);
+               while (NULL != (subEvt = HadTuQueue_alloc(hadTuQueue, Hardware_maxSubEvtSize(hw)))) {
+                       Hardware_waitForTrigger(hw, subEvt);
 
-                       Hardware_readout(hw, i, subEvt);
-                       SubEvt_setTrigNr(subEvt, (*trigAccepted << 8) | (SubEvt_trigNr(subEvt) & 0xff));
+                       Hardware_readout(hw, subEvt);
                        (*subevtsRead)++;
                        if (SubEvt_dataError(subEvt)) {
                                (*subevtsDataErr)++;
                        }
+                       (*trigAccepted) = SubEvt_trigNr(subEvt) >> 8;
 #ifndef NDEBUG
                        msglog(LOG_DEBUG, "hadTuQueue: %p = subEvt: %s\n", subEvt, SubEvt_2charP(subEvt));
 #endif
 
                        HadTuQueue_push(hadTuQueue);
                }
-               (*trigAccepted)++;
+               desHadTuQueue(hadTuQueue);
+               freeMem(hadTuQueue);
+               ShmTrans_send(shmTrans);
        }
-       desHadTuQueue(hadTuQueue);
-       ShmTrans_send(shmTrans);
-       freeMem(hadTuQueue);
 
        Worker_fini(worker);
        ShmTrans_close(shmTrans);