-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 <unistd.h>
#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) {
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");
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++;
}