}
Worker_initEnd(worker);
- system("ctuctrl reset");
- system("ctuctrl rate 1");
- system("ctuctrl start");
+ sleep(1);
+ system("/home/hades/bin/ctuctrl reset");
+ system("/home/hades/bin/ctuctrl rate 1");
+ system("/home/hades/bin/ctuctrl start");
(*ctuEnabled) = 1;
if (0 == setjmp(terminateJmp)) {
sleep(32767);
}
- system("ctuctrl stop");
+ system("/home/hades/bin/ctuctrl stop");
(*ctuEnabled) = 0;
Worker_fini(worker);
static const int evtBlockSize = 8 * 1024;
enum EvtId {
- EvtId_data,
+ EvtId_data = 1,
EvtId_runStart = 0x00010002,
EvtId_runStop = 0x00010003
};
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.1 1999-08-31 10:37:23 muench Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrace.c,v 6.2 1999-11-01 08:35:36 muench Exp $";
#define _POSIX_C_SOURCE 199309L
#include <unistd.h>
Rc_ClrCtrs(my->rc);
Rc_writeStatusid(my->rc, 0x55);
Rc_setMemfull(my->rc, 0x1f4);
- Rc_writeSedec_high(my->rc, 0x0002);
- Rc_writeSedec_low(my->rc, 0x0001);
- Rc_writeSeid_high(my->rc, 0x0000);
- Rc_writeSeid_low(my->rc, 113);
Rc_setMsel(my->rc);
/* Rc_writeMskreg(my->rc, 0xff); */
Rc_clrMsel(my->rc);
strcpy(my->name, name);
+ my->trigNr = 0;
+
cardBase = Param_getVal(param, my->name, "cardbase");
my->rc = allocMem(sizeof(Rc));
int firstAddr;
int size;
- if (my->currAddr == 0) {
- size = endOfData(my) - my->currAddr;
- if (0 > LBma_read(my->lbma, 0, 0, size)) {
- msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
- }
+ size = Rc_readMem(my->rc, my->currAddr);
+#if 1
+ if ( 1 || my->currAddr == 0) {
+ struct timespec tS, *t = &tS;
+ t->tv_sec = 0;
+ t->tv_nsec = 020000000;
+ nanosleep(t, NULL);
}
- size = *(my->buf + my->currAddr / 4);
+#endif
+ msglog(LOG_DEBUG, "size: %x, currAddr: %x\n", size, my->currAddr);
/* copy one sub evt from RC to memory */
- memcpy(data, my->buf + my->currAddr / 4, size);
- my->currAddr += size;
- data += size / 4;
+ for (firstAddr = my->currAddr; my->currAddr - firstAddr < size; my->currAddr += 4) {
+ *data++ = Rc_readMem(my->rc, my->currAddr);
+ }
/* normal extension of trigger tag */
- if (SubEvt_trigNr(subEvt) < (my->trigNr & 0xff)) {
- my->trigNr += 0x100;
- }
- my->trigNr = (my->trigNr & 0xffffff00) | (SubEvt_trigNr(subEvt) & 0x000000ff);
- SubEvt_setTrigNr(subEvt, my->trigNr);
+ SubEvt_setTrigNr(subEvt, my->trigNr << 8 | SubEvt_trigNr(subEvt));
+ my->trigNr++;
/* align currAddr to next page */
if ((my->currAddr & 0xff) != 0) {
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.2 1999-09-05 20:23:22 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.3 1999-11-01 08:35:36 muench Exp $";
#define _POSIX_C_SOURCE 199309L
#include <unistd.h>
#include "subevt.h"
#include "hwrace.h"
+/* Set number of RCs here */
+#define NRACES 1
+
struct HardwareS {
size_t maxSubEvtSize;
- void *specific;
+ HwRace *race[NRACES];
+ unsigned raceToRead;
};
#include "hardware.h"
-#define NRACES 2
-
-typedef struct ModulesS {
- HwRace *race[NRACES];
-}
-
size_t Hardware_maxSubEvtSize(const Hardware *my)
{
return my->maxSubEvtSize;
{
Hardware *my;
Param paramS, *param = ¶mS;
- HwRace *race;
int i;
if (0 > conParam(param, "param.tcl")) {
return NULL;
}
my = allocMem(sizeof(Hardware));
- my->specific = allocMem(sizeof(Modules));
- my->maxSubEvtSize = SubEvt_hdrSize() + (2564 * sizeof(UInt4));
+ my->maxSubEvtSize = SubEvt_hdrSize() + (0x2010 * sizeof(UInt4));
+ my->raceToRead = 0;
- (HwRace *) my->specific = race;
for (i = 0; i < NRACES; i++) {
char buf[16];
- race[i] = allocMem(sizeof(HwRace));
+ my->race[i] = allocMem(sizeof(HwRace));
sprintf(buf, "race%d", i);
- if (0 > conHwRace(race[i], buf, param)) {
+ if (0 > conHwRace(my->race[i], buf, param)) {
msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
return NULL;
}
- ((Modules *) my->specific)->race[i] = race[i];
}
void deleteHardware(Hardware *my)
{
- HwRace **race = ((Modules *) my->specific)->race;
int i;
for (i = 0; i < NRACES; i++) {
- desHwRace(race[i]);
- freeMem(race[i]);
+ desHwRace(my->race[i]);
+ freeMem(my->race[i]);
}
freeMem(my);
}
-void Hardware_waitForTrigger(const Hardware *my, void *subEvt)
+void Hardware_waitForTrigger(Hardware *my, void *subEvt)
{
- HwRace **race = ((Modules *) my->specific)->race;
-
- if (HwRace_isEmpty(race)) {
- HwRace_requestBuffer(race);
- while (HwRace_isBusy(race)) {
+ if (HwRace_isEmpty(my->race[my->raceToRead])) {
+ HwRace_requestBuffer(my->race[my->raceToRead]);
+ while (HwRace_isBusy(my->race[my->raceToRead])) {
#if 1
struct timespec tS, *t = &tS;
t->tv_sec = 0;
}
}
-void Hardware_readout(const Hardware *my, void *subEvt)
+void Hardware_readout(Hardware *my, void *subEvt)
{
- HwRace **race = ((Modules *) my->specific)->race;
-
- HwRace_readSubEvt(race, subEvt);
+ HwRace_readSubEvt(my->race[my->raceToRead], subEvt);
+ if (++my->raceToRead == NRACES ) {
+ my->raceToRead = 0;
+ }
}
-
#include <assert.h>
#include <string.h>
#include "ipc_basis.h"
#include "hwship.h"
-#define SHIP_SUBEVTSIZE (4 * 2 * 386)
-
-static int bankRequested(HwShip *my)
-{
+static int bankRequested(HwShip *my) {
UInt2 val;
val = LVme_tstBitW(my->lvme, LVL2_STAT_READ, 6);
return val;
}
-static int bankConfirmed(HwShip *my)
-{
+static int bankConfirmed(HwShip *my) {
UInt2 val;
val = LVme_tstBitW(my->lvme, LVL2_STAT_READ, 8);
return val;
}
-static int endOfData(HwShip *my)
-{
- return ((LVme_getL(my->lvme, LVL2_OFFSET) & 0x7f) + 1) * SHIP_SUBEVTSIZE + LVL2_OFFSET;
+static int endOfData(HwShip *my) {
+ return (LVme_getL(my->lvme, LVL2_OFFSET) - 2 + LVL2_OFFSET);
}
-static void standbyMode(HwShip *my)
-{
+static void standbyMode(HwShip *my) {
LVme_setW(my->lvme, ID_CTR_ACCESS_ON, 0);
LVme_setW(my->lvme, ID_CTR_STANDBY_MODE, 0);
LVme_setW(my->lvme, ID_CTR_SW_TO_LUT12, 0);
LVme_setW(my->lvme, ADDON_ACCESS_OFF, 0);
}
-static void acquireMode(HwShip *my)
-{
+static void acquireMode(HwShip *my) {
LVme_setW(my->lvme, ID_CTR_ACCESS_ON, 0);
LVme_setW(my->lvme, ID_CTR_STANDBY_MODE, 0);
LVme_setW(my->lvme, ID_CTR_SW_TO_LUT12, 0);
LVme_setW(my->lvme, LVL2_ACCESS_ON, 0);
}
-int conHwShip(HwShip *my, const char *name, const Param *param)
+int conHwShip(HwShip * my, const char *name, const Param *param)
{
- unsigned long cardBase;
- int i;
-
- assert(my != NULL);
-
- strcpy(my->name, name);
-
- cardBase = Param_getVal(param, my->name, "cardbase");
- my->lvme = allocMem(sizeof(LVme));
- if (0 > conLVme(my->lvme, cardBase, 0x400000UL, 0x39UL, 0, 0)) {
- msglog(LOG_ERR, "HwShip on %p not found\n", cardBase);
- return -1;
- }
- standbyMode(my);
- acquireMode(my);
- return 0;
-}
+ unsigned long cardBase;
+ int i;
-void desHwShip(HwShip *my)
-{
- standbyMode(my);
- desLVme(my->lvme);
-}
+ assert(my != NULL);
-void HwShip_requestBuffer(HwShip *my)
-{
- int i;
+ strcpy(my->name, name);
- msglog(LOG_DEBUG, "%s:%d:%x\n", __FILE__, __LINE__, LVme_getW(my->lvme, LVL2_STAT_READ));
- while ((LVme_getW(my->lvme, LVL2_STAT_READ) >> 9 & 0x7f) < 2) {
- }
- msglog(LOG_DEBUG, "%s:%d:%x\n", __FILE__, __LINE__, LVme_getW(my->lvme, LVL2_STAT_READ));
- i = bankRequested(my) == 1 ? 0 : 1;
- msglog(LOG_DEBUG, "%s:%d:%x\n", __FILE__, __LINE__, i);
- LVme_setW(my->lvme, LVL2_STAT_WRITE, i << 1);
+ cardBase = Param_getVal(param, my->name, "cardbase");
+ my->lvme = allocMem(sizeof(LVme));
+ if (0 > conLVme(my->lvme, cardBase, 0x400000UL, 0x39UL, 0, 0)) {
+ msglog(LOG_ERR, "HwShip on %p not found\n", cardBase);
+ return -1;
+ }
+ my->trigNr = 0;
- my->currAddr = 0x18 + LVL2_OFFSET;
+ standbyMode(my);
+ acquireMode(my);
+ return 0;
}
-int HwShip_isBusy(HwShip *my)
+void desHwShip(HwShip * my)
{
- msglog(LOG_DEBUG, "%s:%d:%x\n", __FILE__, __LINE__, LVme_getW(my->lvme, LVL2_STAT_READ));
- return bankRequested(my) != bankConfirmed(my);
+ standbyMode(my);
+ desLVme(my->lvme);
}
-int HwShip_isEmpty(HwShip *my)
-{
- return my->currAddr >= endOfData(my);
+void HwShip_requestBuffer(HwShip *my) {
+ int i;
+#if 0
+ static UInt1 oldBankConfirmed;
+
+ if (oldBankConfirmed == bankConfirmed(my)) {
+ msglog(LOG_ERR, "same bank twice: 0x%02x\n", oldBankConfirmed);
+ }
+ oldBankConfirmed = bankConfirmed(my);
+#endif
+
+ msglog(LOG_DEBUG, "wait for data\n");
+ while ((LVme_getW(my->lvme, LVL2_STAT_READ) >> 9 & 0x7f) < 5) {
+#if 1
+ struct timespec tS, *t = &tS;
+ t->tv_sec = 0;
+ t->tv_nsec = 020000000;
+ nanosleep(t, NULL);
+#endif
+ }
+ msglog(LOG_DEBUG, "data available\n");
+ i = bankRequested(my) == 1 ? 0 : 1;
+ LVme_setW(my->lvme, LVL2_STAT_WRITE, i << 1);
+
+ my->currAddr = 0x10 + LVL2_OFFSET;
}
-int HwShip_readSubEvt(HwShip *my, void *subEvt)
-{
- UInt4 *data = (UInt4 *) subEvt;
- static UInt1 trigTag;
- int firstAddr;
- int size;
-
- size = SHIP_SUBEVTSIZE;
-
- if ((trigTag + 2) != (LVme_getL(my->lvme, my->currAddr) & 0xff)) {
- msglog(LOG_ERR, "0x%08x != 0x%08x\n", trigTag + 2, LVme_getL(my->lvme, my->currAddr));
- }
- trigTag = LVme_getL(my->lvme, my->currAddr);
-
- if (LVme_getL(my->lvme, my->currAddr) & 0xff != LVme_getL(my->lvme, my->currAddr + 4 * 388) & 0xff) {
- msglog(LOG_ERR, "0x%08x != 0x%08x\n", LVme_getL(my->lvme, my->currAddr), LVme_getL(my->lvme, my->currAddr + 4 * 388));
- }
- *data++ = size + 16;
- *data++ = 0x00020001;
- *data++ = 456;
- *data++ = LVme_getL(my->lvme, my->currAddr);
- /* copy one sub evt from RC to memory */
- for (firstAddr = my->currAddr; my->currAddr - firstAddr < size; my->currAddr += 4) {
- *data++ = LVme_getL(my->lvme, my->currAddr);
- }
- return 0;
+int HwShip_isBusy(HwShip *my) {
+ return bankRequested(my) != bankConfirmed(my);
+}
+
+int HwShip_isEmpty(HwShip *my) {
+ return my->currAddr >= endOfData(my);
+}
+
+int HwShip_readSubEvt(HwShip *my, void *subEvt) {
+ UInt4 *data = (UInt4 *)subEvt;
+ int firstAddr;
+ int size;
+ UInt1 trigTag;
+ static UInt1 oldTrigTag;
+ UInt1 checkTrigTag;
+
+ checkTrigTag = LVme_getL(my->lvme, my->currAddr + 0x610);
+
+ size = LVme_getL(my->lvme, my->currAddr);
+ my->currAddr += 4;
+ size -= 4;
+
+ trigTag = LVme_getL(my->lvme, my->currAddr) & 0xff;
+#if 0
+ oldTrigTag += 1;
+ if (oldTrigTag != trigTag) {
+ msglog(LOG_ERR, "trigTag sequence: 0x%02x != 0x%02x\n", oldTrigTag, trigTag);
+ oldTrigTag = trigTag;
+ }
+#endif
+ my->currAddr += 4;
+ size -= 4;
+
+#if 1
+ if (checkTrigTag != trigTag) {
+ msglog(LOG_ERR, "trigTag consistency: 0x%02x != 0x%02x\n", checkTrigTag, trigTag);
+ }
+#endif
+ my->currAddr += 4;
+ size -= 4;
+
+ /* BUGBUG workaround missing subEvtHdr in Hardware, set const in Software */
+ *data++ = size + 16;
+ *data++ = 0x00020001;
+ *data++ = 300 + my->name[4] - '0';
+ *data++ = trigTag;
+
+ /* copy one sub evt from RC to memory */
+ for (firstAddr = my->currAddr; my->currAddr - firstAddr < size; my->currAddr += 4) {
+ *data++ = LVme_getL(my->lvme, my->currAddr);
+ }
+
+ /* BUGBUG if soft & hardware trigNr differ, HW gets precedence */
+ trigTag = SubEvt_trigNr(subEvt);
+#if 0
+ if (trigTag != (my->trigNr & 0xff)) {
+ msglog(LOG_EMERG,"readSubEvt trigTag differ\n");
+ }
+#endif
+ if (trigTag < (my->trigNr & 0xff)) {
+ my->trigNr += 0x100;
+ }
+ my->trigNr = (my->trigNr & 0xffffff00) | trigTag;
+ SubEvt_setTrigNr(subEvt, my->trigNr << 8 | trigTag);
+ my->trigNr++;
+
+ return 0;
}
char name[16];
LVme *lvme;
int currAddr;
+ unsigned trigNr;
} HwShip;
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.2 1999-11-01 08:33:00 muench 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 "hwship.h"
+/* Set number of RCs here */
+#define NSHIPS 2
+
struct HardwareS {
size_t maxSubEvtSize;
- void *specific;
+ HwShip *ship[NSHIPS];
+ unsigned shipToRead;
};
#include "hardware.h"
{
Hardware *my;
Param paramS, *param = ¶mS;
- HwShip *ship;
int i;
if (0 > conParam(param, "param.tcl")) {
return NULL;
}
my = allocMem(sizeof(Hardware));
- my->specific = allocMem(sizeof(ship));
- my->maxSubEvtSize = SubEvt_hdrSize();
+ my->maxSubEvtSize = SubEvt_hdrSize() + (0x2010 * sizeof(UInt4));
+ my->shipToRead = 0;
- ship = allocMem(sizeof(HwShip));
- if (0 > conHwShip(ship, "ship", param)) {
- msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
- return NULL;
+ for (i = 0; i < NSHIPS; i++) {
+ char buf[16];
+
+ my->ship[i] = allocMem(sizeof(HwShip));
+ sprintf(buf, "ship%d", i);
+ if (0 > conHwShip(my->ship[i], buf, param)) {
+ msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno));
+ return NULL;
+ }
}
- (HwShip *) my->specific = ship;
desParam(param);
void deleteHardware(Hardware *my)
{
- HwShip *ship = (HwShip *) my->specific;
+ int i;
- desHwShip(ship);
- freeMem(ship);
+ for (i = 0; i < NSHIPS; i++) {
+ desHwShip(my->ship[i]);
+ freeMem(my->ship[i]);
+ }
freeMem(my);
}
-void Hardware_waitForTrigger(const Hardware *my, void *subEvt)
+void Hardware_waitForTrigger(Hardware *my, void *subEvt)
{
- HwShip *ship = (HwShip *) my->specific;
-
- if (HwShip_isEmpty(ship)) {
- msglog(LOG_DEBUG, "switchRequest\n");
- HwShip_requestBuffer(ship);
- while (HwShip_isBusy(ship)) {
-#if 0
+ if (HwShip_isEmpty(my->ship[my->shipToRead])) {
+ HwShip_requestBuffer(my->ship[my->shipToRead]);
+ while (HwShip_isBusy(my->ship[my->shipToRead])) {
+#if 1
struct timespec tS, *t = &tS;
t->tv_sec = 0;
t->tv_nsec = 020000000;
nanosleep(t, NULL);
#endif
}
- msglog(LOG_DEBUG, "switchComplete\n");
}
}
-void Hardware_readout(const Hardware *my, void *subEvt)
+void Hardware_readout(Hardware *my, void *subEvt)
{
- HwShip *ship = (HwShip *) my->specific;
-
- HwShip_readSubEvt(ship, subEvt);
- msglog(LOG_DEBUG, "subEvt read\n");
+ HwShip_readSubEvt(my->ship[my->shipToRead], subEvt);
+ if (++my->shipToRead == NSHIPS ) {
+ my->shipToRead = 0;
+ }
}
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.6 1999-09-05 11:31:37 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.7 1999-11-01 08:33:00 muench Exp $";
#define _POSIX_C_SOURCE 199309L
#include <unistd.h>
#include "hardware.h"
-#define NV775S 2
+#define NV775S 4
#define NV878S 4
typedef struct ModulesS {
HwV878 *v878[NV878S];
int i;
+#if 0
+ system("cd /home/hades/ht99/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;
freeMem(my);
}
-void Hardware_waitForTrigger(const Hardware *my, void *subEvt)
+void Hardware_waitForTrigger(Hardware *my, void *subEvt)
{
HwDtu *dtu = ((Modules *) my->specific)->dtu;
static int nextId = SubEvtId_trigCode;
}
HwDtu_read(dtu);
msglog(LOG_DEBUG, "Dtu: tag: 0x%02x, code: 0x%02x\n", dtu->trigTag, dtu->trigCode);
- switch (dtu->trigCode) {
+ switch (dtu->trigCode & 0x7) {
case 0x02:
case 0x03:
trigTag = dtu->trigTag;
SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag);
SubEvt_setId(subEvt, SubEvtId_trigCode);
- 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_tofTest;
break;
case SubEvtId_tofTest:
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++;
}
-void Hardware_readout(const Hardware *my, void *subEvt)
+void Hardware_readout(Hardware *my, void *subEvt)
{
int i;
HwDtu *dtu = ((Modules *) my->specific)->dtu;
case SubEvtId_trigCode:
readoutDummy(subEvt);
break;
- case SubEvtId_trigInfo:
- HwV488_readData(v556, subEvt);
- HwV488_readData(v488, subEvt);
- HwSis3801_readData(sis3801, subEvt);
- break;
case SubEvtId_tofTest:
for (i = 0; i < NV775S; i++) {
HwV775_readData(v775[i], subEvt);
HwV878_readData(v878[i], subEvt);
}
break;
+ case SubEvtId_trigInfo:
+ HwV488_readData(v556, subEvt);
+ HwV488_readData(v488, subEvt);
+ HwSis3801_readData(sis3801, subEvt);
+ break;
}
}
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv488.c,v 1.2 1999-09-05 11:31:55 hades Exp $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv488.c,v 1.3 1999-11-01 08:33:00 muench Exp $";
#define _POSIX_C_SOURCE 199309L
#include <unistd.h>
#include "param.h"
#include "hwv488.h"
+#define V556_BROKEN
+
int conHwV488(HwV488 * my, const char *name, const Param *param)
{
unsigned long cardBase;
UInt1 trigTag;
msglog(LOG_DEBUG, "V488 Readout\n");
+#ifdef V556_BROKEN
+ if (LVme_getW(my->lvme, V488_SERIAL) != 0x2005) {
+ *data++ = 0x1007;
+ } else {
+ *data++ = LVme_getW(my->lvme, V488_SERIAL);
+ }
+#else
*data++ = LVme_getW(my->lvme, V488_SERIAL);
+#endif
if (!HwV488_isEmpty(my)) {
*data++ = hdr = LVme_getW(my->lvme, V488_OUT_BUF);
if ((hdr & 0x8000) != 0x8000) {
set dtu(cardbase) 0x44500000
-set tdc0(cardbase) 0x22020000
+set tdc0(cardbase) 0x22000000
set tdc0(threshold00) 0
set tdc0(threshold01) 0
set tdc0(threshold02) 0
set tdc0(vset) 255
set tdc0(voff) 0
-set tdc1(cardbase) 0x22040000
+set tdc1(cardbase) 0x22020000
set tdc1(threshold00) 0
set tdc1(threshold01) 0
set tdc1(threshold02) 0
set tdc1(vset) 255
set tdc1(voff) 0
-set tdc2(cardbase) 3993239552 ;# 0xee000000
+set tdc2(cardbase) 0x22040000
set tdc2(threshold00) 0
set tdc2(threshold01) 0
set tdc2(threshold02) 0
set tdc2(vset) 254
set tdc2(voff) 0
-set tdc3(cardbase) 3993370624 ;# 0xee000000
+set tdc3(cardbase) 0x22060000
set tdc3(threshold00) 0
set tdc3(threshold01) 0
set tdc3(threshold02) 0
set tdc8(ctrl) 0x00ff
set tdc8(thrl) 1
set tdc8(thrh) 198
-set tdc8(range) 192 ;# 0 = 90ns, 224 = 770ns
+set tdc8(range) 144 ;# 0 = 90ns, 224 = 770ns
set adc0(cardbase) 0x000000
set adc0(ctrl) 0x00ff