From 3f1649c4269d4f8bdddce49931214fe2729b261b Mon Sep 17 00:00:00 2001 From: muench Date: Wed, 29 Mar 2000 16:00:13 +0000 Subject: [PATCH] Major change in the way data is packed. Each SEB delivers one SE that may (up to now must) contain itself SEs. EB unpacks one more stage. --- hadaq/evtbuild.c | 14 +++-- hadaq/hwsoft.c | 130 ++++++++++++++++++++++++++++------------------- hadaq/subevt.h | 3 +- 3 files changed, 88 insertions(+), 59 deletions(-) diff --git a/hadaq/evtbuild.c b/hadaq/evtbuild.c index 23f59af..7f1ae70 100644 --- a/hadaq/evtbuild.c +++ b/hadaq/evtbuild.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.9 2000-02-03 09:38:06 muench Stab $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.10 2000-03-29 16:00:13 muench Exp $"; #define _XOPEN_SOURCE #include @@ -320,11 +320,15 @@ int main(int argc, char *argv[]) #endif currTrigNr = SubEvt_trigNr(subEvt); } - if (SubEvt_id(subEvt) == SubEvtId_trigCode) { - Evt_setId(evt, SubEvt_dataValue(subEvt, 0)); - } if (SubEvt_trigNr(subEvt) == currTrigNr) { - evt = Evt_appendSubEvt(evt, subEvt); + void *se; + for (se = SubEvt_data(subEvt); se < SubEvt_end(subEvt); se = SubEvt_next(subEvt, se)) { + msglog(LOG_DEBUG, "addr: %p subEvt: %s\n", se, SubEvt_2charP(se)); + if (SubEvt_id(se) == SubEvtId_trigCode) { + Evt_setId(evt, SubEvt_dataValue(se, 0)); + } + evt = Evt_appendSubEvt(evt, se); + } HadTuQueue_pop(hadTuQueue[i]); currNrOfSubEvts++; } else if (SubEvt_trigNr(subEvt) < currTrigNr) { diff --git a/hadaq/hwsoft.c b/hadaq/hwsoft.c index 07dbc1a..a8870bf 100644 --- a/hadaq/hwsoft.c +++ b/hadaq/hwsoft.c @@ -31,7 +31,7 @@ Hardware *newHardware(void) Param *param; my = allocMem(sizeof(Hardware)); - my->maxSubEvtSize = SubEvt_hdrSize() + 401 * sizeof(UInt4); + my->maxSubEvtSize = 3 * SubEvt_hdrSize() + 1001 * sizeof(UInt4); param = allocMem(sizeof(Param)); conParam(param, "param.tcl"); @@ -45,71 +45,95 @@ void deleteHardware(Hardware *my) freeMem(my); } -void Hardware_waitForTrigger(Hardware *my, void *subEvt) +void Hardware_waitForTrigger(Hardware *my, void *partEvt) { - static int nextId = SubEvtId_trigCode; +#if 0 struct timespec tS, *t = &tS; - static unsigned long trigNr = 0; - static UInt1 trigTag = 0; - - switch (nextId) { - case SubEvtId_trigCode: -#if 0 - t->tv_sec = 0; - t->tv_nsec = 100000000; - nanosleep(t, NULL); + 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, 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, trigNr << 8 | trigTag); - trigNr++; - trigTag++; - nextId = SubEvtId_trigCode; - - break; - } +void readoutTrig(void *subEvt) +{ + UInt4 *data; + UInt4 *first; + static UInt1 trigTag; + size_t size; + + SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); + + data = SubEvt_data(subEvt); + first = data; + + *data++ = 0x1; + + SubEvt_setSize(subEvt, (char *)data - (char *)subEvt); + SubEvt_setId(subEvt, SubEvtId_trigCode); + SubEvt_setTrigNr(subEvt, trigTag); + msglog(LOG_DEBUG, "subEvt: %s\n", SubEvt_2charP(subEvt)); + + trigTag++; } -void Hardware_readout(Hardware *my, void *subEvt) +void readoutSoft(void *subEvt) { - UInt4 *data = SubEvt_data(subEvt); - UInt4 *first = data; + UInt4 *data; + UInt4 *first; + static UInt1 trigTag; + UInt4 id; size_t size; - switch (SubEvt_pureId(subEvt)) { - case SubEvtId_trigCode: - *data++ = 0x00000001; - break; - case SubEvtId_test1: - *data++ = 0x55aa00FF; - *data++ = 0x55aa00FF; - *data++ = 0x55aa00FF; + SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); + + data = SubEvt_data(subEvt); + first = data; + + *data++ = 0x55aa00FF; + *data++ = 0x55aa00FF; + *data++ = 0x55aa00FF; #if 1 - 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); + 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 - break; - } - size = SubEvt_size(subEvt) + sizeof(UInt4) * (data - first); - if (size > my->maxSubEvtSize) { - SubEvt_setId(subEvt, SubEvt_id(subEvt) | 0x80000000); - size = my->maxSubEvtSize; + size = (char *)data - (char *)subEvt; + id = SubEvtId_test1; + if (size > 1000) { + size = 1000; + id |= 0x80000000; } SubEvt_setSize(subEvt, size); + SubEvt_setId(subEvt, id); + SubEvt_setTrigNr(subEvt, trigTag); + msglog(LOG_DEBUG, "subEvt: %s\n", SubEvt_2charP(subEvt)); + + trigTag++; +} + +void Hardware_readout(Hardware *my, void *partEvt) +{ + void *subEvt = SubEvt_data(partEvt); + static UInt4 trigNr; + + SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts); + + readoutTrig(subEvt); + subEvt = SubEvt_next(partEvt, subEvt); + + readoutSoft(subEvt); + subEvt = SubEvt_next(partEvt, subEvt); + + SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt); + SubEvt_setId(partEvt, 0); + SubEvt_setTrigNr(partEvt, trigNr); + msglog(LOG_DEBUG, "partEvt: %s\n", SubEvt_2charP(partEvt)); + + trigNr++; } diff --git a/hadaq/subevt.h b/hadaq/subevt.h index 40b6b64..8757428 100644 --- a/hadaq/subevt.h +++ b/hadaq/subevt.h @@ -27,7 +27,8 @@ enum SubEvtDecoding { SubEvtDecoding_8bitData = 1, SubEvtDecoding_16bitData = (1 << 16) | 1, SubEvtDecoding_32bitData = (2 << 16) | 1, - SubEvtDecoding_text = 2 + SubEvtDecoding_text = 2, + SubEvtDecoding_SubEvts = (3 << 16) | 3 }; #define SubEvt_hdr HadTu_hdr -- 2.43.0