From: hades Date: Fri, 19 Nov 1999 16:00:08 +0000 (+0000) Subject: Initial revision X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=e82f59b2d37c306e7cb5e5f32f429807a1558fef;p=daqdata.git Initial revision --- diff --git a/hadaq/hwtbus.c b/hadaq/hwtbus.c new file mode 100644 index 0000000..c3767cf --- /dev/null +++ b/hadaq/hwtbus.c @@ -0,0 +1,130 @@ +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtbus.c,v 1.1 1999-11-19 16:00:08 hades Exp $"; + +#define _POSIX_C_SOURCE 199309L +#include + +#include +#include +#include +#include + +#include "param.h" +#include "subevt.h" +#include "hwdtu.h" + +#define NSUBEVTS 1 + +struct HardwareS { + size_t maxSubEvtSizes[NSUBEVTS]; + UInt4 subEvtIds[NSUBEVTS]; + HwDtu *dtu; +}; + +#include "hardware.h" + +size_t Hardware_maxSubEvtSize(const Hardware *my, int i) +{ + return my->maxSubEvtSizes[i]; +} + +UInt4 Hardware_subEvtId(const Hardware *my, int i) +{ + UInt4 retVal; + + if (i >= NSUBEVTS) { + retVal = SubEvtId_invalid; + } else { + retVal = my->subEvtIds[i]; + } + return retVal; +} + +Hardware *newHardware(void) +{ + Hardware *my; + Param paramS, *param = ¶mS; + HwDtu *dtu; + + if (0 > conParam(param, "param.tcl")) { + msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } + my = allocMem(sizeof(Hardware)); + + my->subEvtIds[0] = SubEvtId_trigCode; + my->maxSubEvtSizes[0] = SubEvt_hdrSize() + 2000 * sizeof(UInt4); + + my->dtu = allocMem(sizeof(HwDtu)); + if (0 > conHwDtu(my->dtu, "dtu", param)) { + msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } + + desParam(param); + return my; +} + +void deleteHardware(Hardware *my) +{ + desHwDtu(my->dtu); + freeMem(my->dtu); + + freeMem(my); +} + +void Hardware_waitForTrigger(Hardware *my) +{ + int doReadOut; + + do { + while (HwDtu_isEmpty(my->dtu)) { +#if 0 + struct timespec tS, *t = &tS; + t->tv_sec = 0; + t->tv_nsec = 020000000; + nanosleep(t, NULL); +#endif + } + HwDtu_read(my->dtu); + msglog(LOG_DEBUG, "Dtu: tag: 0x%02x, code: 0x%02x\n", my->dtu->trigTag, my->dtu->trigCode); + switch (my->dtu->trigCode & 0x7) { + case 0x02: + case 0x03: + doReadOut = 0; + break; + default: + doReadOut = 1; + break; + } + } while (!doReadOut); +} + +void Hardware_readout(Hardware *my, int i, void *subEvt) +{ + UInt4 *data = SubEvt_data(subEvt); + UInt4 *first = data; + size_t size; + + switch (my->subEvtIds[i]) { + case SubEvtId_trigCode: + SubEvt_setSize(subEvt, SubEvt_hdrSize()); + SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); + SubEvt_setTrigNr(subEvt, my->dtu->trigTag); + SubEvt_setId(subEvt, SubEvtId_trigCode); + *data++ = my->dtu->trigCode; + + if (RAND_MAX / rand() > 2) { + data += (int) ((500.0 * rand()) / RAND_MAX); + data += (int) ((500.0 * rand()) / RAND_MAX); + data += (int) ((500.0 * rand()) / RAND_MAX); + data += (int) ((500.0 * rand()) / RAND_MAX); + } + break; + } + size = SubEvt_size(subEvt) + sizeof(UInt4) * (data - first); + if (size > my->maxSubEvtSizes[i]) { + SubEvt_setId(subEvt, SubEvt_id(subEvt) | 0x80000000); + size = my->maxSubEvtSizes[i]; + } + SubEvt_setSize(subEvt, size); +}