From 1f53f0e76b03d7d644f213d52972cffe7b4c3a94 Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 22 Nov 1999 09:00:48 +0000 Subject: [PATCH] back to old readout scheme --- hadaq/hardware.h | 7 ++-- hadaq/hwsoft.c | 98 ++++++++++++++++++++++++------------------------ hadaq/readout.c | 34 +++++++---------- 3 files changed, 64 insertions(+), 75 deletions(-) diff --git a/hadaq/hardware.h b/hadaq/hardware.h index 4ad3b44..672d42e 100644 --- a/hadaq/hardware.h +++ b/hadaq/hardware.h @@ -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 diff --git a/hadaq/hwsoft.c b/hadaq/hwsoft.c index f155402..07dbc1a 100644 --- a/hadaq/hwsoft.c +++ b/hadaq/hwsoft.c @@ -3,37 +3,23 @@ #include #include -#include - -#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 + 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); } diff --git a/hadaq/readout.c b/hadaq/readout.c index cec72dd..635ee0c 100644 --- a/hadaq/readout.c +++ b/hadaq/readout.c @@ -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 @@ -13,7 +13,6 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had #include #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); -- 2.43.0