42#define TID_BITFIELD 11
55#define MT_ERROR (1<<0)
57#define MT_DEBUG (1<<2)
64#define MT_ERROR_STR "ERROR"
65#define MT_INFO_STR "INFO"
66#define MT_DEBUG_STR "DEBUG"
67#define MT_USER_STR "USER"
68#define MT_LOG_STR "LOG"
69#define MT_TALK_STR "TALK"
70#define MT_CALL_STR "CALL"
72#define MERROR MT_ERROR, __FILE__, __LINE__
73#define MINFO MT_INFO, __FILE__, __LINE__
74#define MDEBUG MT_DEBUG, __FILE__, __LINE__
75#define MUSER MT_USER, __FILE__, __LINE__
76#define MLOG MT_LOG, __FILE__, __LINE__
77#define MTALK MT_TALK, __FILE__, __LINE__
78#define MCALL MT_CALL, __FILE__, __LINE__
81#define MATTRPRINTF(a, b) __attribute__ ((format (printf, a, b)))
83#define MATTRPRINTF(a, b)
183#ifdef MIN_WRITE_CACHE_SIZE
290 int BkSize(
const char* pevent)
const;
327 int FeMain(
const std::vector<std::string>&
args);
459 void Msg(
int message_type,
const char *filename,
int line,
const char *routine,
const char *format, ...)
MATTRPRINTF(6,7);
std::vector< int > fBufRequests
TMFeResult SetCacheSize(size_t read_cache_size, size_t write_cache_size)
TMFeResult OpenBuffer(const char *bufname, size_t bufsize=0)
TMFeResult AddRequest(int event_id, int trigger_mask, const char *sampling_type_string)
TMFeResult ReceiveEvent(std::vector< char > *e, int timeout_msec=0)
TMFeResult FlushCache(bool wait=true)
size_t fBufWriteCacheSize
TMFeResult SendEvent(const char *e)
TMFeResult TriggerAlarm(const char *name, const char *message, const char *aclass)
TMFeResult EventBufferCloseAll()
bool fRunStopRequested
run stop was requested by equipment
void DeregisterTransitionStartAbort()
std::vector< TMEventBuffer * > fEventBuffers
std::atomic_bool fRpcThreadStarting
static std::string GetThreadId()
return identification of this thread
bool fStateRunning
run state is running or paused
void DeregisterTransitionResume()
std::mutex fEventBuffersMutex
TMFE()
default constructor is private for singleton classes
static double GetTime()
return current time in seconds, with micro-second precision
void MidasPeriodicTasks()
void AddRpcHandler(TMFeRpcHandlerInterface *)
int fDB
ODB database handle.
virtual ~TMFE()
destructor is private for singleton classes
void DeregisterTransitionPause()
void SetTransitionSequenceResume(int seqno)
double fRunStartTime
start a new run at this time
std::string fMserverHostname
hostname where the mserver is running, blank if using shared memory
void SetTransitionSequenceStop(int seqno)
void Yield(double sleep_sec)
void Msg(int message_type, const char *filename, int line, const char *routine, const char *format,...) MATTRPRINTF(6
void DeregisterTransitionStop()
TMFeResult Connect(const char *progname=NULL, const char *hostname=NULL, const char *exptname=NULL)
std::atomic_bool fRpcThreadShutdownRequested
void SetTransitionSequenceStartAbort(int seqno)
static void Sleep(double sleep_time_sec)
sleep, with micro-second precision
void SetTransitionSequencePause(int seqno)
std::atomic_bool fShutdownRequested
shutdown was requested by Ctrl-C or by RPC command
std::atomic_bool fRpcThreadRunning
TMFeResult SetWatchdogSec(int sec)
void RegisterTransitionStartAbort()
TMFeResult ResetAlarm(const char *name)
TMFeResult EventBufferFlushCacheAll(bool wait=true)
std::string fHostname
hostname we are running on
MVOdb * fOdbRoot
ODB root.
std::vector< TMFeRpcHandlerInterface * > fRpcHandlers
std::string fProgramName
frontend program name
void DeregisterTransitionStart()
void RemoveRpcHandler(TMFeRpcHandlerInterface *)
void DeregisterTransitions()
int fRunNumber
current run number
void SetTransitionSequenceStart(int seqno)
TMFeResult EventBufferOpen(TMEventBuffer **pbuf, const char *bufname, size_t bufsize=0)
std::string fExptname
experiment name, blank if only one experiment defined in exptab
virtual TMFeResult HandlePauseRun(int run_number)
void * BkOpen(char *pevent, const char *bank_name, int bank_type) const
TMFeResult EqWriteEventToOdb_locked(const char *pevent)
TMFeResult BkInit(char *pevent, size_t size) const
uint16_t fEqConfTriggerMask
virtual void HandlePollRead()
MVOdb * fOdbEqSettings
ODB Equipment/EQNAME/Settings.
std::atomic_bool fEqPollThreadShutdownRequested
int fEqConfWriteCacheSize
TMFeResult EqSetStatus(const char *status, const char *color)
bool fEqConfWriteEventsToOdb
virtual bool HandlePoll()
TMFeResult EqWriteCommon(bool create=false)
Write TMFeEqInfo to ODB /Equipment/NAME/Common.
virtual void HandlePeriodic()
TMFeResult EqReadCommon()
Read TMFeEqInfo from ODB /Equipment/NAME/Common.
double fEqConfPollSleepSec
TMFeResult EqWriteStatistics()
MVOdb * fOdbEqVariables
ODB Equipment/EQNAME/Variables.
virtual TMFeResult HandleRpc(const char *cmd, const char *args, std::string &response)
virtual TMFeResult HandleStartAbortRun(int run_number)
int fEqConfPeriodMilliSec
TMFeResult EqInit(const std::vector< std::string > &args)
Initialize equipment.
virtual TMFeResult HandleBeginRun(int run_number)
double fEqPeriodicNextCallTime
double fEqConfPeriodStatisticsSec
virtual void HandleUsage()
TMEventBuffer * fEqEventBuffer
virtual TMFeResult HandleInit(const std::vector< std::string > &args)
TMFeResult EqZeroStatistics()
std::thread * fEqPollThread
std::atomic_bool fEqPollThreadRunning
TMFeResult EqPreInit()
Initialize equipment, before EquipmentBase::Init()
uint32_t fEqConfNumSubEvents
TMFeResult BkClose(char *pevent, void *ptr) const
std::string fEqConfFormat
TMFeResult ComposeEvent(char *pevent, size_t size) const
virtual TMFeResult HandleResumeRun(int run_number)
MVOdb * fOdbEqCommon
ODB Equipment/EQNAME/Common.
MVOdb * fOdbEq
ODB Equipment/EQNAME.
std::atomic_bool fEqPollThreadStarting
TMFeResult EqSendEvent(const char *pevent, bool write_to_odb=true)
bool fEqConfReadConfigFromOdb
TMFeResult EqWriteEventToOdb(const char *pevent)
int BkSize(const char *pevent) const
std::string fEqConfBuffer
double fEqPeriodicLastCallTime
virtual TMFeResult HandleEndRun(int run_number)
bool fEqConfEnablePeriodic
size_t fEqConfMaxEventSize
MVOdb * fOdbEqStatistics
ODB Equipment/EQNAME/Statistics.
TMFeResult EqPostInit()
Initialize equipment, after EquipmentBase::Init()
bool fEqConfReadOnlyWhenRunning
std::string error_message
TMFeResult(int code, const std::string &str)
virtual TMFeResult HandleEndRun(int run_number)
virtual TMFeResult HandleResumeRun(int run_number)
virtual TMFeResult HandlePauseRun(int run_number)
virtual TMFeResult HandleRpc(const char *cmd, const char *args, std::string &result)
virtual TMFeResult HandleBeginRun(int run_number)
virtual TMFeResult HandleStartAbortRun(int run_number)
virtual TMFeResult HandleBinaryRpc(const char *cmd, const char *args, std::vector< char > &result)
double fFeFlushWriteCacheNextCallTime
bool fFeIfRunningCallBeginRun
std::thread * fFePeriodicThread
std::atomic_bool fFePeriodicThreadRunning
double fFeFlushWriteCachePeriodSec
void FeDeleteEquipments()
void FePollMidas(double sleep_sec)
TMFeResult FeInitEquipments(const std::vector< std::string > &args)
virtual void HandleFrontendExit()
void FeSetName(const char *program_name)
void FeStopEquipmentPollThreads()
std::vector< TMFeEquipment * > fFeEquipments
void FeUsage(const char *argv0)
TMFeResult FeInit(const std::vector< std::string > &args)
TMFeResult FeAddEquipment(TMFeEquipment *eq)
virtual TMFeResult HandleArguments(const std::vector< std::string > &args)
std::atomic_bool fFePeriodicThreadShutdownRequested
void FeStartPeriodicThread()
virtual TMFeResult HandleFrontendInit(const std::vector< std::string > &args)
bool fFeIfRunningCallExit
virtual TMFeResult HandleFrontendReady(const std::vector< std::string > &args)
double FePollTasks(double next_periodic_time)
TMFeResult FeRemoveEquipment(TMFeEquipment *eq)
void FeStopPeriodicThread()
int FeMain(int argc, char *argv[])
TMFrontendRpcHelper * fFeRpcHelper
std::atomic_bool fFePeriodicThreadStarting
virtual void HandleUsage()
#define MIN_WRITE_CACHE_SIZE
#define message(type, str)
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
TMFeResult TMFeErrorMessage(const std::string &message)
TMFeResult TMFeMidasError(const std::string &message, const char *midas_function_name, int midas_status)
#define MATTRPRINTF(a, b)