From: muench Date: Wed, 6 Oct 1999 17:02:06 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=ce972db8927a6ad0708c9acf6cd2e47e11a0e24f;p=daqdata.git *** empty log message *** --- diff --git a/hadaq/Makefile b/hadaq/Makefile index a020140..2e82d84 100644 --- a/hadaq/Makefile +++ b/hadaq/Makefile @@ -6,11 +6,11 @@ #DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT # UNIX w/o ATM -CC = c89 -RPCGEN = rpcgen -LOADLIBES = -L/usr/local/lib/ -lhadesstd -llvme -lrt -ltk -lX11 -ltcl -lm -INCLUDES = -I/usr/local/include -I/usr/fore/include -DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM +#CC = c89 +#RPCGEN = rpcgen +#LOADLIBES = -L/usr/local/lib/ -lhadesstd -llvme -lrt -ltk -lX11 -ltcl -lm +#INCLUDES = -I/usr/local/include -I/usr/fore/include +#DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM # Linux #CC = gcc @@ -20,11 +20,11 @@ DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM #DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DHADESSTD_NGETOPT -DNOATM # LynxOS -#CC = gcc -#RPCGEN = rpcgen -#LOADLIBES = -L/usr/local/lib -L$(HOME)/lib/$(SYSTYPE) -lhadesstd -llvme -ltcl -lm -lrpc -lnetinet -L/lib/ces -lvme -lbma -luio -#INCLUDES = -I/usr/local/include -I$(HOME)/include -#DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT -DNOATM +CC = gcc +RPCGEN = rpcgen +LOADLIBES = -L/usr/local/lib -L$(HOME)/lib/$(SYSTYPE) -lhadesstd -llvme -ltcl -lm -lrpc -lnetinet -L/lib/ces -lvme -lbma -luio +INCLUDES = -I/usr/local/include -I$(HOME)/include +DEFINES = -UNDEBUG -DHADESSTD_NEXITSTAT # LynxOS #CC = gcc diff --git a/hadaq/evtbuild.c b/hadaq/evtbuild.c index d982d19..108dc30 100644 --- a/hadaq/evtbuild.c +++ b/hadaq/evtbuild.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.5 1999-09-09 14:54:44 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.6 1999-10-06 17:02:06 muench Exp $"; #define _XOPEN_SOURCE #include @@ -166,7 +166,7 @@ int main(int argc, char *argv[]) outDev = "null"; priority = 0; runNr = time(NULL); - queueSize = 100 * 1024; + queueSize = 10 * 1024; while ((i = getopt(argc, argv, "am:f:r:s:o:d:p:v:")) != -1) { switch (i) { @@ -248,14 +248,14 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } if (nrOfMsgs == 0) { - /* - no '-m' option was on command line, we assume that the readout task - (daq_readout) is running on the same node and communicates directly - via shared memory */ + /* + no '-m' option was on command line, we assume that the readout task + (daq_readout) is running on the same node and communicates directly + via shared memory */ shmTrans = allocMem(sizeof(ShmTrans *)); hadTuQueue = allocMem(sizeof(HadTuQueue *)); - shmTrans[0] = ShmTrans_create("subevtqueue", 2 * queueSize); + shmTrans[0] = ShmTrans_create("subevtqueue", 100 * queueSize); hadTuQueue[0] = NULL; nrOfMsgs = 1; } else { @@ -266,7 +266,7 @@ int main(int argc, char *argv[]) char buf[_POSIX_PATH_MAX]; sprintf(buf, "netqueue%d", i); - shmTrans[i] = ShmTrans_create(buf, 2 * queueSize); + shmTrans[i] = ShmTrans_create(buf, 100 * queueSize); hadTuQueue[i] = NULL; } } @@ -305,22 +305,29 @@ int main(int argc, char *argv[]) if (NULL != (subEvt = HadTuQueue_front(hadTuQueue[i]))) { #ifndef NDEBUG msglog(LOG_DEBUG, "hadTuQueue[%d]: %p = subEvt: %s\n", i, subEvt, SubEvt_2charP(subEvt)); + msglog(LOG_DEBUG, "currTrigNr: 0x%08x, currNrOfSubEvts %d\n", currTrigNr, currNrOfSubEvts); + msglog(LOG_DEBUG, "evtsComplete: %d, evtsDiscarded %d\n", *evtsComplete, *evtsDiscarded); #endif if (i == 0 && currNrOfSubEvts == 0) { - /* upper 24 bit of trigNr should be a sequence */ - (*evtsDiscarded) += (SubEvt_trigNr(subEvt) >> 8) - - ((currTrigNr + 0x100) >> 8); - +#if 0 + if (currTrigNr != 0xffffffff) { + /* upper 24 bit of trigNr should be a sequence */ + (*evtsDiscarded) += (SubEvt_trigNr(subEvt) >> 8) + - ((currTrigNr + 0x100) >> 8); + } +#endif currTrigNr = SubEvt_trigNr(subEvt); } if (SubEvt_id(subEvt) == SubEvtId_trigCode) { - /* BUGBUG, this is indeed no header word */ - Evt_setId(evt, SubEvt_hdrValue(subEvt, 4)); + Evt_setId(evt, SubEvt_dataValue(subEvt, 0)); } if (SubEvt_trigNr(subEvt) == currTrigNr) { evt = Evt_appendSubEvt(evt, subEvt); HadTuQueue_pop(hadTuQueue[i]); currNrOfSubEvts++; + } else if (SubEvt_trigNr(subEvt) < currTrigNr) { + HadTuQueue_pop(hadTuQueue[i]); + /* BUGBUG subevt discarded, not in statistic */ } else { tryNext = 1; } diff --git a/hadaq/hadaq.tcl b/hadaq/hadaq.tcl index fdf7f4b..97d558b 100644 --- a/hadaq/hadaq.tcl +++ b/hadaq/hadaq.tcl @@ -337,6 +337,8 @@ proc updateAcquisitionButtons {} { } proc startAcquisitionCmd {} { + #exec rsh hades19 sh -c {'cd ht99/slow; PATH=$PATH:/usr/local/bin:$HOME/bin; ./tof init'} >&hadaq.log + #exec rsh hades21 sh -c {'cd ht99/slow; PATH=$PATH:/usr/local/bin:$HOME/bin; ./mdc init'} >&hadaq.log group start acquisition updateAcquisitionButtons } @@ -435,6 +437,7 @@ proc loadTapeCmd {} { set tapeInfo(vol) "VOL1ULTRIX HADES 3" exec mt rewind } else { + set tapeInfo(vol) {} exec mt seod exec mt bsf 1 } diff --git a/hadaq/ht99.tcl b/hadaq/ht99.tcl index 64dc30e..0206298 100644 --- a/hadaq/ht99.tcl +++ b/hadaq/ht99.tcl @@ -1,12 +1,24 @@ -agent create hades12 root /home/hades/ht99/daq/hadaq -agent create hades19 hades /home/hades/ht99/daq/hadaq -worker create hades12:evtbuild -a -p -2 -s 2 -m 1 -f runinfo.tcl -worker create hades12:netmem -a -p -1 -m 1 -worker create hades19:memnet -a -p -1 -o 0:50 -w 0 +agent create acheron root /home/hades/ht99/eb/hadaq +agent create hades23 hades /home/hades/ht99/show/hadaq +agent create hades21 hades /home/hades/ht99/mdc/hadaq +agent create hades19 hades /home/hades/ht99/tof/hadaq +worker create acheron:evtbuild -a -p -2 -s 6 -m 3 -f runinfo.tcl +worker create acheron:netmem -a -p -1 -m 3 +worker create hades23:memnet -a -p -1 -o 0:50 -w 9638 +worker create hades23:readout -a -p -2 +worker create hades21:memnet -a -p -1 -o 0:51 -w 175 +worker create hades21:readout -a -p -2 +worker create hades19:memnet -a -p -1 -o 0:52 -w 537 worker create hades19:readout -a -p -2 +worker create hades19:ctrlctu -a -p 0 group create acquisition group create run +group add acquisition hades23:memnet +group add acquisition hades23:readout +group add acquisition hades21:memnet +group add acquisition hades21:readout group add acquisition hades19:memnet group add acquisition hades19:readout -group add run hades12:evtbuild -group add run hades12:netmem +group add acquisition hades19:ctrlctu +group add run acheron:evtbuild +group add run acheron:netmem diff --git a/hadaq/hwmdc.c b/hadaq/hwmdc.c index a07d8fd..f623cb0 100644 --- a/hadaq/hwmdc.c +++ b/hadaq/hwmdc.c @@ -1,15 +1,23 @@ +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.2 1999-10-06 17:02:06 muench Exp $"; #define _POSIX_C_SOURCE 199309L #include + +#include +#include +#include #include #include "param.h" #include "subevt.h" #include "hwsam.h" +#define NSAMS 1 + struct HardwareS { size_t maxSubEvtSize; - void *specific; + HwSam *sam[NSAMS]; + unsigned samToRead; }; #include "hardware.h" @@ -28,24 +36,31 @@ Hardware *newHardware(void) { Hardware *my; Param paramS, *param = ¶mS; - HwSam *sam; int i; +#if 0 + system("cd /home/hades/ht99/slow; mdc 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(sam)); - my->maxSubEvtSize = SubEvt_hdrSize(); + my->maxSubEvtSize = SubEvt_hdrSize() + (2564 * sizeof(UInt4)); + my->samToRead = 0; - sam = allocMem(sizeof(HwSam)); - if (0 > conHwSam(sam, "sam", param)) { - msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); - return NULL; + for (i = 0; i < NSAMS; i++) { + char buf[16]; + + my->sam[i] = allocMem(sizeof(HwSam)); + sprintf(buf, "sam%d", i); + if (0 > conHwSam(my->sam[i], buf, param)) { + msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } } - (HwSam *) my->specific = sam; desParam(param); @@ -54,31 +69,35 @@ Hardware *newHardware(void) void deleteHardware(Hardware *my) { - HwSam *sam = (HwSam *) my->specific; + int i; - desHwSam(sam); - freeMem(sam); + for (i = 0; i < NSAMS; i++) { + desHwSam(my->sam[i]); + freeMem(my->sam[i]); + } freeMem(my); } -void Hardware_waitForTrigger(const Hardware *my, void *subEvt) +void Hardware_waitForTrigger(Hardware *my, void *subEvt) { - HwSam *sam = (HwSam *) my->specific; - - while (HwSam_isBusy(sam) || HwSam_isEmpty(sam)) { + if (HwSam_isEmpty(my->sam[my->samToRead])) { + HwSam_requestBuffer(my->sam[my->samToRead]); + while (HwSam_isBusy(my->sam[my->samToRead])) { #if 1 - struct timespec tS, *t = &tS; - t->tv_sec = 0; - t->tv_nsec = 020000000; - nanosleep(t, NULL); + struct timespec tS, *t = &tS; + t->tv_sec = 0; + t->tv_nsec = 020000000; + nanosleep(t, NULL); #endif + } } } -void Hardware_readout(const Hardware *my, void *subEvt) +void Hardware_readout(Hardware *my, void *subEvt) { - HwSam *sam = (HwSam *) my->specific; - - HwSam_readSubEvt(sam, subEvt); + HwSam_readSubEvt(my->sam[my->samToRead], subEvt); + if (++my->samToRead == NSAMS ) { + my->samToRead = 0; + } } diff --git a/hadaq/hwsam.c b/hadaq/hwsam.c index 5d147c2..098823a 100644 --- a/hadaq/hwsam.c +++ b/hadaq/hwsam.c @@ -1,111 +1,145 @@ - #include #include #include #include -#include "param.h" +#include +#include "subevt.h" #include "sam_defs.h" #include "hwsam.h" #define BUFSIZE 0x1000 -static int bankRequested(HwSam *my) -{ - return LVme_getBitL(my->lvme, CRR, 0); +static int bankRequested(HwSam *my) { + return LVme_tstBitL(my->cram, CRR, 0); } -static int bankConfirmed(HwSam *my) -{ - return LVme_getBitL(my->lvme, VMSR, 0); +static int bankConfirmed(HwSam *my) { + return LVme_tstBitL(my->regs, VMSR, 0); } -static int endOfData(HwSam *my) -{ - int i; +static int endOfData(HwSam *my) { + int i; - i = BUFSIZE * bankRequested(my); - return i + LVme_getL(my->lvme, i); + i = BUFSIZE * bankRequested(my); + return i + LVme_getL(my->cram, i); } -static void standbyMode(HwSam *my) -{ - LVme_clrBitL(my->lvme, KSR, 0); - do { - LVme_setL(my->lvme, CRR, 0); - } while (LVme_getL(my->lvme, CRR) != 0); +static void standbyMode(HwSam *my) { + LVme_clrBitL(my->regs, KSR, 0); + do { + LVme_setL(my->cram, CRR, 0); + } while (LVme_getL(my->cram, CRR) != 0); + my->currAddr = BUFSIZE; } -static void acquireMode(HwSam *my) -{ - LVme_setBitL(my->lvme, KSR, 0); +static void acquireMode(HwSam *my) { + LVme_setBitL(my->regs, KSR, 0); } -int conHwSam(HwSam *my, const char *name, const Param *param) +int conHwSam(HwSam * 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, 0x4c000000, 0x04000000L, 0x09, 0x01000004, 4)) { - msglog(LOG_ERR, "HwSam on %p not found\n", cardBase); - return -1; - } - standbyMode(my); - acquireMode(my); - return 0; + unsigned long cardBase; + int i; + + assert(my != NULL); + + strcpy(my->name, name); + + cardBase = Param_getVal(param, my->name, "cardbase"); + my->cram = allocMem(sizeof(LVme)); + if (0 > conLVme(my->cram, cardBase, 0x10000L, 0x09, 0x0, 4)) { + msglog(LOG_ERR, "HwSam on %p not found\n", cardBase); + return -1; + } + my->regs = allocMem(sizeof(LVme)); + if (0 > conLVme(my->regs, cardBase + 0x01000000, 0x10000L, 0x09, 0x4, 4)) { + msglog(LOG_ERR, "HwSam on %p not found\n", cardBase); + return -1; + } + my->trigNr = 0; + + standbyMode(my); + acquireMode(my); + return 0; } -void desHwSam(HwSam *my) +void desHwSam(HwSam * my) { - standbyMode(my); - desLVme(my->lvme); + standbyMode(my); + desLVme(my->regs); + desLVme(my->cram); } -void HwSam_requestBuffer(HwSam *my) -{ - int i; - - i = bankRequested(my) == 1 ? 0 : 1; - do { - if (i == 1) { - LVme_setBitL(my->lvme, CRR, 0); - } else { - LVme_clrBitL(my->lvme, CRR, 0); - } - } while (LVme_getBitL(my->lvme, CRR) != i); - - my->currAddr = BUFSIZE * bankRequested(my) + 8; +void HwSam_requestBuffer(HwSam *my) { + int i; + + msglog(LOG_DEBUG, "requestBuffer in\n"); + i = bankRequested(my) == 1 ? 0 : 1; + do { + if (i == 1) { + LVme_setBitL(my->cram, CRR, 0); + } else { + LVme_clrBitL(my->cram, CRR, 0); + } + } while (LVme_tstBitL(my->cram, CRR, 0) != i); + + my->currAddr = BUFSIZE * bankRequested(my) + 8; + msglog(LOG_DEBUG, "requestBuffer out\n"); } -int HwSam_isBusy(HwSam *my) -{ - return bankRequested(my) != bankConfirmed(my); +int HwSam_isBusy(HwSam *my) { + return bankRequested(my) != bankConfirmed(my); } -int HwSam_isEmpty(HwSam *my) -{ - return my->currAddr >= endOfData(my); +int HwSam_isEmpty(HwSam *my) { + return my->currAddr >= endOfData(my); } -void *HwSam_nextSubEvt(HwSam *my, void *subEvt) -{ - UInt4 *data = (UInt4 *) subEvt; - int firstAddr; - int size; - - size = 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; +void *HwSam_readSubEvt(HwSam *my, void *subEvt) { + UInt4 *data = (UInt4 *)subEvt; + int firstAddr; + int size; + UInt1 trigTag; + + msglog(LOG_DEBUG, "readSubEvt in\n"); + size = LVme_getL(my->cram, my->currAddr); + msglog(LOG_DEBUG, "readSubEvt currAddr: 0x%08x\n", my->currAddr); + + if (my->currAddr + size > endOfData(my)) { + msglog(LOG_EMERG,"subEvt throw away\n"); + /* create impossible subEvt */ + SubEvt_setSize(subEvt, SubEvt_hdrSize()); + SubEvt_setDecoding(subEvt, SubEvtDecoding_16bitData); + SubEvt_setId(subEvt, SubEvtId_mdc); + SubEvt_setTrigNr(subEvt, 0x00000001); /* impossible with 1:1 */ + my->currAddr = endOfData(my); /* lie you have read whole bank */ + } else { + /* copy one sub evt from RC to memory */ + for (firstAddr = my->currAddr; my->currAddr - firstAddr < size; my->currAddr += 4) { + *data++ = LVme_getL(my->cram, my->currAddr); + } + + msglog(LOG_DEBUG, "readSubEvt subevt: %s\n", SubEvt_2charP(subEvt)); + + /* normal extension of trigger tag */ + trigTag = SubEvt_trigNr(subEvt); + trigTag--; /* BUGBUG Workaround for wrong Tag from HW */ + + /* BUGBUG if soft & hardware trigNr differ, HW gets precedence */ + if (trigTag != (my->trigNr & 0xff)) { + msglog(LOG_EMERG,"readSubEvt trigTag differ\n"); + } + if (trigTag < (my->trigNr & 0xff)) { + my->trigNr += 0x100; + } + my->trigNr = (my->trigNr & 0xffffff00) | trigTag; + SubEvt_setTrigNr(subEvt, my->trigNr << 8 | trigTag); + my->trigNr++; + } + + msglog(LOG_DEBUG, "readSubEvt out\n"); + return 0; } diff --git a/hadaq/hwsam.h b/hadaq/hwsam.h index ad7533a..1ec60ab 100644 --- a/hadaq/hwsam.h +++ b/hadaq/hwsam.h @@ -7,9 +7,11 @@ typedef struct HwSamS { char name[16]; - LVme *lvme; + LVme *cram; + LVme *regs; int bufSize; int currAddr; + int trigNr; } HwSam; diff --git a/hadaq/hwsoft.c b/hadaq/hwsoft.c index 4ff9623..edbf067 100644 --- a/hadaq/hwsoft.c +++ b/hadaq/hwsoft.c @@ -55,7 +55,7 @@ void Hardware_waitForTrigger(Hardware *my, void *subEvt) switch (nextId) { case SubEvtId_trigCode: -#if 1 +#if 0 t->tv_sec = 0; t->tv_nsec = 100000000; nanosleep(t, NULL); @@ -94,11 +94,11 @@ void Hardware_readout(Hardware *my, void *subEvt) *data++ = 0x55aa00FF; *data++ = 0x55aa00FF; *data++ = 0x55aa00FF; -#if 0 - data += (int) ((100.0 * rand()) / RAND_MAX); - data += (int) ((100.0 * rand()) / RAND_MAX); - data += (int) ((100.0 * rand()) / RAND_MAX); - data += (int) ((100.0 * rand()) / RAND_MAX); +#if 1 + data += (int) ((10000.0 * rand()) / RAND_MAX); + data += (int) ((10000.0 * rand()) / RAND_MAX); + data += (int) ((10000.0 * rand()) / RAND_MAX); + data += (int) ((10000.0 * rand()) / RAND_MAX); #endif break; } diff --git a/hadaq/netmem.c b/hadaq/netmem.c index 48b7b35..14108b2 100644 --- a/hadaq/netmem.c +++ b/hadaq/netmem.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.1 1999-08-31 10:37:24 muench Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/netmem.c,v 6.2 1999-10-06 17:02:06 muench Exp $"; #define _XOPEN_SOURCE #include @@ -19,112 +19,112 @@ static jmp_buf terminateJmp; void sigHandler(int sig) { - longjmp(terminateJmp, sig); + longjmp(terminateJmp, sig); } static void usage(const char *progName) { - msglog(LOG_ERR, "Usage: %s -m nrOfMsgs [-p priority]\n", progName); - msglog_usage(); + msglog(LOG_ERR, "Usage: %s -m nrOfMsgs [-p priority]\n", progName); + msglog_usage(); } int main(int argc, char *argv[]) { - int i; - Worker *worker; - NetTrans **netTrans; - ShmTrans **shmTrans; - void **hadTu; - size_t *hadTuSize; - int priority; - int isStandalone; - int nrOfMsgs; - size_t queueSize; - - msglog_setlevel(argv[0], "info"); - priority = 0; - isStandalone = 1; - nrOfMsgs = 0; - queueSize = 100 * 1024; - - while ((i = getopt(argc, argv, "am:p:v:")) != -1) { - switch (i) { - case 'a': - isStandalone = 0; - break; - case 'm': - nrOfMsgs = atoi(optarg); - break; - case 'p': - priority = atoi(optarg); - break; - case 'v': - if (msglog_setlevel(argv[0], optarg) == 1) { - break; - } /* FALLTHROUGH to default */ - default: - usage(argv[0]); - exit(EXIT_FAILURE); - break; - } - } - if (nrOfMsgs == 0) { - msglog(LOG_ERR, "missing nrOfMsgs\n"); - usage(argv[0]); - exit(EXIT_FAILURE); - } - netTrans = allocMem(nrOfMsgs * sizeof(NetTrans *)); - shmTrans = allocMem(nrOfMsgs * sizeof(ShmTrans *)); - hadTu = allocMem(nrOfMsgs * sizeof(void *)); - hadTuSize = allocMem(nrOfMsgs * sizeof(size_t)); - - if (NULL == (worker = Worker_initBegin(argv[0], sigHandler, priority, isStandalone))) { - msglog(LOG_ERR, "%s, %d: %s\n", __FILE__, __LINE__, strerror(errno)); - exit(EXIT_FAILURE); - } - for (i = 0; i < nrOfMsgs; i++) { - char buf[80]; - - sprintf(buf, "0:%d", i + 50); - netTrans[i] = NetTrans_create(buf, 0, worker); - - sprintf(buf, "netqueue%d", i); - shmTrans[i] = ShmTrans_open(buf, 2 * queueSize); - - hadTu[i] = NULL; - hadTuSize[i] = queueSize - HadTu_hdrSize(); - } - Worker_initEnd(worker); - - if (setjmp(terminateJmp) == 0) { - while (1) { - long msgsCompleted; - - Worker_dump(worker, 1); - - for (i = 0; i < nrOfMsgs; i++) { - if (hadTu[i] == NULL) { - ShmTrans_requestSpace(shmTrans[i]); - hadTu[i] = ShmTrans_tryAlloc(shmTrans[i], hadTuSize[i]); - } - } - - msgsCompleted = NetTrans_multiRecv(netTrans, hadTu, hadTuSize, nrOfMsgs); - - for (i = 0; i < nrOfMsgs; i++) { - if ((msgsCompleted & (1 << i)) != 0) { - ShmTrans_send(shmTrans[i]); - hadTu[i] = NULL; - } - } - } - } - Worker_dump(worker, 0); - - for (i = 0; i < nrOfMsgs; i++) { - ShmTrans_remove(shmTrans[i]); - NetTrans_remove(netTrans[i]); - } - Worker_fini(worker); - exit(EXIT_SUCCESS); + int i; + Worker *worker; + NetTrans **netTrans; + ShmTrans **shmTrans; + void **hadTu; + size_t *hadTuSize; + int priority; + int isStandalone; + int nrOfMsgs; + size_t queueSize; + + msglog_setlevel(argv[0], "info"); + priority = 0; + isStandalone = 1; + nrOfMsgs = 0; + queueSize = 10 * 1024; + + while ((i = getopt(argc, argv, "am:p:v:")) != -1) { + switch (i) { + case 'a': + isStandalone = 0; + break; + case 'm': + nrOfMsgs = atoi(optarg); + break; + case 'p': + priority = atoi(optarg); + break; + case 'v': + if (msglog_setlevel(argv[0], optarg) == 1) { + break; + } /* FALLTHROUGH to default */ + default: + usage(argv[0]); + exit(EXIT_FAILURE); + break; + } + } + if (nrOfMsgs == 0) { + msglog(LOG_ERR, "missing nrOfMsgs\n"); + usage(argv[0]); + exit(EXIT_FAILURE); + } + netTrans = allocMem(nrOfMsgs * sizeof(NetTrans *)); + shmTrans = allocMem(nrOfMsgs * sizeof(ShmTrans *)); + hadTu = allocMem(nrOfMsgs * sizeof(void *)); + hadTuSize = allocMem(nrOfMsgs * sizeof(size_t)); + + if (NULL == (worker = Worker_initBegin(argv[0], sigHandler, priority, isStandalone))) { + msglog(LOG_ERR, "%s, %d: %s\n", __FILE__, __LINE__, strerror(errno)); + exit(EXIT_FAILURE); + } + for (i = 0; i < nrOfMsgs; i++) { + char buf[80]; + + sprintf(buf, "0:%d", i + 50); + netTrans[i] = NetTrans_create(buf, 0, worker); + + sprintf(buf, "netqueue%d", i); + shmTrans[i] = ShmTrans_open(buf, 100 * queueSize); + + hadTu[i] = NULL; + hadTuSize[i] = queueSize - HadTu_hdrSize(); + } + Worker_initEnd(worker); + + if (setjmp(terminateJmp) == 0) { + while (1) { + long msgsCompleted; + + Worker_dump(worker, 1); + + for (i = 0; i < nrOfMsgs; i++) { + if (hadTu[i] == NULL) { + ShmTrans_requestSpace(shmTrans[i]); + hadTu[i] = ShmTrans_tryAlloc(shmTrans[i], hadTuSize[i]); + } + } + + msgsCompleted = NetTrans_multiRecv(netTrans, hadTu, hadTuSize, nrOfMsgs); + + for (i = 0; i < nrOfMsgs; i++) { + if ((msgsCompleted & (1 << i)) != 0) { + ShmTrans_send(shmTrans[i]); + hadTu[i] = NULL; + } + } + } + } + Worker_dump(worker, 0); + + for (i = 0; i < nrOfMsgs; i++) { + ShmTrans_remove(shmTrans[i]); + NetTrans_remove(netTrans[i]); + } + Worker_fini(worker); + exit(EXIT_SUCCESS); } diff --git a/hadaq/nettrans.c b/hadaq/nettrans.c index 0a0e1b0..64f8218 100644 --- a/hadaq/nettrans.c +++ b/hadaq/nettrans.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.1 1999-08-31 10:37:24 muench Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.2 1999-10-06 17:05:08 muench Exp $"; #define _XOPEN_SOURCE_EXTENDED #include @@ -61,7 +61,7 @@ NetTrans *NetTrans_create(const char *name, size_t bandwidth, Worker *worker) lAtmClose(my->fd); return NULL; } - my->mtuSize = 8192; + my->mtuSize = 65535; my->pkt = allocMem(my->mtuSize); my->seqNr = 0; @@ -115,7 +115,7 @@ NetTrans *NetTrans_open(const char *name, size_t bandwidth, Worker *worker) lAtmClose(my->fd); return NULL; } - my->mtuSize = 8192; + my->mtuSize = 65535; my->pkt = allocMem(my->mtuSize); my->seqNr = 0; diff --git a/hadaq/readout.c b/hadaq/readout.c index 8893ad7..0008eef 100644 --- a/hadaq/readout.c +++ b/hadaq/readout.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.1 1999-08-31 10:37:25 muench Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.2 1999-10-06 17:05:08 muench Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -106,10 +106,10 @@ void main(int argc, char *argv[]) #endif while (NULL != (subEvt = HadTuQueue_alloc(hadTuQueue, Hardware_maxSubEvtSize(hw)))) { Hardware_waitForTrigger(hw, subEvt); - (*trigAccepted)++; Hardware_readout(hw, subEvt); (*subevtsRead)++; + (*trigAccepted) = SubEvt_trigNr(subEvt) >> 8; #ifndef NDEBUG msglog(LOG_DEBUG, "hadTuQueue: %p = subEvt: %s\n", subEvt, SubEvt_2charP(subEvt)); #endif diff --git a/hadaq/sam_defs.h b/hadaq/sam_defs.h index 116fd66..b9f859b 100644 --- a/hadaq/sam_defs.h +++ b/hadaq/sam_defs.h @@ -1,9 +1,9 @@ #ifndef SAM_DEFS_H #define SAM_DEFS_H -#define VMSR 0x01000008 -#define KSR 0x01000004 -#define CRAM 0x00000000 -#define CRR 0x00001ffc +#define VMSR 0x0008 +#define KSR 0x0004 +#define CRAM 0x0000 +#define CRR 0x1ffc #endif