10 #include <sys/resource.h>
47 #define MAX_DATA_SIZE (256*1024)
64 INT
pause_run(INT run_number,
char *error);
78 LAM_SOURCE(0, 0xFFFFFF),
153 char *hostnames[] = {
"aber."};
154 int crate_numbers[] = {9};
155 BOOL crate_has_periodic[] = {
FALSE};
157 int num_hostnames =
sizeof(hostnames)/
sizeof(
char *);
158 char my_hostname[256];
160 gethostname(my_hostname,
sizeof(my_hostname));
162 BOOL has_periodic =
FALSE;
163 for(
int i = 0;
i < num_hostnames;
i++) {
164 if(!strcmp(my_hostname, hostnames[
i])) {
165 crate_number = crate_numbers[
i];
166 has_periodic = crate_has_periodic[
i];
172 BOOL has_periodic =
FALSE;
173 if(crate_number > 0) {
191 printf(
"frontend_init_finished\n");
203 if (run_state != STATE_STOPPED) {
204 cm_msg(MERROR,
"Crate",
205 "Run must be stopped before starting crate program.");
210 if((*trigger_modules[
i]).
init != NULL) {
219 if((*periodic_modules[i]).init != NULL) {
220 int status = (*periodic_modules[
i]).
init();
229 if(setpriority(PRIO_PROCESS, 0, -2)) {
230 perror(
"setpriority");
245 if((*trigger_modules[i]).
exit != NULL) {
246 (*trigger_modules[
i]).
exit();
251 if((*periodic_modules[i]).exit != NULL) {
252 (*periodic_modules[
i]).
exit();
264 diag_print(1,
"*** Before begin of run %d ***\n", run_number);
267 if((*trigger_modules[i]).
pre_bor != NULL) {
268 int status = (*trigger_modules[
i]).
pre_bor();
276 if((*periodic_modules[i]).pre_bor != NULL) {
277 int status = (*periodic_modules[
i]).
pre_bor();
295 diag_print(1,
"*** Begin of run %d ***\n", run_number);
298 if((*trigger_modules[i]).
bor != NULL) {
299 int status = (*trigger_modules[
i]).
bor();
307 if((*periodic_modules[i]).bor != NULL) {
308 int status = (*periodic_modules[
i]).
bor();
317 between_runs =
false;
329 diag_print(1,
"*** End of run %d ***\n", run_number);
334 if((*trigger_modules[i]).
eor != NULL) {
335 int status = (*trigger_modules[
i]).
eor();
343 if((*periodic_modules[i]).eor != NULL) {
344 int status = (*periodic_modules[
i]).
eor();
359 INT
pause_run(INT run_number,
char *error)
379 struct timeval restart_time;
380 gettimeofday(&restart_time, NULL);
388 diag_print(2,
"Waited %f microseconds for restart.\n",
402 if((*trigger_modules[i]).poll_dead != NULL) {
403 int status = (*trigger_modules[
i]).poll_dead();
422 if((*trigger_modules[i]).
stop_cycle != NULL) {
437 if (cycle_active || run_state != STATE_RUNNING || between_runs ==
TRUE) {
443 if (run_state != STATE_RUNNING || between_runs ==
TRUE) {
454 if((*trigger_modules[i]).poll_live != NULL) {
458 if (run_state != STATE_RUNNING || between_runs ==
TRUE) {
461 int status = (*trigger_modules[
i]).poll_live();
494 for (
int i = 0; i <
count; i++) {
508 case CMD_INTERRUPT_ENABLE:
511 case CMD_INTERRUPT_DISABLE:
514 case CMD_INTERRUPT_ATTACH:
517 case CMD_INTERRUPT_DETACH:
530 printf(
"Event number: %d\n", (((EVENT_HEADER *)pevent)-1)->serial_number);
535 int size = bk_iterate32(pevent, &pbk, &pdata);
537 printf(
"%c%c%c%c\t%d\t\t", pbk->name[0], pbk->name[1], pbk->name[2],
539 for(
int i = 0; i <
MIN(4, size/4); i++) {
540 printf(
"0x%08x ", pdata[i]);
544 }
while(pbk != NULL);
552 diag_print(2,
"Event has ended. Executing read_trigger_event.\n");
561 if (run_state != STATE_RUNNING) {
562 diag_print(1,
"Readout after end of run!!!\n");
563 return bk_size(pevent);
566 struct timeval readout_start_time;
567 gettimeofday(&readout_start_time, NULL);
570 if((*trigger_modules[i]).read != NULL) {
571 int status = (*trigger_modules[
i]).read(pevent);
578 diag_print(2,
"Spent %f microseconds for readout.\n",
590 return bk_size(pevent);
603 if((*periodic_modules[i]).read != NULL) {
604 int status = (*periodic_modules[
i]).read(pevent);
617 return bk_size(pevent);