From: hadaq Date: Sun, 27 Oct 2002 10:53:23 +0000 (+0000) Subject: Get the list of sams from parameters like the other subsystems do. X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=6a3d9f4ec19bca337d69bca22733be53bc9fde8a;p=daqdata.git Get the list of sams from parameters like the other subsystems do. CAUTION!! This version still relies on "virtual" (means half) sam3s, so it's still incompatible with runctrl. Tested with mdc0. -- mm --- diff --git a/hadaq/hwmdc.c b/hadaq/hwmdc.c index 5f423ac..feae9de 100644 --- a/hadaq/hwmdc.c +++ b/hadaq/hwmdc.c @@ -1,5 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.22 2002-10-27 08:37:54 hadaq Exp $"; - +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.23 2002-10-27 10:53:23 hadaq Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -8,7 +7,7 @@ static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hada #include #include #include -#include +#include #include #include @@ -16,21 +15,10 @@ static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hada #include "subevt.h" #include "hwsam.h" -#define MDCCRATE 1 - -#if MDCCRATE == 0 -#define FIRSTSAM 0 -#define NSAMS 12 -#endif - -#if MDCCRATE == 1 -#define FIRSTSAM 12 -#define NSAMS 5 -#endif - struct HardwareS { size_t maxSubEvtSize; - HwSam *sam[NSAMS]; + int nSams; + HwSam **sam; }; #include "hardware.h" @@ -45,32 +33,49 @@ int Hardware_inSpill(const Hardware *my) return 0; } -Hardware *newHardware(void) +Hardware *newHardware(const char *subsystem) { Hardware *my; Param paramS, *param = ¶mS; int i; + const char *ss; + char cardsS[PARAM_MAX_ARRAY_LEN][PARAM_MAX_VALUE_LEN]; + char *cards[PARAM_MAX_ARRAY_LEN]; + int nCards; + + for (i = 0; i < PARAM_MAX_ARRAY_LEN; i++) { + cards[i] = cardsS[i]; + } + + if (strcmp(subsystem, "unknown") == 0) { + ss = "mdc0"; + syslog(LOG_NOTICE, "Subsystem not set, defaulting to %s", ss); + } else { + ss = subsystem; + } if (0 > conParam(param)) { - syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno)); + syslog(LOG_ERR, "Construction of parameter source failed: %s", strerror(errno)); + return NULL; + } + if (0 > getCards(param, ss, "sam", &nCards, cards)) { + syslog(LOG_ERR, "Retrieval of card list failed"); return NULL; } my = malloc(sizeof(Hardware)); + my->sam = malloc(nCards * sizeof(HwSam *)); + my->nSams = nCards; - my->maxSubEvtSize = SubEvt_hdrSize() + (NSAMS * 2564 * sizeof(uint32_t)); - - for (i = 0; i < NSAMS; i++) { - char buf[12]; + my->maxSubEvtSize = SubEvt_hdrSize() + (my->nSams * 2564 * sizeof(uint32_t)); + for (i = 0; i < my->nSams; i++) { my->sam[i] = malloc(sizeof(HwSam)); - sprintf(buf, "sam%d", i + FIRSTSAM); - if (0 > conHwSam(my->sam[i], buf, param)) { - syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno)); + if (0 > conHwSam(my->sam[i], cards[i], param)) { + syslog(LOG_ERR, "Construction of card %s failed:%s", cards[i], strerror(errno)); return NULL; } } - desParam(param); return my; } @@ -79,26 +84,27 @@ void deleteHardware(Hardware *my) { int i; - for (i = 0; i < NSAMS; i++) { + for (i = 0; i < my->nSams; i++) { desHwSam(my->sam[i]); free(my->sam[i]); } + free(my->sam); free(my); } -#define N_POLL_MAX 60/NSAMS void Hardware_waitForTrigger(Hardware *my, void *partEvt) { int i; int nPoll = 0; + const int nPollMax = 60 / my->nSams; int nRequests; - int firstSam=-1; + int firstSam = -1; void *subEvt = SubEvt_data(partEvt); static uint32_t trigNr = 0; uint32_t trigTag; - for (i = 0; i < NSAMS; i++) { + for (i = 0; i < my->nSams; i++) { HwSam_requestBuffer(my->sam[i]); } @@ -108,31 +114,31 @@ void Hardware_waitForTrigger(Hardware *my, void *partEvt) /* make shure that all SAMS have delivered one sub event */ /* check for common trigger tag */ - nRequests = NSAMS; + nRequests = my->nSams; do { - for (i = 0; i < NSAMS; i++) { - if (HwSam_isBufRequested(my->sam[i])) { - if(!HwSam_isBusy(my->sam[i])) { - --nRequests; - if(HwSam_readSubEvt(my->sam[i], subEvt)==0) { - if (firstSam<0) { - trigTag = SubEvt_trigNr(subEvt) & 0xff; - firstSam=i; - } else { - if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) { - SubEvt_setId(subEvt, SubEvt_id(subEvt) | 0x80000000UL); - SubEvt_setId(partEvt, SubEvt_id(partEvt) | 0x80000000UL); - syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x", - my->sam[i]->name,trigTag,firstSam,SubEvt_trigNr(subEvt)); - } - } - subEvt=(void*)(((uint32_t)subEvt + *(uint32_t*)subEvt + 4) & 0xfffffff8); - } + for (i = 0; i < my->nSams; i++) { + if (HwSam_isBufRequested(my->sam[i])) { + if (!HwSam_isBusy(my->sam[i])) { + --nRequests; + if (HwSam_readSubEvt(my->sam[i], subEvt) == 0) { + if (firstSam < 0) { + trigTag = SubEvt_trigNr(subEvt) & 0xff; + firstSam = i; + } else { + if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) { + SubEvt_setId(subEvt, SubEvt_id(subEvt) | 0x80000000UL); + SubEvt_setId(partEvt, SubEvt_id(partEvt) | 0x80000000UL); + syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x", + my->sam[i]->name, trigTag, firstSam, SubEvt_trigNr(subEvt)); + } + } + subEvt = (void *) (((uint32_t) subEvt + *(uint32_t *) subEvt + 4) & 0xfffffff8); + } + } } - } } #if 1 - if (nPoll >= N_POLL_MAX && firstSam < 0) { + if (nPoll >= nPollMax && firstSam < 0) { struct timespec tS, *t = &tS; t->tv_sec = 0; t->tv_nsec = 020000000; @@ -143,7 +149,7 @@ void Hardware_waitForTrigger(Hardware *my, void *partEvt) } while (nRequests); SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag); - SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt); + SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt); trigNr++; assert(SubEvt_size(partEvt) <= my->maxSubEvtSize); diff --git a/hadaq/param.tcl b/hadaq/param.tcl index e4cbe50..afb8a29 100644 --- a/hadaq/param.tcl +++ b/hadaq/param.tcl @@ -20,6 +20,45 @@ set readout(file) ./daq_readout set readout(stndln) 0 set readout(priority) -2 +set mdc0(unit0) sam0 +set mdc0(unit1) sam1 +set mdc0(unit2) sam2 +set mdc0(unit3) sam3 +set mdc0(unit4) sam4 +set mdc0(unit5) sam5 +set mdc0(unit6) sam6 +set mdc0(unit7) sam7 +set mdc0(unit8) sam8 +set mdc0(unit9) sam9 +set mdc0(unit10) sam10 +set mdc0(unit11) sam11 + +set mdc1(unit0) sam12 +set mdc1(unit1) sam13 +set mdc1(unit2) sam14 +set mdc1(unit3) sam15 +set mdc1(unit4) sam16 +set mdc1(unit5) sam17 + +set sam0(cardtype) sam +set sam1(cardtype) sam +set sam2(cardtype) sam +set sam3(cardtype) sam +set sam4(cardtype) sam +set sam5(cardtype) sam +set sam6(cardtype) sam +set sam7(cardtype) sam +set sam8(cardtype) sam +set sam9(cardtype) sam +set sam10(cardtype) sam +set sam11(cardtype) sam +set sam12(cardtype) sam +set sam13(cardtype) sam +set sam14(cardtype) sam +set sam15(cardtype) sam +set sam16(cardtype) sam +set sam17(cardtype) sam + set sam0(cardbase) 0x01000000 set sam1(cardbase) 0x01100000 set sam2(cardbase) 0x02000000