29 EqRandom(
const char* eqname,
const char* eqfilename)
63 int nbank = 0+9*drand48();
65 for (
int i=0;
i<nbank;
i++) {
67 int size = 0+100*drand48();
76 name[3] =
'0' + (nbank-
i-1);
82 for (
int j=0;
j<size;
j++)
96 EVID_RANDOM, (1<<EVID_RANDOM),
119 EqSlow(
const char* eqname,
const char* eqfilename)
163 double elapsed = now - prev;
165 printf(
"count %d, periodic %f, expected %f, diff %f, elapsed %f\n",
count, now, expected, now-expected, elapsed);
174 double data = 100.0*sin(-M_PI/2.0+M_PI*t/60);
176 char status_buf[256];
177 sprintf(status_buf,
"value %.1f",
data);
184 EVID_SLOW, (1<<EVID_SLOW),
206 EqRare(
const char* eqname,
const char* eqfilename)
238 double data = 100.0*sin(-M_PI/2.0+M_PI*t/60);
240 char status_buf[256];
241 sprintf(status_buf,
"value %.1f",
data);
259 EqBulk(
const char* eqname,
const char* eqfilename)
291 printf(
"Event size set to %d bytes\n",
fEventSize);
321 printf(
"FeBulk::Thread: thread started\n");
335 printf(
"FeBulk::Thread: thread finished\n");
344 EVID_TEST, (1<<EVID_TEST),
368 EqRpc(
const char* eqname,
const char* eqfilename)
382 fMfe->
Msg(
MINFO,
"HandleInit", std::string(
"Init") +
" Ok!");
388 fMfe->
Msg(
MINFO,
"HandleRpc",
"RPC cmd [%s], args [%s]", cmd, args);
393 time_t now = time(NULL);
394 sprintf(tmp,
"{ \"current_time\" : [ %d, \"%s\"] }", (
int)now,
ctime(&now));
403 fMfe->
Msg(
MINFO,
"HandleBinaryRpc",
"RPC cmd [%s], args [%s]", cmd, args);
409 uint64_t* p64 = (uint64_t*)
response.data();
411 for (
size_t i=0;
i<
response.size()/
sizeof(p64[0]);
i++) {
429 printf(
"fail_begin_of_run: returning error status %d\n", fail);
438 int ms = int(s*1000.0);
439 printf(
"sleep_begin_of_run: calling ss_sleep(%d)\n", ms);
457 printf(
"fail_end_of_run: returning error status %d\n", fail);
458 return TMFeResult(fail,
"end of run failed by ODB setting!");
466 int ms = int(s*1000.0);
467 printf(
"sleep_end_of_run: calling ss_sleep(%d)\n", ms);
485 printf(
"fail_pause_run: returning error status %d\n", fail);
486 return TMFeResult(fail,
"pause run failed by ODB setting!");
503 printf(
"fail_resume_run: returning error status %d\n", fail);
504 return TMFeResult(fail,
"resume run failed by ODB setting!");
521 printf(
"fail_start_abort: returning error status %d\n", fail);
522 return TMFeResult(fail,
"start abort failed by ODB setting!");
575int main(
int argc,
char* argv[])
578 return fe_test.
FeMain(argc, argv);
EqBulk(const char *eqname, const char *eqfilename)
std::vector< char > fEventBuffer
std::atomic_bool fThreadRunning
TMFeResult HandleInit(const std::vector< std::string > &args)
EqRandom(const char *eqname, const char *eqfilename)
TMFeResult HandleInit(const std::vector< std::string > &args)
void SendData(double dvalue)
EqRare(const char *eqname, const char *eqfilename)
TMFeResult HandleInit(const std::vector< std::string > &args)
TMFeResult HandleInit(const std::vector< std::string > &args)
TMFeResult HandleResumeRun(int run_number)
TMFeResult HandleEndRun(int run_number)
TMFeResult HandleBinaryRpc(const char *cmd, const char *args, std::vector< char > &response)
TMFeResult HandleBeginRun(int run_number)
EqRpc(const char *eqname, const char *eqfilename)
TMFeResult HandlePauseRun(int run_number)
TMFeResult HandleRpc(const char *cmd, const char *args, std::string &response)
TMFeResult HandleStartAbortRun(int run_number)
EqSlow(const char *eqname, const char *eqfilename)
TMFeResult HandleInit(const std::vector< std::string > &args)
void SendData(double dvalue)
TMFeResult HandleFrontendReady(const std::vector< std::string > &args)
TMFeResult HandleFrontendInit(const std::vector< std::string > &args)
void HandleFrontendExit()
TMFeResult HandleArguments(const std::vector< std::string > &args)
bool fStateRunning
run state is running or paused
static double GetTime()
return current time in seconds, with micro-second precision
void Msg(int message_type, const char *filename, int line, const char *routine, const char *format,...) MATTRPRINTF(6
static void Sleep(double sleep_time_sec)
sleep, with micro-second precision
std::atomic_bool fShutdownRequested
shutdown was requested by Ctrl-C or by RPC command
TMFeResult SetWatchdogSec(int sec)
void * BkOpen(char *pevent, const char *bank_name, int bank_type) const
TMFeResult BkInit(char *pevent, size_t size) const
MVOdb * fOdbEqSettings
ODB Equipment/EQNAME/Settings.
TMFeResult EqSetStatus(const char *status, const char *color)
bool fEqConfWriteEventsToOdb
int fEqConfPeriodMilliSec
TMFeResult BkClose(char *pevent, void *ptr) const
TMFeResult ComposeEvent(char *pevent, size_t size) const
TMFeResult EqSendEvent(const char *pevent, bool write_to_odb=true)
std::string fEqConfBuffer
size_t fEqConfMaxEventSize
bool fEqConfReadOnlyWhenRunning
void FeSetName(const char *program_name)
TMFeResult FeAddEquipment(TMFeEquipment *eq)
int FeMain(int argc, char *argv[])
void bk_init32a(void *event)
INT bk_close(void *event, void *pdata)
void bk_init(void *event)
void bk_init32(void *event)
void bk_create(void *event, const char *name, WORD type, void **pdata)
INT ss_sleep(INT millisec)
int read_slow_event(char *pevent, int off)
#define equipment(name, id, type, source, readon, period, readout, cd, driver)
TMFeResult TMFeErrorMessage(const std::string &message)