]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Get new stuff from mdc, untested!!
authormuench <muench>
Mon, 16 Jun 2003 08:26:38 +0000 (08:26 +0000)
committermuench <muench>
Mon, 16 Jun 2003 08:26:38 +0000 (08:26 +0000)
hadaq/hwshow.c

index 2a84433ed04aac62334ea054aeaa3d40188e114d..a81904b6d05cbb0b72d534f808dc1c726f315644 100644 (file)
@@ -1,4 +1,4 @@
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.35 2003-06-16 08:14:30 muench Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.36 2003-06-16 08:26:38 muench Exp $";
 
 #define SHIP_BLT
 
@@ -156,43 +156,64 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt)
 #ifdef SHIP_BLT
 void Hardware_readout(Hardware *my, void *partEvt)
 {
-       int i;
-       int firstShip = -1;
-       void *subEvt = SubEvt_data(my->buf);
        static unsigned long trigNr = 0;
-       unsigned trigTag;
-       int dataError;
-       int size;
 
-       /* init partial event, necessary for  SubEvt_next() */
-       SubEvt_setDecoding(my->buf, SubEvtDecoding_SubEvts);
-       dataError = 0;
-       SubEvt_setId(my->buf, 0);
+       int i;
+       void *subEvt;
+       int dataError;
+       unsigned trigTag;
+       unsigned long offset;
 
+       /* prepare BMA chain by scanning all VME cards */
+       if (0 > LBma_resetChain(my->lbma)) {
+               syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+       }
+       offset = 0;
        for (i = 0; i < my->nShips; i++) {
-               if (0 > LBma_resetChain(my->lbma)) {
-                       syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
-               }
-               size = HwShip_fillLBmaChain(my->ship[i], my->lbma, (char *) subEvt - (char *) my->buf);
+               int size;
+
+               size = HwShip_fillLBmaChain(my->ship[i], my->lbma, offset);
                if (size > 0) {
-                       subEvt = (char *) subEvt + (size + 0x7U & ~0x7U);
+                       offset += size + 0x7 & ~0x7;
                }
-               if (0 > LBma_startChain(my->lbma)) {
-                       syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+       }
+       assert(SubEvt_hdrSize() + offset <= Hardware_maxSubEvtSize(my));
+
+       /* read data via VME */
+       if (0 > LBma_startChain(my->lbma)) {
+               syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+       }
+       if (0 > LBma_waitChain(my->lbma)) {
+               syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+       }
+       memcpy(SubEvt_data(partEvt), my->buf, offset);
+
+       /* check consistency and fill crate event header */
+       SubEvt_setSize(partEvt, SubEvt_hdrSize() + offset);
+       SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
+       dataError = 0;
+       trigTag = 0x100;
+       for (subEvt = SubEvt_data(partEvt); subEvt < SubEvt_end(partEvt); subEvt = SubEvt_next(partEvt, subEvt)) {
+               if (SubEvt_dataError(subEvt)) {
+                       dataError = 1;
                }
-               if (0 > LBma_waitChain(my->lbma)) {
-                       syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
+               if (trigTag > 0xff) {
+                       trigTag = SubEvt_trigNr(subEvt) & 0xff;
+               } else {
+                       if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) {
+                               dataError = 1;
+                               syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x != 0x%08x", my->ship[i]->name, trigTag, SubEvt_trigNr(subEvt));
+                       }
                }
        }
+       SubEvt_setId(partEvt, 0);
+       if (dataError) {
+               SubEvt_setDataError(partEvt);
+       }
+       SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag);
 
-       SubEvt_setTrigNr(my->buf, trigNr << 8 | trigTag);
-       SubEvt_setSize(my->buf, (char *) subEvt - (char *) my->buf);
        trigNr++;
 
-       assert(SubEvt_size(my->buf) <= Hardware_maxSubEvtSize(my));
-
-       memcpy(partEvt, my->buf, SubEvt_size(my->buf));
-
        syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
 }