]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Interleaved wait and readout (like WoKoe) about 100k more via VME -- mm
authorhadaq <hadaq>
Tue, 29 Oct 2002 15:45:05 +0000 (15:45 +0000)
committerhadaq <hadaq>
Tue, 29 Oct 2002 15:45:05 +0000 (15:45 +0000)
hadaq/hwmdc.c

index c53122dad198b70570513f9439961798299c978b..a207f7831ad76f9f9e509dcaddde89f85c79ce8e 100644 (file)
@@ -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 <unistd.h>
@@ -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
 }