From 96d1be8bc018f05b304868f3f725cee8ad637694 Mon Sep 17 00:00:00 2001 From: hadaq Date: Tue, 29 Oct 2002 15:45:05 +0000 Subject: [PATCH] Interleaved wait and readout (like WoKoe) about 100k more via VME -- mm --- hadaq/hwmdc.c | 65 +++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/hadaq/hwmdc.c b/hadaq/hwmdc.c index c53122d..a207f78 100644 --- a/hadaq/hwmdc.c +++ b/hadaq/hwmdc.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.24 2002-10-27 12:26:49 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.25 2002-10-29 15:45:05 hadaq Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -93,12 +93,20 @@ void deleteHardware(Hardware *my) free(my); } -void Hardware_waitForTrigger(Hardware *my, void *subEvt) +void Hardware_waitForTrigger(Hardware *my, void *partEvt) { int i; int nRequests = 0; int nPoll = 0; const int nPollMax = 60 / my->nSams; + int firstSam = -1; + void *subEvt = SubEvt_data(partEvt); + static unsigned long trigNr = 0; + unsigned trigTag; + + /* init partial event, necessary for SubEvt_next() */ + SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts); + SubEvt_setId(partEvt, 0); for (i = 0; i < my->nSams; i++) { if (HwSam_isEmpty(my->sam[i])) { @@ -112,6 +120,20 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt) if (HwSam_isBufRequested(my->sam[i])) { if (!HwSam_isBusy(my->sam[i])) { HwSam_getEndOfData(my->sam[i]); + if (HwSam_readSubEvt(my->sam[i], subEvt) == 0) { + if (firstSam < 0) { + trigTag = SubEvt_trigNr(subEvt) & 0xff; + firstSam = i; + } else { + if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) { + SubEvt_setDataError(subEvt); + SubEvt_setDataError(partEvt); + syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x", + my->sam[i]->name, trigTag, firstSam, SubEvt_trigNr(subEvt)); + } + } + subEvt = SubEvt_next(partEvt, subEvt); + } --nRequests; } } @@ -131,44 +153,21 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt) #endif } while (nRequests); + SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag); + SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt); + trigNr++; + + assert(SubEvt_size(partEvt) <= my->maxSubEvtSize); +#ifndef NDEBUG + syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt)); +#endif } void Hardware_readout(Hardware *my, void *partEvt) { int i; - int firstSam = -1; - void *subEvt = SubEvt_data(partEvt); - static unsigned long trigNr = 0; - unsigned trigTag; - - /* init partial event, necessary for SubEvt_next() */ - SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts); - SubEvt_setId(partEvt, 0); /* read all sams, check for common trigger tag */ for (i = 0; i < my->nSams; i++) { - if (HwSam_readSubEvt(my->sam[i], subEvt) == 0) { - if (firstSam < 0) { - trigTag = SubEvt_trigNr(subEvt) & 0xff; - firstSam = i; - } else { - if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) { - SubEvt_setDataError(subEvt); - SubEvt_setDataError(partEvt); - syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x", - my->sam[i]->name, trigTag, firstSam, SubEvt_trigNr(subEvt)); - } - } - subEvt = SubEvt_next(partEvt, subEvt); - } } - - SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag); - SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt); - trigNr++; - - assert(SubEvt_size(partEvt) <= my->maxSubEvtSize); -#ifndef NDEBUG - syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt)); -#endif } -- 2.43.0