From 8f4a2cc182bef5332f721e387969a39d58a00678 Mon Sep 17 00:00:00 2001 From: johnson_i Date: Fri, 13 Sep 2013 13:17:11 +0000 Subject: [PATCH] Eiger class added, DAC test git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@668 951219d9-93cf-4727-9268-0efd64621fa3 --- .../eigerDetectorServer/Eiger.cxx | 36 ++- .../eigerDetectorServer/Eiger.h | 7 +- .../LocalLinkInterface.cxx | 2 +- .../eigerDetectorServer/Makefile | 2 +- .../bin/eigerDetectorServer | Bin 65275 -> 158962 bytes .../slsDetectorFunctionList.c | 247 ++++-------------- .../slsDetectorServer_defs.h | 8 +- 7 files changed, 94 insertions(+), 208 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Eiger.cxx b/slsDetectorSoftware/eigerDetectorServer/Eiger.cxx index 625f862c8..173f04b0b 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Eiger.cxx +++ b/slsDetectorSoftware/eigerDetectorServer/Eiger.cxx @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -79,11 +80,16 @@ Eiger::Eiger(){ Eiger::~Eiger(){ delete[] last_downloaded_trimbits; + ClearModules(); +} + +void Eiger::ClearModules(){ for(unsigned int i=0;iGetModuleNumber()); ReadSetUpFile(modules[i]->GetModuleNumber(),st); } - CheckSetup(); - - - return 1; + + return CheckSetup(); } @@ -326,6 +330,21 @@ bool Eiger::CheckSetup(){ return ok; } +unsigned int Eiger::GetNModules(){ + if(modules.size()<=0) return 0; + return modules.size() - 1; +} + +unsigned int Eiger::GetNHalfModules(){ + unsigned int n_half_modules = 0; + for(unsigned int i=0;iTopAddressIsValid()) n_half_modules++; + if(modules[i]->BottomAddressIsValid()) n_half_modules++; + } + + return n_half_modules; +} + bool Eiger::SetPhotonEnergy(unsigned int full_energy_eV){ photon_energy_eV = full_energy_eV; cout<<"Setting photon energy to: "<=Module::ndacs){ + cout<<"Warning: Eiger::GetDACName index out of range, "< +#include #include #include "Feb.h" @@ -71,6 +71,7 @@ class Eiger:private Feb{ private: std::vector 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 @@ -123,6 +124,9 @@ class Eiger:private Feb{ bool ReadSetUpFile(unsigned int module_num, std::string file_name); bool CheckSetup(); + unsigned int GetNModules(); + unsigned int GetNHalfModules(); + //bool SetHighVoltage(float value); bool SetHighVoltage(unsigned int module_num,float value); @@ -134,6 +138,7 @@ class Eiger:private Feb{ bool SetDAC(std::string s, float value); bool GetDAC(std::string s, float& ret_value); + bool GetDACName(unsigned int dac_num, std::string &s); bool SetTrimbits(unsigned char* trimbits); unsigned char* GetTrimbits(); diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx index 3784a7262..adb839080 100644 --- a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx @@ -5,7 +5,7 @@ #include #include -#include +//#include #include #include diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile b/slsDetectorSoftware/eigerDetectorServer/Makefile index 7cd3e24a3..c7ebd2f29 100644 --- 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 +CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT #-DSTOP_SERVER #-DVERBOSE #-DVIRTUAL LDLIBS += -lm -lstdc++ PROGS = eigerDetectorServer diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 93bbce12bda63e2b5d05e05104a0eaa4b6cecd1a..85e251b3e40606c4384799ccf975d58e6c4e1c7d 100755 GIT binary patch literal 158962 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 dk$z=NOF0CP%$^vjB -#include +#include -/** temporary*/ -#include //PROT_READ,PROT_WRITE,MAP_FILE,MAP_SHARED,MAP_FAILED -#include //O_RDWR #include "slsDetectorFunctionList.h" #include "svnInfoEiger.h" #include "Eiger.h" -const int nChans=NCHAN; -const int nChips=NCHIP; -const int nDacs=NDAC; -const int nAdcs=NADC; -const int allSelected=-2; -const int noneSelected=-1; +using namespace std; -sls_detector_module *detectorModules=NULL; -int *detectorChips=NULL; -int *detectorChans=NULL; -dacs_t *detectorDacs=NULL; -dacs_t *detectorAdcs=NULL; +enum detectorSettings thisSettings = STANDARD; +//static const string dacNames[16] = {"Svp","Svn","Vtr","Vrf","Vrs","Vtgstv","Vcmp_ll","Vcmp_lr","Cal","Vcmp_rl","Vcmp_rr","Rxb_rb","Rxb_lb","Vcp","Vcn","Vis"}; -int nModY = NMAXMOD; -int nModX = NMAXMOD; -int dynamicRange= DYNAMIC_RANGE; -int dataBytes = NMAXMOD*NCHIP*NCHAN*2; -int masterMode = NO_MASTER; -int syncMode = NO_SYNCHRONIZATION; -int timingMode = AUTO_TIMING; +static Eiger* eiger = new Eiger(); - - -enum detectorSettings thisSettings; -int sChan, sChip, sMod, sDac, sAdc; -int nModBoard = 1; -extern int dataBytes; - - -const char* dacNames[16] = {"Svp","Svn","Vtr","Vrf","Vrs","Vtgstv","Vcmp_ll","Vcmp_lr","Cal","Vcmp_rl","Vcmp_rr","Rxb_rb","Rxb_lb","Vcp","Vcn","Vis"}; - -//temporary storage on server for debugging until Ian implements -int dacvalues[NDAC]; -int64_t framenum=0; -int64_t trains=0; -int64_t exposureTime=(int64_t)1e6; -int64_t period=(int64_t)1e9; -int64_t delay=0; -int64_t gates=0; - - - -//Eiger* eiger; - - - - -/** temporary*/ -u_int32_t CSP0BASE; -int mapCSP0(void) { - CSP0BASE = (u_int32_t)malloc(0xFFFFFFF); - printf("memory allocated\n"); - printf("CSPOBASE is 0x%x \n",CSP0BASE); - printf("CSPOBASE=from %08x to %x\n",CSP0BASE,CSP0BASE+0xFFFFFFF); - return OK; -} -/* -#define CSP0 0xC4100000 //XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR -#define MEM_SIZE 0xFFFFFFF - -u_int32_t CSP0BASE; -int mapCSP0(void) { - int fd; - printf("Mapping memory\n"); -#ifdef VIRTUAL - CSP0BASE = (u_int32_t)malloc(MEM_SIZE); - printf("memory allocated\n"); -#else - if ((fd=open("/dev/mem", O_RDWR | O_SYNC)) < 0){ - printf("Cant find /dev/mem!\n"); - return FAIL; - } - printf("/dev/mem opened\n"); - CSP0BASE = (u_int32_t)mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0); - if (CSP0BASE == (u_int32_t)MAP_FAILED) { - printf("\nCan't map memmory area!!\n"); - return FAIL; - } -#endif - printf("CSPOBASE is 0x%x \n",CSP0BASE); - printf("CSPOBASE=from %08x to %x\n",CSP0BASE,CSP0BASE+MEM_SIZE); - - return OK; -} -*/ - - -int initializeDetectorStructure(){ - printf("EIGER 10\n"); - int imod; - int n=getNModBoard(X)*getNModBoard(Y); -#ifdef VERBOSE - printf("Board is for %d modules\n",n); -#endif - detectorModules=(sls_detector_module*)malloc(n*sizeof(sls_detector_module)); - detectorChips=(int*)malloc(n*NCHIP*sizeof(int)); - detectorChans=(int*)malloc(n*NCHIP*NCHAN*sizeof(int)); - detectorDacs=(dacs_t*)malloc(n*NDAC*sizeof(int)); - detectorAdcs=(dacs_t*)malloc(n*NADC*sizeof(int)); -#ifdef VERBOSE - printf("modules from 0x%x to 0x%x\n",(unsigned int)(detectorModules), (unsigned int)(detectorModules+n)); - printf("chips from 0x%x to 0x%x\n",(unsigned int)(detectorChips), (unsigned int)(detectorChips+n*NCHIP)); - printf("chans from 0x%x to 0x%x\n",(unsigned int)(detectorChans), (unsigned int)(detectorChans+n*NCHIP*NCHAN)); - printf("dacs from 0x%x to 0x%x\n",(unsigned int)(detectorDacs), (unsigned int)(detectorDacs+n*NDAC)); - printf("adcs from 0x%x to 0x%x\n",(unsigned int)(detectorAdcs), (unsigned int)(detectorAdcs+n*NADC)); -#endif - for (imod=0; imoddacs=detectorDacs+imod*NDAC; - (detectorModules+imod)->adcs=detectorAdcs+imod*NADC; - (detectorModules+imod)->chipregs=detectorChips+imod*NCHIP; - (detectorModules+imod)->chanregs=detectorChans+imod*NCHIP*NCHAN; - (detectorModules+imod)->ndac=NDAC; - (detectorModules+imod)->nadc=NADC; - (detectorModules+imod)->nchip=NCHIP; - (detectorModules+imod)->nchan=NCHIP*NCHAN; - (detectorModules+imod)->module=imod; - (detectorModules+imod)->gain=0; - (detectorModules+imod)->offset=0; - (detectorModules+imod)->reg=0; - /* initialize registers, dacs, retrieve sn, adc values etc */ - } - thisSettings=UNINITIALIZED; - sChan=noneSelected; - sChip=noneSelected; - sMod=noneSelected; - sDac=noneSelected; - sAdc=noneSelected; - - return OK; +int initDetector(){ + printf("EIGER 10\n"); + return 1; } - - - - - - -int setupDetector(){ - //eiger = new Eiger(); - //eiger->Init(); - //ReadSetUpFileToAddModules(std::string file_name); - //ReadSetUpFile(unsigned int module_num, std::string file_name); - //eiger->CheckSetup(); - - - //testFpga(); - //testRAM(); - - //setSettings(GET_SETTINGS,-1); - //setFrames(1); - //setTrains(1); - //setExposureTime(1e6); - //setPeriod(1e9); - //setDelay(0); - //setGates(0); - - //setTiming(GET_EXTERNAL_COMMUNICATION_MODE); - //setMaster(GET_MASTER); - //setSynchronization(GET_SYNCHRONIZATION_MODE); - return OK; -} - - - +//int reInitDetector(){ eiger->Init() ? 1:0; } int setNMod(int nm, enum dimension dim){ - return 1; + return eiger->GetNModules(); } int getNModBoard(enum dimension arg){ - return 1; + return eiger->GetNModules(); } - - - - - int64_t getModuleId(enum idMode arg, int imod){ + /* switch(arg){ case MODULE_SERIAL_NUMBER: return getDetectorNumber(); @@ -203,6 +45,7 @@ int64_t getModuleId(enum idMode arg, int imod){ default: break; } + */ return -1; } @@ -211,6 +54,7 @@ int64_t getModuleId(enum idMode arg, int imod){ int64_t getDetectorId(enum idMode arg){ int64_t retval = -1; + /* switch(arg){ case DETECTOR_SERIAL_NUMBER: retval = getDetectorMAC(); @@ -224,12 +68,14 @@ int64_t getDetectorId(enum idMode arg){ default: break; } + */ return retval; } int getDetectorNumber(){ + /* char output[255]=""; int res=0; FILE* sysFile = popen("hostname", "r"); @@ -237,10 +83,13 @@ int getDetectorNumber(){ pclose(sysFile); sscanf(output,"%x",&res); return res; + */ + return 0; } u_int64_t getDetectorMAC() { + /* char output[255],mac[255]=""; u_int64_t res=0; FILE* sysFile = popen("ifconfig eth0 | grep HWaddr | cut -d \" \" -f 11", "r"); @@ -256,6 +105,8 @@ u_int64_t getDetectorMAC() { sscanf(mac,"%llx",&res); printf("mac:%llx\n",res); return res; + */ + return 0; } int moduleTest( enum digitalTestMode arg, int imod){ @@ -293,19 +144,17 @@ int detectorTest( enum digitalTestMode arg){ int setDAC(enum detDacIndex ind, int val, int imod){ -//#ifdef VERBOSE - printf("Setting dac %d: %s to %d mV\n",ind, dacNames[(int)ind],val); -//#endif - if (val >= 0) - dacvalues[(int)ind] = val; + string iname; + float v = val/0.001; + if(!eiger->GetDACName((unsigned int) ind,iname)) return -1; +#ifdef VERBOSE + printf("Setting dac %d: %s to %d mV\n",ind, iname.c_str(),val); +#endif + if(val>=0) eiger->SetDAC(iname,v); - //eiger->SetDac() + if(!eiger->GetDAC(iname,v)) v=-1; - //template initDACbyIndexDACU from mcb_funcs.c - - //check that slsDetectorServer_funcs.c set_dac() has all the specific dac enums - //set dac and write to a register in fpga to remember dac value when server restarts - return dacvalues[(int)ind]; + return int(v); } @@ -318,6 +167,8 @@ int getADC(enum detDacIndex ind, int imod){ int setModule(sls_detector_module myMod){ + + /* #ifdef VERBOSE printf("Setting module with settings %d\n",myMod.reg); #endif @@ -330,17 +181,18 @@ int setModule(sls_detector_module myMod){ setDAC((detDacIndex)i,myMod.dacs[i],myMod.module); thisSettings = (detectorSettings)myMod.reg; - - - return OK; + */ + return 0; } int getModule(sls_detector_module *myMod){ + /* int i; for(i=0;indac;i++) myMod->dacs[i]= dacvalues[i]; //template getModulebyNumber() from mcb_funcs.c + */ return OK; } @@ -409,6 +261,7 @@ char *readFrame(int *ret, char *mess){ int64_t setTimer(enum timerIndex ind, int64_t val){ + /* switch(ind){ case FRAME_NUMBER: if(val >= 0) @@ -430,10 +283,10 @@ int64_t setTimer(enum timerIndex ind, int64_t val){ if(val >= 0) gates = val; return gates; -/* case PROBES_NUMBER: + case PROBES_NUMBER: if(val >= 0) framenum = val; - return framenum;*/ + return framenum; case CYCLES_NUMBER: if(val >= 0) trains = val; @@ -442,6 +295,7 @@ int64_t setTimer(enum timerIndex ind, int64_t val){ printf("unknown timer index: %d\n",ind); break; } +*/ return -1; } @@ -462,14 +316,15 @@ int64_t getTimeLeft(enum timerIndex ind){ int setDynamicRange(int dr){ //template setDynamicRange() from firmware_funcs.c - return DYNAMIC_RANGE; + // return DYNAMIC_RANGE; + return 0; } enum readOutFlags setReadOutFlags(enum readOutFlags val){ //template setStoreInRAM from firmware_funcs.c - return GET_READOUT_FLAGS; + return GET_READOUT_FLAGS; } @@ -506,14 +361,14 @@ int calculateDataBytes(){ return 0; } -int getTotalNumberOfChannels(){return NCHIP*NCHAN*nModBoard;} -int getTotalNumberOfChips(){return NCHIP*nModBoard;} -int getTotalNumberOfModules(){return nModBoard;} -int getNumberOfChannelsPerChip(){return NCHAN;} -int getNumberOfChannelsPerModule(){return NCHAN*NCHIP;} -int getNumberOfChipsPerModule(){return NCHIP;} -int getNumberOfDACsPerModule(){return NDAC;} -int getNumberOfADCsPerModule(){return NADC;} +int getTotalNumberOfChannels(){return 1;};//NCHIP*NCHAN*nModBoard;} +int getTotalNumberOfChips(){return 1;};//NCHIP*nModBoard;} +int getTotalNumberOfModules(){return 1;}//nModBoard;} +int getNumberOfChannelsPerChip(){return 1;}//NCHAN;} +int getNumberOfChannelsPerModule(){return 1;}//NCHAN*NCHIP;} +int getNumberOfChipsPerModule(){return 1;}//NCHIP;} +int getNumberOfDACsPerModule(){return 1;}//NDAC;} +int getNumberOfADCsPerModule(){return 1;}//NADC;} diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h index 816d2543f..8326873df 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h @@ -18,6 +18,7 @@ #define FIRMWAREREV 0xcaba //temporary should be in firmware /* examples*/ +/* #define NCHAN 256*256 #define NCHIP 4*1 #define NDAC 16 @@ -30,11 +31,8 @@ #define DYNAMIC_RANGE 32 +*/ -#ifdef EIGERD -enum detDacIndex{SVP,SVN,VTR,VRF,VRS,VTGSTV,VCMP_LL,VCMP_LR,CAL,VCMP_RL,VCMP_RR,RXB_RB,RXB_LB,VCP,VCN,VIS}; -#else -enum detDacIndex{none}; -#endif +enum detDacIndex{SVP,VTR,VRF,VRS,SVN,VTGSTV,VCMP_LL,VCMP_LR,CAL,VCMP_RL,RXB_RB,RXB_LB,VCMP_RR,VCP,VCN,VIS}; #endif /* SLSDETECTORSERVER_DEFS_H_ */