]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Cleanup, MB said it worked
authorhades <hades>
Tue, 10 Apr 2001 15:00:21 +0000 (15:00 +0000)
committerhades <hades>
Tue, 10 Apr 2001 15:00:21 +0000 (15:00 +0000)
hadaq/hwrace.c
hadaq/hwrace.h
hadaq/hwrich.c

index fb365b635fdd55a13c4169ec2825d3f7c9a6270e..07f8d2a46797fe3dabf922d537751d5c350968dd 100644 (file)
@@ -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", &paramWasFound, &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) {
index 5f69284a97a81e82abe6c797e13dd9596e28a5d0..0025796ad101516d91a5f70f21f02684e9ac83ca 100644 (file)
@@ -12,7 +12,6 @@ typedef struct HwRaceS {
   LVme_L *buf;
   int bankRequested;
   int currAddr;
-  int trigNr;
 } HwRace;
 
 
index 5c16a63706814d07e701e1a9cca675319a5e4f88..4ba55d646e1642224c0c4169d35f011a7afc24de 100644 (file)
@@ -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