/* close communication with mainframe under logical number 'id' and stop thread */ int sy527Stop(unsigned id) { char name[MAX_NAME]; int i, j, ret; /* lock global mutex to prevent other mainframes to be stoped until we are done with this one */ LOCK_GLOBAL; CHECK_ID(id); CHECK_OPEN(id); strcpy(name, Measure[id]->name); /* stop thread */ force_exit[id] = 1; ret = CAENHVDeinitSystem(name); if(ret == CAENHV_OK) { printf("\nConnection >%s< closed (num. %d)\n\n", name,ret); Measure[id]->id = -1; } else { printf("\nERROR(sy527): %s (num. %d)\n\n", CAENHVGetError(name), ret); UNLOCK_GLOBAL; return(CAENHV_SYSERR); } /* unregister mainframe */ j = -1; for(i=0; i<nmainframes; i++) { if(mainframes[i] == id) { j = i; break; } } if(j==-1) { printf("ERROR: mainframe %d was not registered\n",id); UNLOCK_GLOBAL; return(CAENHV_SYSERR); } for(i=j; i<nmainframes; i++) mainframes[i] = mainframes[i+1]; nmainframes --; UNLOCK_GLOBAL; return(CAENHV_OK); }
int sy1527GetMap(unsigned int id) { unsigned short NrOfSl, *SerNumList, *NrOfCh, ChList[MAX_CHAN]; char *ModelList, *DescriptionList; unsigned char *FmwRelMinList, *FmwRelMaxList; char name[MAX_CAEN_NAME]; int i, j, ret; unsigned long tipo; char ParName[MAX_CAEN_NAME]; CHECK_ID(id); CHECK_OPEN(id); strcpy(name, Measure[id].name); /* char *ParNameList, *plist; CAENHVGetChParamInfo(name,0,1,&ParNameList); plist=ParNameList; for(i=0;i<10;i++){ if(*plist == '\0'){printf("NULL %d\n",i);break;} //if(ParNameList[i]) printf("param=%s %d\n",plist, i); plist+=strlen(plist)+1; //else printf("param number %d is NULL\n", i); } */ /* char **ParNameList; CAENHVGetChParamInfo(name,1,0,ParNameList); // plist=ParNameList; for(i=0;i<10;i++){ // if(*plist == '\0'){printf("NULL %d\n",i);break;} if(ParNameList[i]) printf("param=%s %d\n",ParNameList[i], i); // plist+=strlen(plist)+1; //else printf("param number %d is NULL\n", i); } */ /* char *ParNameList, (*parnamelist)[100]; CAENHVGetChParamInfo(name,0,0,&ParNameList); parnamelist=( char (*)[100])ParNameList; int nj=0; for(nj=0;parnamelist[nj][0];nj++); printf("nj=%d\n",nj); // plist=ParNameList; // for(i=0;i<10;i++){ // if(*plist == '\0'){printf("NULL %d\n",i);break;} // if(ParNameList[i]) // printf("param=%s %d\n",ParNameList[i], i); // plist+=strlen(plist)+1; //else printf("param number %d is NULL\n", i); // } */ ret = CAENHVGetCrateMap(name, &NrOfSl, &NrOfCh, &ModelList, &DescriptionList, &SerNumList, &FmwRelMinList, &FmwRelMaxList ); if(ret != CAENHV_OK) { printf("ERROR(sy1527): %s (num. %d)\n\n", CAENHVGetError(name), ret); } else { char *m = ModelList, *d = DescriptionList; printf("Measure MAP:\n\n");// my: printf("NrofSl=%d\n",NrOfSl); // my: Measure[id].nslots = NrOfSl; printf("=========================> %d %d\n",id,Measure[id].nslots); //my: Demand[id].nslots = NrOfSl; for(i=0; i<NrOfSl; i++, m+=strlen(m)+1, d+=strlen(d)+1) { if(*m == '\0') { Measure[id].board[i].nchannels = 0; Demand[id].board[i].nchannels = 0; /*printf("Board %2d: Not Present\n", i);*/ } else { ///----------------- HV parameters finding piece ------------------- // printf("name================================================%s\n",name); int retv; retv=CAENHVGetChParamInfo(name,i,0,&g_parr); int nj=0; int ni=0; int index=0; while(1){ if(!((nj)%10)){ if((*(g_parr+nj))==0){ g_parr_index[index++]=ni; // printf("%s\n",g_parr+ni); break; } else{ if(nj!=0){ // printf("%s\n",g_parr+ni); g_parr_index[index++]=ni; ni=nj; } } } nj++; //printf("%c %d\n",*(parr+nj), *(parr+nj)); } int found=0; char tmp[PATH_MAX]; strcpy(tmp,getenv("HOME")); strcat(tmp,"/.hv_params"); if(!fp_params){ fp_params = fopen(tmp,"w+"); if(fp_params) fprintf(fp_params, "This file contains not found parameters: \n"); fflush(fp_params); } // printf("nj================================================%d i=%d retv=%d %d\n",nj, i, retv,sizeof(A1520param)); for(ni=0; ni < nA1520param; ni++){ found=0; for(nj=0;nj<index;nj++){ if(!strcmp(A1520param[ni],g_parr+g_parr_index[nj]))found=1; } if(!found){ if(fp_params) fprintf(fp_params, "parameter %s: NOT FOUND. CRATE=%s SLOT=%d \n",A1520param[ni], name, i); exit(1); } } // if(fp_params) // fprintf(fp_params, "all parameters are found in crate:%s the slot: %d\n",name, i); ///----------------- end of HV parameters finding piece ------------------- strncpy(Measure[id].board[i].modelname,m,MAX_CAEN_NAME-1); strncpy(Measure[id].board[i].description,d,MAX_CAEN_NAME-1); Measure[id].board[i].nchannels = NrOfCh[i]; Measure[id].board[i].sernum = SerNumList[i]; Measure[id].board[i].relmax = FmwRelMaxList[i]; Measure[id].board[i].relmin = FmwRelMinList[i]; strncpy(Demand[id].board[i].modelname,m,MAX_CAEN_NAME-1); strncpy(Demand[id].board[i].description,d,MAX_CAEN_NAME-1); Demand[id].board[i].nchannels = NrOfCh[i]; Demand[id].board[i].sernum = SerNumList[i]; Demand[id].board[i].relmax = FmwRelMaxList[i]; Demand[id].board[i].relmin = FmwRelMinList[i]; printf("Board %2d: %s %s Nr. Ch: %d Ser. %d Rel. %d.%d\n", i, m, d, NrOfCh[i], SerNumList[i], FmwRelMaxList[i], FmwRelMinList[i]); /* get params info */ for(j=0; j<Demand[id].board[i].nchannels; j++) ChList[j] = (unsigned short)j; if(!strcmp(Measure[id].board[i].modelname,"A1535") || !strcmp(Measure[id].board[i].modelname,"A1733") ) // my: was A1520 { printf("---> found board %s\n",Measure[id].board[i].modelname); Measure[id].board[i].nparams = nA1535param; Demand[id].board[i].nparams = nA1535param; for(j=0; j<Measure[id].board[i].nparams; j++) { strcpy(Measure[id].board[i].parnames[j],A1535param[j]); strcpy(Demand[id].board[i].parnames[j],A1535param[j]); strcpy(ParName,Measure[id].board[i].parnames[j]); ret=CAENHVGetChParamProp(name,i,ChList[0],ParName,"Type",&tipo); if(ret != CAENHV_OK) { printf("CAENHVGetChParamProp error: %s (num. %d) ParName=>%s<\n", CAENHVGetError(name),ret,ParName); Measure[id].board[i].nchannels = 0; Demand[id].board[i].nchannels = 0; return(CAENHV_SYSERR); } else { Measure[id].board[i].partypes[j] = tipo; Demand[id].board[i].partypes[j] = tipo; } } } else if( !strcmp(Measure[id].board[i].modelname,"A1520")) // my: was A1520 { printf("---> found board %s\n",Measure[id].board[i].modelname); Measure[id].board[i].nparams = nA1520param; Demand[id].board[i].nparams = nA1520param; for(j=0; j<Measure[id].board[i].nparams; j++) { strcpy(Measure[id].board[i].parnames[j],A1520param[j]); strcpy(Demand[id].board[i].parnames[j],A1520param[j]); strcpy(ParName,Measure[id].board[i].parnames[j]); ret=CAENHVGetChParamProp(name,i,ChList[0],ParName,"Type",&tipo); if(ret != CAENHV_OK) { printf("CAENHVGetChParamProp error: %s (num. %d) ParName=>%s<\n", CAENHVGetError(name),ret,ParName); Measure[id].board[i].nchannels = 0; Demand[id].board[i].nchannels = 0; return(CAENHV_SYSERR); } else { Measure[id].board[i].partypes[j] = tipo; Demand[id].board[i].partypes[j] = tipo; } } } else { printf("Unknown board =%s\n",Measure[id].board[i].modelname); Measure[id].board[i].nchannels = 0; Demand[id].board[i].nchannels = 0; } } } /*printf("\n");*/ free(SerNumList); free(ModelList); free(DescriptionList); free(FmwRelMinList); free(FmwRelMaxList); free(NrOfCh); // free(ParNameList); // my: } return(CAENHV_OK); }
int sy1527SetBoard(unsigned int id, unsigned int board) { int nXXXXXparam; char *XXXXparam[MAX_PARAM]; char name[MAX_CAEN_NAME]; int i, ipar, iparr, ret; unsigned short Slot, ChNum, ChList[MAX_CHAN], Ch; float fParVal;///, fparval[MAX_CHAN]; unsigned long tipo, lParVal;///, lparval[MAX_CHAN]; char ParName[MAX_CAEN_NAME]; CHECK_ID(id); CHECK_OPEN(id); strcpy(name, Demand[id].name); nXXXXXparam = Demand[id].board[board].nparams; for(i=0;i<nXXXXXparam;i++) XXXXparam[i]=Demand[id].board[board].parnames[i]; Slot = board; ChNum = Demand[id].board[board].nchannels; for(i = 0; i<ChNum; i++) ChList[i] = (unsigned short)i; /* loop over parameters */ for(iparr=0; iparr<nXXXXXparam; iparr++) { /* patch to make sure 'PwEn' always executed before 'Pw' */ if(iparr == Pw) ipar = PwEn; else if(iparr == PwEn) ipar = Pw; else ipar = iparr; strcpy(ParName,XXXXparam[ipar]); /* Param name */ tipo = Demand[id].board[board].partypes[ipar]; /* will be good to do it this way, but is does not work if(tipo == PARAM_TYPE_NUMERIC) { for(Ch=0; Ch<ChNum; Ch++) { fparval[Ch] = Demand[id].board[board].channel[Ch].fval[ipar]; fparval[Ch] = 1.0*Ch+1.0; printf("Value %s: %f\n",ParName,fparval[Ch]); } ret = CAENHVSetChParam(name, Slot, ParName, ChNum, ChList, fparval); } else { for(Ch=0; Ch<ChNum; Ch++) { lparval[Ch] = Demand[id].board[board].channel[Ch].lval[ipar]; printf("Value %s: %ld\n",ParName,lparval[Ch]); } ret = CAENHVSetChParam(name, Slot, ParName, ChNum, ChList, lparval); } if(ret != CAENHV_OK) { printf("CAENHVSetChParam: %s (num. %d)\n",CAENHVGetError(name),ret); return(CAENHV_SYSERR); } */ /* loop over all channels */ for(Ch=0; Ch<ChNum; Ch++) { if(Demand[id].board[board].channel[Ch].setflag[ipar] == 1) { if(tipo == PARAM_TYPE_NUMERIC) { fParVal = Demand[id].board[board].channel[Ch].fval[ipar]; /*printf("Set Value %s: %f\n",ParName,fParVal);*/ ret = CAENHVSetChParam(name, Slot, ParName, 1, &Ch, &fParVal); } else { lParVal = Demand[id].board[board].channel[Ch].lval[ipar]; /// printf("Set Value %s: %ld\n",ParName,lParVal); ret = CAENHVSetChParam(name, Slot, ParName, 1, &Ch, &lParVal); } if(ret != CAENHV_OK) { /* set was unsuccessful so return error */ printf("CAENHVSetChParam error: %s (num. %d)\n",CAENHVGetError(name),ret); return(CAENHV_SYSERR); } else { /* set was successful so cleanup setflag */ Demand[id].board[board].channel[Ch].setflag[ipar] = 0; } } } } return(CAENHV_OK); }
int sy1527GetBoard(unsigned int id, unsigned int board) { int b_status=0;/// b_status_res=0; /// my: smi int nXXXXXparam; char *XXXXparam[MAX_PARAM]; char name[MAX_CAEN_NAME]; int i, ipar, ret, i10; unsigned short Slot, ChNum, ChList[MAX_CHAN], Ch; float fParValList[MAX_CHAN]; unsigned long tipo, lParValList[MAX_CHAN]; char ParName[MAX_CAEN_NAME]; CHECK_ID(id); CHECK_OPEN(id); strcpy(name, Measure[id].name); for(i10=0;i10<nmainframes;i10++){ // my_n: hbeat if(mainframes[i10]==id)break; } nXXXXXparam = Measure[id].board[board].nparams; for(i=0;i<nXXXXXparam;i++) XXXXparam[i]=Measure[id].board[board].parnames[i]; Slot = board; ChNum = Measure[id].board[board].nchannels; for(i = 0; i<ChNum; i++) { Ch = i; ChList[i] = (unsigned short)Ch; } /* loop over parameters */ for(ipar=0; ipar<nXXXXXparam; ipar++) { strcpy(ParName,XXXXparam[ipar]); /* Param name */ tipo = Measure[id].board[board].partypes[ipar]; // if(!strcmp(ParName,"RUp"))printf("RUp type=%d %d\n",tipo,PARAM_TYPE_NUMERIC); if(tipo == PARAM_TYPE_NUMERIC) { ret = CAENHVGetChParam(name, Slot, ParName, ChNum, ChList, fParValList); //if(!strcmp(ParName,"RUp")){ printf("%s %d %d \n",name, Slot, ChNum); //printf("RUp f %f\n",fParValList[0]);} } else { ret = CAENHVGetChParam(name, Slot, ParName, ChNum, ChList, lParValList); //if(!strcmp(ParName,"RUp"))printf("RUp l %d\n", lParValList); } ///-------------- simulator ------- /** FILE *fps=fopen("/home/clasioc/flags","r"); int flags; //printf("pointer=%p\n",fps); fscanf(fps,"%d",&flags);//printf("%d\n",flags); //printf("%s\n",name); if(!strcmp(name,"B_HV009")) { ///printf("%d\n",flags); if(flags==1) { printf("==%d\n",flags); ret=4001;} } fclose(fps); */ ///-------------------------------- if(ret != CAENHV_OK) { printf("CAENHVGetChParam error: %s (num. %d) id=%d \n\n", CAENHVGetError(name), ret, id); mainframes_disconnect[i10]=1; /// my_n: hbeat /// mainframes[i10]=-1; } else { /// mainframes_disconnect[i10]=0; /// my_n: hbeat /*printf("PARAM VALUE\n");*/ if(tipo == PARAM_TYPE_NUMERIC) { for(i=0; i<ChNum; i++) { Measure[id].board[board].channel[i].fval[ipar] = fParValList[i]; /*printf("Slot: %2d Ch: %3d %s: %10.2f\n", Slot, ChList[i], ParName, fParValList[i]);*/ } } else { for(i=0; i<ChNum; i++) { Measure[id].board[board].channel[i].lval[ipar] = lParValList[i]; if(ipar==Status){ /// my: smi: accumulates all channels attuses into board status b_status = b_status | lParValList[i]; if(!(lParValList[i] & 0x1))b_status = b_status | BIT_OFF; /// at least one channel in the board is OFF } /*printf("Slot: %2d Ch: %3d %s: %x\n", Slot, ChList[i], ParName, lParValList[i]);*/ } } } } /// my:smi /* char smi_obj_name1[150]; /// temporal char smi_obj_name[150]; /// temporal char smi_command[150]; /// temporal if(b_status & BIT_ON)b_status_res=BIT_ON; if(b_status & (BIT_RAMPUP | BIT_RAMPDOWN ))b_status_res=BIT_RAMPUP; if(b_status & BIT_OFF)b_status_res=BIT_OFF; if(b_status & (BIT_INTTRIP | BIT_EXTTRIP | BIT_OVERCUR | BIT_OVERVOLT | BIT_UNDERVOLT )) b_status_res=BIT_INTTRIP; if(b_status_res==BIT_ON)strcpy(smi_command,"SET_ON"); else if(b_status_res==BIT_RAMPUP)strcpy(smi_command,"SET_ON"); /// temporal !!! else if(b_status_res==BIT_OFF)strcpy(smi_command,"SET_OFF"); else if(b_status_res==BIT_INTTRIP)strcpy(smi_command,"SET_ERROR"); if(b_status_res != boards_status[id][board]){ sprintf(smi_obj_name1, CRATE_LABEL, id); sprintf(smi_obj_name, "HV_TEST::%s_%d", smi_obj_name1, board); smiui_send_command(smi_obj_name, smi_command); printf("smi: smi_obj_name=%s smi_command=%s \n", smi_obj_name, smi_command); boards_status[id][board]=b_status_res; } */ return(CAENHV_OK); }
/* open communication with mainframe under logical number 'id', do all necessary initialization and start thread */ int sy1527Start(unsigned id_nowused, char *ip_address) { int id; ///my: char arg[30], userName[20], passwd[30], name[MAX_CAEN_NAME]; int link, ret; pthread_mutex_lock(&global_mutex); /* do global initialization on first call */ if(nmainframes == -1) sy1527Init(); nmainframes++;///my: ///id=nmainframes-1;///my: ///if((id+1)>nmainframes)nmainframes=id+1; id=id_nowused;///nmainframes-1;///my: printf("++++++++++++++++++++++++++++++++++++++++++++++++ nmainframes=%d id=%d\n", nmainframes, id); /* lock global mutex to prevent other mainframes to be started until we are done with this one */ /// my: move upward - pthread_mutex_lock(&global_mutex); otherwise many sy1527Init() are possible if(nmainframes >= MAX_HVPS) { printf("ERROR: no more empty slots\n"); pthread_mutex_unlock(&global_mutex); return(CAENHV_SYSERR); } CHECK_ID(id); CHECK_FREE(id); /// my: sprintf(name,"sy1527_%03d",id); sprintf(name, CRATE_LABEL, id); /// my: printf("System Name set as >%s<\n",name); strcpy(arg,ip_address); printf("TCP/IP address set as >%s<\n",arg); link = LINKTYPE_TCPIP; /* strcpy(userName, "user"); strcpy(passwd, "user"); */ strcpy(userName, "admin"); strcpy(passwd, "admin"); ret = CAENHVInitSystem(name, link, arg, userName, passwd); printf("my: id_index=%d id=%d name=%s", id, ret, name ); printf("\nCAENHVInitSystem error: %s (num. %d)\n\n", CAENHVGetError(name),ret); if(ret == CAENHV_OK) { if(strlen(ip_address)>=MAX_CAEN_NAME) { printf("too long mainfraime IP: exits now\n"); /// my: exit(1); } strcpy(Measure[id].IPADDR,ip_address); /// my: Measure[id].id = ret; strcpy(Measure[id].name, name); Demand[id].id = ret; strcpy(Demand[id].name, name); } else { printf("\n CAENHVInitSystem returned %d\n\n",ret); pthread_mutex_unlock(&global_mutex); return(CAENHV_SYSERR); } /* init mainframe mutex */ pthread_mutex_init(&mainframe_mutex[id], &mattr); /* start thread */ stat[id].threadid = id; force_exit[id] = 0; if(pthread_create(&idth[id],NULL,sy1527MainframeThread,(void *)&stat[id])!=0) { printf("ERROR: pthread_create(0x%08lx[%d],...) failure\n",idth[id],id); pthread_mutex_unlock(&global_mutex); return(CAENHV_SYSERR); } else { printf("INFO: pthread_create(0x%08lx[%d],...) done\n",idth[id],id); } /* register mainframe */ mainframes[nmainframes-1] = id; /// my: removed nmainframes++ ///mainframes[id] = id; printf("====================== 111111111111\n"); /* get mainframe map */ sy1527GetMap(id); printf("====================== 222222222222\n"); pthread_mutex_unlock(&global_mutex); return(CAENHV_OK); }
/* open communication with mainframe under logical number 'id', do all necessary initialization and start thread */ int sy527Start(unsigned id, char *ip_address) { char arg[30], userName[20], passwd[30], name[MAX_NAME]; int link, ret; printf("123\n");fflush(stdout); /* do global initialization on first call */ if(nmainframes == -1) sy527Init(); printf("456\n");fflush(stdout); /* lock global mutex to prevent other mainframes to be started until we are done with this one */ LOCK_GLOBAL; if(nmainframes >= MAX_HVPS) { printf("ERROR: no more empty slots\n"); UNLOCK_GLOBAL; return(CAENHV_SYSERR); } CHECK_ID(id); CHECK_FREE(id); sprintf(name,"sy527_%03d",id); printf("System Name set as >%s<\n",name); /*strcpy(arg,ip_address); for sy1527*/ /*printf("TCP/IP address set as >%s<\n",arg);*/ strcpy(arg,"sy527_0x100000_9"); /*link = LINKTYPE_TCPIP; for sy1527*/ link = LINKTYPE_CAENET; strcpy(userName, "user"); strcpy(passwd, "user"); ret = CAENHVInitSystem(name, link, arg, userName, passwd); printf("\nCAENHVInitSystem: %s (num. %d)\n\n", CAENHVGetError(name),ret); if(ret == CAENHV_OK) { Measure[id]->id = ret; strcpy(Measure[id]->name, name); Demand[id]->id = ret; strcpy(Demand[id]->name, name); } else { printf("\n CAENHVInitSystem returned %d\n\n",ret); UNLOCK_GLOBAL; return(CAENHV_SYSERR); } #ifndef vxWorks /* init mainframe mutex */ pthread_mutex_init(&mainframe_mutex[id], &mattr); #else mainframe_mutex[id] = semBCreate(SEM_Q_FIFO, SEM_FULL); if(mainframe_mutex[id] == NULL) { printf("ERROR: could not allocate 'mainframe_mutex' semaphore\n"); return(0); } #endif /* start thread */ stat[id].threadid = id; force_exit[id] = 0; #ifdef vxWorks { int iTaskStat; iTaskStat = taskSpawn("SY527THRD", 150, 0, 800000, sy527Thread, &stat[id], 0, 0,0,0,0,0,0,0,0); printf("taskSpawn(\"SY527THRD\") returns %d\n",iTaskStat); if(iTaskStat == ERROR) { perror("taskSpawn"); UNLOCK_GLOBAL; } } #else if(pthread_create(&idth[id],NULL,sy527Thread,(void *)&stat[id])!=0) { printf("ERROR: pthread_create(0x%08lx[%d],...) failure\n",idth[id],id); UNLOCK_GLOBAL; return(CAENHV_SYSERR); } else { printf("INFO: pthread_create(0x%08lx[%d],...) done\n",idth[id],id); } #endif /* register mainframe */ mainframes[nmainframes++] = id; /* get mainframe map */ sy527GetMap(id); UNLOCK_GLOBAL; return(CAENHV_OK); }
int sy527GetMap(unsigned int id) { unsigned short NrOfSl, *SerNumList, *NrOfCh, ChList[MAX_CHAN]; char *ModelList, *DescriptionList; unsigned char *FmwRelMinList, *FmwRelMaxList; char name[MAX_NAME]; int i, j, ret; unsigned long tipo; char ParName[MAX_NAME]; CHECK_ID(id); CHECK_OPEN(id); strcpy(name, Measure[id]->name); ret = CAENHVGetCrateMap(name, &NrOfSl, &NrOfCh, &ModelList, &DescriptionList, &SerNumList, &FmwRelMinList, &FmwRelMaxList ); if(ret != CAENHV_OK) { printf("ERROR(sy527): %s (num. %d)\n\n", CAENHVGetError(name), ret); } else { char *m = ModelList, *d = DescriptionList; /*printf("Measure MAP:\n\n");*/ Measure[id]->nslots = NrOfSl; printf("=========================> %d %d\n",id,Measure[id]->nslots); Demand[id]->nslots = NrOfSl; for(i=0; i<NrOfSl; i++, m+=strlen(m)+1, d+=strlen(d)+1) { if(*m == '\0') { Measure[id]->board[i].nchannels = 0; Demand[id]->board[i].nchannels = 0; printf("Board %2d: Not Present\n", i); } else { strncpy(Measure[id]->board[i].modelname,m,MAX_NAME-1); strncpy(Measure[id]->board[i].description,d,MAX_NAME-1); Measure[id]->board[i].nchannels = NrOfCh[i]; Measure[id]->board[i].sernum = SerNumList[i]; Measure[id]->board[i].relmax = FmwRelMaxList[i]; Measure[id]->board[i].relmin = FmwRelMinList[i]; strncpy(Demand[id]->board[i].modelname,m,MAX_NAME-1); strncpy(Demand[id]->board[i].description,d,MAX_NAME-1); Demand[id]->board[i].nchannels = NrOfCh[i]; Demand[id]->board[i].sernum = SerNumList[i]; Demand[id]->board[i].relmax = FmwRelMaxList[i]; Demand[id]->board[i].relmin = FmwRelMinList[i]; printf("Board %2d: %s %s Nr. Ch: %d Ser. %d Rel. %d.%d\n", i, m, d, NrOfCh[i], SerNumList[i], FmwRelMaxList[i], FmwRelMinList[i]); /* get params info */ for(j=0; j<Demand[id]->board[i].nchannels; j++) ChList[j] = (unsigned short)j; printf("The board is: >%s<\n",Measure[id]->board[i].modelname); if( !strcmp(Measure[id]->board[i].modelname,"A1520") ) { printf("The board %s is connecting\n",Measure[id]->board[i].modelname); Measure[id]->board[i].nparams = nA1520param; Demand[id]->board[i].nparams = nA1520param; for(j=0; j<Measure[id]->board[i].nparams; j++) { strcpy(Measure[id]->board[i].parnames[j],A1520param[j]); strcpy( Demand[id]->board[i].parnames[j],A1520param[j]); strcpy(ParName,Measure[id]->board[i].parnames[j]); ret=CAENHVGetChParamProp(name,i,ChList[0],ParName,"Type",&tipo); if(ret != CAENHV_OK) { printf("CAENHVGetChParamProp: %s (num. %d) ParName=>%s<\n", CAENHVGetError(name),ret,ParName); Measure[id]->board[i].nchannels = 0; Demand[id]->board[i].nchannels = 0; return(CAENHV_SYSERR); } else { Measure[id]->board[i].partypes[j] = tipo; Demand[id]->board[i].partypes[j] = tipo; } } } else if( !strcmp(Measure[id]->board[i].modelname,"A1533") || !strcmp(Measure[id]->board[i].modelname,"A1733") ) { printf("The board %s is connecting\n",Measure[id]->board[i].modelname); Measure[id]->board[i].nparams = nA1533_1733param; Demand[id]->board[i].nparams = nA1533_1733param; for(j=0; j<Measure[id]->board[i].nparams; j++) { strcpy(Measure[id]->board[i].parnames[j],A1533_1733param[j]); strcpy( Demand[id]->board[i].parnames[j],A1533_1733param[j]); strcpy(ParName,Measure[id]->board[i].parnames[j]); ret=CAENHVGetChParamProp(name,i,ChList[0],ParName,"Type",&tipo); if(ret != CAENHV_OK) { printf("CAENHVGetChParamProp: %s (num. %d) ParName=>%s<\n", CAENHVGetError(name),ret,ParName); Measure[id]->board[i].nchannels = 0; Demand[id]->board[i].nchannels = 0; return(CAENHV_SYSERR); } else { Measure[id]->board[i].partypes[j] = tipo; Demand[id]->board[i].partypes[j] = tipo; } } } else if( !strcmp(Measure[id]->board[i].modelname,"A944N") ) { printf("The board %s is connecting\n",Measure[id]->board[i].modelname); Measure[id]->board[i].nparams = nA944Nparam; Demand[id]->board[i].nparams = nA944Nparam; for(j=0; j<Measure[id]->board[i].nparams; j++) { strcpy(Measure[id]->board[i].parnames[j],A944Nparam[j]); strcpy( Demand[id]->board[i].parnames[j],A944Nparam[j]); strcpy(ParName,Measure[id]->board[i].parnames[j]); ret=CAENHVGetChParamProp(name,i,ChList[0],ParName,"Type",&tipo); if(ret != CAENHV_OK) { printf("CAENHVGetChParamProp: %s (num. %d) ParName=>%s<\n", CAENHVGetError(name),ret,ParName); Measure[id]->board[i].nchannels = 0; Demand[id]->board[i].nchannels = 0; return(CAENHV_SYSERR); } else { Measure[id]->board[i].partypes[j] = tipo; Demand[id]->board[i].partypes[j] = tipo; } } } else { printf("Unknown board >%s<\n",Measure[id]->board[i].modelname); Measure[id]->board[i].nchannels = 0; Demand[id]->board[i].nchannels = 0; } } } /*printf("\n");*/ free(SerNumList); free(ModelList); free(DescriptionList); free(FmwRelMinList); free(FmwRelMaxList); free(NrOfCh); } return(CAENHV_OK); }
int sy527GetBoard(unsigned int id, unsigned int board) { int nXXXXXparam; char *XXXXparam[MAX_PARAM]; char name[MAX_NAME]; int i, ipar, ret; unsigned short Slot, ChNum, ChList[MAX_CHAN], Ch; float fParValList[MAX_CHAN]; unsigned long tipo, lParValList[MAX_CHAN]; char ParName[MAX_NAME]; CHECK_ID(id); CHECK_OPEN(id); strcpy(name, Measure[id]->name); nXXXXXparam = Measure[id]->board[board].nparams; for(i=0;i<nXXXXXparam;i++) XXXXparam[i]=Measure[id]->board[board].parnames[i]; Slot = board; ChNum = Measure[id]->board[board].nchannels; for(i = 0; i<ChNum; i++) { Ch = i; ChList[i] = (unsigned short)Ch; } /* loop over parameters */ for(ipar=0; ipar<nXXXXXparam; ipar++) { strcpy(ParName,XXXXparam[ipar]); /* Param name */ tipo = Measure[id]->board[board].partypes[ipar]; #ifdef DEBUG printf("%s called ipar=%d\n",__FUNCTION__,ipar); #endif if(tipo == PARAM_TYPE_NUMERIC) { ret = CAENHVGetChParam(name, Slot, ParName, ChNum, ChList, fParValList); } else { ret = CAENHVGetChParam(name, Slot, ParName, ChNum, ChList, lParValList); } if(ret != CAENHV_OK) { printf("CAENHVGetChParam: %s (num. %d)\n\n", CAENHVGetError(name), ret); } else { /*printf("PARAM VALUE\n");*/ if(tipo == PARAM_TYPE_NUMERIC) { for(i=0; i<ChNum; i++) { Measure[id]->board[board].channel[i].fval[ipar] = fParValList[i]; #ifdef DEBUG printf("%s Slot: %2d Ch: %3d %s: %10.2f\n", __FUNCTION__, Slot, ChList[i], ParName, fParValList[i]); #endif } } else { for(i=0; i<ChNum; i++) { Measure[id]->board[board].channel[i].lval[ipar] = lParValList[i]; #ifdef DEBUG printf("%s Slot: %2d Ch: %3d %s: %lx\n", __FUNCTION__, Slot, ChList[i], ParName, lParValList[i]); #endif } } } } return(CAENHV_OK); }