/******************************************* * Look the parameters in the CAEN Mail_box * * * *******************************************/ #include #include #include "../lib/mylib1.h" #include #include #include "a200.h" /* definitions relative to the CAEN system */ #include "a200.hmn" #define NMAX 45 #define NOK 40 #define SECONDS #define MINUTES * 60 #define FINE 1001 SY127_MBOX *hv_mod; int mev_id; char *caller; char *str[] = {" 0-3 ", " 4-7 ", " 8-11", "12-15", "16-19", "20-23", "24-27", "28-31", "32-35", "36-39"}; sighand(signal) register int signal; { printf(" %s : signal %d received \n", *caller, signal); if ( signal >= 2 && signal <= 3){ /* ^C or ^E ? */ A200_end(); sem_unl_del(mev_id, "sy127mod", caller); munlink(hv_mod); exit(0); } } main(argc, argv) int argc; char *argv[]; { char *par_code; int nwrite, nerror, par_val; short ndata, data[45], prot_word; int hra[6]; short i, ir, j, k, k2, chan, value, code; intercept(sighand); caller = argv[0]; if (argc < 2) { printf(" usage : guarda parameter \n"); printf(" ( v0, v1, i0, i1, ramp_up, ramp_down, \n"); printf(" vmon, imon, status, group, ch_type )\n"); exit(0); } par_code = argv[1]; if (!isdigit( *par_code)) { if ((par_val = (short) find_code(par_code)) < 0 ) exit(_errmsg(0," %s error decoding parameter\n",caller)); } else par_val = atoi(par_code); if((hv_mod = (SY127_MBOX *)modlink("sy127mod", 0)) == (SY127_MBOX *) -1) exit(_errmsg(errno,"guarda: err. link data module\n")); mev_id = sem_link_cr("SY127mod", argv[0]); sem_wait(mev_id, argv[0]); for(i=0; i<6; i++) { if(par_val >= VMON && par_val <= IMON) hra[i] = hv_mod->vim_tim[i]; else if(par_val == STATUS){ hra[i] = hv_mod->sta_tim[i]; prot_word = hv_mod->hv_par[1].prot_word; } else if(par_val >= V0 && par_val<= TYPE) hra[i] = hv_mod->pchk_tim[i]; else{ printf( "V0 %d\nV1 %d\nI0 %d\nI1 %d\nR_up %d\nR_dwn %d\ntrip %d\n", V0,V1,I0,I1,RAMP_UP,RAMP_DOWN,TRIP); printf( "status %d\nCH_TO_GR_ASS %d\nVMON %d\nIMON %d\nphase %d\n", STATUS, CH_TO_GR_ASS, VMON, IMON, PHASE); printf( "Time %d\n CH_Type %d\n", TIME, TYPE); sem_free(mev_id, argv[0]); exit(0); } } for(i=0; ihv_par[1].v0[i]; break; case V1: data[i] = hv_mod->hv_par[1].v1[i]; break; case I0: data[i] = hv_mod->hv_par[1].i0[i]; break; case I1: data[i] = hv_mod->hv_par[1].i1[i]; break; case VMON: data[i] = hv_mod->hv_par[1].vmon[i]; break; case IMON: data[i] = hv_mod->hv_par[1].imon[i]; break; case STATUS: data[i] = hv_mod->hv_par[1].status[i]; break; case RAMP_UP: data[i] = hv_mod->hv_par[1].ramp_up[i]; break; case RAMP_DOWN: data[i] = hv_mod->hv_par[1].ramp_down[i]; break; case TRIP: data[i] = hv_mod->hv_par[1].trip[i]; break; case CH_TO_GR_ASS: data[i] = hv_mod->hv_par[1].ch_to_gr_ass[i]; break; case PHASE: data[i] = hv_mod->hv_par[1].phase[i]; break; case TIME: data[i] = hv_mod->hv_par[1].time[i]; break; case TYPE: data[i] = hv_mod->hv_par[1].type[i]; break; } } if(par_val >= VMON && par_val <= IMON) { nwrite = hv_mod->nvim; nerror = hv_mod->nvim_err; } else if(par_val == STATUS) { nwrite = hv_mod->nsta; nerror = hv_mod->nsta_err; } else if(par_val >= V0 && par_val<= TYPE) { nwrite = hv_mod->nchk; nerror = hv_mod->nchk_err; } sem_free(mev_id, argv[0]); munlink(hv_mod); printf(" date of last update %d-%d-%d %d:%d:%d\n", hra[2],hra[1],hra[0],hra[3],hra[4],hra[5]); printf(" readouts %d , errors %d\n",nwrite,nerror); if (par_val == STATUS) printf(" protection word = 0x%x \n",prot_word); for (k=0, k2 = 0; k<40 ; k+=4, k2++){ printf(" %s: %6d %6d %6d %6d \n", str[k2], data[k],data[k+1], data[k+2],data[k+3]); } sem_unl_del(mev_id, "SY127mod", caller); } int find_code(par_code) char *par_code; { int i; for ( i = 0; *(par_code + i) != '\0'; i++) *(par_code + i) = (char) toupper((int) *(par_code + i)); for( i = 0; i < a200_conv_tab_size; i++) if (strcmp(a200_conv[i].key, par_code) == 0) break; if ( i < a200_conv_tab_size ) return a200_conv[i].code; else return -1; }