-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;
{
Hardware *my;
Param paramS, *param = ¶mS;
- 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;
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;
}
}