#include #include #include #include // assert() #include "midas.h" #include "experim.h" #include "mfe.h" /*-- Globals -------------------------------------------------------*/ /* The frontend name (client name) as seen by other MIDAS clients */ const char *frontend_name = "Sample Frontend"; /* The frontend file name, don't change it */ const char *frontend_file_name = __FILE__; /* frontend_loop is called periodically if this variable is TRUE */ BOOL frontend_call_loop = FALSE; /* a frontend status page is displayed with this frequency in ms */ INT display_period = 3000; /* maximum event size produced by this frontend */ INT max_event_size = 8 * 1024 * 1024; /* maximum event size for fragmented events (EQ_FRAGMENTED) */ INT max_event_size_frag = 5 * 1024 * 1024; /* buffer size to hold events */ INT event_buffer_size = 20 * 1024 * 1024; /*-- Function declarations -----------------------------------------*/ INT frontend_init(void); INT frontend_exit(void); INT begin_of_run(INT run_number, char *error); INT end_of_run(INT run_number, char *error); INT pause_run(INT run_number, char *error); INT resume_run(INT run_number, char *error); INT frontend_loop(void); INT read_trigger_event(char *pevent, INT off); INT read_periodic_event(char *pevent, INT off); INT poll_event(INT source, INT count, BOOL test); INT interrupt_configure(INT cmd, INT source, POINTER_T adr); /*-- Equipment list ------------------------------------------------*/ BOOL equipment_common_overwrite = TRUE; EQUIPMENT equipment[] = { {"Trigger", /* equipment name */ {1, 0, /* event ID, trigger mask */ "SYSTEM", /* event buffer */ EQ_POLLED, /* equipment type */ 0, /* event source */ "MIDAS", /* format */ TRUE, /* enabled */ RO_RUNNING, /* read only when running */ 100, /* poll for 100ms */ 0, /* stop run after this event limit */ 0, /* number of sub events */ 0, /* don't log history */ "", "", "",}, read_trigger_event, /* readout routine */ }, {""} }; INT frontend_init() { return SUCCESS; } INT frontend_exit() { return SUCCESS; } INT begin_of_run(INT run_number, char *error) { return SUCCESS; } INT end_of_run(INT run_number, char *error) { return SUCCESS; } INT pause_run(INT run_number, char *error) { return SUCCESS; } INT resume_run(INT run_number, char *error) { return SUCCESS; } INT frontend_loop() { return SUCCESS; } INT interrupt_configure(INT cmd, INT source, POINTER_T adr) { return SUCCESS; } /*------------------------------------------------------------------*/ INT poll_event(INT source, INT count, BOOL test) { int i; DWORD flag; for (i = 0; i < count; i++) { /* poll hardware and set flag to TRUE if new event is available */ flag = TRUE; if (flag) if (!test) return TRUE; } return 0; } /*-- Event readout -------------------------------------------------*/ INT read_trigger_event(char *pevent, INT off) { UINT8 *pdata; bk_init32(pevent); bk_create(pevent, "ADC0", TID_UINT32, (void **)&pdata); // generate 7 MB of dummy data pdata += (7 * 1024 * 1024); bk_close(pevent, pdata); return bk_size(pevent); }