MIDAS
Loading...
Searching...
No Matches
midas_macro.h File Reference
#include <stdio.h>
#include <midas.h>
#include <cd_hv.h>
#include "mcstd.h"
#include "experim.h"
Include dependency graph for midas_macro.h:

Go to the source code of this file.

Macros

#define name(x)   char *frontend_name = #x; char *frontend_file_name = __FILE__;
 
#define display(s)   INT display_period = s*1000;
 
#define mask(slot)   (1<<(slot-1))
 
#define equipment_begin   EQUIPMENT equipment[] = {
 
#define equipment_end   { "" }};
 
#define equipment(name, id, type, source, readon, period, readout, cd, driver)
 
#define equipment_trigger(id, type, s)
 
#define equipment_periodic(name, id, period)
 
#define equipment_hv(id, period)
 
#define hv_driver_begin   DEVICE_DRIVER hv_driver[] = {
 
#define driver(name, count)   { #name, name, count },
 
#define hv_driver_end   { "" }};
 
#define trigger_update_begin   void trigger_update(void) {
 
#define trigger_update_end   }
 
#define init_begin   void user_init() {
 
#define init_end   }
 
#define exit_begin   void user_exit() {
 
#define exit_end   }
 
#define begin_run   INT begin_of_run(INT run_number, char *error) {
 
#define begin_run_end   return SUCCESS; }
 
#define end_run   INT end_of_run(INT run_number, char *error) {
 
#define end_run_end   return SUCCESS; }
 
#define pause_run   INT pause_run(INT run_number, char *error) {
 
#define pause_run_end   return SUCCESS; }
 
#define resume_run   INT resume_run(INT run_number, char *error) {
 
#define resume_run_end   return SUCCESS; }
 
#define readout_begin(name)
 
#define readout_end   } return bk_size(pevent); }
 
#define readout_abort   return 0;
 
#define trigger_mask   TRIGGER_MASK(pevent)
 
#define event_id   EVENT_ID(pevent)
 
#define serial_number   SERIAL_NUMBER(pevent)
 
#define time_stamp   TIME_STAMP(pevent)
 
#define bank(name)   bk_create(pevent, #name, TID_WORD, &pdata);
 
#define bank32(name)   bk_create(pevent, #name, TID_DWORD, &pdata);
 
#define bank_end   bk_close(pevent, pdata);
 
#define read(n, a, f)   cam16i(_crate,n,a,f,pdata++);
 
#define read_into(n, a, f, d)   cam16i(_crate,n,a,f,&d);
 
#define read32(n, a, f)   { cam24i(_crate,n,a,f,(DWORD*)pdata); ((DWORD*)pdata)++; }
 
#define write(n, a, f, d)   cam24o(_crate,n,a,f,d);
 
#define control(n, a, f)   camc(_crate,n,a,f);
 
#define test_q(n, a, f, q)   camc_q(_crate,n,a,f,&q);
 
#define wait_q(n, a, f)   { int _q; do { camc_q(_crate,n,a,f,&_q); } while(!_q); }
 
#define last_read   *(pdata-1)
 
#define last_read32   *(((DWORD *)pdata)-1)
 
#define camac_init   cam_init();
 
#define camac_set_crate(c)   _crate = c;
 
#define camac_crate_clear   cam_crate_clear(_crate);
 
#define camac_crate_zinit   cam_crate_zinit(_crate);
 
#define camac_inhibit_clear   cam_inhibit_clear(_crate);
 
#define camac_inhibit_set   cam_inhibit_set(_crate);
 
#define camac_lam_enable(n)   cam_lam_enable(_crate,n);
 
#define camac_lam_clear(n)   cam_lam_clear(_crate,n);
 
#define message(type, str)   cm_msg(M##type, "user code", str);
 
#define odb_set(path, value, type)    db_set_value(hdb, 0, #path, &value, sizeof(value), 1, TID_##type);
 
#define sleep(ms)   ss_sleep(ms);
 
#define variable(name)   int name;
 
#define constant(name, value)   int name=value;
 
#define increment(var)   var++;
 
#define decrement(var)   var--;
 
#define set(var, value)   var = value;
 
#define loop(var, c1, c2)   for (var=c1 ; var<=c2 ; var++)
 
#define call(sub)   sub();
 
#define begin   {
 
#define end   }
 
#define equal   ==
 
#define or   ||
 
#define and   &&
 

Functions

INT frontend_init ()
 Frontend initialization.
 
INT frontend_exit ()
 Frontend exit.
 
INT begin_of_run (INT run_number, char *error)
 Begin of Run.
 
INT end_of_run (INT run_number, char *error)
 End of Run.
 
INT pause_run (INT run_number, char *error)
 Pause Run.
 
INT resume_run (INT run_number, char *error)
 Resume Run.
 
INT frontend_loop ()
 Frontend loop.
 
INT read_trigger (char *pevent)
 
INT read_scaler (char *pevent)
 
INT poll_event (INT source, INT count, BOOL test)
 
INT interrupt_configure (INT cmd, INT source, PTYPE adr)
 
void user_init (void)
 
void user_exit (void)
 

Variables

BOOL frontend_call_loop = FALSE
 
HNDLE hdb
 
INT _crate = 0
 

Macro Definition Documentation

◆ and

#define and   &&

Definition at line 287 of file midas_macro.h.

◆ bank

#define bank (   name)    bk_create(pevent, #name, TID_WORD, &pdata);

Definition at line 238 of file midas_macro.h.

◆ bank32

#define bank32 (   name)    bk_create(pevent, #name, TID_DWORD, &pdata);

Definition at line 239 of file midas_macro.h.

◆ bank_end

#define bank_end   bk_close(pevent, pdata);

Definition at line 240 of file midas_macro.h.

◆ begin

#define begin   {

Definition at line 282 of file midas_macro.h.

◆ begin_run

#define begin_run   INT begin_of_run(INT run_number, char *error) {

Definition at line 204 of file midas_macro.h.

◆ begin_run_end

#define begin_run_end   return SUCCESS; }

Definition at line 205 of file midas_macro.h.

◆ call

#define call (   sub)    sub();

Definition at line 281 of file midas_macro.h.

◆ camac_crate_clear

#define camac_crate_clear   cam_crate_clear(_crate);

Definition at line 254 of file midas_macro.h.

◆ camac_crate_zinit

#define camac_crate_zinit   cam_crate_zinit(_crate);

Definition at line 255 of file midas_macro.h.

◆ camac_inhibit_clear

#define camac_inhibit_clear   cam_inhibit_clear(_crate);

Definition at line 256 of file midas_macro.h.

◆ camac_inhibit_set

#define camac_inhibit_set   cam_inhibit_set(_crate);

Definition at line 257 of file midas_macro.h.

◆ camac_init

#define camac_init   cam_init();

Definition at line 252 of file midas_macro.h.

◆ camac_lam_clear

#define camac_lam_clear (   n)    cam_lam_clear(_crate,n);

Definition at line 260 of file midas_macro.h.

◆ camac_lam_enable

#define camac_lam_enable (   n)    cam_lam_enable(_crate,n);

Definition at line 258 of file midas_macro.h.

◆ camac_set_crate

#define camac_set_crate (   c)    _crate = c;

Definition at line 253 of file midas_macro.h.

◆ constant

#define constant (   name,
  value 
)    int name=value;

Definition at line 274 of file midas_macro.h.

◆ control

#define control (   n,
  a,
 
)    camc(_crate,n,a,f);

Definition at line 246 of file midas_macro.h.

◆ decrement

#define decrement (   var)    var--;

Definition at line 277 of file midas_macro.h.

◆ display

#define display (   s)    INT display_period = s*1000;

Definition at line 25 of file midas_macro.h.

◆ driver

#define driver (   name,
  count 
)    { #name, name, count },

Definition at line 80 of file midas_macro.h.

◆ end

#define end   }

Definition at line 283 of file midas_macro.h.

◆ end_run

#define end_run   INT end_of_run(INT run_number, char *error) {

Definition at line 206 of file midas_macro.h.

◆ end_run_end

#define end_run_end   return SUCCESS; }

Definition at line 207 of file midas_macro.h.

◆ equal

#define equal   ==

Definition at line 285 of file midas_macro.h.

◆ equipment

#define equipment (   name,
  id,
  type,
  source,
  readon,
  period,
  readout,
  cd,
  driver 
)
Value:
{ #name, id, 0, "SYSTEM", type, source, "MIDAS", TRUE, readon, period, 0, 0, "","","", \
readout, cd, driver },
INT type
Definition mana.cxx:269
#define TRUE
Definition midas.h:182
#define driver(name, count)
Definition midas_macro.h:80
#define name(x)
Definition midas_macro.h:24
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24

Definition at line 60 of file midas_macro.h.

61 { #name, id, 0, "SYSTEM", type, source, "MIDAS", TRUE, readon, period, 0, 0, "","","", \
62 readout, cd, driver },

◆ equipment_begin

#define equipment_begin   EQUIPMENT equipment[] = {

Definition at line 56 of file midas_macro.h.

◆ equipment_end

#define equipment_end   { "" }};

Definition at line 58 of file midas_macro.h.

◆ equipment_hv

#define equipment_hv (   id,
  period 
)
Value:
equipment(HV, id, EQ_SLOW, 0,\
RO_RUNNING|RO_TRANSITIONS, period*1000,\
#define RO_TRANSITIONS
Definition midas.h:434
#define RO_RUNNING
Definition midas.h:426
#define EQ_SLOW
Definition midas.h:418
#define equipment(name, id, type, source, readon, period, readout, cd, driver)
Definition midas_macro.h:60
DEVICE_DRIVER hv_driver[]
Definition scfe.cxx:41

Definition at line 73 of file midas_macro.h.

◆ equipment_periodic

#define equipment_periodic (   name,
  id,
  period 
)
Value:
#define RO_ODB
Definition midas.h:438
#define EQ_PERIODIC
Definition midas.h:414

Definition at line 68 of file midas_macro.h.

◆ equipment_trigger

#define equipment_trigger (   id,
  type,
 
)
Value:
INT read_trigger(char *pevent)

Definition at line 64 of file midas_macro.h.

◆ event_id

#define event_id   EVENT_ID(pevent)

Definition at line 234 of file midas_macro.h.

◆ exit_begin

#define exit_begin   void user_exit() {

Definition at line 199 of file midas_macro.h.

◆ exit_end

#define exit_end   }

Definition at line 200 of file midas_macro.h.

◆ hv_driver_begin

#define hv_driver_begin   DEVICE_DRIVER hv_driver[] = {

Definition at line 78 of file midas_macro.h.

◆ hv_driver_end

#define hv_driver_end   { "" }};

Definition at line 82 of file midas_macro.h.

◆ increment

#define increment (   var)    var++;

Definition at line 276 of file midas_macro.h.

◆ init_begin

#define init_begin   void user_init() {

Definition at line 197 of file midas_macro.h.

◆ init_end

#define init_end   }

Definition at line 198 of file midas_macro.h.

◆ last_read

#define last_read   *(pdata-1)

Definition at line 249 of file midas_macro.h.

◆ last_read32

#define last_read32   *(((DWORD *)pdata)-1)

Definition at line 250 of file midas_macro.h.

◆ loop

#define loop (   var,
  c1,
  c2 
)    for (var=c1 ; var<=c2 ; var++)

Definition at line 280 of file midas_macro.h.

◆ mask

#define mask (   slot)    (1<<(slot-1))

Definition at line 54 of file midas_macro.h.

◆ message

#define message (   type,
  str 
)    cm_msg(M##type, "user code", str);

Definition at line 262 of file midas_macro.h.

◆ name

#define name (   x)    char *frontend_name = #x; char *frontend_file_name = __FILE__;

Definition at line 24 of file midas_macro.h.

◆ odb_set

#define odb_set (   path,
  value,
  type 
)     db_set_value(hdb, 0, #path, &value, sizeof(value), 1, TID_##type);

Definition at line 266 of file midas_macro.h.

◆ or

#define or   ||

Definition at line 286 of file midas_macro.h.

◆ pause_run

#define pause_run   INT pause_run(INT run_number, char *error) {

Definition at line 208 of file midas_macro.h.

◆ pause_run_end

#define pause_run_end   return SUCCESS; }

Definition at line 209 of file midas_macro.h.

◆ read

#define read (   n,
  a,
 
)    cam16i(_crate,n,a,f,pdata++);

Definition at line 242 of file midas_macro.h.

◆ read32

#define read32 (   n,
  a,
 
)    { cam24i(_crate,n,a,f,(DWORD*)pdata); ((DWORD*)pdata)++; }

Definition at line 244 of file midas_macro.h.

◆ read_into

#define read_into (   n,
  a,
  f,
  d 
)    cam16i(_crate,n,a,f,&d);

Definition at line 243 of file midas_macro.h.

◆ readout_abort

#define readout_abort   return 0;

Definition at line 231 of file midas_macro.h.

◆ readout_begin

#define readout_begin (   name)
Value:
INT read_##name(char *pevent) \
{ \
WORD *pdata; INT source; \
\
source = *((INT *)pevent); \
bk_init(pevent); {
unsigned short int WORD
Definition mcstd.h:49
int INT
Definition midas.h:129

Definition at line 222 of file midas_macro.h.

223{ \
224WORD *pdata; INT source; \
225 \
226 source = *((INT *)pevent); \
227 bk_init(pevent); {

◆ readout_end

#define readout_end   } return bk_size(pevent); }

Definition at line 229 of file midas_macro.h.

◆ resume_run

#define resume_run   INT resume_run(INT run_number, char *error) {

Definition at line 210 of file midas_macro.h.

◆ resume_run_end

#define resume_run_end   return SUCCESS; }

Definition at line 211 of file midas_macro.h.

◆ serial_number

#define serial_number   SERIAL_NUMBER(pevent)

Definition at line 235 of file midas_macro.h.

◆ set

#define set (   var,
  value 
)    var = value;

Definition at line 278 of file midas_macro.h.

◆ sleep

#define sleep (   ms)    ss_sleep(ms);

Definition at line 269 of file midas_macro.h.

◆ test_q

#define test_q (   n,
  a,
  f,
  q 
)    camc_q(_crate,n,a,f,&q);

Definition at line 247 of file midas_macro.h.

◆ time_stamp

#define time_stamp   TIME_STAMP(pevent)

Definition at line 236 of file midas_macro.h.

◆ trigger_mask

#define trigger_mask   TRIGGER_MASK(pevent)

Definition at line 233 of file midas_macro.h.

◆ trigger_update_begin

#define trigger_update_begin   void trigger_update(void) {

Definition at line 135 of file midas_macro.h.

◆ trigger_update_end

#define trigger_update_end   }

Definition at line 136 of file midas_macro.h.

◆ variable

#define variable (   name)    int name;

Definition at line 273 of file midas_macro.h.

◆ wait_q

#define wait_q (   n,
  a,
 
)    { int _q; do { camc_q(_crate,n,a,f,&_q); } while(!_q); }

Definition at line 248 of file midas_macro.h.

◆ write

#define write (   n,
  a,
  f,
  d 
)    cam24o(_crate,n,a,f,d);

Definition at line 245 of file midas_macro.h.

Function Documentation

◆ begin_of_run()

INT begin_of_run ( INT  run_number,
char error 
)

Begin of Run.

Called every run start transition. Set equipment status in ODB, start acquisition on the modules.

Parameters
[in]run_numberNumber of the run being started
[out]errorCan be used to write a message string to midas.log

Definition at line 361 of file feudp.cxx.

362{
364 gSkipUnknownPackets = false;
365 return SUCCESS;
366}
static int gUnknownPacketCount
Definition feudp.cxx:87
static bool gSkipUnknownPackets
Definition feudp.cxx:88
#define SUCCESS
Definition mcstd.h:54
Here is the call graph for this function:

◆ end_of_run()

INT end_of_run ( INT  run_number,
char error 
)

End of Run.

Called every stop run transition. Set equipment status in ODB, stop acquisition on the modules.

Parameters
[in]run_numberNumber of the run being ended
[out]errorCan be used to write a message string to midas.log

Definition at line 368 of file feudp.cxx.

369{
370 return SUCCESS;
371}
Here is the call graph for this function:

◆ frontend_exit()

INT frontend_exit ( void  )

Frontend exit.

Runs at frontend shutdown. Disconnect hardware and set equipment status in ODB

Returns
Midas status code

Definition at line 191 of file midas_macro.h.

192{
193 user_exit();
194 return SUCCESS;
195}
void user_exit(void)
Here is the call graph for this function:

◆ frontend_init()

INT frontend_init ( void  )

Frontend initialization.

Runs once at application startup. We initialize the hardware and optical interfaces and set the equipment status in ODB. We also lock the frontend to once physical cpu core.

Returns
Midas status code

Definition at line 143 of file midas_macro.h.

144{
145 HNDLE hkey;
146#ifdef EXP_PARAM_DEFINED
148#endif
149#ifdef TRIGGER_SETTINGS_DEFINED
151#endif
152#ifdef SCALER_SETTINGS_STR
154#endif
155
157
158#ifdef EXP_PARAM_DEFINED
159 db_create_record(hdb, 0, "/Experiment/Run Parameters", strcomb1(exp_param_str).c_str());
160 db_find_key(hdb, 0, "/Experiment/Run Parameters", &hkey);
162 sizeof(exp_param), MODE_READ, NULL, NULL) != DB_SUCCESS) {
163 cm_msg(MERROR, "frontend_init", "Cannot open Run Parameters in ODB");
164 return -1;
165 }
166#endif
167#ifdef TRIGGER_SETTINGS_DEFINED
168 db_create_record(hdb, 0, "/Equipment/Trigger/Settings", strcomb1(trigger_settings_str).c_str());
169 db_find_key(hdb, 0, "/Equipment/Trigger/Settings", &hkey);
173 cm_msg(MERROR, "frontend_init", "Cannot open Trigger Settings in ODB");
174 return -1;
175 }
176#endif
177#ifdef SCALER_SETTINGS_DEFINED
178 db_create_record(hdb, 0, "/Equipment/Scaler/Settings", strcomb1(scaler_settings_str).c_str());
179 db_find_key(hdb, 0, "/Equipment/Scaler/Settings", &hkey);
182 cm_msg(MERROR, "frontend_init", "Cannot open Scaler Settings in ODB");
183 return -1;
184 }
185#endif
186
187 user_init();
188 return SUCCESS;
189}
EXP_PARAM exp_param
Definition analyzer.cxx:51
TRIGGER_SETTINGS trigger_settings
Definition analyzer.cxx:52
#define EXP_PARAM_STR(_name)
Definition experim.h:30
#define TRIGGER_SETTINGS_STR(_name)
Definition experim.h:166
INT cm_get_experiment_database(HNDLE *hDB, HNDLE *hKeyClient)
Definition midas.cxx:3011
#define DB_SUCCESS
Definition midas.h:631
#define MERROR
Definition midas.h:559
#define MODE_READ
Definition midas.h:370
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
Definition midas.cxx:915
INT db_open_record(HNDLE hDB, HNDLE hKey, void *ptr, INT rec_size, WORD access_mode, void(*dispatcher)(INT, INT, void *), void *info)
Definition odb.cxx:13291
std::string strcomb1(const char **list)
Definition odb.cxx:598
INT db_find_key(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
Definition odb.cxx:4079
INT db_create_record(HNDLE hDB, HNDLE hKey, const char *orig_key_name, const char *init_str)
Definition odb.cxx:12800
INT HNDLE
Definition midas.h:132
HNDLE hdb
Definition midas_macro.h:21
void user_init(void)

◆ frontend_loop()

INT frontend_loop ( void  )

Frontend loop.

If frontend_call_loop is true, this routine gets called when the frontend is idle or once between every event.

Returns
Midas status code

Definition at line 215 of file midas_macro.h.

216{
217 return SUCCESS;
218}

◆ interrupt_configure()

INT interrupt_configure ( INT  cmd,
INT  source,
PTYPE  adr 
)

Definition at line 105 of file midas_macro.h.

106{
107 switch (cmd) {
110 break;
113 break;
115 cam_interrupt_attach((void (*)()) adr);
116 break;
119 break;
120 }
121 return SUCCESS;
122}
#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
EXTERNAL void EXPRT cam_interrupt_disable(const int c)
EXTERNAL void EXPRT cam_interrupt_enable(const int c)
EXTERNAL void EXPRT cam_interrupt_attach(const int c, const int n, void(*isr)(void))
EXTERNAL void EXPRT cam_interrupt_detach(const int c, const int n)
Here is the call graph for this function:

◆ pause_run()

INT pause_run ( INT  run_number,
char error 
)

Pause Run.

Called every pause run transition.

Parameters
[in]run_numberNumber of the run being ended
[out]errorCan be used to write a message string to midas.log
Returns
Midas status code

Definition at line 373 of file feudp.cxx.

374{
375 return SUCCESS;
376}
Here is the call graph for this function:

◆ poll_event()

INT poll_event ( INT  source,
INT  count,
BOOL  test 
)

Definition at line 86 of file midas_macro.h.

90{
91 INT i, lam;
92
93 for (i = 0; i < count; i++) {
94 cam_lam_read(source >> 24, &lam);
95 if (lam)
96 if (!test)
97 return TRUE;
98 }
99
100 return FALSE;
101}
#define FALSE
Definition cfortran.h:309
EXTERNAL void cam_lam_read(const int c, DWORD *lam)
double count
Definition mdump.cxx:33
INT i
Definition mdump.cxx:32
program test
Definition miniana.f:6
Here is the call graph for this function:

◆ read_scaler()

INT read_scaler ( char pevent)

◆ read_trigger()

INT read_trigger ( char pevent)

◆ resume_run()

INT resume_run ( INT  run_number,
char error 
)

Resume Run.

Called every resume run transition.

Parameters
[in]run_numberNumber of the run being ended
[out]errorCan be used to write a message string to midas.log
Returns
Midas status code

Definition at line 378 of file feudp.cxx.

379{
380 return SUCCESS;
381}
Here is the call graph for this function:

◆ user_exit()

void user_exit ( void  )
Here is the caller graph for this function:

◆ user_init()

void user_init ( void  )
Here is the caller graph for this function:

Variable Documentation

◆ _crate

INT _crate = 0

Definition at line 22 of file midas_macro.h.

◆ frontend_call_loop

BOOL frontend_call_loop = FALSE

Definition at line 20 of file midas_macro.h.

◆ hdb

HNDLE hdb

Definition at line 21 of file midas_macro.h.