diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c index eb556796b..2c5802aa7 100644 --- a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c +++ b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c @@ -4,7 +4,6 @@ * @version 1.0 */ - #include #include #include @@ -94,6 +93,7 @@ int EigerSendCMD(){ } int n = write(sockfd,eiger_message,eiger_message_length); + int ret_length = read(sockfd,eiger_message,eiger_max_message_length); close(sockfd); @@ -140,7 +140,7 @@ int EigerSetDAC(const char* iname,int v, int mV){ int EigerSetTrimbits(const int *data){ eiger_ret_val=0; - char tt[263681]; + /*char tt[263681]; tt[263680]='\0'; int ip=0, ich=0; int iy, ix; @@ -150,16 +150,19 @@ int EigerSetTrimbits(const int *data){ for(iy=0;iy<256;iy++) { for (ichip=0; ichip<4; ichip++) { for(ix=0;ix<256;ix++) { - tt[ip++]=(char)(data[ich++]&(0x3f)); + tt[ip++]=(char)((data[ich++]&(0x3f))+'0'); } if (ichip<3) { - tt[ip++]=0; - tt[ip++]=0; + tt[ip++]=(char)(0+'0'); + tt[ip++]=(char)(0+'0'); } } } eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt); - memcpy(saved_trimbits,data,256*256*4*sizeof(int)); + memcpy(saved_trimbits,data,256*256*4*sizeof(int));*/ + + eiger_message_length = sprintf(eiger_message,"settrimbits %d", 0); + return EigerSendCMD(); } @@ -167,41 +170,31 @@ int EigerSetTrimbits(const int *data){ int EigerSetAllTrimbits(unsigned int value){ eiger_ret_val=0; - char tt[263681]; + /*char tt[263681]; tt[263680]='\0'; int ip=0, ich=0; int iy, ix; int ichip; int sl=0; + // convert the trimbits from int32 to chars and add border pixels. for(iy=0;iy<256;iy++) { for (ichip=0; ichip<4; ichip++) { for(ix=0;ix<256;ix++) { - tt[ip++]=(char)(value&0x3f); + tt[ip++]=(char)((value&0x3f)+'0'); } if (ichip<3) { - tt[ip++]=0; - tt[ip++]=0; + tt[ip++]=(char)(0+'0'); + tt[ip++]=(char)(0+'0'); } } } - char s2[270000]; - strcpy(s2,"settrimbits "); - //for() - sl=strlen(s2); - strncpy(s2+sl,tt, 263680); - s2[263680+sl]='\0'; - - eiger_message_length = strlen(s2); - //eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt); - for (iy=0;iy<263680;++iy) - printf("%d:%c\t\t",iy,tt[iy]); - printf("tfggt:%s , length :%d\n",tt, strlen(tt)); - printf("Command sent:%s , length :%d\n",s2, eiger_message_length); + eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt); for(iy=0;iy<256*256*4;++iy) - saved_trimbits[iy] = value; + saved_trimbits[iy] = value;*/ + eiger_message_length = sprintf(eiger_message,"setalltrimbits %d", value); return EigerSendCMD(); } @@ -209,14 +202,16 @@ int EigerSetAllTrimbits(unsigned int value){ int EigerGetTrimbits(const int *data){ eiger_ret_val=0; - char tt[263681]; + /*char tt[263681]; tt[263680]='\0'; int ip=0, ich=0; int iy, ix; int ichip; eiger_message_length = sprintf(eiger_message,"gettrimbits "); - memcpy(data,saved_trimbits,256*256*4*sizeof(int)); + memcpy(data,saved_trimbits,256*256*4*sizeof(int));*/ + + eiger_message_length = sprintf(eiger_message,"gettrimbits "); return EigerSendCMD(); } diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx b/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx index 9f1ac72d0..05239d1c2 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx @@ -78,7 +78,7 @@ FebControl::FebControl(){ staticBits=acquireNReadoutMode=triggerMode=externalEnableMode=subFrameMode=0; trimbit_size=263680; - last_downloaded_trimbits = new unsigned char [trimbit_size]; + last_downloaded_trimbits = new unsigned int [trimbit_size]; cout<>3)<<((7-i)*4);//upper + trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_r+i])<<((7-i)*4);//low + trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_r+i])>>3)<<((7-i)*4);//upper +/* trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])<<((7-i)*4);//low trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])>>3)<<((7-i)*4);//upper trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])<<((7-i)*4);//low trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])>>3)<<((7-i)*4);//upper + */ + } // end column loop i } //end supercolumn loop sc } //end row loop - if(!WriteMemory(modules[0]->GetTopLeftAddress(),0,0,1024,trimbits_to_load_r)||!WriteMemory(modules[0]->GetTopRightAddress(),0,0,1024,trimbits_to_load_l)||!StartDAQOnlyNWaitForFinish()) return 0; +/* + if(!WriteMemory(modules[0]->GetTopLeftAddress(),0,0,1024,trimbits_to_load_r)||!WriteMemory(modules[0]->GetTopRightAddress(),0,0,1024,trimbits_to_load_l)||!StartDAQOnlyNWaitForFinish()){ + cout <<" some errror!"<< endl; + return 0; + } +*/ + if(!WriteMemory(modules[0]->GetTopLeftAddress(),0,0,1023,trimbits_to_load_r)||!WriteMemory(modules[0]->GetTopRightAddress(),0,0,1023,trimbits_to_load_l)||!StartDAQOnlyNWaitForFinish()){ + cout <<" some errror!"<< endl; + return 0; + } + } //end row_set loop (groups of 16 rows) } // end l_r loop - memcpy(last_downloaded_trimbits,trimbits,trimbit_size*sizeof(unsigned char)); - return SetStaticBits(); //send the static bits } -unsigned char* FebControl::GetTrimbits(){ +unsigned int* FebControl::GetTrimbits(){ return last_downloaded_trimbits; } @@ -1191,4 +1219,79 @@ bool FebControl::StopAcquisition(){ +bool FebControl::LoadTrimbitFile(){ + string filename = "/home/root/noise.snbeb040"; + ifstream input_file; + int ndacs =16; + int dacs[ndacs]; + unsigned int chanregs[trimbit_size]; + + + input_file.open(filename.c_str() ,ifstream::binary); + if(!input_file.is_open()){ + cout<<"Warning, could not open trimbit file: "<send_buffer_size-2) return 0; + if(!nwrites||nwrites>send_buffer_size-2) {cout<<"error herer: nwrites:"< write to memory, nwrites, mem number, start address send_data[nwrites+1] = 0; for(unsigned int i=0;i "< "<0){ int ret_parameter = 0; @@ -211,7 +216,7 @@ int main(int argc, char* argv[]){ tmp_str[0] = GetNextString(data); if(tmp_str[0].length()>0&&feb_controler->GetDAC(tmp_str[0],ret_parameter)){ - return_message.append("\tExecuted: GetDACValue "); return_message.append(tmp_str[0]+" -> ");AddNumber(return_message,ret_parameter); return_message.append(" mV\n"); + return_message.append("\tExecuted: GetDACValue "); return_message.append(tmp_str[0]+" -> ");AddNumber(return_message,ret_parameter); return_message.append("\n"); ret_val = 0; }else{ return_message.append("\tError executing: GetDACValue \n"); @@ -260,19 +265,44 @@ int main(int argc, char* argv[]){ case evSetTrimBits : tmp_str[0] = GetNextString(data); - /*char tt[263681];*/ - for(int i=0;i<10;i++) - cout <SetTrimbits(0,(unsigned char*)(tmp_str[0].c_str())); - return_message.append("\tExecuted: SetTrimBits "); AddNumber(return_message,n[0]); return_message.append("\n"); - ret_val = 0; + if(feb_controler->LoadTrimbitFile()){ + /* if(1){*/ + /*tmp_str[0] = GetNextString(data); + feb_controler->SetTrimbits(0,(unsigned char*)(tmp_str[0].c_str()));*/ + return_message.append("\tExecuted: SetTrimBits\n"); + ret_val = 0; + }else{ + return_message.append("\tError executing: SetTrimBits \n"); + ret_val = 1; + } break; + case evSetAllTrimBits : + tmp_str[0] = GetNextString(data); + n[0] = atoi(tmp_str[0].data()); + if(feb_controler->SaveAllTrimbitsTo(n[0])){ + /*feb_controler->SetTrimbits(0,(unsigned char*)(tmp_str[0].c_str()));*/ + /*if(1){*/ + return_message.append("\tExecuted: SetAllTrimBits\n"); + ret_val = 0; + }else{ + return_message.append("\tError executing: SetAllTrimBits \n"); + ret_val = 1; + } + break; + + case evGetTrimBits : - /*strcpy(ret_parameter, feb_controler->GetTrimbits()); parameter to pass string*/ - return_message.append("\tExecuted: GetTrimBits "); AddNumber(return_message,n[0]); return_message.append("\n"); - ret_val = 0; + if(feb_controler->SaveTrimbitFile()){ + /*if(1){*/ + /*tmp_str[0] = GetNextString(data); + feb_controler->GetTrimbits();*/ + return_message.append("\tExecuted: GetTrimBits\n"); + ret_val = 0; + }else{ + return_message.append("\tError executing: GetTrimBits \n"); + ret_val = 1; + } break; @@ -464,11 +494,11 @@ int main(int argc, char* argv[]){ cmd = GetNextString(data); } - return_message.append("\n\n\n"); + /*return_message.append("\n\n\n");*/ AddNumber(return_message,ret_val,0,1); - cout<chanregs); + if (detectorModules) copyModule(myMod,detectorModules);/*copyModule(myMod,detectorModules+iMod);*/ else diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 812c0a2f1..ab6d85ba8 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4420,7 +4420,7 @@ slsDetectorDefs::runStatus multiSlsDetector::startReceiverReadout(){ } } - *stoppedFlag=1; + /**stoppedFlag=1;*/ return s; } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 93957c1a5..db7a01910 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -3561,9 +3561,9 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ if (t>=0) thisDetector->timerValue[index]=t; } -//#ifdef VERBOSE +#ifdef VERBOSE std::cout<< "Timer " << index << " set to "<< thisDetector->timerValue[index] << "ns" << std::endl; -//#endif +#endif if ((thisDetector->myDetectorType==MYTHEN)&&(index==PROBES_NUMBER)) { setDynamicRange(); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp b/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp index e0da124cc..045a87b0b 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp @@ -423,7 +423,13 @@ int slsDetectorActions::executeScan(int level, int istep) { setThresholdEnergy((int)currentScanVariable[level]); //energy scan break; case thresholdScan: - setDAC((dacs_t)currentScanVariable[level],THRESHOLD,0); // threshold scan + if(getDetectorsType() == EIGER){ + setDAC((dacs_t)currentScanVariable[level],E_Vcmp_ll,0); // threshold scan + setDAC((dacs_t)currentScanVariable[level],E_Vcmp_lr,0); // threshold scan + setDAC((dacs_t)currentScanVariable[level],E_Vcmp_rl,0); // threshold scan + setDAC((dacs_t)currentScanVariable[level],E_Vcmp_rr,0); // threshold scan + }else + setDAC((dacs_t)currentScanVariable[level],THRESHOLD,0); // threshold scan break; case trimbitsScan: trimbit=(int)currentScanVariable[level]; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorActions.h b/slsDetectorSoftware/slsDetector/slsDetectorActions.h index ce27b578b..58ac19bcd 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorActions.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorActions.h @@ -197,6 +197,11 @@ class slsDetectorActions : public virtual slsDetectorBase */ virtual dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1)=0; + /** returns the detector type + \param pos position in the multi detector structure (is -1 returns type of detector with id -1) + \returns type + */ + virtual detectorType getDetectorsType(int pos=-1)=0; virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS)=0; virtual int setChannel(int64_t, int ich=-1, int ichip=-1, int imod=-1)=0; diff --git a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp index b9e54e127..d95600824 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp @@ -241,7 +241,7 @@ slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string case EIGER: infile.open(myfname.c_str(),ifstream::binary); if (infile.is_open()) { - infile.read((char*) myMod->dacs,sizeof(int)*(myMod->ndac)); + infile.read((char*) myMod->dacs,sizeof(dacs_t)*(myMod->ndac)); infile.read((char*) myMod->chanregs,sizeof(int)*(myMod->nchan)); #ifdef VERBOSE for(int i=0;indac;i++) @@ -381,7 +381,7 @@ int energyConversion::writeSettingsFile(string fname, detectorType myDetectorTyp for(int i=0;i progress) @@ -525,13 +526,12 @@ void* postProcessing::processData(int delflag) { currentfIndex = -1; cout<<"****Detector Data returned is NULL***"<= 0) {