MIDAS
Loading...
Searching...
No Matches
fejrpc.cxx
Go to the documentation of this file.
1/*******************************************************************\
2
3 Name: fedummy.c
4 Created by: K.Olchanski
5
6 Contents: Front end for creating dummy data
7
8\********************************************************************/
9
10#include <stdio.h>
11#include <stdlib.h>
12#include <unistd.h>
13#include <stdint.h>
14#include <sys/time.h>
15#include <sys/types.h>
16#include <sys/stat.h>
17#include <fcntl.h>
18#include <errno.h>
19#include <math.h>
20#include <ctype.h>
21#include <assert.h>
22#include <string.h>
23
24#include "midas.h"
25#include "mrpc.h"
26#include "mfe.h"
27
28#define FE_NAME "fejrpc"
29#define EQ_NAME "RpcExample"
30#define EQ_EVID 1
31
32
33/*-- Globals -------------------------------------------------------*/
34
35/* The frontend name (client name) as seen by other MIDAS clients */
36const char *frontend_name = FE_NAME;
37
38/* The frontend file name, don't change it */
40
41/* frontend_loop is called periodically if this variable is TRUE */
43
44/* a frontend status page is displayed with this frequency in ms */
45//INT display_period = 3000;
47
48/* maximum event size produced by this frontend */
51
52/* buffer size to hold events */
54
55/*-- Function declarations -----------------------------------------*/
56
59INT begin_of_run(INT run_number, char *error);
60INT end_of_run(INT run_number, char *error);
61INT pause_run(INT run_number, char *error);
62INT resume_run(INT run_number, char *error);
64
65//HNDLE hDB;
67
68int read_slow_event(char *pevent, int off);
69
70/*-- Equipment list ------------------------------------------------*/
71
73
74 { EQ_NAME, /* equipment name */
75 {
76 EQ_EVID, (1<<EQ_EVID), /* event ID, trigger mask */
77 "SYSTEM", /* event buffer */
78 EQ_PERIODIC, /* equipment type */
79 0, /* event source */
80 "MIDAS", /* format */
81 TRUE, /* enabled */
82 RO_RUNNING|RO_STOPPED|RO_PAUSED|RO_ODB, /* When to read */
83 1000, /* poll every so milliseconds */
84 0, /* stop run after this event limit */
85 0, /* number of sub events */
86 1, /* history period*/
87 "", "", ""
88 },
89 read_slow_event, /* readout routine */
90 },
91 { "" }
92};
93
94/********************************************************************\
95 Callback routines for system transitions
96
97 These routines are called whenever a system transition like start/
98 stop of a run occurs. The routines are called on the following
99 occations:
100
101 frontend_init: When the frontend program is started. This routine
102 should initialize the hardware.
103
104 frontend_exit: When the frontend program is shut down. Can be used
105 to releas any locked resources like memory, commu-
106 nications ports etc.
107
108 begin_of_run: When a new run is started. Clear scalers, open
109 rungates, etc.
110
111 end_of_run: Called on a request to stop a run. Can send
112 end-of-run event and close run gates.
113
114 pause_run: When a run is paused. Should disable trigger events.
115
116 resume_run: When a run is resumed. Should enable trigger events.
117
118\********************************************************************/
119
121
122static int configure()
123{
124 int size, status;
125 int example_int = 0;
126
127 size = sizeof(int);
128 status = db_get_value(hDB, 0, "/Equipment/" EQ_NAME "/Settings/example_int", &example_int, &size, TID_INT, TRUE);
129 printf("Example_int: %d\n", example_int);
130
131 return SUCCESS;
132}
133
134// RPC handlers
135
137{
138 const char* cmd = CSTRING(0);
139 const char* args = CSTRING(1);
140 char* return_buf = CSTRING(2);
141 int return_max_length = CINT(3);
142
143 cm_msg(MINFO, "rpc_callback", "--------> rpc_callback: index %d, max_length %d, cmd [%s], args [%s]", index, return_max_length, cmd, args);
144
145 int example_int = strtol(args, NULL, 0);
146 int size = sizeof(int);
147 int status = db_set_value(hDB, 0, "/Equipment/" EQ_NAME "/Settings/example_int", &example_int, size, 1, TID_INT);
148 if (status != DB_SUCCESS)
149 printf("db_set_value() status %d\n", status);
150
151 char tmp[256];
152 time_t now = time(NULL);
153 sprintf(tmp, "current time is %d %s", (int)now, ctime(&now));
154
156
157 return RPC_SUCCESS;
158}
159
160/*-- Frontend Init -------------------------------------------------*/
161
163{
164 int status;
165
166 cm_msg(MINFO, "frontend_init", "Frontend init");
167
168 //cm_set_watchdog_params (FALSE, 0);
169
171 assert(status == SUCCESS);
172
173 configure();
174
175 return SUCCESS;
176}
177
178/*-- Frontend Exit -------------------------------------------------*/
179
181{
182 cm_msg(MINFO, "frontend_exit", "Frontend exit");
183 return SUCCESS;
184}
185
186/*-- Begin of Run --------------------------------------------------*/
187
189{
190 cm_msg(MINFO, "begin_of_run", "Begin run %d", run_number);
191
193
194 configure();
195
196 count_slow = 0;
197
198 return SUCCESS;
199}
200
201/*-- End of Run ----------------------------------------------------*/
202
204{
205 cm_msg(MINFO, "end_of_run", "End run %d", run_number);
206
207 cm_msg(MINFO, frontend_name, "read %d slow events", count_slow);
208
209 return SUCCESS;
210}
211
212/*-- Pause Run -----------------------------------------------------*/
213
215{
216 cm_msg(MINFO, "pause_run", "Pause run %d", run_number);
217 return SUCCESS;
218}
219
220/*-- Resume Run ----------------------------------------------------*/
221
223{
224 cm_msg(MINFO, "resume_run", "Resume run %d", run_number);
225 return SUCCESS;
226}
227
228/*-- Frontend Loop -------------------------------------------------*/
229
231{
232 /* if frontend_call_loop is true, this routine gets called when
233 the frontend is idle or once between every event */
234 //printf("frontend_loop!\n");
235 ss_sleep(10);
236 return SUCCESS;
237}
238
239/*------------------------------------------------------------------*/
240
241/********************************************************************\
242
243 Readout routines for different events
244
245\********************************************************************/
246
248/* Polling routine for events. Returns TRUE if event
249 is available. If test equals TRUE, don't return. The test
250 flag is used to time the polling */
251{
252 if (test) {
253 ss_sleep (count);
254 }
255 return (0);
256}
257
258/*-- Interrupt configuration ---------------------------------------*/
259
261{
262 switch(cmd)
263 {
265 break;
267 break;
269 break;
271 break;
272 }
273 return SUCCESS;
274}
275
276/*-- Event readout -------------------------------------------------*/
277
278double get_time()
279{
280 struct timeval tv;
282 return tv.tv_sec + 0.000001*tv.tv_usec;
283}
284
285int read_slow_event(char *pevent, int off)
286{
287 bk_init32(pevent);
288
289 count_slow++;
290
291 double* pdatad;
292 bk_create(pevent, "SLOW", TID_DOUBLE, (void**)&pdatad);
293
294 time_t t = time(NULL);
295 pdatad[0] = count_slow;
296 pdatad[1] = t;
297 pdatad[2] = 100.0*sin(M_PI*t/60);
298 //pdatad[0] = 0.0/0.0; // nan
299 //pdatad[1] = 1.0/0.0; // inf
300 //pdatad[2] = -1.0/0.0; // -inf
301 printf("time %d, data %f\n", (int)t, pdatad[2]);
302
303 bk_close(pevent, pdatad + 3);
304
305 return bk_size(pevent);
306}
307
308// end file
BOOL frontend_call_loop
Definition fejrpc.cxx:42
INT rpc_callback(INT index, void *prpc_param[])
Definition fejrpc.cxx:136
const char * frontend_file_name
Definition fejrpc.cxx:39
#define EQ_NAME
Definition fejrpc.cxx:29
INT max_event_size
Definition fejrpc.cxx:49
INT frontend_exit()
Frontend exit.
Definition fejrpc.cxx:180
int read_slow_event(char *pevent, int off)
Definition fejrpc.cxx:285
INT frontend_init()
Frontend initialization.
Definition fejrpc.cxx:162
INT event_buffer_size
Definition fejrpc.cxx:53
INT max_event_size_frag
Definition fejrpc.cxx:50
INT interrupt_configure(INT cmd, INT source, PTYPE adr)
Definition fejrpc.cxx:260
int count_slow
Definition fejrpc.cxx:120
INT poll_event(INT source, INT count, BOOL test)
Definition fejrpc.cxx:247
#define FE_NAME
Definition fejrpc.cxx:28
EQUIPMENT equipment[]
Definition fejrpc.cxx:72
const char * frontend_name
Definition fejrpc.cxx:36
INT display_period
Definition fejrpc.cxx:46
#define EQ_EVID
Definition fejrpc.cxx:30
INT begin_of_run(INT run_number, char *error)
Begin of Run.
Definition fejrpc.cxx:188
INT frontend_loop()
Frontend loop.
Definition fejrpc.cxx:230
INT end_of_run(INT run_number, char *error)
End of Run.
Definition fejrpc.cxx:203
INT gbl_run_number
Definition fejrpc.cxx:66
double get_time()
Definition fejrpc.cxx:278
static int configure()
Definition fejrpc.cxx:122
INT bk_close(void *event, void *pdata)
Definition midas.cxx:16780
void bk_init32(void *event)
Definition midas.cxx:16469
void bk_create(void *event, const char *name, WORD type, void **pdata)
Definition midas.cxx:16561
INT bk_size(const void *event)
Definition midas.cxx:16495
INT cm_register_function(INT id, INT(*func)(INT, void **))
Definition midas.cxx:5790
#define DB_SUCCESS
Definition midas.h:631
#define RPC_SUCCESS
Definition midas.h:698
#define CMD_INTERRUPT_ATTACH
Definition midas.h:822
#define CMD_INTERRUPT_DISABLE
Definition midas.h:821
#define CMD_INTERRUPT_ENABLE
Definition midas.h:820
#define CMD_INTERRUPT_DETACH
Definition midas.h:823
#define SUCCESS
Definition mcstd.h:54
#define RO_STOPPED
Definition midas.h:427
#define TID_DOUBLE
Definition midas.h:343
#define RO_ODB
Definition midas.h:438
#define EQ_PERIODIC
Definition midas.h:414
#define MINFO
Definition midas.h:560
#define RO_PAUSED
Definition midas.h:428
#define TID_INT
Definition midas.h:338
#define RO_RUNNING
Definition midas.h:426
INT ss_sleep(INT millisec)
Definition system.cxx:3628
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
Definition midas.cxx:915
INT db_get_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, void *data, INT *buf_size, DWORD type, BOOL create)
Definition odb.cxx:5415
INT db_set_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, const void *data, INT data_size, INT num_values, DWORD type)
Definition odb.cxx:5261
#define RPC_JRPC
Definition mrpc.h:130
INT run_number[2]
Definition mana.cxx:246
INT index
Definition mana.cxx:271
HNDLE hDB
main ODB handle
Definition mana.cxx:207
double count
Definition mdump.cxx:33
#define CINT(_i)
Definition midas.h:1622
DWORD BOOL
Definition midas.h:105
int INT
Definition midas.h:129
#define CSTRING(_i)
Definition midas.h:1646
#define PTYPE
Definition midas.h:170
#define TRUE
Definition midas.h:182
#define resume_run
#define pause_run
program test
Definition miniana.f:6
int gettimeofday(struct timeval *tp, void *tzp)
timeval tv
Definition msysmon.cxx:1095
#define ctime
Definition msystem.h:264
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