55std::vector<FMT_ID>
eq;
69 if ((
eq[jj].fmt !=
eq[ii].fmt)
70 && (
eq[jj].
id ==
eq[ii].
id)
71 && (
eq[jj].msk ==
eq[ii].msk)
73 printf(
"Duplicate eventID[%d] between Eq:%s & %s ",
eq[jj].
id,
eq[jj].Eqname,
75 printf(
"Dumping event in raw format\n");
84 strcpy(
eq[*
i].Fmt,
"GIVEN");
89 strcpy(
eq[*
i].Fmt,
"DUPLICATE");
103 printf(
"Evt#%d- ", seqno);
104 printf(
"%irun 0x%4.4uxid 0x%4.4uxmsk %5dmevt#", runno,
e->event_id,
e->trigger_mask, seqno);
105 printf(
"%5del/x%x %5dserial\n",
int(
e->data.size()),
int(
e->data.size()),
e->serial_number);
110 static char bars[] =
"|/-\\";
113 TMReaderInterface* r = TMNewReader(rep_file);
117 fprintf(stderr,
"Cannot open %s: %s\n", rep_file, r->fErrorString.c_str());
129 TMEvent*
e = TMReadEvent(r);
136 runno =
e->serial_number;
138 printf(
"Skipping event_# ... ");
139 printf(
"%d \r", seqno);
181 TMEvent*
e = TMReadEvent(r);
189 runno =
e->serial_number;
195 }
else if (
e->serial_number != prev_e.serial_number + 1) {
197 printf(
"\nLast - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
198 prev_e.event_id, prev_e.trigger_mask, prev_e.serial_number, prev_e.time_stamp,
199 prev_e.data_size, prev_e.data_size);
200 printf(
"Now - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
201 e->event_id,
e->trigger_mask,
e->serial_number,
202 e->time_stamp,
e->data_size,
e->data_size);
205 printf(
"Consistency check: %c - %i (Data size:%i)\r",
bars[
i_bar++ % 4],
206 prev_e.serial_number, prev_e.data_size);
220 printf(
"Evid:%4.4x- Mask:%4.4x- Serial:%d- Time:0x%x- Dsize:%d/0x%x\n",
221 e->event_id,
e->trigger_mask,
e->serial_number,
e->time_stamp,
222 e->data_size,
e->data_size);
224 std::string banklist;
225 for (
unsigned b=0; b<
e->banks.size(); b++) {
226 banklist +=
msprintf(
"%4s",
e->banks[b].name.c_str());
228 printf(
"#banks:%i Bank list:-%s-\n",
int(
e->banks.size()), banklist.c_str());
231 printf(
"------------------------ Event# %i --------------------------------\n",
i++);
236 printf(
"Searching for Bank -%s- Skiping event...%i\r",
sbank_name,
i++);
240 uint16_t
id =
e->event_id;
241 uint16_t msk =
e->trigger_mask;
253 printf(
"Searching for Bank -%s- Skiping event...%i\r",
sbank_name,
i++);
256 printf(
"------------------------ Event# %i --------------------------------\n",
i++);
260 printf(
"------------------------ Event# %i --------------------------------\n",
i++);
281 static char bars[] =
"|/-\\";
298 printf(
"\nLast - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
301 printf(
"Now - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
305 printf(
"Consistency check: %c - %i (Data size:%i)\r",
bars[
i_bar++ % 4],
309 memcpy((
char *) &pevh, (
char *) pheader,
sizeof(
EVENT_HEADER));
321 printf(
"------------------------ Event# %i ------------------------\n",
331 printf(
"#banks:%i Bank list:-%s-",
status, banklist);
333 pmbk = (
BANK *) (((
char *) pmbk) -
sizeof(
BANK32A));
335 pmbk = (
BANK *) (((
char *) pmbk) -
sizeof(
BANK32));
337 pmbk = (
BANK *) (((
char *) pmbk) -
sizeof(
BANK));
342 printf(
"#banks:%i Bank list:-%s-\n",
status, banklist);
347 printf(
"Evid:%4.4x- Mask:%4.4x- Serial:%d- Time:0x%x- Dsize:%d/0x%x\n",
351 printf(
"#banks:%i Bank list:-%s-\n",
status, banklist);
356 printf(
"Data format not supported: \"%s\"\n",
eq[
index].Fmt);
372int main(
int argc,
char **argv) {
405 for (
i = 1;
i < argc;
i++) {
406 if (strncmp(argv[
i],
"-x", 2) == 0) {
409 if (strncmp(argv[++
i],
"online", 6) != 0) {
418 for (
i = 1;
i < argc;
i++) {
419 if (argv[
i][0] ==
'-' && argv[
i][1] ==
'd')
421 else if (strncmp(argv[
i],
"-single", 7) == 0)
423 else if (strncmp(argv[
i],
"-j", 2) == 0)
425 else if (strncmp(argv[
i],
"-y", 2) == 0)
427 else if (argv[
i][0] ==
'-') {
428 if (
i + 1 >= argc || argv[
i + 1][0] ==
'-')
430 if (strncmp(argv[
i],
"-t", 2) == 0) {
431 mstrlcpy(
str, argv[++
i],
sizeof(
str));
432 if (strncmp(
str,
"m", 1) == 0)
434 }
else if (strncmp(argv[
i],
"-b", 2) == 0)
436 else if (strncmp(argv[
i],
"-i", 2) == 0)
438 else if (strncmp(argv[
i],
"-k", 2) == 0)
440 else if (strncmp(argv[
i],
"-a", 2) == 0)
442 else if (strncmp(argv[
i],
"-m", 2) == 0) {
443 mstrlcpy(
str, argv[++
i],
sizeof(
str));
444 if (strncmp(
str,
"r", 1) == 0)
446 if (strncmp(
str,
"b", 1) == 0)
448 }
else if (strncmp(argv[
i],
"-w", 2) == 0) {
449 mstrlcpy(
str, argv[++
i],
sizeof(
str));
450 if (strncmp(
str,
"h", 1) == 0)
452 else if (strncmp(
str,
"r", 1) == 0)
454 else if (strncmp(
str,
"l", 1) == 0)
456 else if (strncmp(
str,
"e", 1) == 0)
458 else if (strncmp(
str,
"j", 1) == 0)
460 }
else if (strncmp(argv[
i],
"-f", 2) == 0) {
461 mstrlcpy(
str, argv[++
i],
sizeof(
str));
462 if (strncmp(
str,
"d", 1) == 0)
464 if (strncmp(
str,
"x", 1) == 0)
466 if (strncmp(
str,
"a", 1) == 0)
468 }
else if (strncmp(argv[
i],
"-r", 2) == 0)
469 bl = atoi(argv[++
i]);
470 else if (strncmp(argv[
i],
"-x", 2) == 0) {
473 strcpy(rep_file, argv[++
i]);
476 printf(
"mdump for replay -x file name : file to inspect\n");
477 printf(
" -m mode : Display mode either Bank or raw\n");
478 printf(
" -b bank name : search for bank name (case sensitive)\n");
479 printf(
" -i evt_id (any) : event id from the FE\n");
480 printf(
" -[single] : Request single bank only (to be used with -b)\n");
481 printf(
" -y : Serial number consistency check(-i supported)\n");
482 printf(
" -j : Display # of banks and bank name list only for all the event\n");
483 printf(
" -k mask (any) : trigger_mask from FE setting\n");
484 printf(
">>> -i and -k are valid for YBOS ONLY if EVID bank is present in the event\n");
485 printf(
" -w what : [h]eader, [r]ecord, [l]ength\n");
486 printf(
" [e]vent, [j]bank_list (same as -j)\n");
487 printf(
">>> Header & Record are not supported for MIDAS as no physical record structure exists\n");
488 printf(
" -f format (auto): data representation ([x]/[d]/[a]scii) def:bank header content\n");
489 printf(
" -r # : skip event(MIDAS) to #\n");
490 printf(
" -a bytes : max event size to support (defaults to %d bytes)\n",
498 for (
i = 1;
i < argc;
i++) {
499 if (argv[
i][0] ==
'-' && argv[
i][1] ==
'd')
501 else if (strncmp(argv[
i],
"-s", 2) == 0)
503 else if (strncmp(argv[
i],
"-y", 2) == 0)
505 else if (strncmp(argv[
i],
"-j", 2) == 0)
507 else if (argv[
i][0] ==
'-') {
508 if (
i + 1 >= argc || argv[
i + 1][0] ==
'-')
510 else if (strncmp(argv[
i],
"-x", 2) == 0)
511 strncpy(rep_file, argv[++
i], 4);
512 else if (strncmp(argv[
i],
"-b", 2) == 0)
514 else if (strncmp(argv[
i],
"-l", 2) == 0)
516 else if (strncmp(argv[
i],
"-w", 2) == 0)
518 else if (strncmp(argv[
i],
"-m", 2) == 0) {
519 mstrlcpy(
str, argv[++
i],
sizeof(
str));
520 if (strncmp(
str,
"r", 1) == 0)
522 if (strncmp(
str,
"y", 1) == 0)
524 }
else if (strncmp(argv[
i],
"-g", 2) == 0) {
525 mstrlcpy(
str, argv[++
i],
sizeof(
str));
526 if (strncmp(
str,
"s", 1) == 0)
528 if (strncmp(
str,
"a", 1) == 0)
530 }
else if (strncmp(argv[
i],
"-f", 2) == 0) {
531 mstrlcpy(
str, argv[++
i],
sizeof(
str));
532 if (strncmp(
str,
"d", 1) == 0)
534 if (strncmp(
str,
"x", 1) == 0)
536 if (strncmp(
str,
"a", 1) == 0)
538 }
else if (strncmp(argv[
i],
"-i", 2) == 0)
540 else if (strncmp(argv[
i],
"-k", 2) == 0)
542 else if (strncmp(argv[
i],
"-z", 2) == 0)
543 strcpy(buf_name, argv[++
i]);
544 else if (strncmp(argv[
i],
"-t", 2) == 0) {
545 mstrlcpy(
str, argv[++
i],
sizeof(
str));
546 if (strncmp(
str,
"m", 1) == 0)
548 }
else if (strncmp(argv[
i],
"-h", 2) == 0)
550 else if (strncmp(argv[
i],
"-e", 2) == 0)
554 printf(
"mdump for online -l # : display # events (look 1)\n");
556 (
" -f format (auto): data representation ([x]/[d]/[a]scii) def:bank header content\n");
558 (
" -w time : insert wait in [sec] between each display\n");
560 (
" -m mode : Display mode either Bank or raw\n");
562 (
" -j : Display # of banks and bank name list only for all the event\n");
564 (
" -b bank name : search for bank name (case sensitive)\n");
566 (
" -i evt_id (any) : event id from the FE\n");
568 (
" -k mask (any) : trigger_mask from FE setting\n");
570 (
" -g type : sampling mode either SOME or all)\n");
572 (
" -s : report buffer data rate and fill level\n");
574 (
" -s -d : for use with -s: also report all buffer clients and requests\n");
576 (
" -t type (auto) : Bank format (Midas/Ybos)\n");
578 (
" -x Source : Data source selection def:online (see -x -h)\n");
580 (
" -y : Serial number consistency check\n");
582 (
">>> in case of -y it is recommented to used -g all\n");
584 (
" -z buffer name : Midas buffer name default:[SYSTEM]\n");
586 (
" [-h Hostname] [-e Experiment]\n\n");
594 if ((strstr(argv[0],
"mdump") == NULL))
openzip = 0;
else openzip = 1;
600 if ((pext = strrchr(rep_file,
'.')) != 0) {
604 if ((pext = strchr(rep_file,
'.')) != 0) {
605 if (strstr(pext + 1,
"mid"))
608 printf(
"\n>>> data type (-t) should be set by hand in -x mode for tape <<< \n\n");
617 (
"\n>>> data type (-t) should be set by hand in -x mode for tape <<< \n\n");
629 if (evt_display < 1 || evt_display > 9999) {
630 printf(
"mdump-F- <-display arg> out of range (1:9999)\n");
634 if (dsp_time < 0 || dsp_time > 100) {
635 printf(
"mdump-F- <-delay arg> out of range (1:100)\n");
654 cm_msg(
MERROR,
"mdump",
"Cannot open buffer \"%s\", bm_open_buffer() status %d", buf_name,
status);
665 printf(
"- MIDAS revision: %s -- Enter <!> to Exit ------- Midas Dump in Speed test mode ---\n",
668 printf(
"- MIDAS revision: %s -- Enter <!> to Exit ------- Midas Dump ---\n",
cm_get_revision());
677 char strtmp[256], equclient[256];
685 mstrlcpy(
eq[l].Eqname,
key.
name,
sizeof(
eq[l].Eqname));
688 size =
sizeof(equclient);
689 sprintf(strtmp,
"/equipment/%s/common/Frontend name",
key.
name);
699 sprintf(strtmp,
"/equipment/%s/common/event ID",
key.
name);
703 sprintf(strtmp,
"/equipment/%s/common/Trigger mask",
key.
name);
707 sprintf(strtmp,
"/equipment/%s/common/Format",
key.
name);
711 strcpy(
eq[l].Fmt,
"MIDAS");
714 strcpy(
eq[l].Fmt,
"FIXED");
718 strcpy(
eq[l].Fmt,
"UNKNOWN");
727 sprintf(
eq[l].Eqname,
"EBuilder");
745 strcpy(
eq[l].Fmt,
"MIDAS");
747 printf(
"Format unknown for Event Builder \"%s\"\n",
str);
756 printf(
"ID\tMask\tFormat\tEq_name\n");
757 while (
eq.size() > 0 &&
eq[
i].fmt) {
758 printf(
"%d\t%d\t%s\t%s\n",
eq[
i].
id,
eq[
i].msk,
eq[
i].Fmt,
eq[
i].Eqname);
771 double rate =
count / 1024.0 / 1024.0 / ((
stop_time - start_time) / 1000.0);
777 filled += buffer_header.
size;
780 int max_used_client = 0;
785 printf(
"buffer name [%s], clients: %d, max: %d, size: %d, rp: %d, wp: %d, ine: %d, oute: %d\n",
800 used += buffer_header.
size;
803 if (used > max_used) {
809 printf(
" client %d: name [%s], pid: %d, port: %d, rp: %d, used: %d, max_req: %d, read_wait: %d, write_wait: %d, wake_up: %d, get_all: %d, active: %d, timeout: %d\n",
826 printf(
" request %d: id: %d, valid: %d, event_id: %d, trigger_mask: 0x%x, type: %d\n",
836 printf(
"buffer name [%s], ", buffer_header.
name);
837 printf(
"filled: %4.1f%%, ", 100 - 100.0 * filled / buffer_header.
size);
838 printf(
"used: %4.1f%% by [%s], ", 100.0 * max_used / buffer_header.
size,
840 printf(
"rate: %1.3f MiB/sec\n", rate);
854 if ((
char) ch ==
'!')
BOOL bk_is32a(const void *event)
BOOL bk_is32(const void *event)
INT bk_list(const void *event, char *bklist)
INT bk_find(const BANK_HEADER *pbkh, const char *name, DWORD *bklen, DWORD *bktype, void **pdata)
INT bm_open_buffer(const char *buffer_name, INT buffer_size, INT *buffer_handle)
INT bm_request_event(HNDLE buffer_handle, short int event_id, short int trigger_mask, INT sampling_type, HNDLE *request_id, EVENT_HANDLER *func)
INT bm_set_cache_size(INT buffer_handle, size_t read_size, size_t write_size)
INT cm_yield(INT millisec)
INT cm_get_experiment_database(HNDLE *hDB, HNDLE *hKeyClient)
INT cm_connect_experiment(const char *host_name, const char *exp_name, const char *client_name, void(*func)(char *))
INT cm_disconnect_experiment(void)
INT cm_get_environment(char *host_name, int host_name_size, char *exp_name, int exp_name_size)
const char * cm_get_revision()
INT cm_set_watchdog_params(BOOL call_watchdog, DWORD timeout)
void md_event_display(const void *pevent, INT data_fmt, INT dsp_mode, INT dsp_fmt, const char *bn)
INT md_event_swap(INT data_fmt, void *pevent)
void md_bank_display(void *pmbh, void *pbk, INT data_fmt, INT dsp_mode, INT dsp_fmt)
INT ss_getchar(BOOL reset)
INT ss_sleep(INT millisec)
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
INT cm_set_msg_print(INT system_mask, INT user_mask, int(*func)(const char *))
BOOL equal_ustring(const char *str1, const char *str2)
INT db_get_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, void *data, INT *buf_size, DWORD type, BOOL create)
INT db_get_key(HNDLE hDB, HNDLE hKey, KEY *key)
INT db_find_key(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
INT db_enum_key(HNDLE hDB, HNDLE hKey, INT idx, HNDLE *subkey_handle)
BOOL debug
debug printouts
char host_name[HOST_NAME_LENGTH]
DWORD data_format_check(EVENT_HEADER *pevent, INT *i)
void process_event(HNDLE hBuf, HNDLE request_id, EVENT_HEADER *pheader, void *pevent)
int replog(int data_fmt, char *rep_file, int bl, int action, int max_event_size)
void md_all_info_display(int seqno, int runno, TMEvent *e)
char expt_name[NAME_LENGTH]
INT bm_get_buffer_info(INT buffer_handle, BUFFER_HEADER *buffer_header)
std::string msprintf(const char *format,...)
#define DEFAULT_MAX_EVENT_SIZE
#define DEFAULT_BUFFER_SIZE
#define EVENT_BUFFER_NAME
#define STRING_BANKLIST_MAX
EVENT_REQUEST event_request[MAX_EVENT_REQUESTS]
BUFFER_CLIENT client[MAX_CLIENTS]