-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
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)
{
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));