MIDAS
Loading...
Searching...
No Matches
tmfe_rev0.h
Go to the documentation of this file.
1/********************************************************************\
2
3 Name: tmfe.h
4 Created by: Konstantin Olchanski - TRIUMF
5
6 Contents: C++ MIDAS frontend
7
8\********************************************************************/
9
10#ifndef TMFE_H
11#define TMFE_H
12
13#include <stdint.h>
14#include <string>
15#include <vector>
16//#include <mutex>
17//#include "midas.h"
18#include "mvodb.h"
19
20// from midas.h
21
22#define TID_BYTE 1
23#define TID_UINT8 1
24#define TID_SBYTE 2
25#define TID_INT8 2
26#define TID_CHAR 3
27#define TID_WORD 4
28#define TID_UINT16 4
29#define TID_SHORT 5
30#define TID_INT16 5
31#define TID_DWORD 6
32#define TID_UINT32 6
33#define TID_INT 7
34#define TID_INT32 7
35#define TID_BOOL 8
36#define TID_FLOAT 9
37#define TID_FLOAT32 9
38#define TID_DOUBLE 10
39#define TID_FLOAT64 10
40#define TID_BITFIELD 11
41#define TID_STRING 12
42#define TID_ARRAY 13
43#define TID_STRUCT 14
44#define TID_KEY 15
45#define TID_LINK 16
46#define TID_INT64 17
47#define TID_UINT64 18
48#define TID_QWORD 18
49#define TID_LAST 19
53#define MT_ERROR (1<<0)
54#define MT_INFO (1<<1)
55#define MT_DEBUG (1<<2)
56#define MT_USER (1<<3)
57#define MT_LOG (1<<4)
58#define MT_TALK (1<<5)
59#define MT_CALL (1<<6)
60#define MT_ALL 0xFF
62#define MT_ERROR_STR "ERROR"
63#define MT_INFO_STR "INFO"
64#define MT_DEBUG_STR "DEBUG"
65#define MT_USER_STR "USER"
66#define MT_LOG_STR "LOG"
67#define MT_TALK_STR "TALK"
68#define MT_CALL_STR "CALL"
69
70#define MERROR MT_ERROR, __FILE__, __LINE__
71#define MINFO MT_INFO, __FILE__, __LINE__
72#define MDEBUG MT_DEBUG, __FILE__, __LINE__
73#define MUSER MT_USER, __FILE__, __LINE__
74#define MLOG MT_LOG, __FILE__, __LINE__
75#define MTALK MT_TALK, __FILE__, __LINE__
76#define MCALL MT_CALL, __FILE__, __LINE__
78#if defined __GNUC__
79#define MATTRPRINTF(a, b) __attribute__ ((format (printf, a, b)))
80#else
81#define MATTRPRINTF(a, b)
82#endif
83
85{
86 public:
87 int error;
88 std::string error_string;
89
90 public:
91 TMFeError() { // default ctor for success
92 error = 0;
93 error_string = "success";
94 }
95
96 TMFeError(int status, const std::string& str) { // ctor
97 error = status;
99 }
100};
101
103{
104 public:
107 std::string Buffer;
108 int Type;
110 std::string Format;
117 std::string FrontendHost;
118 std::string FrontendName;
119 std::string FrontendFileName;
120 std::string Status;
121 std::string StatusColor;
122 bool Hidden;
124
125 public:
126 TMFeCommon(); // ctor
127};
128
129class TMFE;
130class MVOdb;
131
132class TMFeEquipment
133{
134 public:
135 std::string fName;
137 TMFE* fMfe;
138
139 public:
142
143 public:
144 MVOdb* fOdbEq;
149
150 public:
153 double fStatEpS; // events/sec
154 double fStatKBpS; // kbytes/sec (factor 1000, not 1024)
155
159
160 public:
161 TMFeEquipment(TMFE* mfe, const char* name, TMFeCommon* common); // ctor
162 TMFeError Init();
163 TMFeError SendData(const char* data, int size);
164 TMFeError ComposeEvent(char* pevent, int size);
165 TMFeError BkInit(char* pevent, int size);
166 void* BkOpen(char* pevent, const char* bank_name, int bank_type);
167 TMFeError BkClose(char* pevent, void* ptr);
168 int BkSize(const char* pevent);
169 TMFeError SendEvent(const char* pevent);
172 TMFeError SetStatus(const char* status, const char* color);
173};
174
176{
177 public:
178 virtual void HandleBeginRun();
179 virtual void HandleEndRun();
180 virtual void HandlePauseRun();
181 virtual void HandleResumeRun();
182 virtual void HandleStartAbortRun();
183 virtual std::string HandleRpc(const char* cmd, const char* args);
184};
185
187{
188 public:
189 virtual void HandlePeriodic() = 0;
190};
191
204
205class TMFE
206{
207 public:
208
209 std::string fHostname;
210 std::string fExptname;
211
212 std::string fFrontendName;
213 std::string fFrontendHostname;
214 std::string fFrontendFilename;
215
216 public:
217 int fDB;
218 MVOdb* fOdbRoot;
219
220 public:
222
223 public:
224 std::vector<TMFeEquipment*> fEquipments;
225 std::vector<TMFeRpcHandlerInterface*> fRpcHandlers;
226 std::vector<TMFePeriodicHandler*> fPeriodicHandlers;
228
229 public:
233
237
238 private:
241 static TMFE* gfMFE;
242
244 virtual ~TMFE();
245
246 public:
247
250 static TMFE* Instance();
251
252 TMFeError Connect(const char* progname, const char* filename = NULL, const char*hostname = NULL, const char*exptname = NULL);
254
258
260 void StartPeriodicThread();
261
263 void StopPeriodicThread();
264
266
267 void PollMidas(int millisec);
270
271 TMFeError TriggerAlarm(const char* name, const char* message, const char* aclass);
273
274 void Msg(int message_type, const char *filename, int line, const char *routine, const char *format, ...) MATTRPRINTF(6,7);
275
288
289 static double GetTime();
291 static std::string GetThreadId();
292};
293
294#endif
295/* emacs
296 * Local Variables:
297 * tab-width: 8
298 * c-basic-offset: 3
299 * indent-tabs-mode: nil
300 * End:
301 */
Definition tmfe.h:381
TMFeError TriggerAlarm(const char *name, const char *message, const char *aclass)
void RegisterRpcHandler(TMFeRpcHandlerInterface *handler)
RPC handlers are executed from the RPC thread, if started.
void DeregisterTransitionStartAbort()
Definition tmfe.cxx:1502
static std::string GetThreadId()
return identification of this thread
Definition tmfe.cxx:1140
bool fPeriodicThreadShutdownRequested
Definition tmfe_rev0.h:236
void DeregisterTransitionResume()
Definition tmfe.cxx:1497
std::string fFrontendFilename
frontend program file name
Definition tmfe_rev0.h:214
TMFE()
default constructor is private for singleton classes
static double GetTime()
return current time in seconds, with micro-second precision
Definition tmfe.cxx:1011
void MidasPeriodicTasks()
std::vector< TMFePeriodicHandler * > fPeriodicHandlers
Definition tmfe_rev0.h:226
int fDB
ODB database handle.
Definition tmfe.h:394
bool fRpcThreadShutdownRequested
Definition tmfe_rev0.h:232
void DeregisterTransitionPause()
Definition tmfe.cxx:1492
void EquipmentPeriodicTasks()
double fNextPeriodic
Definition tmfe_rev0.h:227
void SetTransitionSequenceResume(int seqno)
Definition tmfe.cxx:1463
void SetTransitionSequenceStop(int seqno)
Definition tmfe.cxx:1453
std::string fFrontendHostname
frontend hostname
Definition tmfe_rev0.h:213
void StartPeriodicThread()
void Msg(int message_type, const char *filename, int line, const char *routine, const char *format,...) MATTRPRINTF(6
void StartRpcThread()
void DeregisterTransitionStop()
Definition tmfe.cxx:1487
TMFeResult Connect(const char *progname=NULL, const char *hostname=NULL, const char *exptname=NULL)
Definition tmfe.cxx:65
static TMFE * Instance()
bool fPeriodicThreadStarting
Definition tmfe_rev0.h:234
void SetTransitionSequenceStartAbort(int seqno)
Definition tmfe.cxx:1468
static void Sleep(double sleep_time_sec)
sleep, with micro-second precision
Definition tmfe.cxx:1019
bool fPeriodicThreadRunning
Definition tmfe_rev0.h:235
std::string fFrontendName
frontend program name
Definition tmfe_rev0.h:212
static TMFE * gfMFE
Definition tmfe.h:413
void SetTransitionSequencePause(int seqno)
Definition tmfe.cxx:1458
TMFeError SetWatchdogSec(int sec)
bool fRpcThreadStarting
Definition tmfe_rev0.h:230
bool fShutdownRequested
shutdown was requested by Ctrl-C or by RPC command
Definition tmfe_rev0.h:221
void StopPeriodicThread()
void StopRpcThread()
void RegisterTransitionStartAbort()
Definition tmfe.cxx:1507
TMFeError ResetAlarm(const char *name)
std::string fHostname
hostname we are running on
Definition tmfe.h:388
void RegisterPeriodicHandler(TMFeEquipment *eq, TMFePeriodicHandlerInterface *handler)
periodic handlers are executed from the periodic thread, if started
bool fRpcThreadRunning
Definition tmfe_rev0.h:231
MVOdb * fOdbRoot
ODB root.
Definition tmfe.h:395
TMFeError Disconnect()
std::vector< TMFeRpcHandlerInterface * > fRpcHandlers
Definition tmfe.h:464
void DeregisterTransitionStart()
Definition tmfe.cxx:1482
std::vector< TMFeEquipment * > fEquipments
Definition tmfe_rev0.h:224
TMFeError RegisterEquipment(TMFeEquipment *eq)
void DeregisterTransitions()
Definition tmfe.cxx:1473
void PollMidas(int millisec)
void SetTransitionSequenceStart(int seqno)
Definition tmfe.cxx:1448
virtual ~TMFE()
destructor is private for singleton classes
std::string fExptname
experiment name, blank if only one experiment defined in exptab
Definition tmfe.h:384
uint16_t EventID
Definition tmfe_rev0.h:105
std::string Status
Definition tmfe_rev0.h:120
int WriteCacheSize
Definition tmfe_rev0.h:123
double EventLimit
Definition tmfe_rev0.h:114
bool Enabled
Definition tmfe_rev0.h:111
int LogHistory
Definition tmfe_rev0.h:116
uint32_t NumSubEvents
Definition tmfe_rev0.h:115
std::string FrontendHost
Definition tmfe_rev0.h:117
std::string FrontendFileName
Definition tmfe_rev0.h:119
bool Hidden
Definition tmfe_rev0.h:122
uint16_t TriggerMask
Definition tmfe_rev0.h:106
std::string FrontendName
Definition tmfe_rev0.h:118
std::string Format
Definition tmfe_rev0.h:110
std::string StatusColor
Definition tmfe_rev0.h:121
std::string Buffer
Definition tmfe_rev0.h:107
TMFeError SendData(const char *data, int size)
...
double fStatEvents
Definition tmfe_rev0.h:151
void * BkOpen(char *pevent, const char *bank_name, int bank_type) const
Definition tmfe.cxx:2201
TMFeResult BkInit(char *pevent, size_t size) const
Definition tmfe.cxx:2195
MVOdb * fOdbEqSettings
ODB Equipment/EQNAME/Settings.
Definition tmfe.h:213
TMFE * fMfe
Definition tmfe.h:207
MVOdb * fOdbEqVariables
ODB Equipment/EQNAME/Variables.
Definition tmfe.h:214
TMFeError ZeroStatistics()
TMFeError WriteStatistics()
TMFeCommon * fCommon
Definition tmfe_rev0.h:136
double fStatLastEvents
Definition tmfe_rev0.h:157
TMFeResult BkClose(char *pevent, void *ptr) const
Definition tmfe.cxx:2208
TMFeEquipment()
Definition tmfe.h:255
double fStatBytes
Definition tmfe_rev0.h:152
double fStatLastTime
Definition tmfe_rev0.h:156
TMFeResult ComposeEvent(char *pevent, size_t size) const
Definition tmfe.cxx:1995
TMFeError SendEvent(const char *pevent)
MVOdb * fOdbEqCommon
ODB Equipment/EQNAME/Common.
Definition tmfe.h:212
MVOdb * fOdbEq
ODB Equipment/EQNAME.
Definition tmfe.h:211
double fStatKBpS
Definition tmfe_rev0.h:154
std::string fName
Definition tmfe_rev0.h:135
int BkSize(const char *pevent) const
Definition tmfe.cxx:2190
double fStatLastBytes
Definition tmfe_rev0.h:158
TMFeError Init()
Initialize equipment.
TMFeError SetStatus(const char *status, const char *color)
MVOdb * fOdbEqStatistics
ODB Equipment/EQNAME/Statistics.
Definition tmfe.h:215
double fStatEpS
Definition tmfe_rev0.h:153
TMFeError(int status, const std::string &str)
Definition tmfe_rev0.h:96
int error
Definition tmfe_rev0.h:87
std::string error_string
Definition tmfe_rev0.h:88
TMFePeriodicHandlerInterface * fHandler
Definition tmfe_rev0.h:196
TMFeEquipment * fEq
Definition tmfe_rev0.h:195
virtual void HandlePeriodic()=0
virtual void HandleStartAbortRun()
virtual void HandlePauseRun()
virtual TMFeResult HandleRpc(const char *cmd, const char *args, std::string &result)
Definition tmfe.h:152
virtual void HandleEndRun()
virtual void HandleResumeRun()
virtual void HandleBeginRun()
void * data
Definition mana.cxx:268
char color[][16]
Definition mchart.cxx:32
char bank_name[4]
Definition mdump.cxx:26
std::vector< FMT_ID > eq
Definition mdump.cxx:55
#define message(type, str)
#define name(x)
Definition midas_macro.h:24
char str[256]
Definition odbhist.cxx:33
DWORD status
Definition odbhist.cxx:39
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24
#define MATTRPRINTF(a, b)
Definition tmfe_rev0.h:81