From: hades Date: Mon, 22 Nov 1999 10:45:55 +0000 (+0000) Subject: adapt to old readout scheme X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=99fbbd3c8dd5d09ca1419cda63d3f834118ba49c;p=daqdata.git adapt to old readout scheme --- diff --git a/hadaq/hwtbus.c b/hadaq/hwtbus.c index c3767cf..e12f0a7 100644 --- a/hadaq/hwtbus.c +++ b/hadaq/hwtbus.c @@ -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 @@ -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); }