// $Id$ /************************************************************ * The Data Acquisition Backbone Core (DABC) * ************************************************************ * Copyright (C) 2009 - * * GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * Planckstr. 1, 64291 Darmstadt, Germany * * Contact: http://dabc.gsi.de * ************************************************************ * This software can be used under the GPL license * * agreements as stated in LICENSE.txt file * * which is part of the distribution. * ************************************************************/ #include #include #include #include "dabc/Url.h" #include "dabc/api.h" #include "mbs/api.h" int usage(const char *errstr = nullptr) { if (errstr) { printf("Error: %s\n\n", errstr); } printf("utility for printing MBS events\n"); printf("mbsprint source [args]\n\n"); printf("Following source kinds are supported:\n"); printf(" lmd://path/file.lmd - LMD file reading\n"); printf(" mbs://mbsnode/Transport - MBS transport server\n"); printf(" mbs://mbsnode/Stream - MBS stream server\n"); printf("Additional arguments:\n"); printf(" -tmout value - maximal time in seconds for waiting next event (default 5)\n"); printf(" -maxage value - maximal age time for events, if expired queue are cleaned (default off)\n"); printf(" -buf sz - buffer size in MB, default 4\n"); printf(" -num number - number of events to print\n"); printf(" -hex - print raw data in hex form\n"); printf(" -dec - print raw data in decimal form\n"); printf(" -long - print raw data in 4-bytes format\n"); printf(" -short - print raw data in 2-bytes format\n"); printf(" -slow subevid - print subevents with id as slow control record (see mbs/SlowControlData.h file)\n"); return errstr ? 1 : 0; } void PrintSlowSubevent(mbs::SubeventHeader* sub) { mbs::SlowControlData rec; if (!rec.Read(sub->RawData(), sub->RawDataSize())) { printf(" SlowControl record format failure\n"); return; } time_t tm = rec.GetEventTime(); printf(" SlowControl data evid:%u longs:%u doubles:%u time:%s", (unsigned) rec.GetEventId(), rec.NumLongs(), rec.NumDoubles(), ctime(&tm)); for (unsigned num=0;num 0 ? maxage/2. : 1., maxage); if (debug_delay > 0) dabc::Sleep(debug_delay); dabc::TimeStamp curr = dabc::Now(); if (evnt) { cnt++; lastevtm = curr; } else if (curr - lastevtm > tmout) break; if (showrate) { double tm = curr - last; if (tm>=0.3) { printf("\rTm:%6.1fs Ev:%8ld Rate:%8.2f Ev/s", first.SpentTillNow(), cnt, (cnt-lastcnt)/tm); fflush(stdout); last = curr; lastcnt = cnt; } continue; } if (!evnt) continue; evnt->PrintHeader(); mbs::SubeventHeader* sub = nullptr; while ((sub = evnt->NextSubEvent(sub)) != nullptr) { sub->PrintHeader(); if ((slowsubevid != 0) && (sub->fFullId == slowsubevid)) { PrintSlowSubevent(sub); } else if (printdata) { sub->PrintData(ashex, aslong); } } if (cnt >= number) break; } if (showrate) { printf("\n"); fflush(stdout); } ref.Disconnect(); return 0; }