24#define name(x) char *frontend_name = #x; char *frontend_file_name = __FILE__;
25#define display(s) INT display_period = s*1000;
27#ifdef TRIGGER_SETTINGS_DEFINED
31#ifdef SCALER_SETTINGS_DEFINED
35#ifdef EXP_PARAM_DEFINED
54#define mask(slot) (1<<(slot-1))
56#define equipment_begin EQUIPMENT equipment[] = {
58#define equipment_end { "" }};
60#define equipment(name, id, type, source, readon, period, readout, cd, driver) \
61 { #name, id, 0, "SYSTEM", type, source, "MIDAS", TRUE, readon, period, 0, 0, "","","", \
62 readout, cd, driver },
64#define equipment_trigger(id, type, s) \
65 equipment(Trigger, id, EQ_##type, s, RO_RUNNING|RO_ODB, 500, \
66 read_trigger, NULL, NULL)
68#define equipment_periodic(name, id, period) \
69 equipment(name, id, EQ_PERIODIC, 0,\
70 RO_RUNNING|RO_TRANSITIONS|RO_ODB, period*1000,\
71 read_##name, NULL, NULL)
73#define equipment_hv(id, period) \
74 equipment(HV, id, EQ_SLOW, 0,\
75 RO_RUNNING|RO_TRANSITIONS, period*1000,\
76 cd_hv_read, cd_hv, hv_driver)
78#define hv_driver_begin DEVICE_DRIVER hv_driver[] = {
80#define driver(name, count) { #name, name, count },
82#define hv_driver_end { "" }};
126#ifdef TRIGGER_SETTINGS_DEFINED
135#define trigger_update_begin void trigger_update(void) {
136#define trigger_update_end }
146#ifdef EXP_PARAM_DEFINED
149#ifdef TRIGGER_SETTINGS_DEFINED
152#ifdef SCALER_SETTINGS_STR
158#ifdef EXP_PARAM_DEFINED
163 cm_msg(
MERROR,
"frontend_init",
"Cannot open Run Parameters in ODB");
167#ifdef TRIGGER_SETTINGS_DEFINED
173 cm_msg(
MERROR,
"frontend_init",
"Cannot open Trigger Settings in ODB");
177#ifdef SCALER_SETTINGS_DEFINED
182 cm_msg(
MERROR,
"frontend_init",
"Cannot open Scaler Settings in ODB");
197#define init_begin void user_init() {
199#define exit_begin void user_exit() {
204#define begin_run INT begin_of_run(INT run_number, char *error) {
205#define begin_run_end return SUCCESS; }
206#define end_run INT end_of_run(INT run_number, char *error) {
207#define end_run_end return SUCCESS; }
208#define pause_run INT pause_run(INT run_number, char *error) {
209#define pause_run_end return SUCCESS; }
210#define resume_run INT resume_run(INT run_number, char *error) {
211#define resume_run_end return SUCCESS; }
222#define readout_begin(name) INT read_##name(char *pevent) \
224WORD *pdata; INT source; \
226 source = *((INT *)pevent); \
229#define readout_end } return bk_size(pevent); }
231#define readout_abort return 0;
233#define trigger_mask TRIGGER_MASK(pevent)
234#define event_id EVENT_ID(pevent)
235#define serial_number SERIAL_NUMBER(pevent)
236#define time_stamp TIME_STAMP(pevent)
238#define bank(name) bk_create(pevent, #name, TID_WORD, &pdata);
239#define bank32(name) bk_create(pevent, #name, TID_DWORD, &pdata);
240#define bank_end bk_close(pevent, pdata);
242#define read(n,a,f) cam16i(_crate,n,a,f,pdata++);
243#define read_into(n,a,f,d) cam16i(_crate,n,a,f,&d);
244#define read32(n,a,f) { cam24i(_crate,n,a,f,(DWORD*)pdata); ((DWORD*)pdata)++; }
245#define write(n,a,f,d) cam24o(_crate,n,a,f,d);
246#define control(n,a,f) camc(_crate,n,a,f);
247#define test_q(n,a,f,q) camc_q(_crate,n,a,f,&q);
248#define wait_q(n,a,f) { int _q; do { camc_q(_crate,n,a,f,&_q); } while(!_q); }
249#define last_read *(pdata-1)
250#define last_read32 *(((DWORD *)pdata)-1)
252#define camac_init cam_init();
253#define camac_set_crate(c) _crate = c;
254#define camac_crate_clear cam_crate_clear(_crate);
255#define camac_crate_zinit cam_crate_zinit(_crate);
256#define camac_inhibit_clear cam_inhibit_clear(_crate);
257#define camac_inhibit_set cam_inhibit_set(_crate);
258#define camac_lam_enable(n) cam_lam_enable(_crate,n);
260#define camac_lam_clear(n) cam_lam_clear(_crate,n);
262#define message(type, str) cm_msg(M##type, "user code", str);
266#define odb_set(path, value, type) \
267 db_set_value(hdb, 0, #path, &value, sizeof(value), 1, TID_##type);
269#define sleep(ms) ss_sleep(ms);
273#define variable(name) int name;
274#define constant(name, value) int name=value;
276#define increment(var) var++;
277#define decrement(var) var--;
278#define set(var, value) var = value;
280#define loop(var,c1,c2) for (var=c1 ; var<=c2 ; var++)
281#define call(sub) sub();
TRIGGER_SETTINGS trigger_settings
#define EXP_PARAM_STR(_name)
#define TRIGGER_SETTINGS_STR(_name)
INT cm_get_experiment_database(HNDLE *hDB, HNDLE *hKeyClient)
#define CMD_INTERRUPT_ATTACH
#define CMD_INTERRUPT_DISABLE
#define CMD_INTERRUPT_ENABLE
#define CMD_INTERRUPT_DETACH
EXTERNAL void cam_lam_read(const int c, DWORD *lam)
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)
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
INT db_open_record(HNDLE hDB, HNDLE hKey, void *ptr, INT rec_size, WORD access_mode, void(*dispatcher)(INT, INT, void *), void *info)
std::string strcomb1(const char **list)
INT db_find_key(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
INT db_create_record(HNDLE hDB, HNDLE hKey, const char *orig_key_name, const char *init_str)
INT frontend_exit()
Frontend exit.
INT frontend_init()
Frontend initialization.
INT read_trigger(char *pevent)
INT interrupt_configure(INT cmd, INT source, PTYPE adr)
INT poll_event(INT source, INT count, BOOL test)
INT begin_of_run(INT run_number, char *error)
Begin of Run.
INT frontend_loop()
Frontend loop.
INT end_of_run(INT run_number, char *error)
End of Run.
INT read_scaler(char *pevent)
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)