-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.24 2002-10-27 12:26:49 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.25 2002-10-29 15:45:05 hadaq Exp $";
#define _POSIX_C_SOURCE 199309L
#include <unistd.h>
free(my);
}
-void Hardware_waitForTrigger(Hardware *my, void *subEvt)
+void Hardware_waitForTrigger(Hardware *my, void *partEvt)
{
int i;
int nRequests = 0;
int nPoll = 0;
const int nPollMax = 60 / my->nSams;
+ int firstSam = -1;
+ void *subEvt = SubEvt_data(partEvt);
+ static unsigned long trigNr = 0;
+ unsigned trigTag;
+
+ /* init partial event, necessary for SubEvt_next() */
+ SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
+ SubEvt_setId(partEvt, 0);
for (i = 0; i < my->nSams; i++) {
if (HwSam_isEmpty(my->sam[i])) {
if (HwSam_isBufRequested(my->sam[i])) {
if (!HwSam_isBusy(my->sam[i])) {
HwSam_getEndOfData(my->sam[i]);
+ 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_setDataError(subEvt);
+ SubEvt_setDataError(partEvt);
+ syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x",
+ my->sam[i]->name, trigTag, firstSam, SubEvt_trigNr(subEvt));
+ }
+ }
+ subEvt = SubEvt_next(partEvt, subEvt);
+ }
--nRequests;
}
}
#endif
} while (nRequests);
+ 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
}
void Hardware_readout(Hardware *my, void *partEvt)
{
int i;
- int firstSam = -1;
- void *subEvt = SubEvt_data(partEvt);
- static unsigned long trigNr = 0;
- unsigned trigTag;
-
- /* init partial event, necessary for SubEvt_next() */
- SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts);
- SubEvt_setId(partEvt, 0);
/* read all sams, check for common trigger tag */
for (i = 0; i < my->nSams; i++) {
- 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_setDataError(subEvt);
- SubEvt_setDataError(partEvt);
- syslog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x (%d) != 0x%08x",
- my->sam[i]->name, trigTag, firstSam, SubEvt_trigNr(subEvt));
- }
- }
- subEvt = SubEvt_next(partEvt, subEvt);
- }
}
-
- 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
}