From 860154fbfd4c101e3982331517b081b25bdafdc2 Mon Sep 17 00:00:00 2001 From: hadaq Date: Fri, 19 Apr 2002 19:12:11 +0000 Subject: [PATCH] Might contain some improvements. Just in case. W. Koenig --- hadaq/hwrace.c | 59 ++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/hadaq/hwrace.c b/hadaq/hwrace.c index 422c510..33d5815 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.16 2002-04-08 14:46:07 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.17 2002-04-19 19:12:11 hadaq Exp $"; #define _POSIX_C_SOURCE 199309L @@ -80,27 +80,6 @@ void HwRace_requestBuffer(HwRace *my) my->bankRequested = my->bankRequested == 1 ? 0 : 1; Rc_setSwrq(my->rc); Rc_clrSwrq(my->rc); -/* Fix to use only one bank of two - * Events in the "bad" bank are skipped without - * being readout. - */ -#if 0 - my->currAddr = 0; - if((bankRequested(my) == 1)&&(bankConfirmed(my) == 1)) - { - Rc_setSwrq(my->rc); - Rc_clrSwrq(my->rc); - while(bankConfirmed(my) == 1) - { - struct timespec tS, *t = &tS; - t->tv_sec = 0; - t->tv_nsec = 020000000; - nanosleep(t, NULL); - } - } - Rc_setSwrq(my->rc); - Rc_clrSwrq(my->rc); -#endif } int HwRace_isBusy(HwRace *my) @@ -117,25 +96,39 @@ int HwRace_isEmpty(HwRace *my) { return my->currAddr >= endOfData(my); } - +#define MAXRACELENGTH 99997 /* in bytes */ int HwRace_readSubEvt(HwRace *my, void *subEvt) { uint32_t *data = (uint32_t *) subEvt; int lastAddr; + int currAddr; int size; - size = Rc_readMem(my->rc, my->currAddr); - *data++ = size; - lastAddr = my->currAddr + size; - - /* copy one sub evt from RC to memory */ - while ((my->currAddr+= 4) < lastAddr) { - *data++ = Rc_readMem(my->rc, my->currAddr); + currAddr = my->currAddr; + size = Rc_readMem(my->rc, currAddr); + lastAddr = currAddr + size; +#if 1 + if (size > MAXRACELENGTH ) { + *data++ = 16; + currAddr+=4; + *data++ = Rc_readMem(my->rc, currAddr); + currAddr+=4; + *data++ = Rc_readMem(my->rc, currAddr) | 0x80000000UL; + currAddr+=4; + *data++ = Rc_readMem(my->rc, currAddr) |(size<<16); + } else { + *data++ = size; + /* copy one sub evt from RC to memory */ + while ((currAddr+=4) < lastAddr) { + *data++ = Rc_readMem(my->rc, currAddr); + } } - +#endif /* align currAddr to next page */ - if ((my->currAddr & 0xff) != 0) { - my->currAddr = (my->currAddr / RCPAGESIZE + 1) * RCPAGESIZE; + if ((lastAddr & 0xff) != 0) { + my->currAddr = (lastAddr / RCPAGESIZE + 1) * RCPAGESIZE; + } else { + my->currAddr = lastAddr; } #ifndef NDEBUG syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt)); -- 2.43.0