From 12314b0634dfe7488096550d96f3a83c3b590a0d Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 10 Apr 2001 15:00:21 +0000 Subject: [PATCH] Cleanup, MB said it worked --- hadaq/hwrace.c | 26 +-------------------- hadaq/hwrace.h | 1 - hadaq/hwrich.c | 61 ++++++++++++++++++++++++++++++++------------------ 3 files changed, 40 insertions(+), 48 deletions(-) diff --git a/hadaq/hwrace.c b/hadaq/hwrace.c index fb365b6..07f8d2a 100644 --- a/hadaq/hwrace.c +++ b/hadaq/hwrace.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.12 2001-03-07 16:02:44 hades Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.13 2001-04-10 15:00:21 hades Exp $"; #define _POSIX_C_SOURCE 199309L @@ -46,8 +46,6 @@ int conHwRace(HwRace *my, const char *name, const Param *param) strcpy(my->name, name); - my->trigNr = 0; - Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase); if (!paramWasFound) { msglog(LOG_WARNING, @@ -124,17 +122,6 @@ int HwRace_readSubEvt(HwRace *my, void *subEvt) int size; size = Rc_readMem(my->rc, my->currAddr); -#if 0 -/* This sleep was a quickhack in sep. 99 beamtime to fix a problem - * during bank switching. It is not understood, why it helped. -*/ - if ( 1 || my->currAddr == 0) { - struct timespec tS, *t = &tS; - t->tv_sec = 0; - t->tv_nsec = 040000000; - nanosleep(t, NULL); - } -#endif #ifndef NDEBUG msglog(LOG_DEBUG, "size: %x, currAddr: %x\n", size, my->currAddr); #endif @@ -143,17 +130,6 @@ int HwRace_readSubEvt(HwRace *my, void *subEvt) for (firstAddr = my->currAddr; my->currAddr - firstAddr < size; my->currAddr += 4) { *data++ = Rc_readMem(my->rc, my->currAddr); } -/* Just for testing the banks - * id is changed to show the bank where the subevent was - * read from. - * WON'T WORK WITH ANALYSIS SOFTWARE ANY MORE - */ -#if 0 - SubEvt_setId(subEvt, bankConfirmed(my)); -#endif - /* normal extension of trigger tag */ - SubEvt_setTrigNr(subEvt, my->trigNr << 8 | SubEvt_trigNr(subEvt)); - my->trigNr++; /* align currAddr to next page */ if ((my->currAddr & 0xff) != 0) { diff --git a/hadaq/hwrace.h b/hadaq/hwrace.h index 5f69284..0025796 100644 --- a/hadaq/hwrace.h +++ b/hadaq/hwrace.h @@ -12,7 +12,6 @@ typedef struct HwRaceS { LVme_L *buf; int bankRequested; int currAddr; - int trigNr; } HwRace; diff --git a/hadaq/hwrich.c b/hadaq/hwrich.c index 5c16a63..4ba55d6 100644 --- a/hadaq/hwrich.c +++ b/hadaq/hwrich.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.15 2001-04-10 13:28:51 hades Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.16 2001-04-10 15:00:21 hades Exp $"; #define _POSIX_C_SOURCE 199309L @@ -19,7 +19,6 @@ static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hada struct HardwareS { size_t maxSubEvtSize; HwRace *race[NRACES]; - unsigned raceToRead; }; #include "hardware.h" @@ -47,7 +46,6 @@ Hardware *newHardware(void) my = allocMem(sizeof(Hardware)); my->maxSubEvtSize = SubEvt_hdrSize() + (NRACES * 2500 * sizeof(UInt4)); - my->raceToRead = 0; for (i = 0; i < NRACES; i++) { char buf[16]; @@ -77,39 +75,58 @@ void deleteHardware(Hardware *my) void Hardware_waitForTrigger(Hardware *my, void *subEvt) { + int i; + + for (i = 0; i < NRACES; i++) { + if (HwRace_isEmpty(my->race[i])) { + HwRace_requestBuffer(my->race[i]); + } + } + for (i = 0; i < NRACES; i++) { + while (HwRace_isBusy(my->race[i])) { +#if 0 +/* +* This sleep prevents a tight loop which stops work on real +* time systems if the priority of readout is not lowered. +* When not using the sleep use option -p -2 for daq_readout. +*/ + struct timespec tS, *t = &tS; + t->tv_sec = 0; + t->tv_nsec = 020000000; + nanosleep(t, NULL); +#endif + } + } } void Hardware_readout(Hardware *my, void *partEvt) { + int i; void *subEvt = SubEvt_data(partEvt); - int i, j; + static UInt4 trigNr = 0; + UInt4 trigTag; + /* init partial event, necessary for SubEvt_next() */ SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts); + SubEvt_setId(partEvt, 0); - for (my->raceToRead = 0; my->raceToRead < NRACES; my->raceToRead++) { - if (HwRace_isEmpty(my->race[my->raceToRead])) { - HwRace_requestBuffer(my->race[my->raceToRead]); - while (HwRace_isBusy(my->race[my->raceToRead])) { -#if 0 -/* - * This sleep prevents a tight loop which stops work on real - * time systems if the priority of readout is not lowered. - * When not using the sleep use option -p -2 for daq_readout. -*/ - struct timespec tS, *t = &tS; - t->tv_sec = 0; - t->tv_nsec = 020000000; - nanosleep(t, NULL); -#endif + /* read all races, check for common trigger tag */ + for (i = 0; i < NRACES; i++) { + HwRace_readSubEvt(my->race[i], subEvt); + if (i == 0) { + trigTag = SubEvt_trigNr(subEvt); + } else { + if (trigTag != SubEvt_trigNr(subEvt)) { + msglog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x != 0x%08x\n", + my->race[i]->name,trigTag, SubEvt_trigNr(subEvt)); } } - HwRace_readSubEvt(my->race[my->raceToRead], subEvt); - SubEvt_setTrigNr(partEvt, SubEvt_trigNr(subEvt)); subEvt = SubEvt_next(partEvt, subEvt); } + SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag); SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt); - SubEvt_setId(partEvt, 0); + trigNr++; #ifndef NDEBUG msglog(LOG_DEBUG, "partEvt: %s\n", SubEvt_2charP(partEvt)); #endif -- 2.43.0