112 std::vector<WDEvent *>
wde;
128 cm_msg(
MINFO,
"frontend_init",
"Calibration filepath set to current directory. "\
129 "Use WDBSYS environnement variable to point to your wavedaq repository");
134 WDB *b =
new WDB(
"wd026");
138 b->ReceiveControlRegisters();
141 b->ResetDrsControlFsm();
145 b->SetDaqSingle(
false);
146 b->SetDaqAuto(
false);
147 b->SetDaqNormal(
false);
149 b->SetSendBlock(
true);
152 b->SetDrsChTxEn(0xFFFF);
158 b->SetDaqClkSrcSel(1);
159 b->SetDrsSampleFreq(1000);
161 b->SetFePzc(-1,
false);
162 b->SetInterPkgDelay(0x753);
163 b->SetFeMux(-1, WDB::cFeMuxInput);
166 b->SetExtAsyncTriggerEn(
false);
167 b->SetTriggerDelay(0);
168 b->SetLeadTrailEdgeSel(0);
169 b->SetPatternTriggerEn(
true);
170 b->SetDacTriggerLevelV(-1, -0.02);
172 b->SetTrgSrcPolarity(0xFFFF);
173 b->SetTrgPtrnEn(0xFFFF);
175 for (
int i=0 ;
i<16 ;
i++) {
176 b->SetTrgSrcEnPtrn(
i, (1<<
i));
177 b->SetTrgStatePtrn(
i, (1<<
i));
181 b->SetSendBlock(
false);
182 b->SendControlRegisters();
188 if (!b->GetLmkPllLock() || !b->GetDaqPllLock()) {
189 cm_msg(
MERROR,
"frontend_init",
"PLLs not locked on board %s. Mask = 0x%04X",
190 b->GetName().c_str(), b->GetPllLock(
false));
195 b->ReceiveStatusRegisters();
197 if (b->IsVerbose()) {
198 std::cout << std::endl <<
"========== Board Info ==========" << std::endl;
203 b->LoadVoltageCalibration(b->GetDrsSampleFreqMhz(),
drs_calib_path);
209 }
catch (std::runtime_error &
e) {
210 std::cout << std::endl;
212 cm_msg(
MERROR,
"frontend_init",
"Cannot initialize %s, aborting.", b->GetName().c_str());
220 WD::wp->SetAllCalib(
true);
226 b->SetDestinationPort(
WD::wp->GetServerPort());
230 b->SetDaqSingle(
true);
248 b->ResetDrsControlFsm();
249 b->ResetEventCounter();
250 b->SetDaqSingle(
true);
344 WD::wdb[0]->SetDaqSingle(
true);
355 for (
int i = 0;
i < 16;
i++) {
366 for (
int i=0 ;
i<16 ;
i++) {
382 std::vector<unsigned long long>
scaler;
INT bk_close(void *event, void *pdata)
void bk_init(void *event)
void bk_init32(void *event)
void bk_create(void *event, const char *name, WORD type, void **pdata)
INT bk_size(const void *event)
#define CMD_INTERRUPT_ATTACH
#define CMD_INTERRUPT_DISABLE
#define CMD_INTERRUPT_ENABLE
#define CMD_INTERRUPT_DETACH
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
std::vector< WDEvent * > wde
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
BOOL frontend_call_loop
frontend_loop is called periodically if this variable is TRUE
const char * frontend_file_name
The frontend file name, don't change it.
INT max_event_size
maximum event size produced by this frontend
INT frontend_exit(void)
Frontend exit.
INT event_buffer_size
buffer size to hold events
INT max_event_size_frag
maximum event size for fragmented events (EQ_FRAGMENTED)
INT interrupt_configure(INT cmd, INT source, POINTER_T adr)
Interrupt configuration (not implemented)
BOOL equipment_common_overwrite
INT read_periodic_event(char *pevent, INT off)
INT frontend_init(void)
Frontend initialization.
INT poll_event(INT source, INT count, BOOL test)
Polling routine for events.
INT read_trigger_event(char *pevent, INT off)
EQUIPMENT equipment[]
Main structure for midas equipment.
const char * frontend_name
The frontend name (client name) as seen by other MIDAS clients.
INT display_period
a frontend status page is displayed with this frequency in ms
INT begin_of_run(INT run_number, char *error)
Begin of Run.
INT frontend_loop(void)
Frontend loop.
INT end_of_run(INT run_number, char *error)
End of Run.