From e15d6077dfa6f21b26d4a265083832e065d6dbf3 Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Fri, 18 Jul 2014 17:38:39 +0200 Subject: [PATCH 01/11] small changes with trimbits --- .../EigerHighLevelFunctions.c | 43 +++++++++++++++++++ .../eigerDetectorServer/FebServer.cxx | 14 +++--- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c index 11c1b3820..1e44e5170 100644 --- a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c +++ b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c @@ -162,6 +162,35 @@ int EigerSetTrimbits(const int *data){ } + +int EigerSetAllTrimbits(unsigned int value){ + eiger_ret_val=0; + char tt[263681]; + tt[263680]='\0'; + int ip=0, ich=0; + int iy, ix; + int ichip; + + // convert the trimbits from int32 to chars and add border pixels. + for(iy=0;iy<256;y++) { + for (ichip=0; ichip<4; ichip++) { + for(ix=0;ix<256;ix++) { + tt[ip++]=value&0x3f; + } + if (ichip<3) { + tt[ip++]=0; + tt[ip++]=0; + } + } + } + eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt); + memcpy(saved_trimbits,data,256*256*4*sizeof(int)); + return EigerSendCMD(); +} + + + + /* int EigerGetTrimbits(const int *data){ */ /* eiger_ret_val=0; */ /* char tt[263681]; */ @@ -178,6 +207,20 @@ int EigerSetTrimbits(const int *data){ + int EigerGetTrimbits(const int *data){ + eiger_ret_val=0; + 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)); + return EigerSendCMD(); + } + + diff --git a/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx b/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx index f4092739f..9217a07b8 100755 --- a/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx +++ b/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx @@ -30,6 +30,7 @@ enum cmd_string {evNotFound, evSetDACValue,evGetDACValue,evSetDACVoltage,evGetDACVoltage,evSetHighVoltage,//evGetHighVoltage, evSetTrimBits, + evGetTrimBits, //evLoadTrimBitFile, evSetBitMode, @@ -63,6 +64,7 @@ void init(){ enum_map["getdacvoltage"] = evGetDACVoltage; enum_map["sethighvoltage"] = evSetHighVoltage; enum_map["settrimbits"] = evSetTrimBits; + enum_map["gettrimbits"] = evGetTrimBits; // enum_map["loadtrimbitfile"] = evLoadTrimBitFile; enum_map["setbitmode"] = evSetBitMode; enum_map["setphotonenergy"] = evSetPhotonEnergy; @@ -257,16 +259,18 @@ int main(int argc, char* argv[]){ break; case evSetTrimBits : - /*if(tmp_str[0].length()>0&&feb_controler->SetDynamicRange(n[0])){*/ feb_controler->SetTrimbits(0,(unsigned char*)data); return_message.append("\tExecuted: SetTrimBits "); AddNumber(return_message,n[0]); return_message.append("\n"); ret_val = 0; - /*}else{ - return_message.append("\tError executing: SetTrimBits \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; + break; + + // case evLoadTrimBitFile : case evSetBitMode : From 7e46a407c66a67931307c972b7b971cb87313b12 Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Mon, 21 Jul 2014 16:39:36 +0200 Subject: [PATCH 02/11] added trimval function, but sending trimbits from char to int bug --- slsDetectorSoftware/commonFiles/error_defs.h | 4 + .../commonFiles/sls_detector_funcs.h | 3 +- .../EigerHighLevelFunctions.c | 51 +++++---- .../eigerDetectorServer/FebControl.cxx | 102 +++++++++--------- .../eigerDetectorServer/FebServer.cxx | 7 +- .../bin/eigerDetectorServer | Bin 142552 -> 145849 bytes .../eigerDetectorServer/bin/feb_debug | Bin 146759 -> 147813 bytes .../slsDetectorFunctionList.c | 29 ++++- .../multiSlsDetector/multiSlsDetector.cpp | 30 ++++++ .../multiSlsDetector/multiSlsDetector.h | 8 ++ .../slsDetector/slsDetector.cpp | 35 ++++++ slsDetectorSoftware/slsDetector/slsDetector.h | 7 ++ .../slsDetector/slsDetectorCommand.cpp | 14 +++ .../slsDetector/slsDetectorUtils.h | 8 ++ .../slsDetectorFunctionList.h | 2 + .../slsDetectorServer_funcs.c | 59 +++++++++- .../slsDetectorServer_funcs.h | 1 + 17 files changed, 276 insertions(+), 84 deletions(-) diff --git a/slsDetectorSoftware/commonFiles/error_defs.h b/slsDetectorSoftware/commonFiles/error_defs.h index 770a5a405..5050478ed 100644 --- a/slsDetectorSoftware/commonFiles/error_defs.h +++ b/slsDetectorSoftware/commonFiles/error_defs.h @@ -49,6 +49,7 @@ using namespace std; #define RECEIVER_FRAME_NUM_NOT_SET 0x0000000000000400ULL #define RECEIVER_DYNAMIC_RANGE 0x0000000000000800ULL #define RECEIVER_TEN_GIGA 0x0000000000001000ULL +#define ALLTIMBITS_NOT_SET 0x0000000000002000ULL // 0x00000000FFFFFFFFULL /** @short class returning all error messages for error mask */ @@ -146,6 +147,9 @@ public: if(slsErrorMask&RECEIVER_TEN_GIGA) retval.append("Could not enable/disable 10GbE in the receiver.\n"); + if(slsErrorMask&ALLTIMBITS_NOT_SET) + retval.append("Could not set all trimbits to value.\n"); + return retval; diff --git a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h index c45b7d04b..87bb241aa 100644 --- a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h @@ -89,7 +89,8 @@ enum { F_RESET_COUNTER_BLOCK, /**< resets the counter block memory for gotthard */ F_CALIBRATE_PEDESTAL, /**< starts acquistion, calibrates pedestal and write back to fpga */ - F_ENABLE_TEN_GIGA /**< enable 10Gbe */ + F_ENABLE_TEN_GIGA, /**< enable 10Gbe */ + F_SET_ALL_TRIMBITS /** < set all trimbits to this value */ /* Always append functions hereafter!!! */ diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c index 1e44e5170..eb556796b 100644 --- a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c +++ b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c @@ -13,8 +13,8 @@ #include "slsDetectorServer_defs.h" //include port number struct sockaddr_in eiger_socket_addr; -int eiger_max_message_length = 1024; -char eiger_message[1024]; +int eiger_max_message_length = 270000;//263681 +char eiger_message[270000];//263681 int eiger_message_length = 0; int eiger_ret_val=0; @@ -55,6 +55,8 @@ int EigerGetExternalGating(){return eiger_extgating;} int EigerGetExternalGatingPolarity(){return eiger_extgatingpolarity;} int EigerInit(){ + saved_trimbits[0] = -1; + static int passed = 0; if(!passed){ @@ -145,7 +147,7 @@ int EigerSetTrimbits(const int *data){ int ichip; // convert the trimbits from int32 to chars and add border pixels. - for(iy=0;iy<256;y++) { + for(iy=0;iy<256;iy++) { for (ichip=0; ichip<4; ichip++) { for(ix=0;ix<256;ix++) { tt[ip++]=(char)(data[ich++]&(0x3f)); @@ -170,12 +172,13 @@ int EigerSetAllTrimbits(unsigned int value){ 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;y++) { + for(iy=0;iy<256;iy++) { for (ichip=0; ichip<4; ichip++) { for(ix=0;ix<256;ix++) { - tt[ip++]=value&0x3f; + tt[ip++]=(char)(value&0x3f); } if (ichip<3) { tt[ip++]=0; @@ -183,30 +186,27 @@ int EigerSetAllTrimbits(unsigned int value){ } } } - eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt); - memcpy(saved_trimbits,data,256*256*4*sizeof(int)); + + 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); + for(iy=0;iy<256*256*4;++iy) + saved_trimbits[iy] = value; return EigerSendCMD(); } - -/* int EigerGetTrimbits(const int *data){ */ -/* eiger_ret_val=0; */ -/* char tt[263681]; */ -/* tt[263680]='\0'; */ -/* int ip=0, ich=0; */ -/* int iy, ix; */ -/* int ichip; */ - -/* eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt); */ -/* memcpy(data,saved_trimbits,256*256*4*sizeof(int)); */ -/* return EigerSendCMD(); */ -/* } */ - - - - int EigerGetTrimbits(const int *data){ eiger_ret_val=0; char tt[263681]; @@ -222,9 +222,6 @@ int EigerSetAllTrimbits(unsigned int value){ - - - int EigerGetDAC(const char* iname){ eiger_ret_val=1; eiger_message_length = sprintf(eiger_message,"getdacvalue %s",iname); diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx b/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx index 6ac58cdd8..9f1ac72d0 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.cxx @@ -698,62 +698,62 @@ float FebControl::GetDAC(string s){ */ bool FebControl::SetTrimbits(unsigned int module_num, unsigned char *trimbits){ - - unsigned int module_index=0; - if(!GetModuleIndex(module_num,module_index)){ - cout<<"Warning could not set trimbits, bad module number."<>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(!(WriteRegister(0xfff,DAQ_REG_STATIC_BITS,disable_chip_mask|DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_M8)&&SetCommandRegister(DAQ_SET_STATIC_BIT)&&StartDAQOnlyNWaitForFinish())){ + cout<<"Could not select chips"<GetTopLeftAddress(),0,0,1024,trimbits_to_load_r)||!WriteMemory(modules[0]->GetTopRightAddress(),0,0,1024,trimbits_to_load_l)||!StartDAQOnlyNWaitForFinish()) return 0; - } //end row_set loop (groups of 16 rows) - } // end l_r loop + for(int row_set=0;row_set<16;row_set++){ //16 rows at a time + if(row_set==0){ + if(!SetCommandRegister(DAQ_RESET_COMPLETELY|DAQ_SEND_A_TOKEN_IN|DAQ_LOAD_16ROWS_OF_TRIMBITS)){ + cout<<"Warning: Could not SetCommandRegister for loading trim bits."<>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 - return SetStaticBits(); //send the static bits + 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; + } //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 } diff --git a/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx b/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx index 9217a07b8..ad9e94ed8 100755 --- a/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx +++ b/slsDetectorSoftware/eigerDetectorServer/FebServer.cxx @@ -259,7 +259,12 @@ int main(int argc, char* argv[]){ break; case evSetTrimBits : - feb_controler->SetTrimbits(0,(unsigned char*)data); + 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; break; diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 01b998f5dd2e6f7588b144f4e622ee6e7c03f3ba..2937d1af0bd04796bba762046872705245f1cbe9 100755 GIT binary patch delta 31678 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 delta 28600 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 T4$(5Xdy`#T?2Z|#{pSAyg5|fo diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/feb_debug b/slsDetectorSoftware/eigerDetectorServer/bin/feb_debug index 679aad0f56c3972bbebee81533a42ad97967f41d..5c402a301aaa08efc1ad1cdc1b8234cea04a64a4 100755 GIT binary patch literal 147813 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 Pc}JY-I}s{7VAlQ*PU8*X delta 52188 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

e#@1>#9Y)FcSa%1p3m$=-2=Am%7d~223`ICcl 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index fb404469a..9ee7e5205 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -141,6 +141,7 @@ int64_t getDetectorId(enum idMode arg){ int getDetectorNumber(){ + int res=0; char hostname[100]; if (gethostname(hostname, sizeof hostname) == 0) @@ -159,8 +160,13 @@ int getDetectorNumber(){ pclose(sysFile); sscanf(output,"%x",&res); return res; +*/ + /* + int res=0; + char hostname[100] = "beb000"; + sscanf(hostname,"%x",&res); + return res; */ - } @@ -291,8 +297,9 @@ int setModule(sls_detector_module myMod){ // thisSettings = (enum detectorSettings)myMod.reg; // thisSettings = 0; - setSettings( (enum detectorSettings)myMod.reg); // put the settings in the module register?!?!? -/** set trimbits*/ + setSettings( (enum detectorSettings)myMod.reg,-1); // put the settings in the module register?!?!? + EigerSetTrimbits(myMod.chanregs); + if (detectorModules) copyModule(detectorModules,&myMod); return 0; @@ -598,6 +605,7 @@ int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod){ } + int getTotalNumberOfChannels(){return getNumberOfChannelsPerModule();};//NCHIP*NCHAN*nModBoard;} int getTotalNumberOfChips(){return 4;};//NCHIP*nModBoard;} int getTotalNumberOfModules(){return 1;}//nModBoard;} @@ -675,6 +683,21 @@ enum synchronizationMode setSynchronization(enum synchronizationMode arg){ return NO_SYNCHRONIZATION; } +void setAllTrimbits(int val){ + int ichan; + EigerSetAllTrimbits(val); +#ifdef VERBOSE + printf("Copying register %x value %d\n",destMod->reg,val); +#endif + if (detectorModules){ + for (ichan=0; ichan<(detectorModules->nchan); ichan++) { + *((detectorModules->chanregs)+ichan)=val; + } + } +} +int getAllTrimbits(){ + return *((detectorModules->chanregs)); +} #endif diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 6c8275b64..812c0a2f1 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -3721,6 +3721,36 @@ int multiSlsDetector::saveSettingsFile(string fname, int imod) { +int multiSlsDetector::setAllTrimbits(int val, int imod){ + + int ret=-100, ret1,id, im; + + if (decodeNMod(imod, id, im)>=0) { + if (detectors[id]) { + ret1=detectors[id]->setAllTrimbits(val,im); + if(detectors[id]->getErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; idet++) { + if (detectors[idet]) { + ret1=detectors[idet]->setAllTrimbits(val,imod); + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1<onlineFlag==ONLINE_FLAG) { + if (connectControl() == OK){ + controlSocket->SendDataOnly(&fnum,sizeof(fnum)); + controlSocket->SendDataOnly(&val,sizeof(val)); + controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); + if (ret==FAIL) { + controlSocket->ReceiveDataOnly(mess,sizeof(mess)); + std::cout<< "Detector returned error: " << mess << std::endl; + setErrorMask((getErrorMask())|(ALLTIMBITS_NOT_SET)); + } else { + controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); + } + controlSocket->Disconnect(); + if (ret==FORCE_UPDATE) + updateDetector(); + } + } + +#ifdef VERBOSE + std::cout<< "All trimbits were set to "<< retval << std::endl; +#endif + return retval; +} + + int slsDetector::loadCalibrationFile(string fname, int imod) { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index e1aecef1d..6ffb42c04 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -510,6 +510,13 @@ class slsDetector : public slsDetectorUtils, public energyConversion { */ int saveSettingsFile(string fname, int imod=-1); + /** sets all the trimbits to a particular value + \param val trimbit value + \param imod module number, -1 means all modules + \returns OK or FAIL + */ + int setAllTrimbits(int val, int imod=-1); + /** loads the modules calibration data reading from a file \param fname file name . If not specified, extension is automatically generated! diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index 54423ee72..cee4a387c 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -497,6 +497,9 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) { descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSettings; i++; + descrToFuncMap[i].m_pFuncName="trimval"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSettings; + i++; descrToFuncMap[i].m_pFuncName="pedestal"; // descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSettings; @@ -2912,6 +2915,15 @@ string slsDetectorCommand::cmdSettings(int narg, char *args[], int action) { myDet->saveSettingsFile(sval, -1); return string("done"); + } else if (cmd=="trimval") { + if (action==PUT_ACTION){ + if (sscanf(args[1],"%d",&val)) + myDet->setAllTrimbits(val); + else + return string("invalid trimbit value ")+cmd; + } + sprintf(ans,"%d",myDet->setAllTrimbits(-1)); + return ans; } else if (cmd=="pedestal") { if (action==GET_ACTION) return string("cannot get"); @@ -2935,6 +2947,7 @@ string slsDetectorCommand::helpSettings(int narg, char *args[], int action) { os << "threshold eV\n sets the detector threshold in eV"<< std::endl; os << "trimbits fname\n loads the trimfile fname to the detector. If no extension is specified, the serial number of each module will be attached."<< std::endl; os << "trim:mode fname\n trims the detector according to mode (can be noise, beam, improve, fix) and saves the resulting trimbits to file fname."<< std::endl; + os << "trimval i \n sets all the trimbits to i" << std::endl; os << "pedestal i \n starts acquisition for i frames, calculates pedestal and writes back to fpga."<< std::endl; } @@ -2942,6 +2955,7 @@ string slsDetectorCommand::helpSettings(int narg, char *args[], int action) { os << "settings \n gets the settings of the detector"<< std::endl; os << "threshold V\n gets the detector threshold"<< std::endl; os << "trimbits [fname]\n returns the trimfile loaded on the detector. If fname is specified the trimbits are saved to file. If no extension is specified, the serial number of each module will be attached."<< std::endl; + os << "trimval \n returns the value all trimbits are set to. If they are different, returns -1." << std::endl; } return os.str(); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h index 431c0bfc0..c2d50008f 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h @@ -490,6 +490,14 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing { */ virtual int saveSettingsFile(string fname, int imod=-1)=0; + /** sets all the trimbits to a particular value + \param val trimbit value + \param imod module number, -1 means all modules + \returns OK or FAIL + */ + virtual int setAllTrimbits(int val, int imod=-1)=0; + + /** diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h index 824580375..e21e69ded 100644 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h @@ -128,6 +128,8 @@ enum synchronizationMode setSynchronization(enum synchronizationMode arg); #ifdef EIGERD void setExternalGating(int enable[]); +void setAllTrimbits(int val); +int getAllTrimbits(); #endif diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 9d216c800..560ad9037 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -157,7 +157,7 @@ int function_table() { flist[F_STOP_RECEIVER]=&stop_receiver; flist[F_CALIBRATE_PEDESTAL]=&calibrate_pedestal; flist[F_ENABLE_TEN_GIGA]=&enable_ten_giga; - + flist[F_SET_ALL_TRIMBITS]=&set_all_trimbits; #ifdef VERBOSE @@ -3420,3 +3420,60 @@ int enable_ten_giga(int file_des) { /*return ok/fail*/ return ret; } + + + +int set_all_trimbits(int file_des){ + + + int retval; + int arg; + int n; + int ret=OK,ret1=OK; + + sprintf(mess,"can't set sll trimbits\n"); + + n = receiveData(file_des,&arg,sizeof(arg),INT32); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + +#ifdef VERBOSE + printf("setting all trimbits to %d\n",arg); +#endif +#ifdef SLS_DETECTOR_FUNCTION_LIST + if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { + if(arg < -1){ + ret = FAIL; + strcpy(mess,"Cant set trimbits to this value\n"); + }else { + if(arg >= 0) + setAllTrimbits(arg); + retval = getAllTrimbits(); + } + } +#endif + if (ret==OK) { + if (arg!=-1 && arg!=retval) { + ret=FAIL; + sprintf(mess,"Could not set all trimbits: should be %d but is %d\n", arg, retval); + }else if (differentClients) + ret=FORCE_UPDATE; + } + + + //ret could be swapped during sendData + ret1 = ret; + n = sendData(file_des,&ret1,sizeof(ret),INT32); + if (ret==FAIL) { + n = sendData(file_des,mess,sizeof(mess),OTHER); + } else { + n = sendData(file_des,&retval,sizeof(retval),INT32); + } + return ret; + +} diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h index 42814787c..7f1e44ab8 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h @@ -81,5 +81,6 @@ int start_receiver(int); int stop_receiver(int); int calibrate_pedestal(int); int enable_ten_giga(int); +int set_all_trimbits(int); #endif From 56da3f42ccca60e340a658b3b55278e4753f84df Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Thu, 31 Jul 2014 12:11:33 +0200 Subject: [PATCH 03/11] trimbits not working yet, nth frame works for eiger, scans work for eiger --- .../EigerHighLevelFunctions.c | 47 +++---- .../eigerDetectorServer/FebControl.cxx | 123 ++++++++++++++++-- .../eigerDetectorServer/FebControl.h | 12 +- .../eigerDetectorServer/FebInterface.cxx | 4 +- .../eigerDetectorServer/FebServer.cxx | 70 +++++++--- .../bin/eigerDetectorServer | Bin 145849 -> 145776 bytes .../eigerDetectorServer/bin/feb_debug | Bin 147813 -> 152692 bytes .../slsDetectorFunctionList.c | 9 +- .../multiSlsDetector/multiSlsDetector.cpp | 2 +- .../slsDetector/slsDetector.cpp | 4 +- .../slsDetector/slsDetectorActions.cpp | 8 +- .../slsDetector/slsDetectorActions.h | 5 + .../slsDetectorAnalysis/energyConversion.cpp | 4 +- .../slsDetectorAnalysis/postProcessing.cpp | 8 +- 14 files changed, 224 insertions(+), 72 deletions(-) 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<t&-1>2yyx>d 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 Mkfxkm2mk;8 delta 27386 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/feb_debug b/slsDetectorSoftware/eigerDetectorServer/bin/feb_debug index 5c402a301aaa08efc1ad1cdc1b8234cea04a64a4..022341fb299ef34149eaf49ce17647496fa32c15 100755 GIT binary patch literal 152692 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 literal 147813 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 Pc}JY-I}s{7VAlQ*PU8*X diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 9ee7e5205..c12aee0fb 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -27,7 +27,7 @@ int initDetector(){ int imod,i,n; n = getNModBoard(1); - printf("This is the EIGER Server\n"); + printf("This is the EIGER Server of revision %llx\n", getDetectorId(DETECTOR_SOFTWARE_VERSION)); //#ifdef VERBOSE printf("Board is for %d half modules\n",n); @@ -307,6 +307,13 @@ int setModule(sls_detector_module myMod){ int getModule(sls_detector_module *myMod){ +int i; +int retval[2]; + for(i=0;ichanregs); + 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) { From 367bdd9c2fbec765036cedb4bfa4191143459cb9 Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Fri, 8 Aug 2014 14:03:30 +0200 Subject: [PATCH 04/11] no change --- slsDetectorSoftware/eigerDetectorServer/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile b/slsDetectorSoftware/eigerDetectorServer/Makefile index 565220a7f..c050621a0 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Makefile +++ b/slsDetectorSoftware/eigerDetectorServer/Makefile @@ -13,7 +13,7 @@ SRC_CLNT2 = FebServer.cxx FebControl.cxx FebInterface.cxx LocalLinkInterface.c SRC_CLNT3 = BebServer.cxx Beb.cxx LocalLinkInterface.cxx HardwareIO.cxx OBJS = $(SRC_CLNT:.c=.o) - + all: clean $(PROGS) feb_debug beb_debug From 10ca7c10e8c40be8b0ebc79019cd833a2b285839 Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Fri, 29 Aug 2014 16:40:27 +0200 Subject: [PATCH 05/11] got rid of extra servers for eiger, converted to c and it works --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 557 +++++++ slsDetectorSoftware/eigerDetectorServer/Feb.c | 334 ++++ .../eigerDetectorServer/FebControl.c | 1446 +++++++++++++++++ .../eigerDetectorServer/FebInterface.c | 189 +++ .../eigerDetectorServer/HardwareIO.c | 87 + .../eigerDetectorServer/LocalLinkInterface.c | 280 ++++ 6 files changed, 2893 insertions(+) create mode 100644 slsDetectorSoftware/eigerDetectorServer/Beb.c create mode 100644 slsDetectorSoftware/eigerDetectorServer/Feb.c create mode 100644 slsDetectorSoftware/eigerDetectorServer/FebControl.c create mode 100644 slsDetectorSoftware/eigerDetectorServer/FebInterface.c create mode 100644 slsDetectorSoftware/eigerDetectorServer/HardwareIO.c create mode 100644 slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c new file mode 100644 index 000000000..f95f4b81b --- /dev/null +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -0,0 +1,557 @@ + +/** + * @author Ian Johnson + * @version 1.0 + */ + + +//return reversed 1 means good, 0 means failed + + + +#include +#include + + + +#include "xfs_types.h" +#include "xparameters.h" + +#include "Beb.h" + + + + struct BebInfo beb_infos[10]; + int bebInfoSize = 0; + + struct LocalLinkInterface ll_beb_local,* ll_beb; + struct LocalLinkInterface ll_beb_new_memory_local,* ll_beb_new_memory; + + struct udp_header_type udp_header; + + int Beb_send_ndata; + unsigned int Beb_send_buffer_size; + unsigned int* Beb_send_data_raw; + unsigned int* Beb_send_data; + + int Beb_recv_ndata; + unsigned int Beb_recv_buffer_size; + unsigned int* Beb_recv_data_raw; + unsigned int* Beb_recv_data; + + short Beb_bit_mode; + + +void BebInfo_BebInfo(struct BebInfo* bebInfo, unsigned int beb_num){ + bebInfo->beb_number=beb_num; + bebInfo->serial_address=0; + strcpy(bebInfo->src_mac_1GbE,""); + strcpy(bebInfo->src_mac_10GbE,""); + strcpy(bebInfo->src_ip_1GbE,""); + strcpy(bebInfo->src_ip_10GbE,""); + bebInfo->src_port_1GbE=bebInfo->src_port_10GbE=0; +} + +int BebInfo_SetSerialAddress(struct BebInfo* bebInfo, unsigned int a){ + //address pre shifted + if(a>0xff) return 0; + bebInfo->serial_address = 0x04000000 | ((a&0xff)<<16); + return 1; +} + + +int BebInfo_SetHeaderInfo(struct BebInfo* bebInfo, int ten_gig, char* src_mac, char* src_ip, unsigned int src_port){ + if(ten_gig){ strcpy(bebInfo->src_mac_10GbE,src_mac); strcpy(bebInfo->src_ip_10GbE,src_ip); bebInfo->src_port_10GbE = src_port;} + else { strcpy(bebInfo->src_mac_1GbE,src_mac); strcpy(bebInfo->src_ip_1GbE,src_ip); bebInfo->src_port_1GbE = src_port;} + return 1; +} + + + +unsigned int BebInfo_GetBebNumber(struct BebInfo* bebInfo) {return bebInfo->beb_number;} +unsigned int BebInfo_GetSerialAddress(struct BebInfo* bebInfo) {return bebInfo->serial_address;} +char* BebInfo_GetSrcMAC(struct BebInfo* bebInfo, int ten_gig) {return ten_gig ? bebInfo->src_mac_10GbE : bebInfo->src_mac_1GbE;} +char* BebInfo_GetSrcIP(struct BebInfo* bebInfo, int ten_gig) {return ten_gig ? bebInfo->src_ip_10GbE : bebInfo->src_ip_1GbE;} +unsigned int BebInfo_GetSrcPort(struct BebInfo* bebInfo, int ten_gig) {return ten_gig ? bebInfo->src_port_10GbE : bebInfo->src_port_1GbE;} + + +void BebInfo_Print(struct BebInfo* bebInfo){ + printf("\t%d) Beb Info.:\n",bebInfo->beb_number); + printf("\t\tSerial Add: 0x%x\n",bebInfo->serial_address); + printf("\t\tMAC 1GbE: %s\n",bebInfo->src_mac_1GbE); + printf("\t\tIP 1GbE: %s\n",bebInfo->src_ip_1GbE); + printf("\t\tport 1GbE: %d\n",bebInfo->src_port_1GbE); + printf("\t\tMAC 10GbE: %s\n",bebInfo->src_mac_10GbE); + printf("\t\tIP 10GbE: %s\n",bebInfo->src_ip_10GbE); + printf("\t\tport 10GbE: %d\n",bebInfo->src_port_10GbE); +} + + +void Beb_Beb(int arg1){ + + Beb_send_ndata = 0; + Beb_send_buffer_size = 1026; + Beb_send_data_raw = malloc((Beb_send_buffer_size+1) * sizeof(unsigned int)); + Beb_send_data = &Beb_send_data_raw[1]; + + Beb_recv_ndata = 0; + Beb_recv_buffer_size = 1026; + Beb_recv_data_raw = malloc((Beb_recv_buffer_size+1) * sizeof(unsigned int)); + Beb_recv_data = &Beb_recv_data_raw[1]; + + udp_header= (struct udp_header_type){ + {0x00, 0x50, 0xc5, 0xb2, 0xcb, 0x46}, // DST MAC + {0x00, 0x50, 0xc2, 0x46, 0xd9, 0x02}, // SRC MAC + {0x08, 0x00}, + {0x45}, + {0x00}, + {0x00, 0x00}, + {0x00, 0x00}, + {0x40}, + {0x00}, + {0xff}, + {0x11}, + {0x00, 0x00}, + {129, 205, 205, 128}, // Src IP + {129, 205, 205, 122}, // Dst IP + {0x0f, 0xa1}, + {0x13, 0x89}, + {0x00, 0x00}, //{0x00, 0x11}, + {0x00, 0x00} + }; + + + if(!Beb_InitBebInfos()) exit(1); + + printf("Printing Beb infos:\n"); + unsigned int i; + for(i=1;iSetSerialAddress(0); //0xc4000000 + b->SetHeaderInfo(0,"00:50:c2:46:d9:34","129.129.205.78",42000 + 26); // 1 GbE, ip address can be acquire from the network "arp" + b->SetHeaderInfo(1,"00:50:c2:46:d9:35","10.0.26.1",52000 + 26); //10 GbE, everything calculable/setable + beb_infos.push_back(b); +*/ + + return Beb_CheckSourceStuffBebInfo(); +} + + + +int Beb_SetBebSrcHeaderInfos(unsigned int beb_number, int ten_gig, char* src_mac, char* src_ip,unsigned int src_port){ + //so that the values can be reset externally for now.... + + unsigned int i = Beb_GetBebInfoIndex(beb_number); + if(!i){ printf("returning 000\n");return 0;} //i must be greater than 0, zero is the global send + BebInfo_SetHeaderInfo(&beb_infos[i],ten_gig,src_mac,src_ip,src_port); + + printf("Printing Beb info number (%d) :\n",i); + BebInfo_Print(&beb_infos[i]); + printf("\n"); + + return 1; +} + + +int Beb_ReadSetUpFromFile(char* file_name){ + char line[100]; + char str[100]; + + int i0,i1; + char mac0[50],mac1[50],ip0[50],ip1[0]; + FILE* fp = fopen(file_name, "r"); + if( fp == NULL ){ + perror("Error while opening the beb setup file.\n"); + return 0; + } + + printf("Setting up beb side of detector:\n"); + while ( fgets (line , 255 , fp) != NULL ){ + if(strlen(line)<=1) + continue; + sscanf (line, "%s", str); + if (str[0]=='#') + continue; + + if(!strcmp(str,"add_beb")){ + if( sscanf (line,"%s %d %d %s %s %s %s",str,&i0,&i1,mac0,ip0,mac1,ip1) < 7){ + printf("Error adding beb from %s.\n",file_name); + exit(0); + } + + printf ("Read: %s %d %d %s %s %s %s\n", str,i0,i1,mac0,ip0,mac1,ip1); + + if(Beb_GetBebInfoIndex(i0)){ + printf("Error adding beb from %s, beb number %d already added.\n",file_name,i0); + exit(0); + } + + struct BebInfo b0; + BebInfo_BebInfo(&b0,i0); + BebInfo_SetSerialAddress(&b0,i1); + BebInfo_SetHeaderInfo(&b0,0,mac0,ip0,42000+i0); + BebInfo_SetHeaderInfo(&b0,1,mac1,ip1,52000+i0); + beb_infos[bebInfoSize] = b0; + bebInfoSize++; + } + } + fclose(fp); + return 1; +} + + + +int Beb_CheckSourceStuffBebInfo(){ + unsigned int i; + for(i=1;i=bebInfoSize){ + printf("WriteTo index error.\n"); + return 0; + } + + Beb_send_data_raw[0] = 0x90000000 | BebInfo_GetSerialAddress(&beb_infos[index]); + if(Local_Write(ll_beb,4,Beb_send_data_raw)!=4) return 0; + + Beb_send_data_raw[0] = 0xc0000000; + if((Beb_send_ndata+1)*4!=Local_Write(ll_beb,(Beb_send_ndata+1)*4,Beb_send_data_raw)) return 0; + + return 1; +} + + +void Beb_SwapDataFun(int little_endian, unsigned int n, unsigned int *d){ + unsigned int i; + if(little_endian) for(i=0;i>8) | ((d[i]&0xff000000)>>24)); //little_endian + else for(i=0;i>16)); +} + + +int Beb_SetByteOrder(){ + Beb_send_data_raw[0] = 0x8fff0000; + if(Local_Write(ll_beb,4,Beb_send_data_raw)!=4) return 0; + + while((Local_Read(ll_beb,Beb_recv_buffer_size*4,Beb_recv_data_raw)/4)>0) printf("\t) Cleanning buffer ...\n"); + + if(bebInfoSize<2) return 0; + + Beb_send_ndata = 3; + Beb_send_data[0] = 0x000c0000; + Beb_send_data[1] = 0; + Beb_send_data[2] = 0; + Beb_WriteTo(0); + + //using little endian for data, big endian not fully tested, swap on 16 bit boundary. + Beb_send_ndata = 3; + Beb_send_data[0] = 0x000c0000; + Beb_send_data[1] = 1; + Beb_send_data[2] = 0; + Beb_SwapDataFun(0,2,&(Beb_send_data[1])); + Beb_WriteTo(0); + + printf("\tSetting Byte Order .............. ok\n"); + + return 1; +} + + + + +int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header_number, char* dst_mac, char* dst_ip, unsigned int dst_port){ + unsigned int i = Beb_GetBebInfoIndex(beb_number); + if(!i) return 0; //i must be greater than 0, zero is the global send + + Beb_send_ndata = 14; + Beb_send_data[0] = ten_gig ? 0x00020000 : 0x00010000; //write to fanout numbers 1 or 2 + Beb_send_data[1] = ((header_number*8)<<16); + if(!Beb_SetHeaderData(beb_number,ten_gig,dst_mac,dst_ip,dst_port)) return 0; + + Beb_SwapDataFun(1,12,&(Beb_send_data[2])); + + if(!Beb_WriteTo(i)) return 0; + + return 1; +} + + +int Beb_SetHeaderData(unsigned int beb_number, int ten_gig, char* dst_mac, char* dst_ip, unsigned int dst_port){ + unsigned int i = Beb_GetBebInfoIndex(beb_number); + if(!i) return 0; //i must be greater than 0, zero is the global send + return Beb_SetHeaderData1(BebInfo_GetSrcMAC(&beb_infos[i],ten_gig),BebInfo_GetSrcIP(&beb_infos[i],ten_gig),BebInfo_GetSrcPort(&beb_infos[i],ten_gig),dst_mac,dst_ip,dst_port); +} + +int Beb_SetHeaderData1(char* src_mac, char* src_ip, unsigned int src_port, char* dst_mac, char* dst_ip, unsigned int dst_port){ + /* example header*/ + //static unsigned int* word_ptr = new unsigned int [16]; + /*static*/ + /* + udp_header_type udp_header = { + {0x00, 0x50, 0xc5, 0xb2, 0xcb, 0x46}, // DST MAC + {0x00, 0x50, 0xc2, 0x46, 0xd9, 0x02}, // SRC MAC + {0x08, 0x00}, + {0x45}, + {0x00}, + {0x00, 0x00}, + {0x00, 0x00}, + {0x40}, + {0x00}, + {0xff}, + {0x11}, + {0x00, 0x00}, + {129, 205, 205, 128}, // Src IP + {129, 205, 205, 122}, // Dst IP + {0x0f, 0xa1}, + {0x13, 0x89}, + {0x00, 0x00}, //{0x00, 0x11}, + {0x00, 0x00} + }; +*/ + + if(!Beb_SetMAC(src_mac,&(udp_header.src_mac[0]))) return 0; + if(!Beb_SetIP(src_ip,&(udp_header.src_ip[0]))) return 0; + if(!Beb_SetPortNumber(src_port,&(udp_header.src_port[0]))) return 0; + + if(!Beb_SetMAC(dst_mac,&(udp_header.dst_mac[0]))) return 0; + if(!Beb_SetIP(dst_ip,&(udp_header.dst_ip[0]))) return 0; + if(!Beb_SetPortNumber(dst_port,&(udp_header.dst_port[0]))) return 0; + + + Beb_AdjustIPChecksum(&udp_header); + + unsigned int* base_ptr = (unsigned int *) &udp_header; + unsigned int num_words = ( sizeof(struct udp_header_type) + 3 ) / 4; + // for(unsigned int i=0; i %s\n",macVal); + return 0; + } + + int itemp; + sscanf(pch,"%x",&itemp); + dst_ptr[i] = (u_int8_t)itemp; + pch = strtok (NULL, ":"); + i++; + } + return 1; +} + +int Beb_SetIP(char* ip, uint8_t* dst_ptr){ + char ipVal[50];strcpy(ipVal,ip); + int i = 0; + char *pch = strtok (ipVal,"."); + while (pch != NULL){ + if(((i!=3) && ((strlen(pch)>3) || (strlen(pch)<1))) || ((i==3)&&((strlen(pch)<1) || (strlen(pch) > 3)))){ + printf("Error: in ip address -> %s\n",ipVal); + return 0; + } + + int itemp; + sscanf(pch,"%d",&itemp); + dst_ptr[i] = (u_int8_t)itemp; + pch = strtok (NULL, "."); + i++; + } + return 1; +} + +int Beb_SetPortNumber(unsigned int port_number, uint8_t* dst_ptr){ + dst_ptr[0] = (port_number >> 8) & 0xff ; + dst_ptr[1] = port_number & 0xff; + return 1; +} + + +void Beb_AdjustIPChecksum(struct udp_header_type *ip){ + unsigned char *cptr = (unsigned char *) ip->ver_headerlen; + + ip->ip_header_checksum[0] = 0; + ip->ip_header_checksum[1] = 0; + ip->total_length[0] = 0; + ip->total_length[1] = 28; // IP + UDP Header Length + + // calc ip checksum + unsigned int ip_checksum = 0; + unsigned int i; + for(i=0; i<10; i++){ + ip_checksum += ( (cptr[2*i] << 8) + (cptr[2*i + 1]) ); + if (ip_checksum & 0x00010000) ip_checksum = (ip_checksum + 1) & 0x0000ffff; + } + + ip->ip_header_checksum[0] = (ip_checksum >> 8) & 0xff ; + ip->ip_header_checksum[1] = ip_checksum & 0xff ; +} + + + +int Beb_SendMultiReadRequest(unsigned int beb_number, unsigned int left_right, int ten_gig, unsigned int dst_number, unsigned int npackets, unsigned int packet_size, int stop_read_when_fifo_empty){ + + unsigned int i = Beb_GetBebInfoIndex(beb_number); //zero is the global send + + Beb_send_ndata = 3; + if(left_right == 1) Beb_send_data[0] = 0x00040000; + else if(left_right == 2) Beb_send_data[0] = 0x00080000; + else if(left_right == 3) Beb_send_data[0] = 0x000c0000; + else return 0; + + //packet_size/=2; + if(dst_number>0x3f) return 0; + if(packet_size>0x3ff) return 0; + if(npackets==0||npackets>0x100) return 0; + npackets--; + + + Beb_send_data[1] = 0x62000000 | (!stop_read_when_fifo_empty) << 27 | (ten_gig==1) << 24 | packet_size << 14 | dst_number << 8 | npackets; + Beb_send_data[2] = 0; + + Beb_SwapDataFun(0,2,&(Beb_send_data[1])); + + if(!Beb_WriteTo(i)) return 0; + + return 1; +} + + +int Beb_SetUpTransferParameters(short the_bit_mode){ + if(the_bit_mode!=4&&the_bit_mode!=8&&the_bit_mode!=16&&the_bit_mode!=32) return 0; + Beb_bit_mode = the_bit_mode; + + //nimages = the_number_of_images; + // on_dst = 0; + + return 1; +} + +int Beb_RequestNImages(unsigned int beb_number, unsigned int left_right, int ten_gig, unsigned int dst_number, unsigned int nimages, int test_just_send_out_packets_no_wait){ + if(dst_number>64) return 0; + + unsigned int header_size = 4; //4*64 bits + unsigned int packet_size = ten_gig ? 0x200 : 0x80; // 4k or 1k packets + unsigned int npackets = ten_gig ? Beb_bit_mode*4 : Beb_bit_mode*16; + int in_two_requests = (!ten_gig&&Beb_bit_mode==32); + if(in_two_requests) npackets/=2; + + printf("here: %d %d %d %d %d %d %d\n",beb_number,left_right,ten_gig,dst_number,nimages, header_size,test_just_send_out_packets_no_wait); + //printf("here: "< +#include */ + +#include + + + +#include "xparameters.h" +#include "Feb.h" + + + +Feb_Feb(){ + + Feb_nfebs = 0; + Feb_feb_numb = 0; + + Feb_send_ndata = 0; + Feb_send_buffer_size = 1026; + Feb_send_data_raw = malloc((Feb_send_buffer_size+1)*sizeof(int)); + Feb_send_data = &Feb_send_data_raw[1]; + + Feb_recv_ndata = 0; + Feb_recv_buffer_size = 1026; + Feb_recv_data_raw = malloc((Feb_recv_buffer_size+1)*sizeof(int)); + Feb_recv_data = &Feb_recv_data_raw[1]; + + Local_LocalLinkInterface1(ll,XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_RIGHT_BASEADDR); + +} +/* +~Feb(){ + delete ll; + if(feb_numb) delete [] feb_numb; + delete [] send_data_raw; + delete [] recv_data_raw; +} +*/ + +void Feb_SendCompleteFebList(unsigned int n,unsigned int* list){ + unsigned int i; + if(Feb_feb_numb) free(Feb_feb_numb); + Feb_nfebs = n; + Feb_feb_numb = malloc(n*sizeof(unsigned int)); + for(i=0;i0xfff) return 0; + + Feb_send_data_raw[0] = 0x90000000 | (ch<<16); //we + if(Local_Write(ll,4,Feb_send_data_raw)!=4) return 0; + + Feb_send_data_raw[0] = 0xc0000000; //data + return 1;((Feb_send_ndata+1)*4==Local_Write(ll,(Feb_send_ndata+1)*4,Feb_send_data_raw)); +} + +int Feb_ReadFrom(unsigned int ch, unsigned int ntrys){ + unsigned int t; + if(ch>=0xfff) return 0; + + Feb_recv_data_raw[0] = 0xa0000000 | (ch<<16); //read data + Local_Write(ll,4,Feb_recv_data_raw); + usleep(20); + + Feb_recv_ndata=-1; + for(t=0;t0){ + Feb_recv_ndata--; + break; + } + printf("\t Read try number: %d\n",t); + usleep(1000); + } + + + return (Feb_recv_ndata>=0); +} + +void Feb_PrintData(){ + int i; + printf("Sent data: %d\n",Feb_send_ndata); + for(i=0;i1&&Feb_recv_ndata>1){ + printf("\t\t Tail sent: %d (0x%x) receiver: %d (0x%x)\n",Feb_send_data[Feb_send_ndata-1],Feb_send_data[Feb_send_ndata-1],Feb_recv_data[Feb_recv_ndata-1],Feb_recv_data[Feb_recv_ndata-1]); + }else{ + printf("Error printing tail, too little data nsent = 0x%x, nrecv = 0x%x.\n",Feb_send_ndata, Feb_recv_ndata); + } + Feb_PrintData(); + } + return header_returned_is_ok; +} + + +int Feb_CheckTail(unsigned int valid_bit_mask){ + if(Feb_send_ndata<=1&&Feb_recv_ndata<=1){ + printf("Error checking tail, too little data nsent = %d, nrecv = %d.\n",Feb_send_ndata, Feb_recv_ndata); + return 0; + } + + unsigned int the_tail = Feb_recv_data[Feb_recv_ndata-1]&valid_bit_mask; + if(the_tail!=0){ + printf("Error returned in tail: 0x%x (%d)\n",the_tail,the_tail); + if(the_tail&0x10000000) printf("\t\tBusy flag address error.\n"); + if(the_tail&0x20000000) printf("\t\tRead register address error.\n"); + if(the_tail&0x40000000) printf("\t\tWrite register address error.\n"); + if(the_tail&0x80000000) printf("\t\tBram number error.\n"); + if(the_tail&0x08000000) printf("\t\tFifo to read from error.\n"); + if(the_tail&0x3ff) printf("\t\tNumber of data send error.\n"); + return 0; //error + } + + return 1; +} + + +int Feb_CheckCommunication(){ + Feb_send_data_raw[0] = 0x8fff0000; //rst-all serial coms and lls + if(Local_Write(ll,4,Feb_send_data_raw)!=4) return 0; + + printf("CheckingCommunication ....\n"); + while((Local_Read(ll,Feb_recv_buffer_size*4,Feb_recv_data_raw)/4)>0) printf("\t) Cleanning buffer ...\n"); + + return Feb_SetByteOrder(); +} + + +int Feb_SetByteOrder(){ + + unsigned int i; + Feb_send_ndata = 2; + Feb_send_data[0] = 0; //header + Feb_send_data[1] = 0; //tail + + unsigned int dst = 0xff; + for( i=0;i=nfebs){ + cout<<"Error invalid sub number "<Feb_send_buffer_size-2) return 0; + + Feb_send_ndata = nreads+2; + Feb_send_data[0] = 0x20000000 | nreads << 14; //cmd -> read "00" , nreads + + for(i=0;iFeb_send_buffer_size-2) return 0; + + //cout<<"Write register : "< write nwrites and how many + Feb_send_data[2*nwrites+1] = 0; //tail + + for(i=0;iFeb_send_buffer_size-2) return 0; + + Feb_send_ndata = nwrites+2; + Feb_send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address + Feb_send_data[nwrites+1] = 0; //tail + for(i=0;i +#include +#include +#include +#include + + +//#include +//#include +//#include +//#include + + + +#include "FebRegisterDefs.h" +#include "FebControl.h" +#include "Beb.h" + + + +//GetDAQStatusRegister(512,current_mode_bits_from_fpga)){ + +unsigned int Module_ndacs = 16; +char Module_dac_names[16][10]= {"SvP","Vtr","Vrf","Vrs","SvN","Vtgstv","Vcmp_ll","Vcmp_lr","cal","Vcmp_rl","rxb_rb","rxb_lb","Vcmp_rr","Vcp","Vcn","Vis"};; + + + + +struct Module modules[10]; +int moduleSize = 0; + +unsigned int Feb_Control_staticBits; //program=1,m4=2,m8=4,test=8,rotest=16,cs_bar_left=32,cs_bar_right=64 +unsigned int Feb_Control_acquireNReadoutMode; //safe or parallel, half or full speed +unsigned int Feb_Control_triggerMode; //internal timer, external start, external window, signal polarity (external trigger and enable) +unsigned int Feb_Control_externalEnableMode; //external enabling engaged and it's polarity +unsigned int Feb_Control_subFrameMode; + +unsigned int Feb_Control_photon_energy_eV; + +unsigned int Feb_Control_nimages; +double Feb_Control_exposure_time_in_sec; +double Feb_Control_exposure_period_in_sec; + +unsigned int Feb_Control_trimbit_size; +unsigned int* Feb_Control_last_downloaded_trimbits; + + + + +void Module_Module(struct Module* mod,unsigned int number, unsigned int address_top){ + unsigned int i; + mod->module_number = number; + mod->top_address_valid = 1; + mod->top_left_address = 0x100 | (0xff & address_top); + mod->top_right_address = (0x200 | (0xff & address_top)); + mod-> bottom_address_valid = 0; + mod-> bottom_left_address = 0; + mod-> bottom_right_address = 0; + + mod->high_voltage = -1; + mod->top_dac = malloc(Module_ndacs * sizeof(int)); + mod->bottom_dac = malloc(Module_ndacs * sizeof(int)); + for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; + for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; +} + +void Module_Module1(struct Module* mod,unsigned int number, unsigned int address_top, unsigned int address_bottom){ + unsigned int i; + mod->module_number = number; + mod->top_address_valid = 1; + mod->top_left_address = 0x100 | (0xff & address_top); + mod->top_right_address = 0x200 | (0xff & address_top); + mod->bottom_address_valid = 1; + mod->bottom_left_address = 0x100 | (0xff & address_bottom); + mod->bottom_right_address = 0x200 | (0xff & address_bottom); + + mod->high_voltage = -1; + + for(i=0;i<4;i++) mod->idelay_top[i]=mod->idelay_bottom[i]=0; + + mod->top_dac = malloc(Module_ndacs * sizeof(int)); + mod->bottom_dac = malloc(Module_ndacs * sizeof(int)); + for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; + for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; +} + + +unsigned int Module_GetModuleNumber(struct Module* mod) {return mod->module_number;} +int Module_TopAddressIsValid(struct Module* mod) {return mod->top_address_valid;} +unsigned int Module_GetTopBaseAddress(struct Module* mod) {return (mod->top_left_address&0xff);} +unsigned int Module_GetTopLeftAddress(struct Module* mod) {return mod->top_left_address;} +unsigned int Module_GetTopRightAddress(struct Module* mod) {return mod->top_right_address;} +unsigned int Module_GetBottomBaseAddress(struct Module* mod) {return (mod->bottom_left_address&0xff);} +int Module_BottomAddressIsValid(struct Module* mod) {return mod->bottom_address_valid;} +unsigned int Module_GetBottomLeftAddress(struct Module* mod) {return mod->bottom_left_address;} +unsigned int Module_GetBottomRightAddress(struct Module* mod) {return mod->bottom_right_address;} + +unsigned int Module_SetTopIDelay(struct Module* mod,unsigned int chip,unsigned int value) { return Module_TopAddressIsValid(mod) &&chip<4 ? (mod->idelay_top[chip]=value) : 0;} //chip 0=ll,1=lr,0=rl,1=rr +unsigned int Module_GetTopIDelay(struct Module* mod,unsigned int chip) { return chip<4 ? mod->idelay_top[chip] : 0;} //chip 0=ll,1=lr,0=rl,1=rr +unsigned int Module_SetBottomIDelay(struct Module* mod,unsigned int chip,unsigned int value) { return Module_BottomAddressIsValid(mod) &&chip<4 ? (mod->idelay_bottom[chip]=value) : 0;} //chip 0=ll,1=lr,0=rl,1=rr +unsigned int Module_GetBottomIDelay(struct Module* mod,unsigned int chip) { return chip<4 ? mod->idelay_bottom[chip] : 0;} //chip 0=ll,1=lr,0=rl,1=rr + +float Module_SetHighVoltage(struct Module* mod,float value) { return Module_TopAddressIsValid(mod) ? (mod->high_voltage=value) : -1;} +float Module_GetHighVoltage(struct Module* mod) { return mod->high_voltage;} + +int Module_SetTopDACValue(struct Module* mod,unsigned int i, int value) { return (itop_dac[i]=value) : -1;} +int Module_GetTopDACValue(struct Module* mod,unsigned int i) { return (itop_dac[i]:-1;} +int Module_SetBottomDACValue(struct Module* mod,unsigned int i, int value) { return (ibottom_dac[i]=value) : -1;} +int Module_GetBottomDACValue(struct Module* mod,unsigned int i) { return (ibottom_dac[i]:-1;} + + + + + + + + +void Feb_Control_FebControl(){ + + Feb_Control_staticBits=Feb_Control_acquireNReadoutMode=Feb_Control_triggerMode=Feb_Control_externalEnableMode=Feb_Control_subFrameMode=0; + + Feb_Control_trimbit_size=263680; + Feb_Control_last_downloaded_trimbits = malloc(Feb_Control_trimbit_size * sizeof(int)); + + printf("\nDefault Settings:\n"); + Feb_Control_nimages = 1; + Feb_Control_exposure_time_in_sec = 1; + Feb_Control_exposure_period_in_sec = 0; + Feb_Control_SetTestModeVariable(0); + //SetPhotonEnergyCalibrationParameters(-5.8381e-5,1.838515,5.09948e-7,-4.32390e-11,1.32527e-15); + //SetRateCorrection(0); //deactivate rate correction + Feb_Control_SetDynamicRange(16); + Feb_Control_SetPhotonEnergy(8000); + Feb_Control_SetReadoutMode(0); + Feb_Control_SetReadoutSpeed(0); + Feb_Control_SetTriggerMode(0,1); + Feb_Control_SetExternalEnableMode(0,1); + printf("\n\n"); + + Feb_Control_Init(); +} + + + +void Feb_Control_ClearModules(){ + unsigned int i; + //for(i=0;i0) + sprintf(str,"mod%d::%s",module_num,str); + if(!Feb_Control_SetDAC(str,f0,1)) + printf("error in string: %s",str); + + } + } + fclose(fp); + + return 1; +} + + +int Feb_Control_CheckSetup(){ + unsigned int i,j; + int ok = 1; + + for(i=0;i3){ + printf("Error SetIDelay chip_pos %d doesn't exist.\n",chip_pos);; + return 0; + } + + unsigned int module_index=0; + if(!Feb_Control_GetModuleIndex(module_num,&module_index)){ + printf("Error could not set i delay module number %d invalid.\n",module_num); + return 0; + } + + int ok = 1; + if(chip_pos/2==0){ //left fpga + if(Module_TopAddressIsValid(&modules[module_index])){ + if(Feb_Control_SendIDelays(Module_GetTopLeftAddress(&modules[module_index]),chip_pos%2==0,0xffffffff,ndelay_units)){ + if(module_index!=0) Module_SetTopIDelay(&modules[module_index],chip_pos,ndelay_units); + else{ + for(i=0;i0x3ff) ndelay_units=0x3ff; + // this is global + unsigned int delay_data_valid_nclks = 15 - ((ndelay_units&0x3c0)>>6); //data valid delay upto 15 clks + ndelay_units &= 0x3f; + + unsigned int set_left_delay_channels = chip_lr ? channels:0; + unsigned int set_right_delay_channels = chip_lr ? 0:channels; + + printf("\tSetting delays of "); + if(set_left_delay_channels!=0) printf("left chips of dst_num %d",dst_num); + else if(set_right_delay_channels!=0) printf("right chips of dst_num %d",dst_num); + + printf(", tracks 0x%x to: %d, %d clks and %d units.\n",channels,(((15-delay_data_valid_nclks)<<6)|ndelay_units),delay_data_valid_nclks,ndelay_units); + + if(!Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG2, 1<<31 | delay_data_valid_nclks<<16 | ndelay_units,0,0) || //the 1<<31 time enables the setting of the data valid delays + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG3,set_left_delay_channels,0,0) || + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG4,set_right_delay_channels,0,0) || + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG_CTRL,CHIP_DATA_OUT_DELAY_SET,1,1)){ + printf("Warning: could not SetChipDataInputDelays(...).\n"); + return 0; + } + + return 1; +} + + +int Feb_Control_VoltageToDAC(float value, unsigned int* digital,unsigned int nsteps,float vmin,float vmax){ + if(valuevmax) return 0; + *digital = (int)(((value-vmin)/(vmax-vmin))*(nsteps-1) + 0.5); + return 1; +} + +float Feb_Control_DACToVoltage(unsigned int digital,unsigned int nsteps,float vmin,float vmax){ + return vmin+(vmax-vmin)*digital/(nsteps-1); +} + + +int Feb_Control_SetHighVoltage(float value){ + return Feb_Control_SetHighVoltage1(0,value); +} + +int Feb_Control_SetHighVoltage1(unsigned int module_num,float value){ + unsigned int module_index=0; + unsigned int i; + if(!Feb_Control_GetModuleIndex(module_num,&module_index)||!Module_TopAddressIsValid(&modules[module_index])){ + printf("Error could not set high voltage module number %d invalid.\n",module_num); + return 0; + } + + if(!Feb_Control_SendHighVoltage(Module_GetTopRightAddress(&modules[module_index]),&value)) return 0; + + if(module_index!=0) Module_SetHighVoltage(&modules[module_index],value); + else for(i=0;i4095){ + printf("Waring: SetDac bad value, %d. The range is 0 to 4095.\n",v); + return 0; + } + + if(top&&Module_TopAddressIsValid(&modules[module_index])){ + + if(!Feb_Control_SendDACValue(Module_GetTopRightAddress(&modules[module_index]),dac_ch,&v)) return 0; + + + if(module_index!=0) Module_SetTopDACValue(&modules[module_index],dac_ch,v); + else for(i=0;i=Module_ndacs){ + printf("Warning: GetDACName index out of range, %d invalid.\n",dac_num); + return 0; + } + strcpy(s,Module_dac_names[dac_num]); + return 1; +} + +int Feb_Control_GetDACNumber(char* s, unsigned int* n){ + unsigned int i; + for(i=0;i15){ + printf("Warning invalid ch for SetDAC.\n"); + return 0; + } + + //if(voltage<0) return PowerDownDAC(socket_num,ch); + + *value&=0xfff; + unsigned int dac_ic = (ch<8) ? 1:2; + unsigned int dac_ch = ch%8; + unsigned int r = dac_ic<<30 | 3<<16 | dac_ch<<12 | *value; //3 write and power up + + + if(!Feb_Interface_WriteRegister(dst_num,0,r,1,0)){ + printf("Warning: trouble setting dac %d voltage.\n",ch); + return 0; + } + + float voltage=Feb_Control_DACToVoltage(*value,4096,0,2048); + + printf("\tDac number %d (%s) of dst %d set to %d (%f mV).\n",ch,Module_dac_names[ch],dst_num,*value,voltage); + return 1; +} + +/* +float GetDAC(string s){ + static unsigned int n; + if(!GetDACNumber(s,n)) return 0; + + return dac[n]; +} +*/ + +int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ + printf("Setting Trimbits\n"); + + //for (int iy=10000;iy<20020;++iy)//263681 + //for (int iy=263670;iy<263680;++iy)//263681 + // printf("%d:%c\t\t",iy,trimbits[iy]); + + + + unsigned int module_index=0; + if(!Feb_Control_GetModuleIndex(module_num,&module_index)){ + printf("Warning could not set trimbits, bad module number.\n"); + return 0; + } + + if(!Feb_Control_Reset()) printf("Warning could not reset DAQ.\n"); + int l_r; + for(l_r=0;l_r<2;l_r++){ // l_r loop + unsigned int disable_chip_mask = l_r ? DAQ_CS_BAR_LEFT : DAQ_CS_BAR_RIGHT; + if(!(Feb_Interface_WriteRegister(0xfff,DAQ_REG_STATIC_BITS,disable_chip_mask|DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_M8,0,0)&&Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT)&&Feb_Control_StartDAQOnlyNWaitForFinish(5000))){ + printf("Could not select chips\n"); + return 0; + } + int row_set; + for(row_set=0;row_set<16;row_set++){ //16 rows at a time + if(row_set==0){ + if(!Feb_Control_SetCommandRegister(DAQ_RESET_COMPLETELY|DAQ_SEND_A_TOKEN_IN|DAQ_LOAD_16ROWS_OF_TRIMBITS)){ + printf("Warning: Could not Feb_Control_SetCommandRegister for loading trim bits.\n"); + return 0; + } + }else{ + if(!Feb_Control_SetCommandRegister(DAQ_LOAD_16ROWS_OF_TRIMBITS)){ + printf("Warning: Could not Feb_Control_SetCommandRegister for loading trim bits.\n"); + return 0; + } + } + + static unsigned int trimbits_to_load_l[1024]; + static unsigned int trimbits_to_load_r[1024]; + int row; + for(row=0;row<16;row++){ //row loop + int offset = 2*32*row; + int sc; + for(sc=0;sc<32;sc++){ //supercolumn loop sc + + int super_column_start_position_l = 1030*row + l_r *258 + sc*8; + int super_column_start_position_r = 1030*row + 516 + l_r *258 + sc*8; + + /* + int super_column_start_position_l = 1024*row + l_r *256 + sc*8; //256 per row, 8 per super column + int super_column_start_position_r = 1024*row + 512 + l_r *256 + sc*8; //256 per row, 8 per super column +*/ + int chip_sc = 31 - sc; + trimbits_to_load_l[offset+chip_sc] = 0; + trimbits_to_load_r[offset+chip_sc] = 0; + int i; + for(i=0;i<8;i++){ // column loop i + + trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_l+i])<<((7-i)*4);//low + trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_l+i])>>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]->Module_GetTopLeftAddress(),0,0,1024,trimbits_to_load_r)||!WriteMemory(modules[0]->Module_GetTopRightAddress(),0,0,1024,trimbits_to_load_l)||!Feb_Control_StartDAQOnlyNWaitForFinish()){ + cout <<" some errror!"<< endl; + return 0; + } +*/ + if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)||!Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)||!Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + printf(" some errror!\n"); + return 0; + } + + } //end row_set loop (groups of 16 rows) + } // end l_r loop + memcpy(Feb_Control_last_downloaded_trimbits,trimbits,Feb_Control_trimbit_size*sizeof(unsigned char)); + return Feb_Control_SetStaticBits(); //send the static bits +} + + +unsigned int* Feb_Control_GetTrimbits(){ + return Feb_Control_last_downloaded_trimbits; +} + + + + +unsigned int Feb_Control_AddressToAll(){ + if(moduleSize==0) return 0; + return Module_GetTopLeftAddress(&modules[0])|Module_GetTopRightAddress(&modules[0]); +} + +int Feb_Control_SetCommandRegister(unsigned int cmd){ + return Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CHIP_CMDS,cmd,0,0); +} + + +int Feb_Control_GetDAQStatusRegister(unsigned int dst_address, unsigned int* ret_status){ + if(!Feb_Interface_ReadRegister(dst_address,DAQ_REG_STATUS,ret_status)){ + printf("Error: reading status register.\n"); + return 0; + } + + *ret_status = (0x00FF0000 & *ret_status) >> 16; + return 1; +} + + +int Feb_Control_StartDAQOnlyNWaitForFinish(int sleep_time_us){ + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)||!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_START,0,0)){ + printf("Warning: could not start.\n"); + return 0; + } + + return Feb_Control_WaitForFinishedFlag(sleep_time_us); +} + +int Feb_Control_WaitForFinishedFlag(int sleep_time_us){ + int is_running = Feb_Control_AcquisitionInProgress(); + while(is_running){ + usleep(sleep_time_us); + is_running = Feb_Control_AcquisitionInProgress(); + } + if(is_running!=0){ + printf("\n\nWarning WaitForFinishedFlag comunication problem..\n\n"); + return 0; //communication problem + } + + return 1; +} + +int Feb_Control_AcquisitionInProgress(){ + unsigned int status_reg_r=0; + + if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopRightAddress(&modules[1]),&status_reg_r))) + return 0; + if(status_reg_r&DAQ_STATUS_DAQ_RUNNING) return 1; + + /* + if(!(GetDAQStatusRegister(modules[i]->Module_GetTopLeftAddress(),status_reg_r)&&GetDAQStatusRegister(modules[i]->Module_GetTopRightAddress(),status_reg_l))){ + for(int i=0;i<2;i++) printf("Waring trouble reading status register. Returning zero to avoid inifite loops, this could cause trouble!"\n");; + return 0; //to avoid inifite loops + } + if((status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING) return 1; + } + */ + + return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING; +} + +int Feb_Control_Reset(){ + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_RESET,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)){ + printf("Warning: Could not reset daq, no response.\n"); + return 0; + } + + return Feb_Control_WaitForFinishedFlag(5000); +} + + + + +int Feb_Control_SetStaticBits(){ + //program=1,m4=2,m8=4,test=8,rotest=16,cs_bar_left=32,cs_bar_right=64 + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_STATIC_BITS,Feb_Control_staticBits,0,0) || !Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + printf("Warning: Could not set static bits\n"); + return 0; + } + + return 1; +} +int Feb_Control_SetStaticBits1(unsigned int the_static_bits){ + Feb_Control_staticBits = the_static_bits; + return Feb_Control_SetStaticBits(); +} + +int Feb_Control_SetTestModeVariable(int on){ + if(on) Feb_Control_staticBits |= DAQ_STATIC_BIT_CHIP_TEST; //setting test bit to high + else Feb_Control_staticBits &= (~DAQ_STATIC_BIT_CHIP_TEST); //setting test bit to low + return 1; +} + +int Feb_Control_GetTestModeVariable(){ + return Feb_Control_staticBits&DAQ_STATIC_BIT_CHIP_TEST; +} + +int Feb_Control_SetDynamicRange(unsigned int four_eight_sixteen_or_thirtytwo){ + static unsigned int everything_but_bit_mode = DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_CHIP_TEST|DAQ_STATIC_BIT_ROTEST; + if(four_eight_sixteen_or_thirtytwo==4){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M4 | (Feb_Control_staticBits&everything_but_bit_mode); //leave test bits in currernt state + Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else if(four_eight_sixteen_or_thirtytwo==8){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M8 | (Feb_Control_staticBits&everything_but_bit_mode); + Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else if(four_eight_sixteen_or_thirtytwo==16){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits&everything_but_bit_mode); + Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else if(four_eight_sixteen_or_thirtytwo==32){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits&everything_but_bit_mode); + Feb_Control_subFrameMode |= DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else{ + printf("Warning: dynamic range (%d) not valid, not setting bit mode.\n",four_eight_sixteen_or_thirtytwo); + printf("Set dynamic range int must equal 4,8 16, or 32.\n"); + return 0; + } + + printf("Dynamic range set to: %d\n",four_eight_sixteen_or_thirtytwo); + return 1; +} + +unsigned int Feb_Control_GetDynamicRange(){ + if(Feb_Control_subFrameMode&DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) return 32; + else if(DAQ_STATIC_BIT_M4&Feb_Control_staticBits) return 4; + else if(DAQ_STATIC_BIT_M8&Feb_Control_staticBits) return 8; + + return 16; +} + +int Feb_Control_SetReadoutSpeed(unsigned int readout_speed){ //0->full,1->half,2->quarter or 3->super_slow + Feb_Control_acquireNReadoutMode &= (~DAQ_CHIP_CONTROLLER_SUPER_SLOW_SPEED); + if(readout_speed==1){ + Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_HALF_SPEED; + printf("Everything at half speed, ie. reading with 50 MHz main clk (half speed) ....\n"); + }else if(readout_speed==2){ + Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_QUARTER_SPEED; + printf("Everything at quarter speed, ie. reading with 25 MHz main clk (quarter speed) ....\n"); + }else if(readout_speed==3){ + Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_SUPER_SLOW_SPEED; + printf("Everything at super slow speed, ie. reading with ~0.200 MHz main clk (super slow speed) ....\n"); + }else{ + if(readout_speed){ + printf("Warning readout speed %d unknown, defaulting to full speed.\n",readout_speed); + printf("Everything at full speed, ie. reading with 100 MHz main clk (full speed) ....\n"); + return 0; + } + printf("Everything at full speed, ie. reading with 100 MHz main clk (full speed) ....\n"); + } + + return 1; +} + +int Feb_Control_SetReadoutMode(unsigned int readout_mode){ //0->parallel,1->non-parallel,2-> safe_mode + Feb_Control_acquireNReadoutMode &= (~DAQ_NEXPOSURERS_PARALLEL_MODE); + if(readout_mode==1){ + Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_NORMAL_NONPARALLEL_MODE; + printf("Readout mode set to normal non-parallel readout mode ... \n");; + }else if(readout_mode==2){ + Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_SAFEST_MODE_ROW_CLK_BEFORE_MODE; + printf("Readout mode set to safest mode, row clk before main clk readout sequence .... \n");; + }else{ + Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_PARALLEL_MODE; + if(readout_mode){ + printf("Warning readout mode %d) unknown, defaulting to full speed.\n",readout_mode); + printf("Readout mode set to parrallel acquire/read mode .... \n");; + return 0; + } + printf("Readout mode set to parrallel acquire/read mode .... \n");; + } + + return 1; +} + +int Feb_Control_SetTriggerMode(unsigned int trigger_mode,int polarity){ + //"00"-> internal exposure time and period, + //"01"-> external acquistion start and internal exposure time and period, + //"10"-> external start trigger and internal exposure time, + //"11"-> external triggered start and stop of exposures + Feb_Control_triggerMode = (~DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START_AND_STOP); + + if(trigger_mode == 1){ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_ACQUISITION_START; + printf("Trigger mode: external start of acquisition sequence, internal exposure length and period.\n");; + }else if(trigger_mode == 2){ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START; + printf("Trigger mode: external image start, internal exposure time.\n");; + }else if(trigger_mode == 3){ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START_AND_STOP; + printf("Trigger mode: externally controlled, external image window (start and stop).\n");; + }else{ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_INTERNAL_ACQUISITION; + if(trigger_mode) printf("Warning trigger %d) unknown, defaulting to internal triggering.\n",trigger_mode);; + + printf("Trigger mode: acquisition internally controlled exposure length and period.\n");; + return trigger_mode==0; + } + + if(polarity){ + Feb_Control_triggerMode |= DAQ_NEXPOSURERS_EXTERNAL_TRIGGER_POLARITY; + printf("External trigger polarity set to positive.\n");; + }else{ + Feb_Control_triggerMode &= (~DAQ_NEXPOSURERS_EXTERNAL_TRIGGER_POLARITY); + printf("External trigger polarity set to negitive.\n");; + } + + return 1; +} + + +int Feb_Control_SetExternalEnableMode(int use_external_enable, int polarity){ + if(use_external_enable){ + Feb_Control_externalEnableMode |= DAQ_NEXPOSURERS_EXTERNAL_ENABLING; + printf("External enabling enabled, "); + if(polarity){ + Feb_Control_externalEnableMode |= DAQ_NEXPOSURERS_EXTERNAL_ENABLING_POLARITY; + printf(", polarity set to positive.\n");; + }else{ + Feb_Control_externalEnableMode &= (~DAQ_NEXPOSURERS_EXTERNAL_ENABLING_POLARITY); + printf(", polarity set to negative.\n");; + } + }else{ + Feb_Control_externalEnableMode &= (~DAQ_NEXPOSURERS_EXTERNAL_ENABLING); + printf("External enabling disabled.\n");; + } + + return 1; +} + +int Feb_Control_SetNExposures(unsigned int n_images){ + if(!Feb_Control_nimages){ + printf("Warning nimages must be greater than zero.%d\n",Feb_Control_nimages); + return 0; + } + + Feb_Control_nimages = n_images; + printf("Number of images set to: %d\n",Feb_Control_nimages); + return 1; +} +unsigned int Feb_Control_GetNExposures(){return Feb_Control_nimages;} + +int Feb_Control_SetExposureTime(double the_exposure_time_in_sec){ + Feb_Control_exposure_time_in_sec = the_exposure_time_in_sec; + printf("Exposure time set to: %f\n",Feb_Control_exposure_time_in_sec); + return 1; +} +double Feb_Control_GetExposureTime(){return Feb_Control_exposure_time_in_sec;} + +int Feb_Control_SetExposurePeriod(double the_exposure_period_in_sec){ + Feb_Control_exposure_period_in_sec = the_exposure_period_in_sec; + printf("Exposure period set to: %f\n",Feb_Control_exposure_period_in_sec); + return 1; +} +double Feb_Control_GetExposurePeriod(){return Feb_Control_exposure_period_in_sec;} + +unsigned int Feb_Control_ConvertTimeToRegister(float time_in_sec){ + float n_clk_cycles = round(time_in_sec/10e-9); //200 MHz ctb clk or 100 MHz feb clk + + unsigned int decoded_time; + if(n_clk_cycles>(pow(2,29)-1)*pow(10,7)){ + float max_time = 10e-9*(pow(2,28)-1)*pow(10,7); + printf("Warning: time exceeds (%f) maximum exposure time of %f sec.\n",time_in_sec,max_time); + printf("\t Setting to maximum %f us.\n",max_time); + decoded_time = 0xffffffff; + }else{ + int power_of_ten = 0; + while(n_clk_cycles>pow(2,29)-1){ power_of_ten++; n_clk_cycles = round(n_clk_cycles/10.0);} + decoded_time = (int)(n_clk_cycles)<<3 | (int)(power_of_ten); + } + + return decoded_time; +} + +int Feb_Control_ResetChipCompletely(){ + if(!Feb_Control_SetCommandRegister(DAQ_RESET_COMPLETELY) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + printf("Warning: could not ResetChipCompletely().\n");; + return 0; + } + + return 1; +} + + +void Feb_Control_PrintAcquisitionSetup(){ + + time_t rawtime; + time(&rawtime); + struct tm *timeinfo = localtime(&rawtime); + + printf("\nStarting an exposure: %s",asctime(timeinfo)); + printf("\t Dynamic range nbits: %d\n",Feb_Control_GetDynamicRange()); + printf("\t Trigger mode: 0x%x\n",Feb_Control_triggerMode); + printf("\t Number of exposures: %d\n",Feb_Control_GetNExposures()); + printf("\t Exsposure time (if used): %f seconds.\n",Feb_Control_exposure_time_in_sec); + printf("\t Exsposure period (if used): %f seconds.\n\n\n",Feb_Control_exposure_period_in_sec); +} + +int Feb_Control_SendBitModeToBebServer(){ +/* + static int first_pass = 1; + static char buffer[1024]; + + if(first_pass&&!Feb_Control_SetupSendToSocket("localhost",43212)) return 0; + else first_pass=0; +*/ + unsigned int just_bit_mode = (DAQ_STATIC_BIT_M4|DAQ_STATIC_BIT_M8) & Feb_Control_staticBits; + unsigned int bit_mode = 16; //default + if(just_bit_mode == DAQ_STATIC_BIT_M4) bit_mode = 4; + else if(just_bit_mode == DAQ_STATIC_BIT_M8) bit_mode = 8; + else if(Feb_Control_subFrameMode&DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) bit_mode = 32; + + + if(!Beb_SetUpTransferParameters(bit_mode)){ + printf("Error: sending bit mode ...\n"); + return 0; + } + + /* + bzero(buffer,1024); + sprintf(buffer,"setbitmode %d",bit_mode); + + if(Feb_Control_WriteNRead(buffer,strlen(buffer),1024)<1||strncmp(buffer,"0",1)){ + printf("Error: sending bit mode ...\n"); + return 0; + } +*/ + return 1; +} + +/* +int Feb_Control_SetupSendToSocket(const char* ip_address_hostname, unsigned short int port){ + + struct hostent *server; + if((server = gethostbyname(ip_address_hostname)) == NULL){ //or look into getaddrinfo(3) + fprintf(stderr,"ERROR, no such host\n"); + return 0; + } + + //struct sockaddr_in serv_addr; + bzero((char *) &Feb_Control_serv_addr, sizeof(Feb_Control_serv_addr)); + Feb_Control_serv_addr.sin_family = AF_INET; + bcopy((char *)server->h_addr,(char *)&Feb_Control_serv_addr.sin_addr.s_addr,server->h_length); + Feb_Control_serv_addr.sin_port = htons(port); + + return 1; +} + +int Feb_Control_WriteNRead(char* message, int length, int max_length){ + + int sockfd = socket(AF_INET, SOCK_STREAM, 0); + if(sockfd <0){ + fprintf(stderr,"ERROR opening socket\n"); + return 0; + } + + if(connect(sockfd,(struct sockaddr *) &Feb_Control_serv_addr,sizeof(Feb_Control_serv_addr)) < 0){ + fprintf(stderr,"ERROR connecting\n"); + return 0; + } + + int n = write(sockfd,message,length); + if(n<0) printf("ERROR writing to socket"); + + length = read(sockfd,message,max_length); + if(length<0) printf("ERROR reading to socket"); + + close(sockfd); + + return length; +} +*/ + +int Feb_Control_StartAcquisition(){ + + static unsigned int reg_nums[20]; + static unsigned int reg_vals[20]; + + Feb_Control_PrintAcquisitionSetup(); + + // if(!Reset()||!ResetDataStream()){ + if(!Feb_Control_Reset()){ + printf("Trouble reseting daq or data stream...\n");; + return 0; + } + + if(!Feb_Control_SetStaticBits(Feb_Control_staticBits&(DAQ_STATIC_BIT_M4|DAQ_STATIC_BIT_M8))){ + printf("Trouble setting static bits ...\n");; + return 0; + } + + if(!Feb_Control_SendBitModeToBebServer()){ + printf("Trouble sending static bits to server ...\n");; + return 0; + } + + if(!Feb_Control_ResetChipCompletely()){ + printf("Trouble resetting chips ...\n");; + return 0; + } + + reg_nums[0]=DAQ_REG_CTRL; + reg_vals[0]=0; + reg_nums[1]=DAQ_REG_NEXPOSURES; + reg_vals[1]=Feb_Control_nimages; + reg_nums[2]=DAQ_REG_EXPOSURE_TIMER; + reg_vals[2]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_time_in_sec); + reg_nums[3]=DAQ_REG_EXPOSURE_REPEAT_TIMER; + reg_vals[3]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_period_in_sec); + reg_nums[4]=DAQ_REG_CHIP_CMDS; + reg_vals[4]=(Feb_Control_acquireNReadoutMode|Feb_Control_triggerMode|Feb_Control_externalEnableMode|Feb_Control_subFrameMode); + int i; + for(i=5;i<19;i++){ + reg_nums[i]=DAQ_REG_CTRL; + reg_vals[i]=0; + } + reg_nums[19]=DAQ_REG_CTRL; + reg_vals[19]=ACQ_CTRL_START; + + if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),20,reg_nums,reg_vals,0,0)){ + printf("Trouble starting acquisition....\n");; + return 0; + } + + return 1; +} + +int Feb_Control_StopAcquisition(){ + return Feb_Control_Reset(); +} + + + + +int Feb_Control_LoadTrimbitFile(){/* + string filename = "/home/root/noise.snbeb040"; + ifstream input_file; + + int Module_ndacs =16; + int dacs[Module_ndacs]; + unsigned int chanregs[trimbit_size]; + + + input_file.open(filename.c_str() ,ifstream::binary); + if(!input_file.is_open()){ + printf("Warning, could not open trimbit file: %s\n",filename); + exit(-1); + } + + //dacs + int i; + for(i=0;i +//#include +//#include +//#include +//#include +//#include + +#include +#include + +#include "xparameters.h" + +#include "FebInterface.h" + + + + struct LocalLinkInterface ll_local,* ll; + + unsigned int Feb_Interface_nfebs; + unsigned int* Feb_Interface_feb_numb; + + int Feb_Interface_send_ndata; + unsigned int Feb_Interface_send_buffer_size; + unsigned int* Feb_Interface_send_data_raw; + unsigned int* Feb_Interface_send_data; + + int Feb_Interface_recv_ndata; + unsigned int Feb_Interface_recv_buffer_size; + unsigned int* Feb_Interface_recv_data_raw; + unsigned int* Feb_Interface_recv_data; + + +void Feb_Interface_FebInterface(){ + ll = &ll_local; + Feb_Interface_nfebs = 0; + Feb_Interface_feb_numb = 0; + + Feb_Interface_send_ndata = 0; + Feb_Interface_send_buffer_size = 1026; + Feb_Interface_send_data_raw = malloc((Feb_Interface_send_buffer_size+1) * sizeof(unsigned int)); + Feb_Interface_send_data = &Feb_Interface_send_data_raw[1]; + + Feb_Interface_recv_ndata = 0; + Feb_Interface_recv_buffer_size = 1026; + Feb_Interface_recv_data_raw = malloc((Feb_Interface_recv_buffer_size+1) * sizeof(unsigned int)); + Feb_Interface_recv_data = &Feb_Interface_recv_data_raw[1]; + + Local_LocalLinkInterface1(ll,XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_RIGHT_BASEADDR); + +} + + + +void Feb_Interface_SendCompleteList(unsigned int n,unsigned int* list){ + unsigned int i; + if(Feb_Interface_feb_numb) free(Feb_Interface_feb_numb); + Feb_Interface_nfebs = n; + Feb_Interface_feb_numb = malloc(n * sizeof(unsigned int)); + for(i=0;i0xfff) return 0; + + Feb_Interface_send_data_raw[0] = 0x8fff0000; + if(Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; + + Feb_Interface_send_data_raw[0] = 0x90000000 | (ch<<16); + if(Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; + + Feb_Interface_send_data_raw[0] = 0xc0000000; + return ((Feb_Interface_send_ndata+1)*4==Local_Write(ll,(Feb_Interface_send_ndata+1)*4,Feb_Interface_send_data_raw)); +} + +int Feb_Interface_ReadFrom(unsigned int ch, unsigned int ntrys){ + unsigned int t; + if(ch>=0xfff) return 0; + + Feb_Interface_recv_data_raw[0] = 0xa0000000 | (ch<<16); + Local_Write(ll,4,Feb_Interface_recv_data_raw); + usleep(20); + + Feb_Interface_recv_ndata=-1; + for(t=0;t0){ + Feb_Interface_recv_ndata--; + break; + } + usleep(1000); + } + + return (Feb_Interface_recv_ndata>=0); +} + + + +int Feb_Interface_SetByteOrder(){ + Feb_Interface_send_data_raw[0] = 0x8fff0000; + if(Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; + Feb_Interface_send_ndata = 2; + Feb_Interface_send_data[0] = 0; + Feb_Interface_send_data[1] = 0; + unsigned int i; + unsigned int dst = 0xff; + for(i=0;iFeb_Interface_send_buffer_size-2) return 0; + + Feb_Interface_send_ndata = nreads+2; + Feb_Interface_send_data[0] = 0x20000000 | nreads << 14; + + for(i=0;iFeb_Interface_send_buffer_size-2) return 0; + + //cout<<"Write register : "<Feb_Interface_send_buffer_size-2) {printf("error herer: nwrites:%d\n",nwrites);return 0;}//*d-1026 + + Feb_Interface_send_ndata = nwrites+2;//*d-1025 + Feb_Interface_send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address + Feb_Interface_send_data[nwrites+1] = 0; + for(i=0;i +//#include +//#include +//#include +//#include + +#include "HardwareIO.h" + +xfs_u8 HWIO_xfs_in8(xfs_u32 InAddress) +{ + /* read the contents of the I/O location and then synchronize the I/O + * such that the I/O operation completes before proceeding on + */ + + xfs_u8 IoContents; + __asm__ volatile ("eieio; lbz %0,0(%1)":"=r" (IoContents):"b" + (InAddress)); + return IoContents; +} + +/*****************************************************************************/ + +xfs_u16 HWIO_xfs_in16(xfs_u32 InAddress) +{ + /* read the contents of the I/O location and then synchronize the I/O + * such that the I/O operation completes before proceeding on + */ + + xfs_u16 IoContents; + __asm__ volatile ("eieio; lhz %0,0(%1)":"=r" (IoContents):"b" + (InAddress)); + return IoContents; +} + +/*****************************************************************************/ + +xfs_u32 HWIO_xfs_in32(xfs_u32 InAddress) +{ + /* read the contents of the I/O location and then synchronize the I/O + * such that the I/O operation completes before proceeding on + */ + + xfs_u32 IoContents; + __asm__ volatile ("eieio; lwz %0,0(%1)":"=r" (IoContents):"b" + (InAddress)); + return IoContents; +} + +/*****************************************************************************/ + +void HWIO_xfs_out8(xfs_u32 OutAddress, xfs_u8 Value) +{ + /* write the contents of the I/O location and then synchronize the I/O + * such that the I/O operation completes before proceeding on + */ + + __asm__ volatile ("stb %0,0(%1); eieio"::"r" (Value), "b"(OutAddress)); +} + +/*****************************************************************************/ +void HWIO_xfs_out16(xfs_u32 OutAddress, xfs_u16 Value) +{ + /* write the contents of the I/O location and then synchronize the I/O + * such that the I/O operation completes before proceeding on + */ + + __asm__ volatile ("sth %0,0(%1); eieio"::"r" (Value), "b"(OutAddress)); +} + +/*****************************************************************************/ + +void HWIO_xfs_out32(xfs_u32 OutAddress, xfs_u32 Value) +{ + /* write the contents of the I/O location and then synchronize the I/O + * such that the I/O operation completes before proceeding on + */ + + __asm__ volatile ("stw %0,0(%1); eieio"::"r" (Value), "b"(OutAddress)); +} + + + diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c new file mode 100644 index 000000000..e36293b93 --- /dev/null +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c @@ -0,0 +1,280 @@ + +//Class initially from Gerd and was called mmap_test.c +//return reversed 1 means good, 0 means failed + + +#include +#include +//#include +#include +#include + + +#include "HardwareMMappingDefs.h" + +#include "LocalLinkInterface.h" + + + +Local_LocalLinkInterface1(struct LocalLinkInterface* ll,unsigned int ll_fifo_badr){ + // printf("\n v 1 \n"); + printf("Initialize PLB LL FIFOs\n"); + ll->ll_fifo_base=0; + ll->ll_fifo_ctrl_reg=0; + if(Local_Init(ll,ll_fifo_badr)){ + Local_Reset(ll); + printf("\tFIFO Status : 0x%08x\n",Local_StatusVector(ll)); + }else printf("\tError LocalLink Mappping : 0x%08x\n",ll_fifo_badr); + + printf("\n\n"); +} + +/*~LocalLinkInterface(){};*/ + +Local_LocalLinkInterface(struct LocalLinkInterface* ll){ + printf("Initialize new memory\n"); + } + +int Local_InitNewMemory (struct LocalLinkInterface* ll,unsigned int addr, int ifg){ + unsigned int CSP0BASE; + int fd; + + /*fd = open("/dev/mem", O_RDWR | O_SYNC, 0); + if (fd == -1) { + printf("\nCan't find /dev/mem!\n"); + return 0; + } + printf("/dev/mem opened\n"); + + + CSP0BASE = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, addr); + if (CSP0BASE == (u_int32_t)MAP_FAILED) { + printf("\nCan't map memmory area!!\n"); + return 0; + } + printf("CSP0 mapped\n"); + + + volatile u_int8_t *ptr1; + + ptr1=(u_int8_t*)(CSP0BASE); + + printf("pointer val=%x\n",(void*)ptr1); + + printf("ifg_control=%02x\n",*ptr1); + + *ptr1=ifg; + + printf("ifg_control new=%02x\n",*ptr1); + + close(fd); +*/ + return 1; +} + + + +int Local_Init(struct LocalLinkInterface* ll,unsigned int ll_fifo_badr){ + int fd; + void *plb_ll_fifo_ptr; + + if ((fd=open("/dev/mem", O_RDWR)) < 0){ + fprintf(stderr, "Could not open /dev/mem\n"); + return 0; + } + + plb_ll_fifo_ptr = mmap(0, getpagesize(), PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fd, ll_fifo_badr); + close(fd); + + if (plb_ll_fifo_ptr == MAP_FAILED){ + perror ("mmap"); + return 0; + } + + ll->ll_fifo_base = (xfs_u32) plb_ll_fifo_ptr; + ll->ll_fifo_ctrl_reg = 0; + + return 1; +} + + + +int Local_Reset(struct LocalLinkInterface* ll){ + return Local_Reset1(ll,PLB_LL_FIFO_CTRL_RESET_STD); +} + +int Local_Reset1(struct LocalLinkInterface* ll,unsigned int rst_mask){ + ll->ll_fifo_ctrl_reg |= rst_mask; + printf("\tCTRL Register bits: 0x%08x\n",ll->ll_fifo_ctrl_reg); + + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + + ll->ll_fifo_ctrl_reg &= (~rst_mask); + + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); + // printf("FIFO CTRL Address: 0x%08x\n FIFO CTRL Register: 0x%08x\n",PLB_LL_FIFO_REG_CTRL,plb_ll_fifo[PLB_LL_FIFO_REG_CTRL]); + return 1; +} + + + +unsigned int Local_StatusVector(struct LocalLinkInterface* ll){ + return HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); +} + +int Local_Write(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer){ + // note: buffer must be word (4 byte) aligned + // frame_len in byte + int vacancy=0; + int i; + int words_send = 0; + int last_word; + unsigned int *word_ptr; + unsigned int fifo_ctrl; + xfs_u32 status; + + if (buffer_len < 1) return -1; + + last_word = (buffer_len-1)/4; + word_ptr = (unsigned int *)buffer; + + while (words_send <= last_word) + { + while (!vacancy)//wait for Fifo to be empty again + { + status = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); + if((status & PLB_LL_FIFO_STATUS_ALMOSTFULL) == 0) vacancy = 1; + } + + //Just to know: #define PLB_LL_FIFO_ALMOST_FULL_THRESHOLD_WORDS 100 + for (i=0; ((ill_fifo_base+4*PLB_LL_FIFO_REG_FIFO,word_ptr[words_send++]); + } + } + return buffer_len; +} + + +int Local_Read(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer){ + static unsigned int buffer_ptr = 0; + // note: buffer must be word (4 byte) aligned + // frame_len in byte + int len; + unsigned int *word_ptr; + unsigned int status; + volatile unsigned int fifo_val; + int sof = 0; + + word_ptr = (unsigned int *)buffer; + do + { + status = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); + + if (!(status & PLB_LL_FIFO_STATUS_EMPTY)) + { + if (status & PLB_LL_FIFO_STATUS_LL_SOF) + { + if (buffer_ptr) + { + buffer_ptr = 0; + return -1; // buffer overflow + } +// printf(">>>> SOF\n\r"); + buffer_ptr = 0; + sof = 1; + } + + fifo_val = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_FIFO); //read from fifo + + if ((buffer_ptr > 0) || sof) + { + if ( (buffer_len >> 2) > buffer_ptr) + { + word_ptr[buffer_ptr++] = fifo_val; //write to buffer + } + else + { + buffer_ptr = 0; + return -2; // buffer overflow + } + + if (status & PLB_LL_FIFO_STATUS_LL_EOF) + { + len = (buffer_ptr << 2) -3 + ( (status & PLB_LL_FIFO_STATUS_LL_REM)>>PLB_LL_FIFO_STATUS_LL_REM_SHIFT ); +// printf(">>>>status=0x%08x EOF len = %d \n\r\n\r",status, len); + buffer_ptr = 0; + return len; + } + + } + } + } + while(!(status & PLB_LL_FIFO_STATUS_EMPTY)); + + return 0; +} + +int Local_ctrl_reg_write_mask(struct LocalLinkInterface* ll,unsigned int mask, unsigned int val){ + // printf("Fifo CTRL Reg(1): 0x%08x\n",plb_ll_fifo_ctrl_reg); + ll->ll_fifo_ctrl_reg &= (~mask); + //printf("Fifo CTRL Reg(2): 0x%08x\n",plb_ll_fifo_ctrl_reg); + ll->ll_fifo_ctrl_reg |= ( mask & val); +// printf("Fifo CTRL Reg: 0x%08x\n",plb_ll_fifo_ctrl_reg); + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); +// printf("Fifo STAT Reg: 0x%08x\n", plb_ll_fifo[PLB_LL_FIFO_REG_STATUS]); + return 1; +} + + +int Local_Test(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer){ + + int len; + unsigned int rec_buff_len = 4096; + unsigned int rec_buffer[4097]; + + + Local_Write(ll,buffer_len,buffer); + usleep(10000); + + do{ + len = Local_Read(ll,rec_buff_len,rec_buffer); + printf("receive length: %i\n",len); + + if (len > 0){ + rec_buffer[len]=0; + printf((char*) rec_buffer); + printf("\n"); + } + } while(len > 0); + + printf("\n\n\n\n"); + return 1; +} + +void Local_llfifo_print_frame(struct LocalLinkInterface* ll,unsigned char* fbuff, int len){ + int i; + printf("\n\r----Frame of len : %d Byte\n\r",len); + for(i=0;i Date: Fri, 29 Aug 2014 16:41:19 +0200 Subject: [PATCH 06/11] got rid of extra servers for eiger, converted to c and it works --- slsDetectorSoftware/eigerDetectorServer/Beb.h | 133 ++++---- .../EigerHighLevelFunctions.c | 24 +- slsDetectorSoftware/eigerDetectorServer/Feb.h | 75 +++-- .../eigerDetectorServer/FebControl.h | 282 ++++++++--------- .../eigerDetectorServer/FebInterface.h | 57 ++-- .../eigerDetectorServer/HardwareIO.h | 24 +- .../eigerDetectorServer/LocalLinkInterface.h | 39 +-- .../eigerDetectorServer/Makefile | 10 +- .../bin/eigerDetectorServer | Bin 145776 -> 0 bytes .../eigerDetectorServer/gitInfo.txt | 10 +- .../eigerDetectorServer/gitInfoEiger.h | 8 +- .../slsDetectorFunctionList.c | 295 +++++++++++++----- .../eigerDetectorServer/xfs_types.h | 42 +-- slsDetectorSoftware/gitInfo.txt | 10 +- .../gotthardDetectorServer/gitInfo.txt | 10 +- .../gotthardDetectorServer/gitInfoGotthard.h | 8 +- .../gotthardDetectorServer/server_funcs.c | 2 +- .../moenchDetectorServer/firmware_funcs.c | 22 +- .../moenchDetectorServer/gitInfo.txt | 10 +- .../moenchDetectorServer/gitInfoMoench.h | 8 +- .../moenchDetectorServer/mcb_funcs.c | 141 +-------- .../moenchDetectorServer/mcb_funcs.h | 5 +- .../moenchDetectorServer/server.c | 22 +- .../moenchDetectorServer/server_defs.h | 4 +- .../moenchDetectorServer/server_funcs.c | 78 +++-- .../moenchDetectorServer/server_funcs.h | 2 +- .../mythenDetectorServer/gitInfo.txt | 10 +- .../mythenDetectorServer/gitInfoMythen.h | 8 +- slsDetectorSoftware/slsDetector/gitInfoLib.h | 8 +- .../slsDetectorServer/slsDetectorServer.c | 6 +- .../slsDetectorServer_funcs.c | 29 +- 31 files changed, 662 insertions(+), 720 deletions(-) mode change 100644 => 100755 slsDetectorSoftware/eigerDetectorServer/Makefile delete mode 100755 slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index 6011e18c9..52d250be6 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -8,98 +8,81 @@ #ifndef BEB_H #define BEB_H -#include -#include + #include "LocalLinkInterface.h" -class BebInfo{ + - private: +struct BebInfo{ unsigned int beb_number; unsigned int serial_address; - std::string src_mac_1GbE; - std::string src_mac_10GbE; - std::string src_ip_1GbE; - std::string src_ip_10GbE; + char src_mac_1GbE[50]; + char src_mac_10GbE[50]; + char src_ip_1GbE[50]; + char src_ip_10GbE[50]; unsigned int src_port_1GbE; unsigned int src_port_10GbE; - - public: - BebInfo(unsigned int beb_num); - ~BebInfo(){}; - - bool SetSerialAddress(unsigned int add); - bool SetHeaderInfo(bool ten_gig, std::string src_mac, std::string src_ip, unsigned int src_port);//src_port fixed 42000+beb_number or 52000 + beb_number); - unsigned int GetBebNumber() {return beb_number;} - unsigned int GetSerialAddress() {return serial_address;} - std::string GetSrcMAC(bool ten_gig) {return ten_gig ? src_mac_10GbE : src_mac_1GbE;} - std::string GetSrcIP(bool ten_gig) {return ten_gig ? src_ip_10GbE : src_ip_1GbE;} - unsigned int GetSrcPort(bool ten_gig) {return ten_gig ? src_port_10GbE : src_port_1GbE;} - - void Print(); - }; - -class Beb{ // - - private: - std::vector beb_infos; - void ClearBebInfos(); - bool InitBebInfos(); - bool ReadSetUpFromFile(std::string file_name); - bool CheckSourceStuffBebInfo(); - unsigned int GetBebInfoIndex(unsigned int beb_numb); - - LocalLinkInterface* ll; - LocalLinkInterface* new_memory; - - - int send_ndata; - unsigned int send_buffer_size; - unsigned int* send_data_raw; - unsigned int* send_data; - - int recv_ndata; - unsigned int recv_buffer_size; - unsigned int* recv_data_raw; - unsigned int* recv_data; - - bool WriteTo(unsigned int index); - - bool SetMAC(std::string mac, unsigned char* dst_ptr); - bool SetIP(std::string ip, unsigned char* dst_ptr); - bool SetPortNumber(unsigned int port_number, unsigned char* dst_ptr); - void AdjustIPChecksum(udp_header_type *ip); - - bool SetHeaderData(unsigned int beb_number, bool ten_gig, std::string dst_mac, std::string dst_ip, unsigned int dst_port); - bool SetHeaderData(std::string src_mac, std::string src_ip, unsigned int src_port, std::string dst_mac, std::string dst_ip, unsigned int dst_port); - - void SwapDataFun(bool little_endian, unsigned int n, unsigned int *d); - bool SetByteOrder(); - - short bit_mode; - - public: - Beb(int arg1); - virtual ~Beb(); - - bool SetBebSrcHeaderInfos(unsigned int beb_number, bool ten_gig, std::string src_mac, std::string src_ip, unsigned int src_port); - bool SetUpUDPHeader(unsigned int beb_number, bool ten_gig, unsigned int header_number, std::string dst_mac, std::string dst_ip, unsigned int dst_port); - - bool SendMultiReadRequest(unsigned int beb_number, unsigned int left_right, bool ten_gig, unsigned int dst_number, unsigned int npackets, unsigned int packet_size, bool stop_read_when_fifo_empty=1); + void BebInfo_BebInfo(struct BebInfo* bebInfo, unsigned int beb_num); + int BebInfo_SetSerialAddress(struct BebInfo* bebInfo, unsigned int add); + int BebInfo_SetHeaderInfo(struct BebInfo* bebInfo, int ten_gig, char* src_mac, char* src_ip, unsigned int src_port);//src_port fixed 42000+beb_number or 52000 + beb_number); + unsigned int BebInfo_GetBebNumber(struct BebInfo* bebInfo); + unsigned int BebInfo_GetSerialAddress(struct BebInfo* bebInfo); + char* BebInfo_GetSrcMAC(struct BebInfo* bebInfo, int ten_gig); + char* BebInfo_GetSrcIP(struct BebInfo* bebInfo, int ten_gig); + unsigned int BebInfo_GetSrcPort(struct BebInfo* bebInfo, int ten_gig); + void BebInfo_Print(struct BebInfo* bebInfo); - bool SetUpTransferParameters(short the_bit_mode); - bool RequestNImages(unsigned int beb_number, unsigned int left_right, bool ten_gig, unsigned int dst_number, unsigned int nimages, bool test_just_send_out_packets_no_wait=0); //all images go to the same destination! - bool Test(unsigned int beb_number); -}; + void Beb_ClearBebInfos(); + int Beb_InitBebInfos(); + int Beb_ReadSetUpFromFile(char* file_name); + int Beb_CheckSourceStuffBebInfo(); + unsigned int Beb_GetBebInfoIndex(unsigned int beb_numb); + + + + + + + int Beb_WriteTo(unsigned int index); + + int Beb_SetMAC(char* mac, uint8_t* dst_ptr); + int Beb_SetIP(char* ip, uint8_t* dst_ptr); + int Beb_SetPortNumber(unsigned int port_number, uint8_t* dst_ptr); + void Beb_AdjustIPChecksum(struct udp_header_type *ip); + + int Beb_SetHeaderData(unsigned int beb_number, int ten_gig, char* dst_mac, char* dst_ip, unsigned int dst_port); + int Beb_SetHeaderData1(char* src_mac, char* src_ip, unsigned int src_port, char* dst_mac, char* dst_ip, unsigned int dst_port); + + void Beb_SwapDataFun(int little_endian, unsigned int n, unsigned int *d); + int Beb_SetByteOrder(); + + + + + void Beb_Beb(int arg1); + + + int Beb_SetBebSrcHeaderInfos(unsigned int beb_number, int ten_gig, char* src_mac, char* src_ip, unsigned int src_port); + int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header_number, char* dst_mac, char* dst_ip, unsigned int dst_port); + + /*int Beb_SendMultiReadRequest(unsigned int beb_number, unsigned int left_right, int ten_gig, unsigned int dst_number, unsigned int npackets, unsigned int packet_size, int stop_read_when_fifo_empty=1);*/ + int Beb_SendMultiReadRequest(unsigned int beb_number, unsigned int left_right, int ten_gig, unsigned int dst_number, unsigned int npackets, unsigned int packet_size, int stop_read_when_fifo_empty); + + int Beb_SetUpTransferParameters(short the_bit_mode); + /*int Beb_RequestNImages(unsigned int beb_number, unsigned int left_right, int ten_gig, unsigned int dst_number, unsigned int nimages, int test_just_send_out_packets_no_wait=0); //all images go to the same destination!*/ + int Beb_RequestNImages(unsigned int beb_number, unsigned int left_right, int ten_gig, unsigned int dst_number, unsigned int nimages, int test_just_send_out_packets_no_wait); + + int Beb_Test(unsigned int beb_number); + #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c index 2c5802aa7..445a9a2cb 100644 --- a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c +++ b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c @@ -11,11 +11,7 @@ #include "slsDetectorServer_defs.h" //include port number -struct sockaddr_in eiger_socket_addr; -int eiger_max_message_length = 270000;//263681 -char eiger_message[270000];//263681 -int eiger_message_length = 0; -int eiger_ret_val=0; + int eiger_nexposures = 1; float eiger_exposuretime = 0; @@ -56,25 +52,7 @@ int EigerGetExternalGatingPolarity(){return eiger_extgatingpolarity;} int EigerInit(){ saved_trimbits[0] = -1; - static int passed = 0; - if(!passed){ - struct hostent *dst_host; - if((dst_host = gethostbyname("localhost")) == NULL){ //or look into getaddrinfo(3) - fprintf(stderr,"ERROR, no such host\n"); - return 0; - }else{ - //struct sockaddr_in eiger_socket_addr; - int port = FEB_PORT; - bzero((char *) &eiger_socket_addr, sizeof(eiger_socket_addr)); - eiger_socket_addr.sin_family = AF_INET; - bcopy((char *)dst_host->h_addr,(char *)&eiger_socket_addr.sin_addr.s_addr,dst_host->h_length); - eiger_socket_addr.sin_port = htons(port); - passed = 1; - } - } - - return passed; } diff --git a/slsDetectorSoftware/eigerDetectorServer/Feb.h b/slsDetectorSoftware/eigerDetectorServer/Feb.h index fc47dfbf8..ef14aa8dd 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Feb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Feb.h @@ -10,53 +10,50 @@ #include "LocalLinkInterface.h" -class Feb{ // - private: - LocalLinkInterface* ll; + struct LocalLinkInterface* ll; - unsigned int nfebs; - unsigned int* feb_numb; + unsigned int Feb_nfebs; + unsigned int* Feb_feb_numb; - int send_ndata; - unsigned int send_buffer_size; - unsigned int* send_data_raw; - unsigned int* send_data; + int Feb_send_ndata; + unsigned int Feb_send_buffer_size; + unsigned int* Feb_send_data_raw; + unsigned int* Feb_send_data; - int recv_ndata; - unsigned int recv_buffer_size; - unsigned int* recv_data_raw; - unsigned int* recv_data; + int Feb_recv_ndata; + unsigned int Feb_recv_buffer_size; + unsigned int* Feb_recv_data_raw; + unsigned int* Feb_recv_data; - bool WriteTo(unsigned int ch); - bool ReadFrom(unsigned int ch, unsigned int ntrys=20); - bool CheckHeader(unsigned int valid_bit_mask=0xffffffff, bool print_error_info=1); - bool CheckTail(unsigned int valid_bit_mask=0xffffffff); + int Feb_WriteTo(unsigned int ch); + /*int Feb_ReadFrom(unsigned int Feb_ch, unsigned int Feb_ntrys=20);*/ + int Feb_ReadFrom(unsigned int ch, unsigned int ntrys); + /* int Feb_CheckHeader(unsigned int Feb_valid_bit_mask=0xffffffff, int Feb_print_error_info=1);*/ + int Feb_CheckHeader(unsigned int valid_bit_mask, int print_error_info); + /*int Feb_CheckTail(unsigned int Feb_valid_bit_mask=0xffffffff);*/ + int Feb_CheckTail(unsigned int valid_bit_mask); + + int Feb_SetByteOrder(); + //int Feb_CheckSubNumber(unsigned int Feb_sub_num); + //int Feb_SetStartOnEndOnFebs(int Feb_sub_num_s, unsigned int& Feb_start_on, unsigned int& Feb_end_on); + void Feb_PrintData(); - bool SetByteOrder(); - //bool CheckSubNumber(unsigned int sub_num); - //bool SetStartOnEndOnFebs(int sub_num_s, unsigned int& start_on, unsigned int& end_on); - void PrintData(); + Feb_Feb(); + /*virtual ~Feb();*/ + void Feb_SendCompleteFebList(unsigned int n,unsigned int* list); + int Feb_CheckCommunication(); + /*int Feb_ReadRegister(unsigned int Feb_sub_num, unsigned int Feb_reg_num,unsigned int& Feb_value_read);*/ + int Feb_ReadRegister(unsigned int sub_num, unsigned int reg_num,unsigned int* value_read); + int Feb_ReadRegisters(unsigned int sub_num, unsigned int nreads, unsigned int* reg_nums,unsigned int* values_read); + /*int WriteRegister(unsigned int sub_num, unsigned int reg_num,unsigned int value, int wait_on=0, unsigned int wait_on_address=0);*/ + int Feb_WriteRegister(unsigned int sub_num, unsigned int reg_num,unsigned int value, int wait_on, unsigned int wait_on_address); + /*int WriteRegisters(unsigned int sub_num, unsigned int nwrites, unsigned int* reg_nums, unsigned int* values, int* wait_ons=0, unsigned int* wait_on_addresses=0);*/ + int Feb_WriteRegisters(unsigned int sub_num, unsigned int nwrites, unsigned int* reg_nums, unsigned int* values, int* wait_ons, unsigned int* wait_on_addresses); + int Feb_WriteMemory(unsigned int sub_num, unsigned int mem_num, unsigned int start_address, unsigned int nwrites, unsigned int *values); + int Feb_Test(); - public: - Feb(); - virtual ~Feb(); - - void SendCompleteFebList(unsigned int n,unsigned int* list); - bool CheckCommunication(); - - bool ReadRegister(unsigned int sub_num, unsigned int reg_num,unsigned int& value_read); - bool ReadRegisters(unsigned int sub_num, unsigned int nreads, unsigned int* reg_nums,unsigned int* values_read); - - bool WriteRegister(unsigned int sub_num, unsigned int reg_num,unsigned int value, bool wait_on=0, unsigned int wait_on_address=0); - bool WriteRegisters(unsigned int sub_num, unsigned int nwrites, unsigned int* reg_nums, unsigned int* values, bool* wait_ons=0, unsigned int* wait_on_addresses=0); - - bool WriteMemory(unsigned int sub_num, unsigned int mem_num, unsigned int start_address, unsigned int nwrites, unsigned int *values); - - bool Test(); - -}; #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.h b/slsDetectorSoftware/eigerDetectorServer/FebControl.h index 047a786b4..9460a5b19 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.h @@ -9,186 +9,176 @@ #define FEBCONTROL_H #include -#include -#include +#include +//#include +//#include #include "FebInterface.h" -class Module{ - - private: - unsigned int module_number; - bool top_address_valid; - unsigned int top_left_address; - unsigned int top_right_address; - bool bottom_address_valid; - unsigned int bottom_left_address; - unsigned int bottom_right_address; - - unsigned int idelay_top[4]; //ll,lr,rl,ll - unsigned int idelay_bottom[4]; //ll,lr,rl,ll - float high_voltage; - int* top_dac; - int* bottom_dac; - - public: - Module(unsigned int number, unsigned int address_top); //for half module() - Module(unsigned int number, unsigned int address_top, unsigned int address_bottom); - ~Module(); - - static const unsigned int ndacs; - static const std::string dac_names[16]; - - unsigned int GetModuleNumber() {return module_number;} - bool TopAddressIsValid() {return top_address_valid;} - unsigned int GetTopBaseAddress() {return (top_left_address&0xff);} - unsigned int GetTopLeftAddress() {return top_left_address;} - unsigned int GetTopRightAddress() {return top_right_address;} - unsigned int GetBottomBaseAddress() {return (bottom_left_address&0xff);} - bool BottomAddressIsValid() {return bottom_address_valid;} - unsigned int GetBottomLeftAddress() {return bottom_left_address;} - unsigned int GetBottomRightAddress() {return bottom_right_address;} - - unsigned int SetTopIDelay(unsigned int chip,unsigned int value) { return TopAddressIsValid() &&chip<4 ? (idelay_top[chip]=value) : 0;} //chip 0=ll,1=lr,0=rl,1=rr - unsigned int GetTopIDelay(unsigned int chip) { return chip<4 ? idelay_top[chip] : 0;} //chip 0=ll,1=lr,0=rl,1=rr - unsigned int SetBottomIDelay(unsigned int chip,unsigned int value) { return BottomAddressIsValid() &&chip<4 ? (idelay_bottom[chip]=value) : 0;} //chip 0=ll,1=lr,0=rl,1=rr - unsigned int GetBottomIDelay(unsigned int chip) { return chip<4 ? idelay_bottom[chip] : 0;} //chip 0=ll,1=lr,0=rl,1=rr - - float SetHighVoltage(float value) { return TopAddressIsValid() ? (high_voltage=value) : -1;} - float GetHighVoltage() { return high_voltage;} - - int SetTopDACValue(unsigned int i, int value) { return (i modules; - void ClearModules(); - unsigned int staticBits; //program=1,m4=2,m8=4,test=8,rotest=16,cs_bar_left=32,cs_bar_right=64 - unsigned int acquireNReadoutMode; //safe or parallel, half or full speed - unsigned int triggerMode; //internal timer, external start, external window, signal polarity (external trigger and enable) - unsigned int externalEnableMode; //external enabling engaged and it's polarity - unsigned int subFrameMode; - - unsigned int photon_energy_eV; - - unsigned int nimages; - float exposure_time_in_sec; - float exposure_period_in_sec; - - unsigned int trimbit_size; - unsigned int* last_downloaded_trimbits; - - void PrintModuleList(); - bool GetModuleIndex(unsigned int module_number, unsigned int& module_index); - bool CheckModuleAddresses(Module* m); - bool AddModule(unsigned int module_number, unsigned int top_address); - bool AddModule(unsigned int module_number, unsigned int top_address, unsigned int bottom_address, bool half_module=0); - - bool GetDACNumber(std::string s, unsigned int& n); - bool SendDACValue(unsigned int dst_num, unsigned int ch, unsigned int& value); - bool VoltageToDAC(float value, unsigned int& digital, unsigned int nsteps, float vmin, float vmax); - float DACToVoltage(unsigned int digital,unsigned int nsteps,float vmin,float vmax); - - bool SendHighVoltage(unsigned int module_index, float& value); - - bool SendIDelays(unsigned int dst_num, bool chip_lr, unsigned int channels, unsigned int ndelay_units); - - bool SetStaticBits(); - bool SetStaticBits(unsigned int the_static_bits); - - bool SendBitModeToBebServer(); - - unsigned int ConvertTimeToRegister(float time_in_sec); - - unsigned int AddressToAll(); - bool SetCommandRegister(unsigned int cmd); - bool GetDAQStatusRegister(unsigned int dst_address, unsigned int &ret_status); - bool StartDAQOnlyNWaitForFinish(int sleep_time_us=5000); - - bool ResetChipCompletely(); - - struct sockaddr_in serv_addr; - bool SetupSendToSocket(const char* ip_address_hostname, unsigned short int port); - int WriteNRead(char* message, int length, int max_length); + void Feb_Control_ClearModules(); - public: - FebControl(); - virtual ~FebControl(); + void Feb_Control_PrintModuleList(); + int Feb_Control_GetModuleIndex(unsigned int module_number, unsigned int* module_index); + int Feb_Control_CheckModuleAddresses(struct Module* m); + int Feb_Control_AddModule(unsigned int module_number, unsigned int top_address); + /*int Feb_Control_AddModule(unsigned int module_number, unsigned int top_address, unsigned int bottom_address, int half_module=0);*/ + int Feb_Control_AddModule1(unsigned int module_number, unsigned int top_address, unsigned int bottom_address, int half_module); - bool Init(); - bool ReadSetUpFileToAddModules(std::string file_name); - bool ReadSetUpFile(unsigned int module_num, std::string file_name); - bool CheckSetup(); + int Feb_Control_GetDACNumber(char* s, unsigned int* n); + int Feb_Control_SendDACValue(unsigned int dst_num, unsigned int ch, unsigned int* value); + int Feb_Control_VoltageToDAC(float value, unsigned int* digital, unsigned int nsteps, float vmin, float vmax); + float Feb_Control_DACToVoltage(unsigned int digital,unsigned int nsteps,float vmin,float vmax); - unsigned int GetNModules(); - unsigned int GetNHalfModules(); + int Feb_Control_SendHighVoltage(unsigned int module_index, float* value); - bool SetHighVoltage(float value); - bool SetHighVoltage(unsigned int module_num,float value); + int Feb_Control_SendIDelays(unsigned int dst_num, int chip_lr, unsigned int channels, unsigned int ndelay_units); - bool SetPhotonEnergy(unsigned int full_energy_eV); - unsigned int GetPhotonEnergy(){return photon_energy_eV;} + int Feb_Control_SetStaticBits(); + int Feb_Control_SetStaticBits1(unsigned int the_static_bits); - bool SetIDelays(unsigned int module_num, unsigned int ndelay_units); - bool SetIDelays(unsigned int module_num, unsigned int chip_pos, unsigned int ndelay_units); + int Feb_Control_SendBitModeToBebServer(); + + unsigned int Feb_Control_ConvertTimeToRegister(float time_in_sec); + + unsigned int Feb_Control_AddressToAll(); + int Feb_Control_SetCommandRegister(unsigned int cmd); + int Feb_Control_GetDAQStatusRegister(unsigned int dst_address, unsigned int* ret_status); + /*int Feb_Control_StartDAQOnlyNWaitForFinish(int sleep_time_us=5000);*/ + int Feb_Control_StartDAQOnlyNWaitForFinish(int sleep_time_us); + + int Feb_Control_ResetChipCompletely(); + + struct sockaddr_in Feb_Control_serv_addr; + /* + int Feb_Control_SetupSendToSocket(const char* ip_address_hostname, unsigned short int port); + int Feb_Control_WriteNRead(char* message, int length, int max_length); +*/ + + + void Feb_Control_FebControl(); + + + int Feb_Control_Init(); + int Feb_Control_ReadSetUpFileToAddModules(char* file_name); + int Feb_Control_ReadSetUpFile(unsigned int module_num, char* file_name); + int Feb_Control_CheckSetup(); + + unsigned int Feb_Control_GetNModules(); + unsigned int Feb_Control_GetNHalfModules(); + + int Feb_Control_SetHighVoltage(float value); + int Feb_Control_SetHighVoltage1(unsigned int module_num,float value); + + int Feb_Control_SetPhotonEnergy(unsigned int full_energy_eV); + unsigned int Feb_Control_GetPhotonEnergy(); + + int Feb_Control_SetIDelays(unsigned int module_num, unsigned int ndelay_units); + int Feb_Control_SetIDelays1(unsigned int module_num, unsigned int chip_pos, unsigned int ndelay_units); - bool DecodeDACString(std::string dac_str, unsigned int& module_index, bool& top, bool& bottom, unsigned int& dac_ch); - bool SetDAC(std::string s, int value, bool is_a_voltage_mv=0); - bool GetDAC(std::string s, int& ret_value, bool voltage_mv=0); - bool GetDACName(unsigned int dac_num, std::string &s); + int Feb_Control_DecodeDACString(char* dac_str, unsigned int* module_index, int* top, int* bottom, unsigned int* dac_ch); + /*int Feb_Control_SetDAC(string s, int value, int is_a_voltage_mv=0);*/ + int Feb_Control_SetDAC(char* s, int value, int is_a_voltage_mv); + /* int Feb_Control_GetDAC(string s, int* ret_value, int voltage_mv=0);*/ + int Feb_Control_GetDAC(char* s, int* ret_value, int voltage_mv); + int Feb_Control_GetDACName(unsigned int dac_num,char* s); - bool SetTrimbits(unsigned int module_num, unsigned int* trimbits); - unsigned int* GetTrimbits(); + int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int* trimbits); + unsigned int* Feb_Control_GetTrimbits(); /**Added by Dhanya */ - bool LoadTrimbitFile(); - bool SaveTrimbitFile(); - bool SaveAllTrimbitsTo(int value); + int Feb_Control_LoadTrimbitFile(); + int Feb_Control_SaveTrimbitFile(); + int Feb_Control_SaveAllTrimbitsTo(int value); - bool Reset(); - bool StartAcquisition(); - bool StopAcquisition(); - bool AcquisitionInProgress(); - bool WaitForFinishedFlag(int sleep_time_us=5000); + int Feb_Control_Reset(); + int Feb_Control_StartAcquisition(); + int Feb_Control_StopAcquisition(); + int Feb_Control_AcquisitionInProgress(); + /*int Feb_Control_WaitForFinishedFlag(int sleep_time_us=5000);*/ + int Feb_Control_WaitForFinishedFlag(int sleep_time_us); //functions for setting up exposure - void PrintAcquisitionSetup(); - bool SetNExposures(unsigned int n_images); - unsigned int GetNExposures(); - bool SetExposureTime(float the_exposure_time_in_sec); - float GetExposureTime(); - bool SetExposurePeriod(float the_exposure_period_in_sec); - float GetExposurePeriod(); - bool SetDynamicRange(unsigned int four_eight_sixteen_or_thirtytwo); - unsigned int GetDynamicRange(); - bool SetReadoutSpeed(unsigned int readout_speed=0); //0->full,1->half,2->quarter or 3->super_slow - bool SetReadoutMode(unsigned int readout_mode=0); //0->parallel,1->non-parallel,2-> safe_mode - bool SetTriggerMode(unsigned int trigger_mode=0, bool polarity=1); - bool SetExternalEnableMode(bool use_external_enable=0, bool polarity=1); - + void Feb_Control_PrintAcquisitionSetup(); + int Feb_Control_SetNExposures(unsigned int n_images); + unsigned int Feb_Control_GetNExposures(); + int Feb_Control_SetExposureTime(double the_exposure_time_in_sec); + double Feb_Control_GetExposureTime(); + int Feb_Control_SetExposurePeriod(double the_exposure_period_in_sec); + double Feb_Control_GetExposurePeriod(); + int Feb_Control_SetDynamicRange(unsigned int four_eight_sixteen_or_thirtytwo); + unsigned int Feb_Control_GetDynamicRange(); + /*int Feb_Control_SetReadoutSpeed(unsigned int readout_speed=0); //0->full,1->half,2->quarter or 3->super_slow*/ + int Feb_Control_SetReadoutSpeed(unsigned int readout_speed); //0->full,1->half,2->quarter or 3->super_slow + /* int Feb_Control_SetReadoutMode(unsigned int readout_mode=0); //0->parallel,1->non-parallel,2-> safe_mode*/ + int Feb_Control_SetReadoutMode(unsigned int readout_mode); //0->parallel,1->non-parallel,2-> safe_mode + /* int Feb_Control_SetTriggerMode(unsigned int trigger_mode=0, int polarity=1);*/ + int Feb_Control_SetTriggerMode(unsigned int trigger_mode, int polarity); + /*int Feb_Control_SetExternalEnableMode(int use_external_enable=0, int polarity=1);*/ + int Feb_Control_SetExternalEnableMode(int use_external_enable, int polarity); //functions for testing - bool SetTestModeVariable(bool on=1); - bool GetTestModeVariable(); + /*int Feb_Control_SetTestModeVariable(int on=1);*/ + int Feb_Control_SetTestModeVariable(int on); + int Feb_Control_GetTestModeVariable(); + -}; #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/FebInterface.h b/slsDetectorSoftware/eigerDetectorServer/FebInterface.h index c09411117..359a7bb52 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebInterface.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebInterface.h @@ -10,44 +10,31 @@ #include "LocalLinkInterface.h" -class FebInterface{ // - private: - LocalLinkInterface* ll; + + + + + int Feb_Interface_WriteTo(unsigned int ch); + /*int Feb_Interface_ReadFrom(unsigned int ch, unsigned int ntrys=20);*/ + int Feb_Interface_ReadFrom(unsigned int ch, unsigned int ntrys); + + + + + void Feb_Interface_SendCompleteList(unsigned int n,unsigned int* list); + int Feb_Interface_SetByteOrder(); + + int Feb_Interface_ReadRegister(unsigned int sub_num, unsigned int reg_num,unsigned int* value_read); + int Feb_Interface_ReadRegisters(unsigned int sub_num, unsigned int nreads, unsigned int* reg_nums,unsigned int* values_read); + /*int Feb_Interface_WriteRegister(unsigned int sub_num, unsigned int reg_num,unsigned int value, int wait_on=0, unsigned int wait_on_address=0);*/ + int Feb_Interface_WriteRegister(unsigned int sub_num, unsigned int reg_num,unsigned int value, int wait_on, unsigned int wait_on_address); + /*int Feb_Interface_WriteRegisters(unsigned int sub_num, unsigned int nwrites, unsigned int* reg_nums, unsigned int* values, int* wait_ons=0, unsigned int* wait_on_addresses=0);*/ + int Feb_Interface_WriteRegisters(unsigned int sub_num, unsigned int nwrites, unsigned int* reg_nums, unsigned int* values, int* wait_ons, unsigned int* wait_on_addresses); + + int Feb_Interface_WriteMemory(unsigned int sub_num, unsigned int mem_num, unsigned int start_address, unsigned int nwrites, unsigned int *values); - unsigned int nfebs; - unsigned int* feb_numb; - int send_ndata; - unsigned int send_buffer_size; - unsigned int* send_data_raw; - unsigned int* send_data; - - int recv_ndata; - unsigned int recv_buffer_size; - unsigned int* recv_data_raw; - unsigned int* recv_data; - - bool WriteTo(unsigned int ch); - bool ReadFrom(unsigned int ch, unsigned int ntrys=20); - - - public: - FebInterface(); - virtual ~FebInterface(); - - void SendCompleteList(unsigned int n,unsigned int* list); - bool SetByteOrder(); - - bool ReadRegister(unsigned int sub_num, unsigned int reg_num,unsigned int& value_read); - bool ReadRegisters(unsigned int sub_num, unsigned int nreads, unsigned int* reg_nums,unsigned int* values_read); - - bool WriteRegister(unsigned int sub_num, unsigned int reg_num,unsigned int value, bool wait_on=0, unsigned int wait_on_address=0); - bool WriteRegisters(unsigned int sub_num, unsigned int nwrites, unsigned int* reg_nums, unsigned int* values, bool* wait_ons=0, unsigned int* wait_on_addresses=0); - - bool WriteMemory(unsigned int sub_num, unsigned int mem_num, unsigned int start_address, unsigned int nwrites, unsigned int *values); - -}; #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/HardwareIO.h b/slsDetectorSoftware/eigerDetectorServer/HardwareIO.h index 5b6d9df29..bc39d4668 100644 --- a/slsDetectorSoftware/eigerDetectorServer/HardwareIO.h +++ b/slsDetectorSoftware/eigerDetectorServer/HardwareIO.h @@ -7,24 +7,20 @@ #include "xfs_types.h" -class HardwareIO{ // - - protected: - xfs_u8 xfs_in8(xfs_u32 InAddress); - xfs_u16 xfs_in16(xfs_u32 InAddress); - xfs_u32 xfs_in32(xfs_u32 InAddress); - - void xfs_out8(xfs_u32 OutAddress, xfs_u8 Value); - void xfs_out16(xfs_u32 OutAddress, xfs_u16 Value); - void xfs_out32(xfs_u32 OutAddress, xfs_u32 Value); - public: - HardwareIO(){}; - virtual ~HardwareIO(){}; + xfs_u8 HWIO_xfs_in8(xfs_u32 InAddress); + xfs_u16 HWIO_xfs_in16(xfs_u32 InAddress); + xfs_u32 HWIO_xfs_in32(xfs_u32 InAddress); + + void HWIO_xfs_out8(xfs_u32 OutAddress, xfs_u8 Value); + void HWIO_xfs_out16(xfs_u32 OutAddress, xfs_u16 Value); + void HWIO_xfs_out32(xfs_u32 OutAddress, xfs_u32 Value); + + + -}; #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h index ae1b5ac82..efed08228 100644 --- a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h @@ -7,41 +7,44 @@ #include "xfs_types.h" #include "HardwareIO.h" -class LocalLinkInterface: public HardwareIO{ // +/*class LocalLinkInterface: public HardwareIO{ //*/ - private: +struct LocalLinkInterface{ xfs_u32 ll_fifo_base; unsigned int ll_fifo_ctrl_reg; +}; - bool Init(unsigned int ll_fifo_badr); - bool Reset(unsigned int rst_mask); - bool ctrl_reg_write_mask(unsigned int mask, unsigned int val); - void llfifo_print_frame(unsigned char* fbuff, int len); - public: - LocalLinkInterface(unsigned int ll_fifo_badr); - virtual ~LocalLinkInterface(); + int Local_Init(struct LocalLinkInterface* ll,unsigned int ll_fifo_badr); + int Local_Reset1(struct LocalLinkInterface* ll,unsigned int rst_mask); - unsigned int StatusVector(); - bool Reset(); - int Write(unsigned int buffer_len, void *buffer); - int Read(unsigned int buffer_len, void *buffer); + int Local_ctrl_reg_write_mask(struct LocalLinkInterface* ll,unsigned int mask, unsigned int val); + void Local_llfifo_print_frame(struct LocalLinkInterface* ll,unsigned char* fbuff, int len); - int Test(unsigned int buffer_len, void *buffer); - LocalLinkInterface(); - int InitNewMemory (unsigned int addr, int ifg); + void Local_LocalLinkInterface1(struct LocalLinkInterface* ll,unsigned int ll_fifo_badr); + /* virtual ~LocalLinkInterface();*/ + + unsigned int Local_StatusVector(struct LocalLinkInterface* ll); + int Local_Reset(struct LocalLinkInterface* ll); + int Local_Write(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer); + int Local_Read(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer); + + int Local_Test(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buffer); + + void Local_LocalLinkInterface(struct LocalLinkInterface* ll); + int Local_InitNewMemory (struct LocalLinkInterface* ll,unsigned int addr, int ifg); /* - bool FiFoReset(unsigned int numb); + int FiFoReset(unsigned int numb); int FifoSend(unsigned int numb, unsigned int frame_len, void *buffer); int FifoReceive(unsigned int numb, unsigned int frame_len, void *buffer); int FifoTest(unsigned int numb,unsigned int send_len, char *send_str); */ -}; + #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile b/slsDetectorSoftware/eigerDetectorServer/Makefile old mode 100644 new mode 100755 index c050621a0..7920925cb --- a/slsDetectorSoftware/eigerDetectorServer/Makefile +++ b/slsDetectorSoftware/eigerDetectorServer/Makefile @@ -1,6 +1,6 @@ CC = powerpc-4xx-softfloat-gcc CCX = powerpc-4xx-softfloat-g++ -CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE +CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT #-DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE LDLIBS += -lm -lstdc++ PROGS = eigerDetectorServer @@ -8,14 +8,14 @@ DESTDIR ?= bin INSTMODE = 0777 -SRC_CLNT = communication_funcs.c slsDetectorServer.c slsDetectorServer_funcs.c slsDetectorFunctionList.c -SRC_CLNT2 = FebServer.cxx FebControl.cxx FebInterface.cxx LocalLinkInterface.cxx HardwareIO.cxx -SRC_CLNT3 = BebServer.cxx Beb.cxx LocalLinkInterface.cxx HardwareIO.cxx +SRC_CLNT = communication_funcs.c slsDetectorServer.c slsDetectorServer_funcs.c slsDetectorFunctionList.c FebControl.c Beb.c HardwareIO.c LocalLinkInterface.c Feb.c FebInterface.c +#SRC_CLNT2 = FebServer.cxx FebControl.cxx FebInterface.cxx LocalLinkInterface.cxx HardwareIO.cxx +#SRC_CLNT3 = BebServer.cxx Beb.cxx LocalLinkInterface.cxx HardwareIO.cxx OBJS = $(SRC_CLNT:.c=.o) -all: clean $(PROGS) feb_debug beb_debug +all: clean $(PROGS) #feb_debug beb_debug boot: $(OBJS) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer deleted file mode 100755 index 2d6aa452883ea2d1bf3debcd8cb8c72cacc50cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145776 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 @@ -83,7 +116,7 @@ int initDetector(){ //set number of frames to 1 setTimer(FRAME_NUMBER,1); setTimer(ACQUISITION_TIME,1E9); - setTimer(ACQUISITION_TIME,1E9); + setTimer(FRAME_PERIOD,1E9); setDynamicRange(16); setThresholdEnergy(8000,0); setReadOutFlags(PARALLEL); @@ -227,7 +260,13 @@ int detectorTest( enum digitalTestMode arg){ void setDAC(enum detDacIndex ind, int val, int imod, int mV, int retval[]){ char iname[10]; - strcpy(iname,EigerGetDACName((int)ind)); + + if(((int)ind>=0)&&((int)ind= 0) printf("Setting dac %d: %s to %d ",ind, iname,val); @@ -239,9 +278,12 @@ void setDAC(enum detDacIndex ind, int val, int imod, int mV, int retval[]){ printf("in dac units\n"); #endif if(val >= 0) - EigerSetDAC(iname,val,mV); - retval[0] = EigerGetDAC(iname); - retval[1] = EigerGetDACmV(iname); + Feb_Control_SetDAC(iname,val,mV); + int k; + Feb_Control_GetDAC(iname, &k,0); + retval[0] = k; + Feb_Control_GetDAC(iname,&k,1); + retval[1] = k; (detectorModules)->dacs[ind] = retval[0]; @@ -251,9 +293,10 @@ void setDAC(enum detDacIndex ind, int val, int imod, int mV, int retval[]){ int setHighVolage(int val, int imod){ if(val!=-1){ printf(" Setting High Voltage: %d\n",val); - EigerSetHighVoltage(val); + if(Feb_Control_SetHighVoltage(val)) + eiger_highvoltage = val; } - return EigerGetHighVoltage(); + return eiger_highvoltage; } @@ -266,21 +309,25 @@ int getADC(enum detDacIndex ind, int imod){ int setIODelay(int val, int imod){ if(val!=-1){ printf(" Setting IO Delay: %d\n",val); - EigerSetIODelay(val); + if(Feb_Control_SetIDelays(0,val)) + eiger_iodelay = val; } - return EigerGetIODelay(); + return eiger_iodelay; } int enableTenGigabitEthernet(int val){ if(val!=-1){ if(val>0) - SetTenGigbaBitEthernet(1); + send_to_ten_gig = 1; else - SetTenGigbaBitEthernet(0); + send_to_ten_gig = 0; //configuremac called from client } - return GetTenGigbaBitEthernet(); +//#ifdef VERBOSE + printf("10Gbe:%d\n",send_to_ten_gig); +//#endif + return send_to_ten_gig; } @@ -297,11 +344,13 @@ int setModule(sls_detector_module myMod){ // thisSettings = (enum detectorSettings)myMod.reg; // thisSettings = 0; - setSettings( (enum detectorSettings)myMod.reg,-1); // put the settings in the module register?!?!? - EigerSetTrimbits(myMod.chanregs); - if (detectorModules) copyModule(detectorModules,&myMod); + + setSettings( (enum detectorSettings)myMod.reg,-1); // put the settings in the module register?!?!? + Feb_Control_SetTrimbits(0,myMod.chanregs); + + return 0; } @@ -312,10 +361,10 @@ int retval[2]; for(i=0;ichanregs); + myMod->chanregs = Feb_Control_GetTrimbits(); if (detectorModules) - copyModule(myMod,detectorModules);/*copyModule(myMod,detectorModules+iMod);*/ + copyModule(myMod,detectorModules); else return FAIL; return OK; @@ -328,14 +377,15 @@ int retval[2]; int getThresholdEnergy(int imod){ printf(" Getting Threshold energy\n"); - return EigerGetPhotonEnergy(); + return eiger_photonenergy; } int setThresholdEnergy(int thr, int imod){ printf(" Setting threshold energy:%d\n",thr); - EigerSetPhotonEnergy(thr); - return EigerGetPhotonEnergy(); + if(Feb_Control_SetPhotonEnergy(thr)) + eiger_photonenergy = thr; + return getThresholdEnergy(imod); } @@ -352,27 +402,61 @@ enum detectorSettings setSettings(enum detectorSettings sett, int imod){ int startStateMachine(){ printf("Going to start acquisition\n"); - EigerStartAcquisition(); - RequestImages(); - return OK; + if(Feb_Control_StartAcquisition()){ + + //RequestImages(); + int ret_val = 0; + dst_requested[0] = 1; + while(dst_requested[on_dst]){ + //waits on data + if((ret_val = (!Beb_RequestNImages(0,1,send_to_ten_gig,on_dst,nimages_per_request,0)|| + !Beb_RequestNImages(0,2,send_to_ten_gig,0x20|on_dst,nimages_per_request,0)))) + break; + dst_requested[on_dst++]=0; + on_dst%=ndsts_in_use; + } + + if(ret_val) + return FAIL; + else + return OK; + } + return FAIL; } int stopStateMachine(){ printf("Going to stop acquisition\n"); - EigerStopAcquisition(); - return OK; + if(Feb_Control_StopAcquisition()) + return OK; + return FAIL; } int startReadOut(){ - RequestImages(); + //RequestImages(); + int ret_val = 0; + dst_requested[0] = 1; + while(dst_requested[on_dst]){ + //waits on data + if((ret_val = (!Beb_RequestNImages(0,1,send_to_ten_gig,on_dst,nimages_per_request,0)|| + !Beb_RequestNImages(0,2,send_to_ten_gig,0x20|on_dst,nimages_per_request,0)))) + break; + dst_requested[on_dst++]=0; + on_dst%=ndsts_in_use; + } + + if(ret_val) + return FAIL; + else + return OK; + return OK; } enum runStatus getRunStatus(){ - int i = EigerRunStatus(); + int i = Feb_Control_AcquisitionInProgress(); if(i== 0){ printf("IDLE\n"); return IDLE; @@ -385,13 +469,8 @@ enum runStatus getRunStatus(){ char *readFrame(int *ret, char *mess){ - EigerWaitForAcquisitionFinish(); - /* - int i = EigerRunStatus(); - while(i){ - i = EigerRunStatus(); - usleep(1000); - }*/ + if(!Feb_Control_WaitForFinishedFlag(5000)) + printf("error in waiting for finished flag\n"); *ret = (int)FINISHED; return NULL; } @@ -408,19 +487,27 @@ int64_t setTimer(enum timerIndex ind, int64_t val){ case FRAME_NUMBER: if(val >= 0){ printf(" Setting number of frames: %d\n",(unsigned int)val); - EigerSetNumberOfExposures((unsigned int)val); - SetDestinationParameters(EigerGetNumberOfExposures()*EigerGetNumberOfCycles()); - }return EigerGetNumberOfExposures(); + if(Feb_Control_SetNExposures((unsigned int)val)*eiger_ncycles){ + eiger_nexposures = val; + //SetDestinationParameters(EigerGetNumberOfExposures()*EigerGetNumberOfCycles()); + on_dst = 0; + int i; + for(i=0;i<32;i++) dst_requested[i] = 0; //clear dst requested + ndsts_in_use = 1; + nimages_per_request = eiger_nexposures * eiger_ncycles; + } + }return eiger_nexposures; case ACQUISITION_TIME: if(val >= 0){ printf(" Setting exp time: %fs\n",val/(1E9)); - EigerSetExposureTime(val/(1E9)); - }return (EigerGetExposureTime()*(1E9)); + Feb_Control_SetExposureTime(val/(1E9)); + } + return (Feb_Control_GetExposureTime()*(1E9)); case FRAME_PERIOD: if(val >= 0){ printf(" Setting acq period: %fs\n",val/(1E9)); - EigerSetExposurePeriod(val/(1E9)); - }return (EigerGetExposurePeriod()*(1E9)); + Feb_Control_SetExposurePeriod(val/(1E9)); + }return (Feb_Control_GetExposurePeriod()*(1E9)); /* case DELAY_AFTER_TRIGGER: if(val >= 0) EigerSetNumberOfExposures((unsigned int)val); @@ -438,9 +525,15 @@ int64_t setTimer(enum timerIndex ind, int64_t val){ case CYCLES_NUMBER: if(val >= 0){ printf(" Setting number of triggers: %d\n",(unsigned int)val); - EigerSetNumberOfCycles((unsigned int)val); - SetDestinationParameters(EigerGetNumberOfExposures()*EigerGetNumberOfCycles()); - }return EigerGetNumberOfCycles(); + if(Feb_Control_SetNExposures((unsigned int)val*eiger_nexposures)){ + eiger_ncycles = val; + //SetDestinationParameters(EigerGetNumberOfExposures()*EigerGetNumberOfCycles()); + on_dst = 0; + int i; + for(i=0;i<32;i++) dst_requested[i] = 0; //clear dst requested + nimages_per_request = eiger_nexposures * eiger_ncycles; + } + }return eiger_ncycles; default: printf("unknown timer index: %d\n",ind); break; @@ -460,18 +553,22 @@ int64_t getTimeLeft(enum timerIndex ind){ int setDynamicRange(int dr){ - int r; if(dr > 0){ printf(" Setting dynamic range: %d\n",dr); - EigerSetDynamicRange(dr); - EigerSetBitMode(dr); + if(Feb_Control_SetDynamicRange(dr)){ + + //EigerSetBitMode(dr); + on_dst = 0; + int i; + for(i=0;i<32;i++) dst_requested[i] = 0; //clear dst requested + if(Beb_SetUpTransferParameters(dr)) + eiger_dynamicrange = dr; + } } //make sure back end and front end have the same bit mode - r= EigerGetDynamicRange(); - if(r != EigerGetBitMode()) - EigerSetBitMode(r); + dr= Feb_Control_GetDynamicRange(); - return r; + return dr; } @@ -486,9 +583,10 @@ enum readOutFlags setReadOutFlags(enum readOutFlags val){ default: val=0; break; } printf(" Setting Read out Flag: %d\n",val); - EigerSetReadoutMode(val); + if(Feb_Control_SetReadoutMode(val)) + eiger_readoutmode = val; } - switch(EigerGetReadoutMode()){ + switch(eiger_readoutmode){ case 0: ret=PARALLEL; break; case 1: ret=NONPARALLEL; break; case 2: ret=SAFE; break; @@ -510,9 +608,10 @@ int setROI(int n, ROI arg[], int *retvalsize, int *ret){ int setSpeed(enum speedVariable arg, int val){ if(val != -1){ printf(" Setting Read out Speed: %d\n",val); - EigerSetReadoutSpeed(val); + if(Feb_Control_SetReadoutSpeed(val)) + eiger_readoutspeed = val; } - return EigerGetReadoutSpeed(); + return eiger_readoutspeed; } @@ -523,9 +622,58 @@ int executeTrimming(enum trimMode mode, int par1, int par2, int imod){ int configureMAC(int ipad, long long int macad, long long int detectormacadd, int detipad, int udpport, int ival){ - EigerSetupTableEntryLeft(ipad, macad, detectormacadd, detipad, udpport); - EigerSetupTableEntryRight(ipad, macad, detectormacadd, detipad, udpport); - SetDestinationParameters(EigerGetNumberOfExposures()*EigerGetNumberOfCycles()); + char src_mac[50], src_ip[50],dst_mac[50], dst_ip[50]; + int src_port = 0xE185; + int dst_port = udpport; + sprintf(src_ip,"%d.%d.%d.%d",(detipad>>24)&0xff,(detipad>>16)&0xff,(detipad>>8)&0xff,(detipad)&0xff); + sprintf(dst_ip,"%d.%d.%d.%d",(ipad>>24)&0xff,(ipad>>16)&0xff,(ipad>>8)&0xff,(ipad)&0xff); + sprintf(src_mac,"%02x:%02x:%02x:%02x:%02x:%02x",(unsigned int)((detectormacadd>>40)&0xFF), + (unsigned int)((detectormacadd>>32)&0xFF), + (unsigned int)((detectormacadd>>24)&0xFF), + (unsigned int)((detectormacadd>>16)&0xFF), + (unsigned int)((detectormacadd>>8)&0xFF), + (unsigned int)((detectormacadd>>0)&0xFF)); + sprintf(dst_mac,"%02x:%02x:%02x:%02x:%02x:%02x",(unsigned int)((macad>>40)&0xFF), + (unsigned int)((macad>>32)&0xFF), + (unsigned int)((macad>>24)&0xFF), + (unsigned int)((macad>>16)&0xFF), + (unsigned int)((macad>>8)&0xFF), + (unsigned int)((macad>>0)&0xFF)); + + printf("Seting up Table Entry Left:\n"); + printf("src_port:%d\n",src_port); + printf("dst_port:%d\n",dst_port); + printf("src_ip:%s\n",src_ip); + printf("dst_ip:%s\n",dst_ip); + printf("src_mac:%s\n",src_mac); + printf("dst_mac:%s\n\n",dst_mac); + + int beb_num = 34; + int header_number = 0; + +int i=0; + //EigerSetupTableEntryLeft(ipad, macad, detectormacadd, detipad, udpport); + /* for(i=0;i<32;i++){/** modified for Aldo*/ + if(Beb_SetBebSrcHeaderInfos(beb_num,send_to_ten_gig,src_mac,src_ip,src_port) && + Beb_SetUpUDPHeader(beb_num,send_to_ten_gig,header_number+i,dst_mac,dst_ip, dst_port)) + printf("set up left ok\n"); + else return -1; + /*}*/ + //EigerSetupTableEntryRight(ipad, macad, detectormacadd, detipad, udpport); + header_number = 32; + dst_port = udpport +1; + /*for(i=0;i<32;i++){*//** modified for Aldo*/ + if(Beb_SetBebSrcHeaderInfos(beb_num,send_to_ten_gig,src_mac,src_ip,src_port) && + Beb_SetUpUDPHeader(beb_num,send_to_ten_gig,header_number+i,dst_mac,dst_ip, dst_port)) + printf("set up right ok\n"); + else return -1; + /*}*/ + //SetDestinationParameters(EigerGetNumberOfExposures()*EigerGetNumberOfCycles()); + on_dst = 0; + + for(i=0;i<32;i++) dst_requested[i] = 0; //clear dst requested + nimages_per_request=eiger_nexposures * eiger_ncycles; + return 0; } @@ -655,10 +803,11 @@ enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){ case GATE_FIX_NUMBER: ret = 3; break; } printf(" Setting Triggering Mode: %d\n",(int)ret); - EigerSetTriggerMode(ret); + if(Feb_Control_SetTriggerMode(ret,1)) + eiger_triggermode = ret; } - ret = EigerGetTriggerMode(); + ret = eiger_triggermode; switch((int)ret){ case 0: ret = AUTO_TIMING; break; case 2: ret = TRIGGER_EXPOSURE; break; @@ -673,10 +822,13 @@ enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){ void setExternalGating(int enable[]){ - if(enable>=0) - EigerSetExternalGating(enable[0], enable[1]);//enable = 0 or 1, polarity = 0 or 1 , where 1 is positive - enable[0] = EigerGetExternalGatingPolarity(); - enable[1] = EigerGetExternalGating(); + if(enable>=0){ + Feb_Control_SetExternalEnableMode(enable[0], enable[1]);//enable = 0 or 1, polarity = 0 or 1 , where 1 is positive + eiger_extgating = enable[0]; + eiger_extgatingpolarity = enable[1]; + } + enable[0] = eiger_extgating; + enable[1] = eiger_extgatingpolarity; } @@ -692,15 +844,16 @@ enum synchronizationMode setSynchronization(enum synchronizationMode arg){ void setAllTrimbits(int val){ int ichan; - EigerSetAllTrimbits(val); + if(Feb_Control_SaveAllTrimbitsTo(val)){ #ifdef VERBOSE - printf("Copying register %x value %d\n",destMod->reg,val); + printf("Copying register %x value %d\n",destMod->reg,val); #endif - if (detectorModules){ - for (ichan=0; ichan<(detectorModules->nchan); ichan++) { + if (detectorModules){ + for (ichan=0; ichan<(detectorModules->nchan); ichan++) { *((detectorModules->chanregs)+ichan)=val; + } } - } + }else printf("error in setting all trimbits to value\n"); } int getAllTrimbits(){ diff --git a/slsDetectorSoftware/eigerDetectorServer/xfs_types.h b/slsDetectorSoftware/eigerDetectorServer/xfs_types.h index b16fbaac9..cd092bbd6 100644 --- a/slsDetectorSoftware/eigerDetectorServer/xfs_types.h +++ b/slsDetectorSoftware/eigerDetectorServer/xfs_types.h @@ -1,6 +1,8 @@ #ifndef __XFS_TYPES_H__ #define __XFS_TYPES_H__ +//#include "types.h" +#include /******************************************************************************/ /* types */ /******************************************************************************/ @@ -15,33 +17,33 @@ typedef signed char xfs_i8; // UDP Header -typedef struct +struct udp_header_type { // ethternet frame (14 byte) - unsigned char dst_mac[6]; - unsigned char src_mac[6]; - unsigned char len_type[2]; + uint8_t dst_mac[6]; + uint8_t src_mac[6]; + uint8_t len_type[2]; // ip header (20 byte) - unsigned char ver_headerlen[1]; - unsigned char service_type[1]; - unsigned char total_length[2]; - unsigned char identification[2]; - unsigned char flags[1]; - unsigned char frag_offset[1]; - unsigned char time_to_live[1]; - unsigned char protocol[1]; - unsigned char ip_header_checksum[2]; - unsigned char src_ip[4]; - unsigned char dst_ip[4]; + uint8_t ver_headerlen[1]; + uint8_t service_type[1]; + uint8_t total_length[2]; + uint8_t identification[2]; + uint8_t flags[1]; + uint8_t frag_offset[1]; + uint8_t time_to_live[1]; + uint8_t protocol[1]; + uint8_t ip_header_checksum[2]; + uint8_t src_ip[4]; + uint8_t dst_ip[4]; // udp header (8 byte) - unsigned char src_port[2]; - unsigned char dst_port[2]; - unsigned char udp_message_len[2]; - unsigned char udp_checksum[2]; + uint8_t src_port[2]; + uint8_t dst_port[2]; + uint8_t udp_message_len[2]; + uint8_t udp_checksum[2]; -} udp_header_type; +}; diff --git a/slsDetectorSoftware/gitInfo.txt b/slsDetectorSoftware/gitInfo.txt index b24ec2f7b..3bfd6648c 100644 --- a/slsDetectorSoftware/gitInfo.txt +++ b/slsDetectorSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: 046a469b1e6582c4c55bd6eaeb4818b618d0a9a9 -Revision: 833 -Branch: separate_receiver +Repsitory UUID: 8c994ea0d538628b36a9497508960388816749fa +Revision: 848 +Branch: master Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 833 -Last Changed Date: 2014-06-03 12:26:45 +0200 +Last Changed Rev: 848 +Last Changed Date: 2014-08-08 14:03:30 +0200 diff --git a/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt b/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt index ac5843f45..0d177ba0f 100644 --- a/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/gotthardDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/gotthardDetectorServer URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: 046a469b1e6582c4c55bd6eaeb4818b618d0a9a9 -Revision: 169 -Branch: separate_receiver +Repsitory UUID: 8c994ea0d538628b36a9497508960388816749fa +Revision: 172 +Branch: master Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 14 -Last Changed Date: 2014-06-03 12:26:45 +0200 +Last Changed Rev: 278 +Last Changed Date: 2014-08-08 14:03:30 +0200 diff --git a/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h b/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h index ceab7eff2..9d83205f5 100644 --- a/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h +++ b/slsDetectorSoftware/gotthardDetectorServer/gitInfoGotthard.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/gotthardDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "046a469b1e6582c4c55bd6eaeb4818b618d0a9a9" -//#define SVNREV 0x14 +#define SVNREPUUID "8c994ea0d538628b36a9497508960388816749fa" +//#define SVNREV 0x278 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x14 -#define SVNDATE 0x20140603 +#define SVNREV 0x278 +#define SVNDATE 0x20140808 // diff --git a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c index 8a44510d9..897c6bcad 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/server_funcs.c @@ -1012,7 +1012,7 @@ int set_dac(int file_des) { n = sendDataOnly(file_des,&ret,sizeof(ret)); if (ret!=FAIL) { /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); + n += sendDataOnly(file_des,retval,sizeof(retval)); } else { n += sendDataOnly(file_des,mess,sizeof(mess)); } diff --git a/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c b/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c index 303fc52ad..25b6e7598 100755 --- a/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/moenchDetectorServer/firmware_funcs.c @@ -51,7 +51,6 @@ int masterMode=NO_MASTER, syncMode=NO_SYNCHRONIZATION, timingMode=AUTO_TIMING; enum externalSignalFlag signals[4]={EXT_SIG_OFF, EXT_SIG_OFF, EXT_SIG_OFF, EXT_SIG_OFF}; -int withGotthard = 0; #ifdef MCB_FUNCS extern const int nChans; @@ -286,10 +285,7 @@ int cleanFifo(){ printf("Cleaning FIFO\n"); addr=ADC_SYNC_REG; - if(withGotthard) - adc_sync = GOTTHARD_ADCSYNC_VAL; - else - adc_sync = ADCSYNC_VAL; + adc_sync = ADCSYNC_VAL; reg = bus_r(addr) & CLEAN_FIFO_MASK; @@ -1404,19 +1400,7 @@ int setADC(int adc){ setDAQRegister();//token timing cleanFifo();//adc sync - //with gotthard module - if(withGotthard){ - //set packet size - ipPacketSize= DEFAULT_IP_PACKETSIZE; - udpPacketSize=DEFAULT_UDP_PACKETSIZE; - //set channel mask - nchips = GOTTHARDNCHIP; - nchans = GOTTHARDNCHAN; - mask = ACTIVE_ADC_MASK; - } - - //with moench module all adc - else{/* if(adc==-1){*/ +/* if(adc==-1){*/ //set packet size ipPacketSize= DEFAULT_IP_PACKETSIZE; udpPacketSize=DEFAULT_UDP_PACKETSIZE; @@ -1424,7 +1408,7 @@ int setADC(int adc){ nchips = NCHIP; nchans = NCHANS; mask = ACTIVE_ADC_MASK; - }/* + /* //with moench module 1 adc -- NOT IMPLEMENTED else{ ipPacketSize= ADC1_IP_PACKETSIZE; diff --git a/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt b/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt index 921890a70..194cf3682 100644 --- a/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/moenchDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/moenchDetectorServer URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: 046a469b1e6582c4c55bd6eaeb4818b618d0a9a9 -Revision: 55 -Branch: separate_receiver +Repsitory UUID: 8c994ea0d538628b36a9497508960388816749fa +Revision: 57 +Branch: master Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 14 -Last Changed Date: 2014-06-03 12:26:45 +0200 +Last Changed Rev: 278 +Last Changed Date: 2014-08-08 14:03:30 +0200 diff --git a/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h index 270653967..cfdb825d9 100644 --- a/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h +++ b/slsDetectorSoftware/moenchDetectorServer/gitInfoMoench.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "046a469b1e6582c4c55bd6eaeb4818b618d0a9a9" -//#define SVNREV 0x14 +#define SVNREPUUID "8c994ea0d538628b36a9497508960388816749fa" +//#define SVNREV 0x278 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x14 -#define SVNDATE 0x20140603 +#define SVNREV 0x278 +#define SVNDATE 0x20140808 // diff --git a/slsDetectorSoftware/moenchDetectorServer/mcb_funcs.c b/slsDetectorSoftware/moenchDetectorServer/mcb_funcs.c index 88cd7a138..1db487a31 100755 --- a/slsDetectorSoftware/moenchDetectorServer/mcb_funcs.c +++ b/slsDetectorSoftware/moenchDetectorServer/mcb_funcs.c @@ -513,7 +513,6 @@ int set_one_dac(int imod) { bit=value & (1<<(15-ibit)); if (bit) { putout("0000010001000000",imod); - putout("0000011001000000",imod); putout("0000010001000000",imod); #ifdef DEBUGOUT fprintf(stdout,"1"); @@ -551,15 +550,15 @@ int initDACbyIndex(int ind,int val, int imod) { int ref=partref[ind]; int r1=partr1[ind]; int r2=partr2[ind]; - + int retval[2]; v=(val+(val-ref)*r1/r2)*DAC_DR/DAC_MAX; - v=initDACbyIndexDACU(ind,v,imod); + v=initDACbyIndexDACU(ind,v,imod,0,retval); return (v*DAC_MAX/DAC_DR+ref*r1/r2)/(1+r1/r2); } -int initDACbyIndexDACU(int ind, int val, int imod) { +int initDACbyIndexDACU(int ind, int val, int imod, int mV, int retval[]) { // const double daccs[NDAC]=DACCS; // const double dacaddr[NDAC]=DACADDR; @@ -568,6 +567,8 @@ int initDACbyIndexDACU(int ind, int val, int imod) { // int addr=dacaddr[ind]; // int iv; int im; + if(mV) + val = (val*4096)/2500; if (val>=0) initDAC(ind,val, imod); @@ -598,124 +599,12 @@ int initDACbyIndexDACU(int ind, int val, int imod) { #ifdef VERBOSE printf("returning %d\n",setDACRegister(ind, -1, 0)); #endif - return setDACRegister(ind, -1, 0); + retval[0] = setDACRegister(ind, -1, 0); + retval[1] = (retval[0]*2500)/4096; + return retval[0]; } } -int getThresholdEnergy() { - double g[3]=DEFAULTGAIN; - double o[3]=DEFAULTOFFSET; - double myg=-1, myo=-1; - // int dacu; - int imod; - int ethr=-1; - int ret=FAIL; - - if (detectorModules) { - // for (imod=0; imodgain,(detectorModules+imod)->offset); -#endif - if ((detectorModules+imod)->gain>0) - myg=(detectorModules+imod)->gain; - else { - if (thisSettings>=0 && thisSettings<3) - myg=g[thisSettings]; - // else - //myg=-1; - } - - if ((detectorModules+imod)->offset>0) - myo=(detectorModules+imod)->offset; - else { - if (thisSettings>=0 && thisSettings<3) - myo=o[thisSettings]; - // else - //myo=-1; - } - - if (myg>0 && myo>0) { - //ethr=(myo-detectorDacs[VTHRESH+imod*NDAC])*1000/myg; - - ethr=(myo-setDACRegister(VDAC0,-1,imod))*1000/myg;//edited by dhanya - // else - // ethr=-1; - - } -#ifdef VERBOSE - //printf("module=%d gain=%f, offset=%f, dacu=%f\n",imod, myg, myo, detectorDacs[VTHRESH+imod*NDAC]); - printf("module=%d gain=%f, offset=%f, dacu=%d\n",imod, myg, myo,(int)(setDACRegister(VDAC0,-1,imod)));//edited by dhanya - printf("Threshold energy of module %d is %d eV\n", imod, ethr); -#endif - - if (imod==0) - ret=ethr; - else { - if (ethr>(ret+100) || ethr<(ret-100)) - return FAIL; - } - } - } - return ret; -} - -int setThresholdEnergy(int ethr) { - double g[3]=DEFAULTGAIN; - double o[3]=DEFAULTOFFSET; - double myg=-1, myo=-1; - int dacu; - int imod; - int ret=ethr; - - setSettings(GET_SETTINGS,-1);//-1 added by dhanya - if (thisSettings>=0 || thisSettings<3){ - myg=g[thisSettings]; - myo=o[thisSettings]; - } - for (imod=0; imodgain>0) - myg=(detectorModules+imod)->gain; - else - if (thisSettings>=0 && thisSettings<3) - myg=g[thisSettings]; - else - myg=-1; - if ((detectorModules+imod)->offset>0) - myo=(detectorModules+imod)->offset; - else - if (thisSettings>=0 && thisSettings<3) - myo=o[thisSettings]; - else - myo=-1; - } else { - if (thisSettings>=0 && thisSettings<3) - myo=o[thisSettings]; - else - myo=-1; - if (thisSettings>=0 && thisSettings<3) - myg=g[thisSettings]; - else - myg=-1; - } - if (myg>0 && myo>0) { - dacu=myo-myg*((double)ethr)/1000.; -#ifdef VERBOSE - printf("module %d (%x): gain %f, off %f, energy %d eV, dac %d\n",imod,(unsigned int)((detectorModules+imod)),(detectorModules+imod)->gain,(detectorModules+imod)->offset, ethr,dacu); -#endif - } else { - dacu=ethr; -#ifdef VERBOSE - printf("could not set threshold energy for module %d, settings %d (offset is %f; gain is %f)\n",imod,thisSettings,myo,myg); -#endif - } - initDACbyIndexDACU(VDAC0, dacu, imod); ///needs to be fixed dhanya - } - return ret; -} - - int getDACbyIndexDACU(int ind, int imod) { /* @@ -2585,19 +2474,9 @@ ROI* setROI(int n, ROI arg[], int *retvalsize, int *ret){ int i,adc; ROI temp; - +/* if(n>=0){ - //clear rois - for(i=0;i>DETECTOR_TYPE_OFFSET) != MOENCH_MODULE ){ - if(checkType){ - printf("This is a Gotthard detector. Exiting Moench Server.\n\n"); - exit(-1); - } - //no check required as specified in command line arguments - else if(b){ - printf("***This is a GOTTHARD detector with %d chips per module***\n",GOTTHARDNCHIP); - printf("***Assuming this to be a MOENCH detector***\n"); - } - withGotthard = 1; - } else if(b){ - printf("***This is a MOENCH detector with %d chips per module***\n",NCHIP); + printf("This is a Gotthard detector. Exiting Moench Server.\n\n"); + exit(-1); } if (b) { + printf("***This is a MOENCH detector with %d chips per module***\n",NCHIP); + #ifdef MCB_FUNCS printf("\nBoard Revision:0x%x\n",(bus_r(PCB_REV_REG)&BOARD_REVISION_MASK)); initDetector(); @@ -914,13 +904,15 @@ int read_register(int file_des) { int set_dac(int file_des) { //default:all mods - int retval; + int retval[2];retval[1]=-1; + int temp; int ret=OK; int arg[3]; enum dacIndex ind; int imod; int n; int val; + int mV; int idac=0; sprintf(mess,"Can't set DAC\n"); @@ -932,6 +924,7 @@ int set_dac(int file_des) { } ind=arg[0]; imod=arg[1]; + mV=arg[2]; n = receiveDataOnly(file_des,&val,sizeof(val)); if (n < 0) { @@ -990,45 +983,50 @@ int set_dac(int file_des) { ret=FAIL; sprintf(mess,"Detector locked by %s\n",lastClientIP); } else{ - if(idac==HIGH_VOLTAGE) - retval=initHighVoltageByModule(val,imod); - else - retval=initDACbyIndexDACU(idac,val,imod); + if(idac==HIGH_VOLTAGE){ + retval[0]=initHighVoltageByModule(val,imod); + ret=FAIL; + if(retval[0]==-2) + strcpy(mess,"Invalid Voltage.Valid values are 0,90,110,120,150,180,200"); + else if(retval[0]==-3) + strcpy(mess,"Weird value read back or it has not been set yet\n"); + else + ret=OK; + }else{ + initDACbyIndexDACU(idac,val,imod,mV,retval); + ret=FAIL; + if(mV) + temp = retval[1]; + else + temp = retval[0]; + if ((abs(temp-val)<=3) || val==-1) { + ret=OK; +#ifdef VERBOSE + printf("DAC set to %d in dac units and %d mV\n", retval[0],retval[1]); +#endif + } + } } } - if(ret==OK){ - ret=FAIL; - if(idac==HIGH_VOLTAGE){ - if(retval==-2) - strcpy(mess,"Invalid Voltage.Valid values are 0,90,110,120,150,180,200"); - else if(retval==-3) - strcpy(mess,"Weird value read back or it has not been set yet\n"); - else - ret=OK; - }//since v r saving only msb - else if ((retval-val)<=3 || val==-1) - ret=OK; - } + #endif -#ifdef VERBOSE - printf("DAC set to %d V\n", retval); -#endif if(ret==FAIL) - printf("Setting dac %d of module %d: wrote %d but read %d\n", ind, imod, val, retval); + printf("Setting dac %d of module %d: wrote %d but read %d\n", ind, imod, val, temp); else{ if (differentClients) ret=FORCE_UPDATE; } + /* send answer */ /* send OK/failed */ n = sendDataOnly(file_des,&ret,sizeof(ret)); if (ret!=FAIL) { /* send return argument */ - n += sendDataOnly(file_des,&retval,sizeof(retval)); + n += sendDataOnly(file_des,retval,sizeof(retval)); } else { n += sendDataOnly(file_des,mess,sizeof(mess)); } @@ -1610,7 +1608,7 @@ int get_threshold_energy(int file_des) { n += sendDataOnly(file_des,mess,sizeof(mess)); /*return ok/fail*/ - return OK; + return ret; } @@ -1631,7 +1629,7 @@ int set_threshold_energy(int file_des) { n += sendDataOnly(file_des,mess,sizeof(mess)); /*return ok/fail*/ - return OK; + return ret; } diff --git a/slsDetectorSoftware/moenchDetectorServer/server_funcs.h b/slsDetectorSoftware/moenchDetectorServer/server_funcs.h index 5e371278a..890c7452d 100755 --- a/slsDetectorSoftware/moenchDetectorServer/server_funcs.h +++ b/slsDetectorSoftware/moenchDetectorServer/server_funcs.h @@ -23,7 +23,7 @@ int sockfd; int function_table(); int decode_function(int); -int init_detector(int,int); +int init_detector(int); int M_nofunc(int); int exit_server(int); diff --git a/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt b/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt index 845b9b912..3d0550e25 100644 --- a/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/mythenDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/mythenDetectorServer URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git -Repsitory UUID: 046a469b1e6582c4c55bd6eaeb4818b618d0a9a9 -Revision: 87 -Branch: separate_receiver +Repsitory UUID: 8c994ea0d538628b36a9497508960388816749fa +Revision: 89 +Branch: master Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 14 -Last Changed Date: 2014-06-03 12:26:45 +0200 +Last Changed Rev: 278 +Last Changed Date: 2014-08-08 14:03:30 +0200 diff --git a/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h b/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h index 2a014ef9d..10e55852e 100644 --- a/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h +++ b/slsDetectorSoftware/mythenDetectorServer/gitInfoMythen.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/mythenDetectorServer" //#define SVNREPPATH "" -#define SVNREPUUID "046a469b1e6582c4c55bd6eaeb4818b618d0a9a9" -//#define SVNREV 0x14 +#define SVNREPUUID "8c994ea0d538628b36a9497508960388816749fa" +//#define SVNREV 0x278 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Maliakal_Dhanya" -#define SVNREV 0x14 -#define SVNDATE 0x20140603 +#define SVNREV 0x278 +#define SVNDATE 0x20140808 // diff --git a/slsDetectorSoftware/slsDetector/gitInfoLib.h b/slsDetectorSoftware/slsDetector/gitInfoLib.h index 05164dc93..c758ed272 100644 --- a/slsDetectorSoftware/slsDetector/gitInfoLib.h +++ b/slsDetectorSoftware/slsDetector/gitInfoLib.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURLLIB "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git" //#define SVNREPPATH "" -#define SVNREPUUIDLIB "046a469b1e6582c4c55bd6eaeb4818b618d0a9a9" -//#define SVNREV 0x833 +#define SVNREPUUIDLIB "8c994ea0d538628b36a9497508960388816749fa" +//#define SVNREV 0x848 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTHLIB "Maliakal_Dhanya" -#define SVNREVLIB 0x833 -#define SVNDATELIB 0x20140603 +#define SVNREVLIB 0x848 +#define SVNDATELIB 0x20140808 // diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c index 944213f2b..40a33d8dd 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c @@ -24,14 +24,16 @@ int main(int argc, char *argv[]){ int sd, fd; #ifdef STOP_SERVER char cmd[100]; - if (argc==1) { #endif + if (argc==1) { +//#endif portno = DEFAULT_PORTNO; printf("opening control server on port %d\n",portno ); b=1; #ifdef STOP_SERVER sprintf(cmd,"%s %d &",argv[0],DEFAULT_PORTNO+1); system(cmd); +#endif } else { portno = DEFAULT_PORTNO+1; if ( sscanf(argv[1],"%d",&portno) ==0) { @@ -41,7 +43,7 @@ int main(int argc, char *argv[]){ printf("opening stop server on port %d\n",portno); b=0; } -#endif +//#endif init_detector(b); //defined in slsDetectorServer_funcs diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 560ad9037..52e796d08 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -52,6 +52,12 @@ int init_detector(int b) { #ifdef SLS_DETECTOR_FUNCTION_LIST initDetector(); #endif + }else{ + Feb_Interface_FebInterface(); + Feb_Control_FebControl(); + printf("FEb control constructor done\n"); + /* Beb_Beb(-1); + printf("BEB constructor done\n");*/ } strcpy(mess,"dummy message"); strcpy(lastClientIP,"none"); @@ -1970,8 +1976,9 @@ int set_settings(int file_des) { } imod=arg[1]; isett=arg[0]; - printf("isett:%d, imod =%d\n",isett,imod); - +#ifdef VERBOSE + printf("In set_settings, isett:%d, imod =%d\n",isett,imod); +#endif #ifdef SLS_DETECTOR_FUNCTION_LIST if (imod>=getTotalNumberOfModules()) { ret=FAIL; @@ -2262,11 +2269,11 @@ int get_run_status(int file_des) { enum runStatus s; sprintf(mess,"getting run status\n"); -#ifdef VERBOSE +//#ifdef VERBOSE printf("Getting status\n"); -#endif +//#endif #ifdef SLS_DETECTOR_FUNCTION_LIST - s= getRunStatus(); + s= getRunStatus();printf("status:%d\n"); #endif if (ret!=OK) { @@ -2452,6 +2459,7 @@ int set_timer(int file_des) { sprintf(mess, "could not allocate RAM for %lld frames\n", tns); } #endif + if (differentClients) ret=FORCE_UPDATE; } @@ -2709,6 +2717,7 @@ int set_roi(int file_des) { #ifndef GOTTHARDD ret = FAIL; strcpy(mess,"Not applicable/implemented for this detector\n"); + printf("Error:Set ROI-%s",mess); #else #ifdef VERBOSE printf("Setting ROI to:"); @@ -3007,11 +3016,13 @@ int configure_mac(int file_des) { printf("\n"); printf("Configuring MAC of module %d at port %x\n", imod, udpport); #endif - printf("ret:%d\n",ret); + #ifdef SLS_DETECTOR_FUNCTION_LIST if (ret==OK) { - if(getRunStatus() == RUNNING) + if(getRunStatus() == RUNNING){ stopStateMachine(); + } + retval=configureMAC(ipad,imacadd,idetectormacadd,detipad,udpport,0); /*digitalTestBit);*/ if(retval==-1) ret=FAIL; } @@ -3396,9 +3407,9 @@ int enable_ten_giga(int file_des) { } /* execute action */ if(ret != FAIL){ -//#ifdef VERBOSE +#ifdef VERBOSE printf("Enabling 10Gbe :%d \n",arg); -//#endif +#endif #ifdef SLS_DETECTOR_FUNCTION_LIST retval=enableTenGigabitEthernet(arg); if((arg != -1) && (retval != arg)) From 7faac70c3f8c6defad659170b9ae4651617c96e1 Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Tue, 9 Sep 2014 15:42:16 +0200 Subject: [PATCH 07/11] trimbits work. --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 5 +- .../eigerDetectorServer/FebControl.c | 111 ++++-------------- .../eigerDetectorServer/FebControl.h | 2 - .../eigerDetectorServer/FebInterface.c | 18 ++- .../eigerDetectorServer/FebInterface.h | 3 + .../eigerDetectorServer/LocalLinkInterface.c | 38 +++--- .../slsDetectorFunctionList.c | 51 +++++++- .../slsDetector/slsDetector.cpp | 4 +- .../slsDetector/slsDetectorActions.cpp | 5 +- .../slsDetector/slsDetectorActions.h | 7 ++ 10 files changed, 121 insertions(+), 123 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index f95f4b81b..9558007a6 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -507,7 +507,10 @@ int Beb_RequestNImages(unsigned int beb_number, unsigned int left_right, int ten int in_two_requests = (!ten_gig&&Beb_bit_mode==32); if(in_two_requests) npackets/=2; - printf("here: %d %d %d %d %d %d %d\n",beb_number,left_right,ten_gig,dst_number,nimages, header_size,test_just_send_out_packets_no_wait); + //usleep needed after acquisition start, else you miss the single images + usleep(0); + + //printf("beb no:%d left_right:%d ten_gig:%d dst_number:%d #images:%d header_size:%d test_just_send_out_packets_no_wait:%d\n",beb_number,left_right,ten_gig,dst_number,nimages, header_size,test_just_send_out_packets_no_wait); //printf("here: "<>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 @@ -898,26 +902,26 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ 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]->Module_GetTopLeftAddress(),0,0,1024,trimbits_to_load_r)||!WriteMemory(modules[0]->Module_GetTopRightAddress(),0,0,1024,trimbits_to_load_l)||!Feb_Control_StartDAQOnlyNWaitForFinish()){ - cout <<" some errror!"<< endl; - return 0; - } -*/ - if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)||!Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)||!Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + + if(!Feb_Interface_WriteMemoryInLoops(Module_GetTopLeftAddress(&modules[0]),0,0,1024,trimbits_to_load_r)|| + !Feb_Interface_WriteMemoryInLoops(Module_GetTopRightAddress(&modules[0]),0,0,1024,trimbits_to_load_l)|| + //if(!Feb_Interface_WriteMemory(Module_GetTopLeftAddress(&modules[0]),0,0,1023,trimbits_to_load_r)|| + // !Feb_Interface_WriteMemory(Module_GetTopRightAddress(&modules[0]),0,0,1023,trimbits_to_load_l)|| + !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ printf(" some errror!\n"); return 0; } } //end row_set loop (groups of 16 rows) } // end l_r loop + memcpy(Feb_Control_last_downloaded_trimbits,trimbits,Feb_Control_trimbit_size*sizeof(unsigned char)); + return Feb_Control_SetStaticBits(); //send the static bits } @@ -1362,81 +1366,6 @@ int Feb_Control_StopAcquisition(){ - -int Feb_Control_LoadTrimbitFile(){/* - string filename = "/home/root/noise.snbeb040"; - ifstream input_file; - - int Module_ndacs =16; - int dacs[Module_ndacs]; - unsigned int chanregs[trimbit_size]; - - - input_file.open(filename.c_str() ,ifstream::binary); - if(!input_file.is_open()){ - printf("Warning, could not open trimbit file: %s\n",filename); - exit(-1); - } - - //dacs - int i; - for(i=0;i0){ + n_to_send = ndata_countdownFeb_Interface_send_buffer_size-2) {printf("error herer: nwrites:%d\n",nwrites);return 0;}//*d-1026 - Feb_Interface_send_ndata = nwrites+2;//*d-1025 + Feb_Interface_send_ndata = nwrites+2;//*d-1026 Feb_Interface_send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address Feb_Interface_send_data[nwrites+1] = 0; for(i=0;ill_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); ll->ll_fifo_ctrl_reg &= (~rst_mask); - + HWIO_xfs_out32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_CTRL,ll->ll_fifo_ctrl_reg); - // printf("FIFO CTRL Address: 0x%08x\n FIFO CTRL Register: 0x%08x\n",PLB_LL_FIFO_REG_CTRL,plb_ll_fifo[PLB_LL_FIFO_REG_CTRL]); + // printf("FIFO CTRL Address: 0x%08x\n FIFO CTRL Register: 0x%08x\n",PLB_LL_FIFO_REG_CTRL,plb_ll_fifo[PLB_LL_FIFO_REG_CTRL]); return 1; } @@ -130,17 +130,17 @@ int Local_Write(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buf // frame_len in byte int vacancy=0; int i; - int words_send = 0; - int last_word; + int words_send = 0; + int last_word; unsigned int *word_ptr; unsigned int fifo_ctrl; xfs_u32 status; if (buffer_len < 1) return -1; - + last_word = (buffer_len-1)/4; word_ptr = (unsigned int *)buffer; - + while (words_send <= last_word) { while (!vacancy)//wait for Fifo to be empty again @@ -176,12 +176,12 @@ int Local_Read(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buff // frame_len in byte int len; unsigned int *word_ptr; - unsigned int status; + unsigned int status; volatile unsigned int fifo_val; int sof = 0; - - word_ptr = (unsigned int *)buffer; - do + + word_ptr = (unsigned int *)buffer; + do { status = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_STATUS); @@ -189,7 +189,7 @@ int Local_Read(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buff { if (status & PLB_LL_FIFO_STATUS_LL_SOF) { - if (buffer_ptr) + if (buffer_ptr) { buffer_ptr = 0; return -1; // buffer overflow @@ -200,14 +200,14 @@ int Local_Read(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buff } fifo_val = HWIO_xfs_in32(ll->ll_fifo_base+4*PLB_LL_FIFO_REG_FIFO); //read from fifo - + if ((buffer_ptr > 0) || sof) { if ( (buffer_len >> 2) > buffer_ptr) { word_ptr[buffer_ptr++] = fifo_val; //write to buffer } - else + else { buffer_ptr = 0; return -2; // buffer overflow @@ -223,9 +223,9 @@ int Local_Read(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buff } } - } + } while(!(status & PLB_LL_FIFO_STATUS_EMPTY)); - + return 0; } @@ -245,7 +245,7 @@ int Local_Test(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buff int len; unsigned int rec_buff_len = 4096; - unsigned int rec_buffer[4097]; + unsigned int rec_buffer[4097]; Local_Write(ll,buffer_len,buffer); @@ -258,11 +258,11 @@ int Local_Test(struct LocalLinkInterface* ll,unsigned int buffer_len, void *buff if (len > 0){ rec_buffer[len]=0; printf((char*) rec_buffer); - printf("\n"); + printf("\n"); } } while(len > 0); - printf("\n\n\n\n"); + printf("\n\n\n\n"); return 1; } diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index ef0f799c7..e934029b2 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -324,18 +324,18 @@ int enableTenGigabitEthernet(int val){ send_to_ten_gig = 0; //configuremac called from client } -//#ifdef VERBOSE +#ifdef VERBOSE printf("10Gbe:%d\n",send_to_ten_gig); -//#endif +#endif return send_to_ten_gig; } int setModule(sls_detector_module myMod){ int retval[2]; - #ifdef VERBOSE +//#ifdef VERBOSE printf("Setting module with settings %d\n",myMod.reg); -#endif +//#endif int i; for(i=0;ichanregs = Feb_Control_GetTrimbits(); + //trimbits + unsigned int* tt; + tt = Feb_Control_GetTrimbits(); + + //exclude gap pixels + int offset = 0; + int iy,ichip,ix,ip=0,ich=0; + for(iy=0;iy<256;iy++) { + for (ichip=0; ichip<4; ichip++) { + for(ix=0;ix<256;ix++) { + myMod->chanregs[ich++]=tt[ip++]; + } + if (ichip<3) { + ip++; + ip++; + } + } + } + + //copy to local copy as well if (detectorModules) copyModule(myMod,detectorModules); else diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index db7a01910..893135563 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -5680,8 +5680,8 @@ int slsDetector::loadSettingsFile(string fname, int imod) { myMod=readSettingsFile(fn, thisDetector->myDetectorType); if (myMod) { myMod->module=im; - //settings is saved in myMod.reg for gotthard or moench - if((thisDetector->myDetectorType==GOTTHARD)||(thisDetector->myDetectorType==MOENCH)) + //settings is saved in myMod.reg for all except mythen + if(thisDetector->myDetectorType!=MYTHEN) myMod->reg=thisDetector->currentSettings; setModule(*myMod); deleteModule(myMod); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp b/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp index 045a87b0b..2c3ee970d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorActions.cpp @@ -433,7 +433,10 @@ int slsDetectorActions::executeScan(int level, int istep) { break; case trimbitsScan: trimbit=(int)currentScanVariable[level]; - setChannel((trimbit<<((int)TRIMBIT_OFF))|((int)COMPARATOR_ENABLE)); // trimbit scan + if(getDetectorsType() == EIGER) + setAllTrimbits(trimbit); + else + setChannel((trimbit<<((int)TRIMBIT_OFF))|((int)COMPARATOR_ENABLE)); // trimbit scan break; case positionScan: //check if channels are connected! diff --git a/slsDetectorSoftware/slsDetector/slsDetectorActions.h b/slsDetectorSoftware/slsDetector/slsDetectorActions.h index 58ac19bcd..5cc495d9f 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorActions.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorActions.h @@ -197,6 +197,13 @@ class slsDetectorActions : public virtual slsDetectorBase */ virtual dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1)=0; + /** sets all the trimbits to a particular value + \param val trimbit value + \param imod module number, -1 means all modules + \returns OK or FAIL + */ + virtual int setAllTrimbits(int val, 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 From 205fc06200225cd83c1fdf673622eff6deb40a50 Mon Sep 17 00:00:00 2001 From: Maliakal Dhanya Date: Tue, 9 Sep 2014 15:43:18 +0200 Subject: [PATCH 08/11] trimbits work. --- .../bin/eigerDetectorServer | Bin 0 -> 233173 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer new file mode 100755 index 0000000000000000000000000000000000000000..44006c134e68e89911ed62bf08fcf5c4d2063662 GIT binary patch literal 233173 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 Date: Tue, 9 Sep 2014 17:00:26 +0200 Subject: [PATCH 09/11] vtrimbit size and vthreshold common for eiger --- .../bin/eigerDetectorServer | Bin 233173 -> 233173 bytes .../eigerDetectorServer/gitInfo.txt | 8 ++++---- .../eigerDetectorServer/gitInfoEiger.h | 8 ++++---- .../slsDetectorFunctionList.c | 7 +++++++ .../slsDetectorServer_defs.h | 2 +- slsDetectorSoftware/gitInfo.txt | 8 ++++---- .../gotthardDetectorServer/gitInfo.txt | 8 ++++---- .../gotthardDetectorServer/gitInfoGotthard.h | 8 ++++---- .../moenchDetectorServer/gitInfo.txt | 8 ++++---- .../moenchDetectorServer/gitInfoMoench.h | 8 ++++---- .../mythenDetectorServer/gitInfo.txt | 8 ++++---- .../mythenDetectorServer/gitInfoMythen.h | 8 ++++---- slsDetectorSoftware/slsDetector/gitInfoLib.h | 8 ++++---- .../slsDetector/slsDetectorActions.cpp | 8 +------- .../slsDetectorServer_funcs.c | 6 ++++++ 15 files changed, 55 insertions(+), 48 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 44006c134e68e89911ed62bf08fcf5c4d2063662..8d96d912bfd52767941ca0599631eea7d1c2b019 100755 GIT binary patch delta 21388 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 delta 21708 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