]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Completely new, tof is not read out directly by the CPU, but by
authorhades <hades>
Tue, 9 May 2000 12:24:22 +0000 (12:24 +0000)
committerhades <hades>
Tue, 9 May 2000 12:24:22 +0000 (12:24 +0000)
Eriks DSP-Board (see hwtip.[ch])

hadaq/hwtof.c

index 7e90a50d982f7be63d83db698f1538f13b4814d8..1815417e68aab9de9dfc8ad6551b5258cf7b6454 100644 (file)
@@ -1,43 +1,28 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.9 2000-02-03 18:51:45 muench Stab $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.10 2000-05-09 12:24:22 hades Exp $";
 
 #define _POSIX_C_SOURCE 199309L
 #include <unistd.h>
 
 #include <errno.h>
 #include <stdio.h>
-#include <string.h>
+#include <string.h> 
 #include <sys/time.h>
 
 #include "param.h"
 #include "subevt.h"
-#include "hwdtu.h"
-#include "hwsis3801.h"
-#include "hwv488.h"
-#include "hwv775.h"
-#include "hwv878.h"
+#include "hwtip.h"
+
+/* Set number of RCs here */
+#define NTIPS 1
 
 struct HardwareS {
        size_t maxSubEvtSize;
-       void *specific;
+       HwTip *tip[NTIPS];
+       unsigned tipToRead;
 };
 
 #include "hardware.h"
 
-#define NV775S 3
-#define NV878S 5
-
-typedef struct ModulesS {
-       HwDtu *dtu;
-       HwSis3801 *sis3801;
-       HwV488 *adc0;
-       HwV488 *tdc8;
-       HwV488 *tdc9;
-       HwV775 *v775[NV775S];
-       HwV878 *v878[NV878S];
-}
-
-Modules;
-
 size_t Hardware_maxSubEvtSize(const Hardware *my)
 {
        return my->maxSubEvtSize;
@@ -52,86 +37,28 @@ Hardware *newHardware(void)
 {
        Hardware *my;
        Param paramS, *param = &paramS;
-       HwDtu *dtu;
-       HwSis3801 *sis3801;
-       HwV488 *adc0;
-       HwV488 *tdc8;
-       HwV488 *tdc9;
-       HwV775 *v775[NV775S];
-       HwV878 *v878[NV878S];
        int i;
 
-#if 0
-       system("cd /home/hades/lt99/slow; ./tof init >/dev/null 2>&1");
-#endif
        if (0 > conParam(param, "param.tcl")) {
                msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                return NULL;
        }
        my = allocMem(sizeof(Hardware));
-       my->specific = allocMem(sizeof(Modules));
-
-       my->maxSubEvtSize = SubEvt_hdrSize()
-               + (NV775S * 34 * sizeof(UInt4))
-               + (NV878S * 34 * sizeof(UInt4))
-               + (9 * sizeof(UInt2))
-               + (9 * sizeof(UInt2))
-               + ((1 + 2 * 32) * sizeof(UInt2));
-
-       dtu = allocMem(sizeof(HwDtu));
-       if (0 > conHwDtu(dtu, "dtu", param)) {
-               msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
-               return NULL;
-       }
-       ((Modules *) my->specific)->dtu = dtu;
 
-       sis3801 = allocMem(sizeof(HwSis3801));
-       if (0 > conHwSis3801(sis3801, "scaler0", param)) {
-               msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
-               return NULL;
-       }
-       ((Modules *) my->specific)->sis3801 = sis3801;
+       my->maxSubEvtSize = SubEvt_hdrSize() + (800 * sizeof(UInt4));
+       my->tipToRead = 0;
 
-       adc0 = allocMem(sizeof(HwV488));
-       if (0 > conHwV488(adc0, "adc0", param)) {
-               msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
-               return NULL;
-       }
-       ((Modules *) my->specific)->adc0 = adc0;
-       tdc9 = allocMem(sizeof(HwV488));
-       if (0 > conHwV488(tdc9, "tdc9", param)) {
-               msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
-               return NULL;
-       }
-       ((Modules *) my->specific)->tdc9 = tdc9;
-       tdc8 = allocMem(sizeof(HwV488));
-       if (0 > conHwV488(tdc8, "tdc8", param)) {
-               msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
-               return NULL;
-       }
-       ((Modules *) my->specific)->tdc8 = tdc8;
-       for (i = 0; i < NV775S; i++) {
+       for (i = 0; i < NTIPS; i++) {
                char buf[16];
 
-               v775[i] = allocMem(sizeof(HwV775));
-               sprintf(buf, "tdc%d", i);
-               if (0 > conHwV775(v775[i], buf, param)) {
+               my->tip[i] = allocMem(sizeof(HwTip));
+               sprintf(buf, "tip%d", i);
+               if (0 > conHwTip(my->tip[i], buf, param)) {
                        msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
                        return NULL;
                }
-               ((Modules *) my->specific)->v775[i] = v775[i];
        }
-       for (i = 0; i < NV878S; i++) {
-               char buf[16];
 
-               v878[i] = allocMem(sizeof(HwV878));
-               sprintf(buf, "tdc%d", i + NV775S);
-               if (0 > conHwV878(v878[i], buf, param)) {
-                       msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
-                       return NULL;
-               }
-               ((Modules *) my->specific)->v878[i] = v878[i];
-       }
 
        desParam(param);
        return my;
@@ -140,154 +67,34 @@ Hardware *newHardware(void)
 void deleteHardware(Hardware *my)
 {
        int i;
-       HwDtu *dtu = ((Modules *) my->specific)->dtu;
-       HwSis3801 *sis3801 = ((Modules *) my->specific)->sis3801;
-       HwV488 *adc0 = ((Modules *) my->specific)->adc0;
-       HwV488 *tdc8 = ((Modules *) my->specific)->tdc8;
-       HwV488 *tdc9 = ((Modules *) my->specific)->tdc9;
-       HwV775 **v775 = ((Modules *) my->specific)->v775;
-       HwV878 **v878 = ((Modules *) my->specific)->v878;
 
-       for (i = 0; i < NV878S; i++) {
-               desHwV878(v878[i]);
-               freeMem(v878[i]);
+       for (i = 0; i < NTIPS; i++) {
+               desHwTip(my->tip[i]);
+               freeMem(my->tip[i]);
        }
-       for (i = 0; i < NV775S; i++) {
-               desHwV775(v775[i]);
-               freeMem(v775[i]);
-       }
-       desHwV488(tdc9);
-       freeMem(tdc9);
-       desHwV488(tdc8);
-       freeMem(tdc8);
-       desHwV488(adc0);
-       freeMem(adc0);
-       desHwSis3801(sis3801);
-       freeMem(sis3801);
-       desHwDtu(dtu);
-       freeMem(dtu);
 
        freeMem(my);
 }
 
 void Hardware_waitForTrigger(Hardware *my, void *subEvt)
 {
-       int i;
-       HwDtu *dtu = ((Modules *) my->specific)->dtu;
-       HwV775 **v775 = ((Modules *) my->specific)->v775;
-       HwV878 **v878 = ((Modules *) my->specific)->v878;
-       HwV488 *adc0 = ((Modules *) my->specific)->adc0;
-       HwV488 *tdc8 = ((Modules *) my->specific)->tdc8;
-       HwV488 *tdc9 = ((Modules *) my->specific)->tdc9;
-       static int nextId = SubEvtId_trigCode;
-       static int doReadOut;
-       static UInt1 trigTag = 0;
-       static unsigned long trigNr = 0;
-
-       switch (nextId) {
-       case SubEvtId_trigCode:
-               do {
-                       while (HwDtu_isEmpty(dtu)) {
-#if 0
-                               struct timespec tS, *t = &tS;
-                               t->tv_sec = 0;
-                               t->tv_nsec = 020000000;
-                               nanosleep(t, NULL);
-#endif
-                       }
-                       HwDtu_read(dtu);
-                       msglog(LOG_DEBUG, "Dtu: tag: 0x%02x, code: 0x%02x\n", dtu->trigTag, dtu->trigCode);
-                       switch (dtu->trigCode & 0x7) {
-                       case 0x02:
-                       case 0x03:
-                               trigTag = dtu->trigTag;
-                               doReadOut = 0;
-                               break;
-                       default:
-                               doReadOut = 1;
-                               break;
-                       }
-               } while (!doReadOut);
-               SubEvt_setSize(subEvt, SubEvt_hdrSize());
-               SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
-               SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag);
-               SubEvt_setId(subEvt, SubEvtId_trigCode);
-               nextId = SubEvtId_tofTest;
-               break;
-       case SubEvtId_tofTest:
-               do {
-#if 0
+       if (HwTip_isEmpty(my->tip[my->tipToRead])) {
+               HwTip_requestBuffer(my->tip[my->tipToRead]);
+               while (HwTip_isBusy(my->tip[my->tipToRead])) {
+#if 1
                        struct timespec tS, *t = &tS;
                        t->tv_sec = 0;
                        t->tv_nsec = 020000000;
                        nanosleep(t, NULL);
 #endif
-                       doReadOut = 1;
-                       for (i = 0; i < NV775S; i++) {
-                               doReadOut &= !HwV775_isEmpty(v775[i]);
-                       }
-                       for (i = 0; i < NV878S; i++) {
-                               doReadOut &= !HwV878_isEmpty(v878[i]);
-                       }
-               } while (!doReadOut);
-               SubEvt_setSize(subEvt, SubEvt_hdrSize());
-               SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
-               SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag);
-               SubEvt_setId(subEvt, SubEvtId_tofTest);
-               nextId = SubEvtId_trigInfo;
-               break;
-       case SubEvtId_trigInfo:
-               SubEvt_setSize(subEvt, SubEvt_hdrSize());
-               SubEvt_setDecoding(subEvt, SubEvtDecoding_16bitData);
-               SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag);
-               SubEvt_setId(subEvt, SubEvtId_trigInfo);
-               nextId = SubEvtId_trigCode;
-               trigTag = dtu->trigTag;
-               trigNr++;
-               break;
+               }
        }
 }
 
-static void readoutDummy(Hardware *my, void *subEvt)
-{
-       HwDtu *dtu = ((Modules *) my->specific)->dtu;
-       UInt4 *data = SubEvt_data(subEvt);
-       UInt4 *first = data;
-
-       *data++ = dtu->trigCode;
-
-       SubEvt_setSize(subEvt, SubEvt_size(subEvt) + sizeof(UInt4) * (data - first));
-}
-
-
 void Hardware_readout(Hardware *my, void *subEvt)
 {
-       int i;
-       HwDtu *dtu = ((Modules *) my->specific)->dtu;
-       HwSis3801 *sis3801 = ((Modules *) my->specific)->sis3801;
-       HwV488 *adc0 = ((Modules *) my->specific)->adc0;
-       HwV488 *tdc8 = ((Modules *) my->specific)->tdc8;
-       HwV488 *tdc9 = ((Modules *) my->specific)->tdc9;
-       HwV775 **v775 = ((Modules *) my->specific)->v775;
-       HwV878 **v878 = ((Modules *) my->specific)->v878;
-
-       switch (SubEvt_pureId(subEvt)) {
-       case SubEvtId_trigCode:
-               readoutDummy(my, subEvt);
-               break;
-       case SubEvtId_tofTest:
-               for ( i = 0; i < NV775S; i++) {
-                       HwV775_readData(v775[i], subEvt);
-               }
-               for (i = 0; i < NV878S; i++) {
-                       HwV878_readData(v878[i], subEvt);
-               }
-               break;
-       case SubEvtId_trigInfo:
-               HwV488_readData(adc0, subEvt);
-               HwV488_readData(tdc8, subEvt);
-               HwV488_readData(tdc9, subEvt);
-               HwSis3801_readData(sis3801, subEvt);
-               break;
+       HwTip_readSubEvt(my->tip[my->tipToRead], subEvt);
+       if (++my->tipToRead == NTIPS ) {
+               my->tipToRead = 0;
        }
 }