--- /dev/null
+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 <unistd.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/time.h>
+
+#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);
+}