+++ /dev/null
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwrich.c,v 6.40 2003-05-14 13:54:43 muench Exp $";
-
-#define _POSIX_C_SOURCE 199309L
-#include <unistd.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <syslog.h>
-
-#include <allParam.h>
-#include "subevt.h"
-#include "hwrace.h"
-
-struct HardwareS {
- size_t maxSubEvtSize;
- int nRaces;
- HwRace **race;
-};
-
-#include "hardware.h"
-
-size_t Hardware_maxSubEvtSize(const Hardware *my)
-{
- return my->maxSubEvtSize;
-}
-
-int Hardware_inSpill(const Hardware *my)
-{
- return 0;
-}
-
-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 = "rich0";
- syslog(LOG_NOTICE, "Subsystem not set, defaulting to %s", ss);
- } else {
- ss = subsystem;
- }
-
- if (0 > conSetupParam(param, getenv("DAQ_SETUP"))) {
- syslog(LOG_ERR, "Construction of parameter source failed: %s", strerror(errno));
- return NULL;
- }
- if (0 > getCards(param, ss, "race", &nCards, cards)) {
- syslog(LOG_ERR, "Retrieval of card list failed");
- return NULL;
- }
- my = malloc(sizeof(Hardware));
- my->race = malloc(nCards * sizeof(HwRace *));
- my->nRaces = nCards;
-
- my->maxSubEvtSize = SubEvt_hdrSize() + (my->nRaces * 2500 * sizeof(uint32_t));
-
- for (i = 0; i < my->nRaces; i++) {
- my->race[i] = malloc(sizeof(HwRace));
- if (0 > conHwRace(my->race[i], cards[i], param)) {
- syslog(LOG_ERR, "Construction of card %s failed:%s", cards[i], strerror(errno));
- return NULL;
- }
- }
-
- desParam(param);
- return my;
-}
-
-void deleteHardware(Hardware *my)
-{
- int i;
-
- for (i = 0; i < my->nRaces; i++) {
- desHwRace(my->race[i]);
- free(my->race[i]);
- }
- free(my->race);
- free(my);
-}
-
-void Hardware_waitForTrigger(Hardware *my, void *subEvt)
-{
- int i;
-
- for (i = 0; i < my->nRaces; i++) {
- if (HwRace_isEmpty(my->race[i])) {
- HwRace_requestBuffer(my->race[i]);
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "%d buffer requested", i);
-#endif
- }
- }
-
- for (i = 0; i < my->nRaces; i++) {
- if (HwRace_isBufRequested(my->race[i])) {
- HwRace_getEndOfData(my->race[i]);
- }
- }
-}
-
-void Hardware_readout(Hardware *my, void *partEvt)
-{
- int i;
- int firstRace = -1;
- void *subEvt = SubEvt_data(partEvt);
- static unsigned long trigNr = 0;
- unsigned trigTag;
- int dataError;
- int nErr;
- uint32_t errList[32];
-
-
- /* init partial event, necessary for SubEvt_next() */
- SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
- dataError = 0;
- SubEvt_setId(partEvt, 0);
-
- nErr = 0;
-
- /* read all races, check for common trigger tag */
- for (i = 0; i < my->nRaces; i++) {
- if (HwRace_readSubEvt(my->race[i], subEvt) == 0) {
- if (SubEvt_dataError(subEvt)) {
- errList[nErr++] = SubEvt_id(subEvt);
- dataError = 1;
- } else {
- if (firstRace < 0) {
- trigTag = SubEvt_trigNr(subEvt) & 0xff;
- firstRace = i;
- } else {
- if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) {
- dataError = 1;
- syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x",
- my->race[i]->name, trigTag, firstRace, SubEvt_trigNr(subEvt));
- }
- }
- }
- subEvt = SubEvt_next(partEvt, subEvt);
- }
- }
-
- if (nErr > 0) {
- int i;
- uint32_t *data = SubEvt_data(subEvt);
-
- SubEvt_setSize(subEvt, SubEvt_hdrSize() + (nErr + 1) * 4);
- SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
- SubEvt_setId(subEvt, 600);
- SubEvt_setTrigNr(subEvt, trigTag);
-
- *data++ = nErr;
- for (i = 0; i < nErr; i++) {
- *data++ = errList[i];
- }
- subEvt = SubEvt_next(partEvt, subEvt);
- }
- if (dataError) {
- SubEvt_setDataError(partEvt);
- }
- SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag);
- SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt);
-
- trigNr++;
-
- assert(SubEvt_size(partEvt) <= my->maxSubEvtSize);
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
-#endif
-}
+++ /dev/null
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsam.c,v 6.19 2003-05-14 13:54:44 muench Exp $";
-
-#include <assert.h>
-#include <string.h>
-
-#include <syslog.h>
-
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <lvme.h>
-
-#include <allParam.h>
-
-#include "subevt.h"
-#include "sam_defs.h"
-#include "hwsam.h"
-#define SAM_BUFOFFSET 8
-#define SAM_BUFSIZE 0x4000
-
-int conHwSam(HwSam *my, const char *name, const Param *param)
-{
- unsigned long cardBase;
- int paramWasFound;
- int i;
-
- assert(my != NULL);
-
- strcpy(my->name, name);
-
- Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
- if (!paramWasFound) {
- syslog(LOG_WARNING,
- "Parameter %s(%s) not found, default = 0", my->name, "cardbase");
- cardBase = 0;
- }
- my->cram = malloc(sizeof(LVme));
- if (0 > conLVme(my->cram, cardBase, 0x10000L, 0x09, 0x0, 4)) {
- syslog(LOG_ERR, "HwSam on %p not found", cardBase);
- return -1;
- }
- my->regs = malloc(sizeof(LVme));
- if (0 > conLVme(my->regs, cardBase, 0x10000L, 0x09, 0x4, 4)) {
- syslog(LOG_ERR, "HwSam on %p not found", cardBase);
- return -1;
- }
- my->bankRequested = LVme_tstBitL(my->cram, CRR, 0); /* assumes that init is done by Sam */
- if (my->bankRequested == 1) {
- syslog(LOG_ERR, "HwSam readout bit = 1, should be 0, intialization bug");
- }
- my->currAddr = SAM_BUFSIZE;
- my->endOfData = 0;
-
- return 0;
-}
-
-void desHwSam(HwSam *my)
-{
- desLVme(my->regs);
- desLVme(my->cram);
-}
-
-void HwSam_requestBuffer(HwSam *my)
-{
- int i;
-
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "requestBuffer in");
-#endif
- i = my->bankRequested == 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->bankRequested = i;
- my->currAddr = SAM_BUFSIZE * i + SAM_BUFOFFSET;
-
- /* to indicate a buffer request state which is cleared by getEndOfData */
- my->endOfData = 0;
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "requestBuffer out");
-#endif
-}
-
-void HwSam_getEndOfData(HwSam *my)
-{
- /* CAUTION this ist just for clearing buffer request state,
- if also makes the being always empty in HwSam_isEmpty which makes
- hwmdc.c working by coincidence */
-
- my->endOfData = 1;
-}
-
-/* Subevent Header + some data */
-#define SAM_NODATASIZE 16
-int HwSam_readSubEvt(HwSam *my, void *subEvt)
-{
- uint32_t *data = (uint32_t *) subEvt;
- int lastAddr;
- int currAddr = my->currAddr;
- int size;
-
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "readSubEvt in");
- syslog(LOG_DEBUG, "currAddr: 0x%08x", currAddr);
-#endif
- size = LVme_getL(my->cram, currAddr);
- lastAddr = currAddr + size;
-
- if (size > SAM_BUFSIZE - SAM_BUFOFFSET) {
- syslog(LOG_CRIT, "subEvt throw away : %d, %d", size, SAM_BUFSIZE - SAM_BUFOFFSET);
- /* damaged data, no repair possible, skip subevent*/
- return -1;
- }
- if (size <= SAM_NODATASIZE) {
- /* skip dataless subevent */
- return 1;
- }
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "readSubEvt subevt: %s", SubEvt_2charP(subEvt));
-#endif
- /* copy one sub evt from Sam to memory */
- *data++ = size;
- while ((currAddr += 4) < lastAddr) {
- *data++ = LVme_getL(my->cram, currAddr);
- }
-
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "readSubEvt out");
-#endif
- return 0;
-}
+++ /dev/null
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwship.c,v 6.30 2003-05-14 13:54:44 muench Exp $";
-
-#define _POSIX_C_SOURCE 199309L
-#include <unistd.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <time.h>
-
-#include <allParam.h>
-#include <lvme.h>
-
-#include "subevt.h"
-#include "ipc_basis.h"
-#include "hwship.h"
-
-static void toDbgBuf(HwShip *my)
-{
- int i;
-
- /* copy one sub evt from RC to memory */
- for (i = 0; i < my->dbgBufLen; i++) {
- my->dbgBuf[my->currDbgBuf][i] = LVme_getL(my->lvme, LVL2_OFFSET + i * sizeof(LVme_L));
- }
- my->currDbgBuf = (my->currDbgBuf + 1 < my->nDbgBufs) ? my->currDbgBuf + 1 : 0;
-}
-
-static void dumpDbgBufs(const HwShip *my)
-{
- int i, j, bufNr;
- FILE *f;
- char n[512];
-
- strcpy(n, my->name);
- strcat(n, ".dump");
-
- f = fopen(n, "w");
- assert(f != NULL);
-
- for (j = 0, bufNr = my->currDbgBuf; j < my->nDbgBufs; j++, bufNr = (bufNr + 1 < my->nDbgBufs) ? bufNr + 1 : 0) {
- for (i = 0; i < my->dbgBufLen; i++) {
- if (i % 4 == 0) { /* newline and the offset in the subEvt */
- fprintf(f, "\n%08x:", i * sizeof(uint32_t));
- }
- fprintf(f, " 0x%08x", my->dbgBuf[bufNr][i]);
- }
- fputc('\n', f);
- }
-
- fclose(f);
-}
-
-int conHwShip(HwShip *my, const char *name, const Param *param)
-{
- unsigned long cardBase;
- int paramWasFound;
-
- assert(my != NULL);
-
- strcpy(my->name, name);
-
- Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
- if (!paramWasFound) {
- syslog(LOG_ERR, "Parameter %s(cardbase) not found", my->name);
- return -1;
- }
- my->cardBase = cardBase; /* BUGBUG see header */
- my->lvme = malloc(sizeof(LVme));
- if (0 > conLVme(my->lvme, cardBase, 0x400000UL, 0x39UL, LVL2_OFFSET, 4)) {
- syslog(LOG_ERR, "%s on %p not found", my->name, cardBase);
- return -1;
- }
- /* Select VME-accessible register of LVL2-controller */
- LVme_setW(my->lvme, LVL2_SEL_VMEREG, LVL2_SELMEM_VMEREG);
-
- my->currAddr = 0x7fffffff;
- my->endOfData = 0;
-
-
- my->dbgBufLen = sizeof(uint16_t) * LVL2_SIZE / sizeof(uint32_t);
- my->nDbgBufs = 3;
- my->dbgBuf[0] = my->dbgBuf0;
- my->dbgBuf[1] = my->dbgBuf1;
- my->dbgBuf[2] = my->dbgBuf2;
- my->currDbgBuf = 0;
- my->isDoomed = 0;
-
- return 0;
-}
-
-void desHwShip(HwShip *my)
-{
- desLVme(my->lvme);
- free(my->lvme);
-}
-
-void HwShip_requestBuffer(HwShip *my)
-{
- int i;
-
- syslog(LOG_DEBUG, "wait for data");
- while ((LVme_getL(my->lvme, LVL2_ACCESS_VMEREG) >> 16 & 0xffff) <= 2) {
-#if 1
- struct timespec tS, *t = &tS;
- t->tv_sec = 0;
- t->tv_nsec = 020000000;
- nanosleep(t, NULL);
-#endif
- }
- syslog(LOG_DEBUG, "data available");
- i = my->bankRequested == 1 ? 0 : 1;
- LVme_setL(my->lvme, LVL2_ACCESS_VMEREG, i);
-
- assert(i == LVme_tstBitL(my->lvme, LVL2_ACCESS_VMEREG, 6));
- my->bankRequested = i;
- my->currAddr = LVL2_OFFSET + 0x4;
-
- /* to indicate a buffer request state which is cleared by getEndOfData */
- my->endOfData = 0;
-}
-
-void HwShip_getEndOfData(HwShip *my)
-{
- void toDbgBuf(HwShip *my);
- my->endOfData = LVme_getL(my->lvme, LVL2_OFFSET) - 2 + LVL2_OFFSET;
-#ifdef SHIP_DEBUG
- toDbgBuf(my);
-#endif
-}
-
-int HwShip_readSubEvt(HwShip *my, void *subEvt)
-{
- int readSubEvtR;
- unsigned long size;
- unsigned long lastAddr;
-
- assert(my->bankRequested == bankConfirmed(my));
- assert(my->endOfData > 0);
- assert(my->endOfData <= LVL2_OFFSET + sizeof(uint16_t) * LVL2_SIZE);
-
- size = LVme_getL(my->lvme, my->currAddr);
- lastAddr = my->currAddr + size;
-
-#ifndef SHIP_DEBUG
- assert(size <= HwShip_maxSubEvtSize(my));
-#else
- if (my->isDoomed) {
- dumpDbgBufs(my);
- syslog(LOG_EMERG, "%s: was doomed in previous buffer, dump buffer again and abort", my->name);
- abort();
- }
- if (size >= HwShip_maxSubEvtSize(my)) {
- dumpDbgBufs(my);
- syslog(LOG_EMERG, "%s: corrupted subEvt, dump buffer and try one more", my->name);
- my->currAddr = my->endOfData;
- my->isDoomed = 1;
- SubEvt_setDecoding(subEvt, 0x00020001);
- SubEvt_setSize(subEvt, 0x10);
- SubEvt_setId(subEvt, 399 | 0x80000000);
- SubEvt_setTrigNr(subEvt, 0);
- return 0;
- }
-#endif
-
- if (size <= HwShip_minSubEvtSize(my)) {
- my->currAddr = lastAddr;
- readSubEvtR = 1;
- syslog(LOG_DEBUG, "subEvt: empty, skipped");
- } else {
- uint32_t *data = (uint32_t *) subEvt;
-
- /* copy one sub evt from RC to memory */
- while (my->currAddr < lastAddr) {
- *data++ = LVme_getL(my->lvme, my->currAddr);
- my->currAddr += 4;
- }
- readSubEvtR = 0;
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt));
-#endif
- }
-
- return readSubEvtR;
-}
-
-int HwShip_fillLBmaChain(HwShip *my, LBma *lbma, unsigned long virtOff)
-{
- int fillLBmeChainR;
- unsigned long size;
- unsigned long lastAddr;
-
- assert(my->bankRequested == bankConfirmed(my));
- assert(my->endOfData > 0);
- assert(my->endOfData <= LVL2_OFFSET + sizeof(uint16_t) * LVL2_SIZE);
-
- size = LVme_getL(my->lvme, my->currAddr);
- lastAddr = my->currAddr + size;
-
-#ifndef SHIP_DEBUG
- assert(size <= HwShip_maxSubEvtSize(my));
-#else
- if (my->isDoomed) {
- dumpDbgBufs(my);
- syslog(LOG_EMERG, "%s: was doomed in previous buffer, dump buffer again and abort", my->name);
- abort();
- }
- if (size >= HwShip_maxSubEvtSize(my)) {
- dumpDbgBufs(my);
- syslog(LOG_EMERG, "%s: corrupted subEvt, dump buffer and try one more", my->name);
- my->currAddr = my->endOfData;
- my->isDoomed = 1;
- SubEvt_setDecoding(subEvt, 0x00020001);
- SubEvt_setSize(subEvt, 0x10);
- SubEvt_setId(subEvt, 399 | 0x80000000);
- SubEvt_setTrigNr(subEvt, 0);
- return 0;
- }
-#endif
-
- if (size <= HwShip_minSubEvtSize(my)) {
- fillLBmeChainR = 0;
- } else {
- if (0 > LBma_readChain(lbma, virtOff, my->currAddr + my->cardBase, size / 4, 0x3bUL)) {
- fillLBmeChainR = -1;
- } else {
-#ifndef NDEBUG
- syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(LVme_getPtrL(my->lvme, my->currAddr)));
-#endif
- fillLBmeChainR = size;
- }
- }
- my->currAddr = lastAddr;
-
- return fillLBmeChainR;
-}
+++ /dev/null
-
-#ifndef HwShip_H
-#define HwShip_H
-
-#undef SHIP_DEBUG
-
-#include <lvme.h>
-
-#include <allParam.h>
-#include "ipc_basis.h"
-
-typedef struct HwShipS {
- char name[12];
- LVme *lvme;
- unsigned long cardBase; /* BUGBUG workaround for stupid lvme design */
- unsigned long currAddr;
- int endOfData;
- int bankRequested;
- int currDbgBuf;
- uint32_t dbgBuf0[sizeof(uint16_t) * LVL2_SIZE / sizeof(uint32_t)];
- uint32_t dbgBuf1[sizeof(uint16_t) * LVL2_SIZE / sizeof(uint32_t)];
- uint32_t dbgBuf2[sizeof(uint16_t) * LVL2_SIZE / sizeof(uint32_t)];
- size_t dbgBufLen;
- uint32_t *dbgBuf[3];
- int nDbgBufs;
- int isDoomed;
-}
-
-HwShip;
-
-
-int conHwShip(HwShip *my, const char *name, const Param *param);
-void desHwShip(HwShip *my);
-
-static size_t HwShip_minSubEvtSize(const HwShip *my)
-{
- return 16;
-}
-
-static size_t HwShip_maxSubEvtSize(const HwShip *my)
-{
- return 3088;
-}
-
-void HwShip_requestBuffer(HwShip *my);
-
-static int HwShip_isEmpty(HwShip *my)
-{
- return my->currAddr >= my->endOfData;
-}
-
-int HwShip_readSubEvt(HwShip *my, void *subEvt);
-
-static int HwShip_isBufRequested(HwShip *my)
-{
- return my->endOfData == 0;
-}
-
-void HwShip_getEndOfData(HwShip *my);
-
-static int bankConfirmed(HwShip *my)
-{
- return LVme_tstBitL(my->lvme, LVL2_ACCESS_VMEREG, 7);
-}
-
-static int HwShip_isBusy(HwShip *my)
-{
- return my->bankRequested != bankConfirmed(my);
-}
-
-int HwShip_fillLBmaChain(HwShip *my, LBma *lbma, unsigned long virtOff);
-#endif
+++ /dev/null
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwshow.c,v 6.36 2003-06-16 08:26:38 muench Exp $";
-
-#define SHIP_BLT
-
-#define _POSIX_C_SOURCE 199309L
-#include <unistd.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <syslog.h>
-
-#include <allParam.h>
-#include <lvme.h>
-#include "subevt.h"
-#include "hwship.h"
-
-struct HardwareS {
- size_t maxSubEvtSize;
- int nShips;
- HwShip **ship;
-#ifdef SHIP_BLT
- LBma *lbma;
- LVme_L *buf;
-#endif
-};
-
-#include "hardware.h"
-
-size_t Hardware_maxSubEvtSize(const Hardware *my)
-{
- return my->maxSubEvtSize;
-}
-
-int Hardware_inSpill(const Hardware *my)
-{
- return 0;
-}
-
-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 = "show";
- syslog(LOG_NOTICE, "Subsystem not set, defaulting to %s", ss);
- } else {
- ss = subsystem;
- }
-
- if (0 > conSetupParam(param, getenv("DAQ_SETUP"))) {
- syslog(LOG_ERR, "Construction of parameter source failed: %s", strerror(errno));
- return NULL;
- }
- if (0 > getCards(param, ss, "ipc", &nCards, cards)) {
- syslog(LOG_ERR, "Retrieval of card list failed");
- return NULL;
- }
- my = malloc(sizeof(Hardware));
- my->ship = malloc(nCards * sizeof(HwShip *));
- my->nShips = nCards;
-
- my->maxSubEvtSize = SubEvt_hdrSize();
-
- for (i = 0; i < my->nShips; i++) {
- my->ship[i] = malloc(sizeof(HwShip));
- if (0 > conHwShip(my->ship[i], cards[i], param)) {
- syslog(LOG_ERR, "Construction of card %s failed:%s", cards[i], strerror(errno));
- return NULL;
- }
- my->maxSubEvtSize += HwShip_maxSubEvtSize(my->ship[i]);
- }
-
-#ifdef SHIP_BLT
- my->lbma = malloc(sizeof(LBma));
- if (0 > conLBma(my->lbma, 0, Hardware_maxSubEvtSize(my), 0x3b)) {
- syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
- return NULL;
- }
- my->buf = LBma_getPtrL(my->lbma, 0);
-#endif
-
- desParam(param);
- return my;
-}
-
-void deleteHardware(Hardware *my)
-{
- int i;
-
-#ifdef SHIP_BLT
- desLBma(my->lbma);
- free(my->lbma);
-#endif
- for (i = 0; i < my->nShips; i++) {
- desHwShip(my->ship[i]);
- free(my->ship[i]);
- }
-
- free(my->ship);
- free(my);
-}
-
-void Hardware_waitForTrigger(Hardware *my, void *subEvt)
-{
- int i;
- int nRequests = 0;
- int nPoll = 0;
- const int nPollMax = 60 / my->nShips;
-
- for (i = 0; i < my->nShips; i++) {
- if (HwShip_isEmpty(my->ship[i])) {
- HwShip_requestBuffer(my->ship[i]);
- ++nRequests;
- }
- }
-
- do {
- for (i = 0; i < my->nShips; i++) {
- if (HwShip_isBufRequested(my->ship[i])) {
- if (!HwShip_isBusy(my->ship[i])) {
- HwShip_getEndOfData(my->ship[i]);
- --nRequests;
- }
- }
- }
-#if 1
-/*
-* This sleep prevents a tight loop which stops work on real
-* time systems if the priority of readout is not lowered.
-* When not using the sleep use option -p -2 for daq_readout.
-*/
- if (nRequests == my->nShips && nPoll++ >= nPollMax) {
- struct timespec tS, *t = &tS;
- t->tv_sec = 0;
- t->tv_nsec = 020000000;
- nanosleep(t, NULL);
- }
-#endif
- } while (nRequests);
-}
-
-#ifdef SHIP_BLT
-void Hardware_readout(Hardware *my, void *partEvt)
-{
- static unsigned long trigNr = 0;
-
- int i;
- void *subEvt;
- int dataError;
- unsigned trigTag;
- unsigned long offset;
-
- /* prepare BMA chain by scanning all VME cards */
- if (0 > LBma_resetChain(my->lbma)) {
- syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
- }
- offset = 0;
- for (i = 0; i < my->nShips; i++) {
- int size;
-
- size = HwShip_fillLBmaChain(my->ship[i], my->lbma, offset);
- if (size > 0) {
- offset += size + 0x7 & ~0x7;
- }
- }
- assert(SubEvt_hdrSize() + offset <= Hardware_maxSubEvtSize(my));
-
- /* read data via VME */
- if (0 > LBma_startChain(my->lbma)) {
- syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
- }
- if (0 > LBma_waitChain(my->lbma)) {
- syslog(LOG_ERR, "%s:%d:%s", __FILE__, __LINE__, strerror(errno));
- }
- memcpy(SubEvt_data(partEvt), my->buf, offset);
-
- /* check consistency and fill crate event header */
- SubEvt_setSize(partEvt, SubEvt_hdrSize() + offset);
- SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
- dataError = 0;
- trigTag = 0x100;
- for (subEvt = SubEvt_data(partEvt); subEvt < SubEvt_end(partEvt); subEvt = SubEvt_next(partEvt, subEvt)) {
- if (SubEvt_dataError(subEvt)) {
- dataError = 1;
- }
- if (trigTag > 0xff) {
- trigTag = SubEvt_trigNr(subEvt) & 0xff;
- } else {
- if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) {
- dataError = 1;
- syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x != 0x%08x", my->ship[i]->name, trigTag, SubEvt_trigNr(subEvt));
- }
- }
- }
- SubEvt_setId(partEvt, 0);
- if (dataError) {
- SubEvt_setDataError(partEvt);
- }
- SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag);
-
- trigNr++;
-
- syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
-}
-
-#else
-void Hardware_readout(Hardware *my, void *partEvt)
-{
- int i;
- int firstShip = -1;
- void *subEvt = SubEvt_data(partEvt);
- static unsigned long trigNr = 0;
- unsigned trigTag;
- int dataError;
-
- /* init partial event, necessary for SubEvt_next() */
- SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
- dataError = 0;
- SubEvt_setId(partEvt, 0);
-
- /* read all ships, check for common trigger tag */
- for (i = 0; i < my->nShips; i++) {
- if (HwShip_readSubEvt(my->ship[i], subEvt) == 0) {
- if (SubEvt_dataError(subEvt)) {
- dataError = 1;
- }
- if (firstShip < 0) {
- trigTag = SubEvt_trigNr(subEvt) & 0xff;
- firstShip = i;
- } else {
- if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) {
- dataError = 1;
- syslog(LOG_ERR,
- "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x",
- my->ship[i]->name, trigTag, firstShip, SubEvt_trigNr(subEvt));
- }
- }
- subEvt = SubEvt_next(partEvt, subEvt);
- }
- }
-
- if (dataError) {
- SubEvt_setDataError(partEvt);
- }
- SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag);
- SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt);
- trigNr++;
-
- assert(SubEvt_size(partEvt) <= Hardware_maxSubEvtSize(my));
- syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
-}
-
-#endif
+++ /dev/null
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwsoft.c,v 6.29 2003-05-14 13:54:44 muench Exp $";
-
-
-#define _POSIX_C_SOURCE 199309L
-#include <unistd.h>
-#include <stdlib.h>
-
-#include <sys/time.h>
-
-#include <allParam.h>
-
-#include "subevt.h"
-
-struct HardwareS {
- size_t maxSubEvtSize;
-};
-
-#include "hardware.h"
-
-size_t Hardware_maxSubEvtSize(const Hardware *my)
-{
- return my->maxSubEvtSize;
-}
-
-#include <syslog.h>
-
-#include <stdint.h>
-
-
-int Hardware_inSpill(const Hardware *my)
-{
- return 0;
-}
-
-Hardware *newHardware(void)
-{
- Hardware *my;
- Param *param;
- int paramWasFound;
- unsigned long size;
-
- my = malloc(sizeof(Hardware));
- my->maxSubEvtSize = 2 * SubEvt_hdrSize() + 5004 * sizeof(uint32_t);
-
- param = malloc(sizeof(Param));
- conSetupParam(param, getenv("DAQ_SETUP"));
- Param_getInt(param, "soft", "size", ¶mWasFound, &size);
- if (!paramWasFound) {
- syslog(LOG_WARNING,
- "Parameter %s(%s) not found, defaulting to 0", "soft", "size");
- size = 0;
- }
- desParam(param);
- return my;
-}
-
-void deleteHardware(Hardware *my)
-{
- free(my);
-}
-
-void Hardware_waitForTrigger(Hardware *my, void *partEvt)
-{
-#if 0
- struct timespec tS, *t = &tS;
-
- t->tv_sec = 0;
- t->tv_nsec = 100000000;
- nanosleep(t, NULL);
-#endif
-}
-
-void readoutTrig(void *subEvt)
-{
- uint32_t *data;
- uint32_t *first;
- static uint8_t trigTag;
- size_t size;
-
- SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
-
- data = SubEvt_data(subEvt);
- first = data;
-
- if (trigTag % 2 == 0) {
- *data++ = 0x1;
- } else {
- *data++ = 0x2;
- }
-
- SubEvt_setSize(subEvt, (char *) data - (char *) subEvt);
- SubEvt_setId(subEvt, SubEvtId_trigCode);
- SubEvt_setTrigNr(subEvt, trigTag);
- syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt));
-
- trigTag++;
-}
-
-void readoutSoft(void *subEvt)
-{
- uint32_t *data;
- uint32_t *first;
- static uint8_t trigTag;
- uint32_t id;
- size_t size;
-
- SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
-
- data = SubEvt_data(subEvt);
- first = data;
-
- *data++ = 0x55aa00FF;
- *data++ = 0x55aa00FF;
- *data++ = 0x55aa00FF;
-#if 1
- data += (int) ((1000.0 * rand()) / RAND_MAX);
- data += (int) ((1000.0 * rand()) / RAND_MAX);
- data += (int) ((1000.0 * rand()) / RAND_MAX);
- data += (int) ((1000.0 * rand()) / RAND_MAX);
- data += (int) ((1000.0 * rand()) / RAND_MAX);
-#endif
-
- size = (char *) data - (char *) subEvt;
- id = SubEvtId_test1;
-#if 1
- if (size > 5000) {
- size = 5000;
- id |= 0x80000000;
- }
-#endif
- SubEvt_setSize(subEvt, size);
- SubEvt_setId(subEvt, id);
- SubEvt_setTrigNr(subEvt, trigTag);
- syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt));
-
- trigTag++;
-}
-
-void Hardware_readout(Hardware *my, void *partEvt)
-{
- void *subEvt = SubEvt_data(partEvt);
- static uint32_t trigNr;
- static uint8_t trigTag;
- uint8_t trigCode;
- int err = 0;
-
- SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
-
- readoutTrig(subEvt);
- if (SubEvt_dataError(subEvt)) {
- err = 1;
- }
- if (trigTag > SubEvt_trigNr(subEvt)) {
- trigNr++;
- }
- trigTag = SubEvt_trigNr(subEvt);
- trigCode = SubEvt_dataValue(subEvt, 0);
- subEvt = SubEvt_next(partEvt, subEvt);
-
- readoutSoft(subEvt);
- if (SubEvt_dataError(subEvt)) {
- err = 1;
- }
- subEvt = SubEvt_next(partEvt, subEvt);
-
- SubEvt_setId(partEvt, trigCode);
- if (err) {
- SubEvt_setDataError(partEvt);
- }
- SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt);
- SubEvt_setTrigNr(partEvt, (trigNr << 8) | trigTag);
- syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
-}
+++ /dev/null
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtip.c,v 1.35 2003-07-09 16:21:03 hadaq Exp $";
-
-#include <assert.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/time.h>
-#include <syslog.h>
-
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <lvme.h>
-
-#include <allParam.h>
-
-#include "hwtip.h"
-
-
-#define min(x,y) ( (x>y) ? y : x )
-#define max(x,y) ( (x>y) ? x : y )
-
-
-/* undef if you don't want PRINTOUT if there was an error in the tdc data, mt*/
-#define BUFFER_PRINTOUT_ENABLED
-
-static int ourVmeAccessOK;
-
-void sigbusHandler(int sig)
-{
- struct timespec tS, *t = &tS;
-
- ourVmeAccessOK = 0;
- t->tv_sec = 0;
- t->tv_nsec = 20000000;
- nanosleep(t, NULL);
-}
-
-
-#define TIP_BUFSIZE 0x40000
-int conHwTip(HwTip *my, const char *name, const Param *param)
-{
- unsigned long cardBase;
- int paramWasFound;
- int i;
-
- assert(my != NULL);
-
- signal(SIGBUS, sigbusHandler);
- strcpy(my->name, name);
-
- Param_getInt(param, my->name, "cardbase", ¶mWasFound, &cardBase);
- if (!paramWasFound) {
- syslog(LOG_WARNING, "Parameter %s(%s) not found, default = 0", my->name, "cardbase");
- cardBase = 0;
- }
- syslog(LOG_INFO, "conc cardbase %.8x", cardBase);
-
- my->lvme = (LVme *) malloc(sizeof(LVme));
- if (0 > conLVme(my->lvme, cardBase, 0x3000000UL, 0x09UL, 0, 0)) {
- syslog(LOG_ERR, "HwTip on %p not found", cardBase);
- return -1;
- }
- my->currAddr = 0x7fffffff; /* start at the end */
- my->bankRequested = 1; /* of the empty bank */
- my->endOfData = 0;
- my->daqRq = _LVL2_PIPE2_RQ;
- my->daqGr = _LVL2_PIPE2_GR;
- my->fifo = MEMBASE + TIP_BUFSIZE;
-
- return 0;
-}
-
-void desHwTip(HwTip *my)
-{
- desLVme(my->lvme);
- signal(SIGBUS, SIG_DFL);
-}
-
-void HwTip_requestBuffer(HwTip *my)
-{
-
- LVme_clrBitL(my->lvme, CONFIG1BASE + CFG_MASTER_CONTROL, my->daqRq);
-
- while (LVme_tstBitL(my->lvme, CONFIG1BASE + CFG_MASTER_STATUS, my->daqGr)) {
-#if 1
- struct timespec tS, *t = &tS;
- t->tv_sec = 0;
- t->tv_nsec = 20000000;
- nanosleep(t, NULL);
-#endif
- }
- if (my->bankRequested == 0) {
- my->bankRequested = 1;
- my->daqRq = _LVL2_PIPE2_RQ;
- my->daqGr = _LVL2_PIPE2_GR;
- my->fifo = MEMBASE + TIP_BUFSIZE;
- } else {
- my->bankRequested = 0;
- my->daqRq = _LVL2_PIPE1_RQ;
- my->daqGr = _LVL2_PIPE1_GR;
- my->fifo = MEMBASE;
- }
-
- LVme_setBitL(my->lvme, CONFIG1BASE + CFG_MASTER_CONTROL, my->daqRq);
-
- my->currAddr = my->fifo + 0x4;
-}
-
-
-
-
-int HwTip_readSubEvt(HwTip *my, void *subEvt)
-{
-
-#define SUBHEADER_STATE (1)
-#define TDC_HEADER_STATE (2)
-#define TDC_DATA_STATE (3)
-#define TDC_TRAILER_STATE (4)
-#define LATCH_STATE (5)
-#define IGNORE_ALL_STATE (6)
-
-
- uint32_t *data = (uint32_t *) subEvt;
- unsigned long currAddr = my->currAddr;
- unsigned long header;
- int size;
- int byteSize;
- int statusWord, crateNumber = 0xff;
- int foundCBLTTrailerFlag = 0;
- int foundCBLTHeaderFlag = 0;
- int errorFlag = 0;
- int calEvtFlag = 0;
- unsigned long dataWord;
- unsigned long tdcCounter = 0;
- unsigned long tdcEventCounter, trigTag, evtC, subEvtHeader;
- int arrayCounter = 0, i;
- unsigned long presentState;
-
-#ifdef BUFFER_PRINTOUT_ENABLED
- unsigned long tempArray[500];
-#endif
- char str[200], buff[200];
- unsigned long lastGeo = 0, currentGeo;
- unsigned long lastCrate = 0;
-
- header = LVme_getL(my->lvme, currAddr);
- size = header & 0xfff;
- byteSize = size << 2;
-
- my->currAddr += byteSize;
-
- if (byteSize > (TIP_BUFSIZE - my->currAddr + my->fifo)) {
- syslog(LOG_ERR, "size too large! size: %.8x ", size);
- size = (TIP_BUFSIZE - my->currAddr + my->fifo) >> 2;
- header &= 0x80000000;
- }
- trigTag = ((header >> 16) & 0xff);
-
- calEvtFlag = ((header >> 24) & 0xf) != 0x9;
-
- presentState = TDC_HEADER_STATE;
-
- /* copy one sub evt from RC to memory */
- while (--size) {
-
- /* *data++ = LVme_getL(my->lvme, currAddr+=4); */
- dataWord = LVme_getL(my->lvme, currAddr += 4);
- *data++ = dataWord;
-#ifdef BUFFER_PRINTOUT_ENABLED
- tempArray[arrayCounter++] = dataWord;
-#endif
-
- statusWord = ((dataWord >> 24) & 0x6);
-
-
- if (presentState == TDC_DATA_STATE) {
- if (statusWord == 4) {
- /* Trailer */
- presentState = TDC_TRAILER_STATE;
- }
- }
-
- if (presentState == TDC_HEADER_STATE) {
- if (statusWord == 0) {
- /* Ingo TIP Header */
- presentState = SUBHEADER_STATE;
- }
- }
-
- switch (presentState) {
- case SUBHEADER_STATE:
- presentState = IGNORE_ALL_STATE;
-
- break;
- case TDC_HEADER_STATE:
- tdcCounter++;
- crateNumber = ((dataWord >> 16) & 0xff);
-
- if (lastCrate == 0) {
- lastCrate = crateNumber;
- }
-
- if (lastCrate != crateNumber) {
- /* reset last Geo, if change of crate */
- lastGeo = 0;
- }
-
- if (statusWord != 2) {
- syslog(LOG_ERR, "status word of tdc not 2, for header it should be 2, header: %.8x, data: %.8x", header, dataWord);
- errorFlag = 1;
- }
- if (foundCBLTHeaderFlag == 1) {
- syslog(LOG_ERR, "header: %.8x, at least two headers came without a trailer, data: %.8x", header, dataWord);
- errorFlag = 1;
- }
-
- currentGeo = (dataWord >> 27) & 0x1f;
-
- if (lastGeo == 0) {
- lastGeo = currentGeo - 1;
- }
- if (lastGeo >= currentGeo) {
- syslog(LOG_ERR,
- "header: %.8x, Geo not incremental, crate: %d data: %.8x, lastGeo %d, currentGeo %d",
- header, crateNumber, dataWord, lastGeo, currentGeo);
- errorFlag = 1;
- }
-
- foundCBLTHeaderFlag = 1;
-
- presentState = TDC_DATA_STATE;
- break;
-
-
- case TDC_DATA_STATE:
- /* data word, nothing to do..., but check for trailer */
- break;
-
- case TDC_TRAILER_STATE:
- tdcEventCounter = dataWord & 0xffffff;
- foundCBLTTrailerFlag = 1;
- if (foundCBLTTrailerFlag == 1 && foundCBLTHeaderFlag == 0) {
- syslog(LOG_ERR, "header: %.8x, trailer came before header! data: %.8x", header, dataWord);
- errorFlag = 1;
- }
- evtC = (tdcEventCounter & 0xff);
-
- if ((tdcEventCounter & 0xff) != trigTag) {
- /* if( (max(evtC, trigTag) - min(evtC, trigTag) >=2) && (max(evtC, trigTag) - min(evtC, trigTag) <= 0xfe )) { */
- syslog(LOG_ERR,
- "header: %.8x, crate: %d, tdc_num: %d, tag (%.8x) != EvtCounter (%.8x), dataWord: %.8x ",
- header, crateNumber, tdcCounter, trigTag, tdcEventCounter, dataWord);
- errorFlag = 1;
- }
-
- foundCBLTTrailerFlag = 0;
- foundCBLTHeaderFlag = 0;
-
- presentState = TDC_HEADER_STATE;
- break;
-
- case LATCH_STATE:
-
- break;
-
- case IGNORE_ALL_STATE:
- break;
-
- } /* End switch */
-
-
-
- /* TEST COUNTER */
-#if 0
- if ((dataWord & 0xf) != 0) {
- syslog(LOG_ERR, "TEST: %.8x != 1", dataWord);
- errorFlag = 1;
- }
-#endif
-
-
- }
-
-
-
-
-#ifdef BUFFER_PRINTOUT_ENABLED
- if (errorFlag) {
- str[0] = 0;
- for (i = 0; i < arrayCounter; i++) {
- sprintf(buff, "%.8x ", tempArray[i]);
- strcpy((char *) ((unsigned int) str + strlen(str)), buff);
- if (((i + 1) % 4) == 0) {
- syslog(LOG_ERR, str);
- str[0] = 0;
- }
- }
- if ((i % 4)) {
- syslog(LOG_ERR, str);
- str[0] = 0;
- }
- }
-#endif
-
- return header;
-
-}
+++ /dev/null
-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtrig.c,v 6.38 2003-07-09 16:13:09 hadaq Exp $";
-
-#define _POSIX_C_SOURCE 199309L
-#include <unistd.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <time.h>
-
-#include <allParam.h>
-#include <lvme.h>
-
-#include "subevt.h"
-#include "hardware.h"
-
-#include "hwtip.h"
-
-/* Number of TOF crates */
-#define NCRATES 1
-
-#define MU_EVT_COUNT 0x0e8014UL
-#define MU_FIFO 0x0000UL
-#define MU_FIFO_STATUS 0x0008UL
-
-struct HardwareS {
- LVme *lvme0;
- LVme *lvme4;
- LVme *lvme6;
- LVme_L evtCount;
- LVme_L old_evtCount;
- HwTip *tip;
- size_t maxSubEvtSize;
- int nConcs;
-};
-
-size_t Hardware_maxSubEvtSize(const Hardware *my)
-{
- return my->maxSubEvtSize;
-}
-
-int Hardware_inSpill(const Hardware *my)
-{
- return 0;
-}
-
-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];
- char mu[PARAM_MAX_VALUE_LEN];
- char conc[PARAM_MAX_VALUE_LEN];
- int nCards;
- unsigned long cardBase;
- int paramWasFound;
-
- for (i = 0; i < PARAM_MAX_ARRAY_LEN; i++) {
- cards[i] = cardsS[i];
- }
-
- if (strcmp(subsystem, "unknown") == 0) {
- ss = "trigconc";
- syslog(LOG_NOTICE, "Subsystem not set, defaulting to %s", ss);
- } else {
- ss = subsystem;
- }
-
- if (0 > conSetupParam(param, getenv("DAQ_SETUP"))) {
- syslog(LOG_ERR, "Construction of parameter source failed: %s", strerror(errno));
- return NULL;
- }
- if (0 > getCards(param, ss, "mu", &nCards, cards)) {
- syslog(LOG_ERR, "Retrieval of card list failed");
- return NULL;
- }
- strcpy(mu, cards[0]);
- if (0 > getCards(param, ss, "tip", &nCards, cards)) {
- syslog(LOG_ERR, "Retrieval of card list failed");
- return NULL;
- }
- strcpy(conc, cards[0]);
-
- my = malloc(sizeof(Hardware));
- my->maxSubEvtSize = (SubEvt_hdrSize() + 2 * 500 * sizeof(uint16_t)) /* MU */
- +(NCRATES * (SubEvt_hdrSize() + 620 * sizeof(uint32_t))); /* CONC */
- my->nConcs = nCards;
-
- my->evtCount = 0;
- my->old_evtCount = 0;
-
- Param_getInt(param, mu, "cardbase", ¶mWasFound, &cardBase);
- if (!paramWasFound) {
- syslog(LOG_ERR, "Parameter %s(cardbase) not found, default = 0", mu);
- return NULL;
- }
- syslog(LOG_INFO, "MU cardbase %.8x", cardBase);
-
- my->lvme0 = malloc(sizeof(LVme));
- if (0 > conLVme(my->lvme0, cardBase, 0x100000UL, 0x09UL, 0, 0)) {
- syslog(LOG_ERR, "MU on %p not found", cardBase);
- return NULL;
- }
- my->lvme4 = malloc(sizeof(LVme));
- if (0 > conLVme(my->lvme4, cardBase + 0x4000000, 0x10000UL, 0x09UL, 0, 0)) {
- syslog(LOG_ERR, "MU on %p not found", cardBase);
- return NULL;
- }
- my->lvme6 = malloc(sizeof(LVme));
- if (0 > conLVme(my->lvme6, cardBase + 0x6000000, 0x10000UL, 0x09UL, 0, 0)) {
- syslog(LOG_ERR, "MU on %p not found", cardBase);
- return NULL;
- }
- if (my->nConcs > 0) {
- my->tip = malloc(sizeof(HwTip));
- if (0 > conHwTip(my->tip, conc, param)) {
- syslog(LOG_ERR, "Construction of card %s failed:%s", conc, strerror(errno));
- return NULL;
- }
- }
- desParam(param);
- return my;
-}
-
-void deleteHardware(Hardware *my)
-{
- if (my->nConcs > 0) {
- desHwTip(my->tip);
- free(my->tip);
- }
- desLVme(my->lvme6);
- free(my->lvme6);
- desLVme(my->lvme4);
- free(my->lvme4);
- desLVme(my->lvme0);
- free(my->lvme0);
- free(my);
-}
-
-void Hardware_waitForTrigger(Hardware *my, void *partEvt)
-{
-
- syslog(LOG_DEBUG, "check if MU is ready");
- /*
- only read the Matching Unit Count register, when all pending
- events are processed. This is recommended, because it is very
- "expensive" to read from an Sharc Register in the Matching Unit.
- */
-
- if (my->evtCount == my->old_evtCount) {
- while ((my->old_evtCount = LVme_getL(my->lvme0, MU_EVT_COUNT)) == my->evtCount) {
- /* wait for some time for not disturbing the DSP */
- struct timespec tS, *t = &tS;
- t->tv_sec = 0;
- t->tv_nsec = 20000000UL;
- nanosleep(t, NULL);
-
- }
- syslog(LOG_DEBUG, "evtCount: %d, oldEvtCount: %d", my->evtCount, my->old_evtCount);
- }
- my->evtCount++;
-
- if (my->nConcs > 0) {
- syslog(LOG_DEBUG, "check if CONC is ready");
-
- if (HwTip_isEmpty(my->tip)) {
- HwTip_requestBuffer(my->tip);
- while (HwTip_isBusy(my->tip)) {
- /* wait for some time for not disturbing the DSP */
- struct timespec tS, *t = &tS;
- t->tv_sec = 0;
- t->tv_nsec = 20000000UL;
- nanosleep(t, NULL);
- }
- HwTip_getEndOfData(my->tip);
- }
- }
-}
-
-int readoutTrig(Hardware *my, void *subEvt)
-{
- uint32_t *header = (uint32_t *) subEvt;
- uint16_t *data;
- uint16_t *dataEnd;
-
- if (!((LVme_getW(my->lvme6, MU_FIFO_STATUS) >> 3) & 0x1)) {
- LVme_getW(my->lvme4, MU_FIFO);
- }
- /*
- old MU assumes its 16 bit words get expanded to 32 Bit.
- This is not the case, see SubEvt_setDecoding(..)
- */
- *header = ((LVme_getW(my->lvme4, MU_FIFO) & 0xffff) >> 1) + 8;
- /*
- *header contains subevent size in char's.
- It is added to the pointer to evt begin.
- */
- dataEnd = (uint16_t *) ((uint32_t) header + *header);
-
- *++header = LVme_getW(my->lvme4, MU_FIFO) & 0xffff;
- *++header = LVme_getW(my->lvme4, MU_FIFO) & 0xffff;
- *++header = LVme_getW(my->lvme4, MU_FIFO) & 0xffff;
- SubEvt_setDecoding(subEvt, SubEvtDecoding_16bitData);
-
- data = (uint16_t *) ++header;
-
- while (data < dataEnd) {
- *data++ = (uint16_t) LVme_getW(my->lvme4, MU_FIFO);
- }
-
- syslog(LOG_DEBUG, "subEvt: %s", SubEvt_2charP(subEvt));
-
- /* return trigger code = first MU data word */
- return *(uint16_t *) header;
-}
-
-void Hardware_readout(Hardware *my, void *partEvt)
-{
- void *subEvt = SubEvt_data(partEvt);
- static unsigned long trigNr = 0;
- unsigned trigTag;
- int trigCode;
- int i;
- int dataError;
-
- SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
- dataError = 0;
-
- syslog(LOG_DEBUG, "read out MU");
- trigCode = readoutTrig(my, subEvt);
- if (SubEvt_dataError(subEvt)) {
- dataError = 1;
- }
- SubEvt_setId(partEvt, trigCode);
- trigTag = SubEvt_trigNr(subEvt) & 0xff;
-
- subEvt = SubEvt_next(partEvt, subEvt);
-
- if (my->nConcs > 0) {
- uint32_t *data = SubEvt_data(subEvt);
- int header;
- uint32_t *subEvtInfo;
-
- syslog(LOG_DEBUG, "read out CONC");
- SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData);
- SubEvt_setId(subEvt, 0x19c);
- SubEvt_setTrigNr(subEvt, trigTag);
-
- subEvtInfo = data++; /* leave space for an info word */
-
- for (i = 0; i < NCRATES; i++) {
- header = HwTip_readSubEvt(my->tip, data);
- if (SubEvt_dataError(subEvt)) {
- dataError = 1;
- }
- if (trigTag != ((header >> 16) & 0xff)) {
- dataError = 1;
- syslog(LOG_ERR, "(%s)Trigger tag mismatch: (crate: %d) 0x%08x (MU) != 0x%08x",
- my->tip->name, i, trigTag, (header >> 16) & 0xff);
- }
- data += (header & 0xfff) - 1;
- }
-
- *subEvtInfo = (header >> 16) | ((trigCode << 12) & 0xff000);
- SubEvt_setSize(subEvt, (char *) data - (char *) subEvt);
-
- subEvt = SubEvt_next(partEvt, subEvt);
- }
- if (dataError) {
- SubEvt_setDataError(partEvt);
- }
- SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag);
- SubEvt_setSize(partEvt, (char *) subEvt - (char *) partEvt);
- trigNr++;
-
- assert(SubEvt_size(partEvt) <= my->maxSubEvtSize);
-
- syslog(LOG_DEBUG, "partEvt: %s", SubEvt_2charP(partEvt));
-}
+++ /dev/null
-
-#ifndef SAM_DEFS_H
-#define SAM_DEFS_H
-
-#define VMSR 0x8004
-#define KSR 0x0004
-#define CRAM 0x0000
-#define CRR 0x8000
-
-#endif
+++ /dev/null
-
-/**** Headerfile for TOF-IPU registers */
-/**** created: E.Lins 13-Jan-2000 */
-
-/* $Id: tof_defs.h,v 1.6 2003-05-14 13:54:46 muench Exp $ */
-/* $Source: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/tof_defs.h,v $ */
-
-
-/****************************************************************/
-
-/* Onboard components base addresses... */
-
-/* the DSPs */
-#define SHARC1BASE 0x01000000
-#define SHARC2BASE 0x01200000
-#define SHARC3BASE 0x01400000
-#define SHARC4BASE 0x01600000
-#define SHARC5BASE 0x01800000
-#define SHARC6BASE 0x01a00000
-
-/* the other stuff */
-#define MEMBASE 0x02000000
-#define MEMTOP 0x020f9fff
-
-#define SCV64BASE 0x02400000
-#define DISPBASE 0x02500000
-#define STATUSBASE 0x02600000
-#define FIFOBASE 0x02700000
-#define LINKBASE 0x02800000
-
-
-
-/****************************************************************/
-
-/* special purpose area in internal memory */
-/* DSP#1 */
-#define CONFIG1BASE (SHARC1BASE + 0x000a0000)
-#define CONFIG2BASE (SHARC2BASE + 0x000a0000)
-#define CONFIG3BASE (SHARC3BASE + 0x000a0000)
-#define CONFIG4BASE (SHARC4BASE + 0x000a0000)
-#define CONFIG5BASE (SHARC5BASE + 0x000a0000)
-#define CONFIG6BASE (SHARC5BASE + 0x000a0000)
-
-/* register offsets (32bit words) in configbase area */
-#define CFG_MASTER_CONTROL 0x0000
-#define _START_TIP 0
-#define _LVL2_TRIG_ACTIVE 1
-#define _LVL2_LINK_ACTIVE 2
-#define _MU_LINK_ACTIVE 3
-#define _LVL2_PIPE1_RQ 4
-#define _LVL2_PIPE2_RQ 5
-
-#define CFG_MASTER_STATUS 0x0004
-#define _LVL1_PIPE_FULL 0
-#define _LVL2_PIPE1_FULL 1
-#define _LVL2_PIPE2_FULL 2
-#define _LVL2_PIPE 3
-#define _LVL2_PIPE1_GR 4
-#define _LVL2_PIPE2_GR 5
-
-#define CFG_DEBUG_CONTROL 0x0008
-#define _DEBUG_DUMP 3
-
-#define CFG_LVL1_PIPE_SIZE 0x000c
-
-#define CFG_T_BEGIN_RUN 0x0010
-#define CFG_T_END_RUN 0x0014
-#define CFG_T_SPILL_ON 0x0018
-#define CFG_T_SPILL_OFF 0x001c
-
-#define CFG_TOTAL_EVENTS 0x0020
-
-
-/* number of vme modules to be rout */
-#define CFG_NOF_MODULES 0x002c
-
-/* declaration of vme modules toread out starts here */
-#define CFG_VME_MODULES 0x0030
-/* one vme module is described with ... words */
-#define CFG_SOURCE_ADDRESS 0x0
-#define CFG_BLT_FLAG 0x4
-#define CFG_CYCLE_COUNT 0x8
-#define CFG_DUMMY_WORD 0xc
-
-/* special purpose areas in external memory */
-
-#define SNIFF1BASE (MEMBASE + 0x000fa000)
-#define SNIFF1TOP (MEMBASE + 0x000faf00)
-#define SNIFF2BASE (MEMBASE + 0x000fb000)
-#define SNIFF2TOP (MEMBASE + 0x000fbf00)
-#define SNIFF3BASE (MEMBASE + 0x000fc000)
-#define SNIFF3TOP (MEMBASE + 0x000fcf00)
-#define SNIFF4BASE (MEMBASE + 0x000fd000)
-#define SNIFF4TOP (MEMBASE + 0x000fdf00)
-#define SNIFF5BASE (MEMBASE + 0x000fe000)
-#define SNIFF5TOP (MEMBASE + 0x000fef00)
-#define SNIFF6BASE (MEMBASE + 0x000ff000)
-#define SNIFF6TOP (MEMBASE + 0x000fff00)
-
-/****************************************************************/
-
-
-
-#define LVL1_PIPE_BASE 0x00000000
-
-
-/* define bits of the XILINX internal status register STATUSBASE */
-
-#define _KBERR 0
-#define _KHALT 1
-#define _VMEINT 2
-
-#define _XGP1 4
-#define _XGP2 5
-#define _XGP3 6
-#define _XGSR 7
-
-#define _START_MU 8
-#define _FIFOFULL 9
-#define _ADDRESSMATCH 10
-#define _KSIZE1 11
-
-
-
-/* define the BUSYs */
-#define _LVL1_BUSY 4
-#define _LVL2_BUSY 5
-
-
-
-/* TUNDRA internal registers */
-
-#define DMALAR 0x00
-#define DMAVAR 0x04
-#define DMATC 0x08
-#define DCSR 0x0c
-#define VMEBAR 0x10
-#define RXDATA 0x14
-#define RXADDR 0x18
-#define RXCTL 0x1c
-#define BUSSEL 0x20
-#define IVECT 0x24
-#define APBR 0x28
-#define TXDATA 0x2c
-#define TXADDR 0x30
-#define TXCTL 0x34
-#define LMFIFO 0x38
-#define MODE 0x3c
-#define SA64BAR 0x40
-#define MA64BAR 0x44
-#define LAG 0x48
-#define DMAVTC 0x4c
-
-#define STAT0 0x80
-#define STAT1 0x84
-#define GENCTL 0x88
-#define VINT 0x8c
-#define VREQ 0x90
-#define VARB 0x94
-#define ID 0x98
-#define CTL2 0x9c
-#define I7S 0xa0
-#define LIS 0xa4
-#define I7E 0xa8
-#define LIE 0xac
-#define VIE 0xb0
-#define IC10 0xb4
-#define IC32 0xb8
-#define IC54 0xbc
-#define MISC 0xc0
-#define DLCT 0xc4
-#define DLST1 0xc8
-#define DLST2 0xcc
-#define DLST3 0xd0
-#define MBOX0 0xd4
-#define MBOX1 0xd8
-#define MBOX2 0xdc
-#define MBOX3 0xe0
-
-/* DISPLAY registers */
-
-#define DIGIT1 0x0c
-#define DIGIT2 0x08
-#define DIGIT3 0x04
-#define DIGIT4 0x00
-
-/* Trigger Codes */
-
-#define T_NORMAL 0x01
-#define T_BEGIN 0x02
-#define T_END 0x03
-#define T_CALIB 0x04
-#define T_SPILLON 0x05
-#define T_SPILLOFF 0x06