From 56aa4be358cf3f144753e18601ef82051b5b2109 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 30 Aug 2017 15:29:58 +0200 Subject: [PATCH 1/2] added eiger virtual class. eiger server minor bug fix. 1. copying local trimbits over from module (in effect same thing)2.rate correction table calculated each time and now only when period is different --- .../eigerDetectorServer/FebControl.c | 2 +- .../eigerDetectorServer/Makefile.virtual | 28 +- .../bin/eigerDetectorServerVirtual | Bin 56085 -> 85673 bytes ....0.16.8 => eigerDetectorServerv3.0.0.16.9} | Bin 288747 -> 288747 bytes .../eigerDetectorServer/gitInfo.txt | 10 +- .../eigerDetectorServer/gitInfoEiger.h | 8 +- .../slsDetectorFunctionList.c | 2 +- .../slsDetectorFunctionList_virtual.c | 999 ++++++++++++++++++ .../slsDetectorFunctionList.h | 3 + .../slsDetectorServer_funcs.c | 11 +- 10 files changed, 1038 insertions(+), 25 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerv3.0.0.16.8 => eigerDetectorServerv3.0.0.16.9} (76%) create mode 100644 slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index d7996ea6a..300a92bc9 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -1813,7 +1813,7 @@ int Feb_Control_SetRateCorrectionTau(int64_t tau_in_Nsec){ if(Feb_Control_SetRateCorrectionTable(Feb_Control_rate_correction_table)){ Feb_Control_RateTable_Tau_in_nsec = tau_in_Nsec; - Feb_Control_RateTable_Period_in_nsec = period_in_sec; + Feb_Control_RateTable_Period_in_nsec = period_in_sec*1e9; return 1; }else{ Feb_Control_RateTable_Tau_in_nsec = -1; diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual b/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual index 9d3bc6223..24f871d3d 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual +++ b/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual @@ -1,24 +1,26 @@ -CC = gcc -CFLAGS += -Wall -DDACS_INT -DEIGERD -DDACS_INT -DPCCOMPILE -DSLS_DETECTOR_FUNCTION_LIST #-DSTOP_SERVER #-DVERBOSE #-DVIRTUAL -DPCCOMPILE -LDLIBS += -lm -lstdc++ +CC = gcc +CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DPCCOMPILE -DSTOP_SERVER #-DVERBOSE +CFLAGS += -DVIRTUAL -DVIRTUAL_9M -DVIRTUAL_MASTER -PROGS = eigerDetectorServerVirtual -DESTDIR ?= bin -INSTMODE = 0777 +LDLIBS += -lm -lstdc++ -pthread -SRC_CLNT = communication_funcs.c slsDetectorServer.c slsDetectorServer_funcs.c slsDetectorFunctionList.c -#SRC_CLNT2 = Eiger.cxx HardwareIO.cxx LocalLinkInterface.cxx Feb.cxx -OBJS = $(SRC_CLNT:.c=.o) -OBJS2 = $(SRC_CLNT2:.cpp=.o) +PROGS = eigerDetectorServerVirtual +DESTDIR ?= bin +INSTMODE = 0777 + +SRC_CLNT = communication_funcs.c slsDetectorServer.c slsDetectorServer_funcs.c slsDetectorFunctionList_virtual.c +OBJS = $(SRC_CLNT:.c=.o) all: clean $(PROGS) -boot: $(OBJS) $(OBJS2) +boot: $(OBJS) -$(PROGS): - echo $(OBJS) $(OBJS2) + +$(PROGS): $(OBJS) +# echo $(CFLAGS) +# echo $(OBJS) mkdir -p $(DESTDIR) $(CC) -o $@ $(SRC_CLNT) $(CFLAGS) $(LDLIBS) mv $(PROGS) $(DESTDIR) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerVirtual b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerVirtual index 7a8d32b6250f04863a9df7d05905785d6811ec11..934f86b7088150e0c2baf294ebbe422515afafe4 100755 GIT binary patch literal 85673 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�h;KkvQ#2 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 N_BeuOB%T%A{{eX|isS$Q literal 56085 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 N>(!%*rPf9K{{Yz;^PB(x diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.8 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.9 similarity index 76% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.8 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.0.0.16.9 index b485fa5dd08202b72c4c10ba4d295ded9b6198ff..6cbc0d41ada6b37ae04b8b20e6e790bcfe8d3c00 100755 GIT binary patch delta 18372 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 F{|8DlH>>~v diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt index 1c9d5a4d6..f66bf01f0 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer URL: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git Repository Root: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git -Repsitory UUID: 177efa2636a7cee812707537ad90489a61832942 -Revision: 299 -Branch: 3.0-rc +Repsitory UUID: 3c1eb747d1930d6d38030a5a607f72d3b58a7a21 +Revision: 301 +Branch: virtualclass Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 1480 -Last Changed Date: 2017-08-17 09:06:21.000000002 +0200 ./Makefile +Last Changed Rev: 1549 +Last Changed Date: 2017-08-30 15:06:49.000000002 +0200 ./Makefile.virtual diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h index dec316953..9f01077eb 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "git@git.psi.ch:sls_detectors_software/sls_detector_software.git" //#define SVNREPPATH "" -#define SVNREPUUID "177efa2636a7cee812707537ad90489a61832942" -//#define SVNREV 0x1480 +#define SVNREPUUID "3c1eb747d1930d6d38030a5a607f72d3b58a7a21" +//#define SVNREV 0x1549 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x1480 -#define SVNDATE 0x20170817 +#define SVNREV 0x1549 +#define SVNDATE 0x20170830 // diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 515aa3a61..44e15b469 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -615,7 +615,7 @@ int getModule(sls_detector_module *myMod){ //copy to local copy as well if (detectorModules) - copyModule(myMod,detectorModules); + copyModule(detectorModules,myMod); else return FAIL; return OK; diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c new file mode 100644 index 000000000..4646182e7 --- /dev/null +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c @@ -0,0 +1,999 @@ +#ifdef SLS_DETECTOR_FUNCTION_LIST + + +#include +#include +#include //usleep +#include +#include + +#include "slsDetectorFunctionList.h" + + +int default_tau_from_file= -1; + +#define BEB_NUM 34 + +enum detectorSettings thisSettings; +const char* dac_names[16] = {"SvP","Vtr","Vrf","Vrs","SvN","Vtgstv","Vcmp_ll","Vcmp_lr","cal","Vcmp_rl","rxb_rb","rxb_lb","Vcmp_rr","Vcp","Vcn","Vis"}; + +enum{E_PARALLEL, E_NON_PARALLEL, E_SAFE}; + +sls_detector_module *detectorModules=NULL; +int *detectorChips=NULL; +int *detectorChans=NULL; +dacs_t *detectorDacs=NULL; +dacs_t *detectorAdcs=NULL; + +int eiger_highvoltage = 0; +int eiger_theo_highvoltage = 0; +int eiger_iodelay = 0; +int eiger_photonenergy = 0; +int eiger_dynamicrange = 0; +int eiger_readoutmode = 0; +int eiger_storeinmem = 0; +int eiger_readoutspeed = 0; +int eiger_triggermode = 0; +int eiger_extgating = 0; +int eiger_extgatingpolarity = 0; + + +int eiger_nexposures = 1; +int eiger_ncycles = 1; + +//values for virtual server +double eiger_virtual_exptime = 0; +int64_t eiger_virtual_subexptime = 0; +double eiger_virtual_period = 0; +int eiger_virtual_counter_bit=1; +int eiger_virtual_ratecorrection_variable=0; +int64_t eiger_virtual_ratetable_tau_in_ns=-1; +int64_t eiger_virtual_ratetable_period_in_ns=-1; +int eiger_virtual_transmission_delay_left=0; +int eiger_virtual_transmission_delay_right=0; +int eiger_virtual_transmission_delay_frame=0; +int eiger_virtual_transmission_flowcontrol_10g=0; +int eiger_virtual_status=0; +pthread_t eiger_virtual_tid; + +int send_to_ten_gig = 0; +int ndsts_in_use=32; +unsigned int nimages_per_request=1; +int on_dst=0; +int dst_requested[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + + +int default_gain_values[3] = {517000,517000,517000}; +int default_offset_values[3] = {3851000,3851000,3851000}; + + +enum masterFlags masterMode=IS_SLAVE; +int top = 0; +int master = 0; +int normal = 0; + + + + + +/* basic tests */ + +void checkFirmwareCompatibility(){ + cprintf(BLUE,"\n\n" + "********************************************************\n" + "***************** EIGER Virtual Server *****************\n" + "********************************************************\n"); +} + + + + + +/* Ids */ + +int64_t getDetectorId(enum idMode arg){ + return 0; +} + +u_int64_t getFirmwareVersion() { + return 0; +} + + + +u_int32_t getDetectorNumber(){ + return 0; +} + + +u_int64_t getDetectorMAC() { + return 0; +} + + +u_int32_t getDetectorIP(){ + return 0; +} + + + + + +/* initialization */ + +void initControlServer(){ + getModuleConfiguration(); + setupDetector(); + printf("\n"); +} + +void initStopServer(){ + getModuleConfiguration(); + printf("\n"); +} + + +void getModuleConfiguration(){ +#ifdef VIRTUAL_MASTER + master = 1; + top = 1; +#else + master = 0; + top = 1; +#endif +#ifdef VIRTUAL_9M + normal = 0; +#else + normal = 1; +#endif + if(top) printf("*************** TOP ***************\n"); + else printf("*************** BOTTOM ***************\n"); + if(master) printf("*************** MASTER ***************\n"); + else printf("*************** SLAVE ***************\n"); + if(normal) printf("*************** NORMAL ***************\n"); + else printf("*************** SPECIAL ***************\n"); +} + + + +/* set up detector */ + +void allocateDetectorStructureMemory(){ + printf("This Server is for 1 Eiger half module (250k)\n"); + + //Allocation of memory + detectorModules=malloc(sizeof(sls_detector_module)); + detectorChips=malloc(NCHIP*sizeof(int)); + detectorChans=malloc(NCHIP*NCHAN*sizeof(int)); + detectorDacs=malloc(NDAC*sizeof(dacs_t)); + detectorAdcs=malloc(NADC*sizeof(dacs_t)); +#ifdef VERBOSE + printf("modules from 0x%x to 0x%x\n",detectorModules, detectorModules+n); + printf("chips from 0x%x to 0x%x\n",detectorChips, detectorChips+n*NCHIP); + printf("chans from 0x%x to 0x%x\n",detectorChans, detectorChans+n*NCHIP*NCHAN); + printf("dacs from 0x%x to 0x%x\n",detectorDacs, detectorDacs+n*NDAC); + printf("adcs from 0x%x to 0x%x\n",detectorAdcs, detectorAdcs+n*NADC); +#endif + (detectorModules)->dacs=detectorDacs; + (detectorModules)->adcs=detectorAdcs; + (detectorModules)->chipregs=detectorChips; + (detectorModules)->chanregs=detectorChans; + (detectorModules)->ndac=NDAC; + (detectorModules)->nadc=NADC; + (detectorModules)->nchip=NCHIP; + (detectorModules)->nchan=NCHIP*NCHAN; + (detectorModules)->module=0; + (detectorModules)->gain=0; + (detectorModules)->offset=0; + (detectorModules)->reg=0; + thisSettings = UNINITIALIZED; + + // if trimval requested, should return -1 to acknowledge unknown + int ichan=0; + for (ichan=0; ichan<(detectorModules->nchan); ichan++) { + *((detectorModules->chanregs)+ichan) = -1; + } +} + + + +void setupDetector() { + + allocateDetectorStructureMemory(); + //set dacs + printf("Setting Default Dac values\n"); + { + int i = 0; + int retval[2]={-1,-1}; + const int defaultvals[NDAC] = DEFAULT_DAC_VALS; + for(i = 0; i < NDAC; ++i) { + setDAC((enum DACINDEX)i,defaultvals[i],0,0,retval); + if (retval[0] != defaultvals[i]) + cprintf(RED, "Warning: Setting dac %d failed, wrote %d, read %d\n",i ,defaultvals[i], retval[0]); + } + } + + //setting default measurement parameters + setTimer(FRAME_NUMBER, DEFAULT_NUM_FRAMES); + setTimer(ACQUISITION_TIME, DEFAULT_EXPTIME); + setTimer(SUBFRAME_ACQUISITION_TIME, DEFAULT_SUBFRAME_EXPOSURE_VAL); + setTimer(FRAME_PERIOD, DEFAULT_PERIOD); + setDynamicRange(DEFAULT_DYNAMIC_RANGE); + eiger_photonenergy = DEFAULT_PHOTON_ENERGY; + setReadOutFlags(DEFAULT_READOUT_FLAG); + setSpeed(CLOCK_DIVIDER, DEFAULT_CLK_SPEED);//clk_devider,half speed + setIODelay(DEFAULT_IO_DELAY, DEFAULT_MOD_INDEX); + setTiming(DEFAULT_TIMING_MODE); + //SetPhotonEnergyCalibrationParameters(-5.8381e-5,1.838515,5.09948e-7,-4.32390e-11,1.32527e-15); + setRateCorrection(DEFAULT_RATE_CORRECTION); + int enable[2] = {DEFAULT_EXT_GATING_ENABLE, DEFAULT_EXT_GATING_POLARITY}; + setExternalGating(enable);//disable external gating + setHighVoltage(DEFAULT_HIGH_VOLTAGE); +} + + + + +/* advanced read/write reg */ +uint32_t writeRegister(uint32_t offset, uint32_t data) { + return 0; +} + +uint32_t readRegister(uint32_t offset) { + return 0; +} + + +/* set parameters - nmod, dr, roi */ + +int setNMod(int nm, enum dimension dim){ + return NMOD; +} + + +int getNModBoard(enum dimension arg){ + return NMAXMOD; +} + +int setDynamicRange(int dr){ + if(dr > 0){ + printf(" Setting dynamic range: %d\n",dr); + eiger_dynamicrange = dr; + } + return eiger_dynamicrange; +} + + + + +/* parameters - readout */ + +int setSpeed(enum speedVariable arg, int val){ + + if (arg != CLOCK_DIVIDER) + return -1; + + if(val != -1){ + printf(" Setting Read out Speed: %d\n",val); + eiger_readoutspeed = val; + } + return eiger_readoutspeed; +} + + +enum readOutFlags setReadOutFlags(enum readOutFlags val){ + + enum readOutFlags retval = GET_READOUT_FLAGS; + if(val!=GET_READOUT_FLAGS){ + + + if(val&0xF0000){ + switch(val){ + case PARALLEL: val=E_PARALLEL; printf(" Setting Read out Flag: Parallel\n"); break; + case NONPARALLEL: val=E_NON_PARALLEL; printf(" Setting Read out Flag: Non Parallel\n"); break; + case SAFE: val=E_SAFE; printf(" Setting Read out Flag: Safe\n"); break; + + default: + cprintf(RED,"Cannot set unknown readout flag. 0x%x\n", val); + return -1; + } + printf(" Setting Read out Flag: %d\n",val); + eiger_readoutmode = val; + }else{ + switch(val){ + case STORE_IN_RAM: val=1; printf(" Setting Read out Flag: Store in Ram\n"); break; + case CONTINOUS_RO: val=0; printf(" Setting Read out Flag: Continuous Readout\n"); break; + + default: + cprintf(RED,"Cannot set unknown readout flag. 0x%x\n", val); + return -1; + } + printf(" Setting store in ram variable: %d\n",val); + eiger_storeinmem = val; + + } + } + + switch(eiger_readoutmode){ + case E_PARALLEL: retval=PARALLEL; break; + case E_NON_PARALLEL: retval=NONPARALLEL; break; + case E_SAFE: retval=SAFE; break; + } + + switch(eiger_storeinmem){ + case 0: retval|=CONTINOUS_RO; break; + case 1: retval|=STORE_IN_RAM; break; + } + printf("Read out Flag: 0x%x\n",retval); + return retval; +} + + + + + + + + +/* parameters - timer */ + +int64_t setTimer(enum timerIndex ind, int64_t val){ + + switch(ind){ + case FRAME_NUMBER: + if(val >= 0){ + printf(" Setting number of frames: %d * %d\n",(unsigned int)val,eiger_ncycles); + eiger_nexposures = val; + nimages_per_request = eiger_nexposures * eiger_ncycles; + }return eiger_nexposures; + + case ACQUISITION_TIME: + if(val >= 0){ + printf(" Setting exp time: %fs\n",val/(1E9)); + eiger_virtual_exptime = (val/(1E9)); + } + return eiger_virtual_exptime*1e9; + + case SUBFRAME_ACQUISITION_TIME: + if(val >= 0){ + printf(" Setting sub exp time: %lldns\n",(long long int)val/10); + eiger_virtual_subexptime = (val/(10)); + } + return eiger_virtual_subexptime*10; + + case FRAME_PERIOD: + if(val >= 0){ + printf(" Setting acq period: %fs\n",val/(1E9)); + eiger_virtual_period = (val/(1E9)); + } + return eiger_virtual_period*1e9; + + case CYCLES_NUMBER: + if(val >= 0){ + printf(" Setting number of triggers: %d * %d\n",(unsigned int)val,eiger_nexposures); + eiger_ncycles = (val/(1E9)); + nimages_per_request = eiger_nexposures * eiger_ncycles; + } + return eiger_ncycles; + default: + cprintf(RED,"Warning: Timer Index not implemented for this detector: %d\n", ind); + break; + } + + return -1; +} + + + + + +/* parameters - channel, chip, module, settings */ + + +int setModule(sls_detector_module myMod, int delay){ + int retval[2]; + int i; + + //#ifdef VERBOSE + printf("Setting module with settings %d\n",myMod.reg); + //#endif + + setSettings( (enum detectorSettings)myMod.reg,-1); + + if(setIODelay(delay, -1)!= delay){ + cprintf(RED,"could not set iodelay %d\n",delay); + return FAIL; + } + + //copy module locally + if (detectorModules) + copyModule(detectorModules,&myMod); + + //set dac values + for(i=0;i= 0) + eiger_photonenergy = ev; + return getThresholdEnergy(imod); +} + + + + + +/* parameters - dac, adc, hv */ + +void setDAC(enum DACINDEX ind, int val, int imod, int mV, int retval[]){ + + if(ind == VTHRESHOLD){ + int ret[5]; + setDAC(VCMP_LL,val,imod,mV,retval); + ret[0] = retval[mV]; + setDAC(VCMP_LR,val,imod,mV,retval); + ret[1] = retval[mV]; + setDAC(VCMP_RL,val,imod,mV,retval); + ret[2] = retval[mV]; + setDAC(VCMP_RR,val,imod,mV,retval); + ret[3] = retval[mV]; + setDAC(VCP,val,imod,mV,retval); + ret[4] = retval[mV]; + + + if((ret[0]== ret[1])&& + (ret[1]==ret[2])&& + (ret[2]==ret[3]) && + (ret[3]==ret[4])) + cprintf(GREEN,"vthreshold match\n"); + else{ + retval[0] = -1;retval[1] = -1; + cprintf(RED,"vthreshold mismatch 0:%d 1:%d 2:%d 3:%d\n", + ret[0],ret[1],ret[2],ret[3]); + } + return; + } + char iname[10]; + + if(((int)ind>=0)&&((int)ind= 0) + printf("Setting dac %d: %s to %d ",ind, iname,val); + else + printf("Getting dac %d: %s ",ind, iname); + if(mV) + printf("in mV\n"); + else + printf("in dac units\n"); +#endif + + if (mV){ + retval[0] = (int)(((val-0)/(2048-0))*(4096-1) + 0.5); + retval[1] = val; + }else + retval[0] = val; + + (detectorModules)->dacs[ind] = retval[0]; +} + + + +int getADC(enum ADCINDEX ind, int imod){ + return 0; +} + + +int setHighVoltage(int val){ + if (master) { + // set + if(val!=-1){ + eiger_theo_highvoltage = val; + } + return eiger_theo_highvoltage; + } + + return SLAVE_HIGH_VOLTAGE_READ_VAL; +} + + + + + + + +/* parameters - timing, extsig */ + +enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){ + enum externalCommunicationMode ret=GET_EXTERNAL_COMMUNICATION_MODE; + if(arg != GET_EXTERNAL_COMMUNICATION_MODE){ + switch((int)arg){ + case AUTO_TIMING: ret = 0; break; + case TRIGGER_EXPOSURE: ret = 2; break; + case BURST_TRIGGER: ret = 1; break; + case GATE_FIX_NUMBER: ret = 3; break; + } + printf(" Setting Triggering Mode: %d\n",(int)ret); + eiger_triggermode = ret; + } + + ret = eiger_triggermode; + switch((int)ret){ + case 0: ret = AUTO_TIMING; break; + case 2: ret = TRIGGER_EXPOSURE; break; + case 1: ret = BURST_TRIGGER; break; + case 3: ret = GATE_FIX_NUMBER; break; + default: + printf("Unknown trigger mode found %d\n",ret); + ret = 0; + } + return ret; +} + + + + + + +/* configure mac */ + +int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport, uint32_t udpport2, int ival) { + return 0; +} + + + + + + + +/* eiger specific - iodelay, 10g, pulse, rate, temp, activate, delay nw parameter */ + +int setIODelay(int val, int imod){ + if(val!=-1){ + printf(" Setting IO Delay: %d\n",val); + eiger_iodelay = val; + } + return eiger_iodelay; +} + + +int enableTenGigabitEthernet(int val){ + if(val!=-1){ + if(val>0) + send_to_ten_gig = 1; + else + send_to_ten_gig = 0; + //configuremac called from client + } +#ifdef VERBOSE + printf("10Gbe:%d\n",send_to_ten_gig); +#endif + return send_to_ten_gig; +} + + +int setCounterBit(int val){ + if(val!=-1){ + eiger_virtual_counter_bit = val; +#ifdef VERBOSE + printf("Counter Bit:%d\n",val); +#endif + } + return eiger_virtual_counter_bit; +} + + +int pulsePixel(int n, int x, int y){ + return OK; +} + +int pulsePixelNMove(int n, int x, int y){ + return OK; +} + +int pulseChip(int n){ + return OK; +} + +int64_t setRateCorrection(int64_t custom_tau_in_nsec){//in nanosec (will never be -1) + //deactivating rate correction + if(custom_tau_in_nsec==0){ + eiger_virtual_ratecorrection_variable = 0; + return 0; + } + + //when dynamic range changes, use old tau + else if(custom_tau_in_nsec == -1) + custom_tau_in_nsec = eiger_virtual_ratetable_tau_in_ns; + + //get period = subexptime if 32bit , else period = exptime if 16 bit + int64_t actual_period = eiger_virtual_subexptime*10; //already in nsec + if(eiger_dynamicrange == 16) + actual_period = eiger_virtual_exptime; + + int64_t ratetable_period_in_nsec = eiger_virtual_ratetable_period_in_ns; + int64_t tau_in_nsec = eiger_virtual_ratetable_tau_in_ns; + + + + //same setting + if((tau_in_nsec == custom_tau_in_nsec) && (ratetable_period_in_nsec == actual_period)){ + if(eiger_dynamicrange == 32) + printf("Rate Table already created before: Same Tau %lldns, Same subexptime %lldns\n", + (long long int)tau_in_nsec,(long long int)ratetable_period_in_nsec); + else + printf("Rate Table already created before: Same Tau %lldns, Same exptime %lldns\n", + (long long int)tau_in_nsec,(long long int)ratetable_period_in_nsec); + } + //different setting, calculate table + else{ + eiger_virtual_ratetable_tau_in_ns = custom_tau_in_nsec; + double period_in_sec = (double)(eiger_virtual_subexptime*10)/(double)1e9; + if(eiger_dynamicrange == 16) + period_in_sec = eiger_virtual_exptime; + eiger_virtual_ratetable_period_in_ns = period_in_sec*1e9; + } + //activating rate correction + eiger_virtual_ratecorrection_variable = 1; + printf("Rate Correction Value set to %lld ns\n",(long long int)eiger_virtual_ratetable_tau_in_ns); + + return eiger_virtual_ratetable_tau_in_ns; +} + +int getRateCorrectionEnable(){ + return eiger_virtual_ratecorrection_variable; +} + +int getDefaultSettingsTau_in_nsec(){ + return default_tau_from_file; +} + +void setDefaultSettingsTau_in_nsec(int t){ + default_tau_from_file = t; + printf("Default tau set to %d\n",default_tau_from_file); +} + +int64_t getCurrentTau(){ + if(!getRateCorrectionEnable()) + return 0; + else + return eiger_virtual_ratetable_tau_in_ns; +} + +void setExternalGating(int enable[]){ + if(enable>=0){ + eiger_extgating = enable[0]; + eiger_extgatingpolarity = enable[1]; + } + enable[0] = eiger_extgating; + enable[1] = eiger_extgatingpolarity; +} + +int setAllTrimbits(int val){ + int ichan; +#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; + } + } + + cprintf(GREEN, "All trimbits have been set to %d\n", val); + return OK; +} + +int getAllTrimbits(){ + int ichan=0; + int value = *((detectorModules->chanregs)); + if (detectorModules){ + for (ichan=0; ichan<(detectorModules->nchan); ichan++) { + if(*((detectorModules->chanregs)+ichan) != value) { + value= -1; + break; + } + + } + } + printf("Value of all Trimbits: %d\n", value); + return value; +} + +int getBebFPGATemp(){ + return 0; +} + +int activate(int enable){ + return enable; +} + +int setNetworkParameter(enum NETWORKINDEX mode, int value){ + if (value>-1) { + switch(mode){ + case TXN_LEFT: + eiger_virtual_transmission_delay_left = value; + break; + case TXN_RIGHT: + eiger_virtual_transmission_delay_right = value; + break; + case TXN_FRAME: + eiger_virtual_transmission_delay_frame = value; + break; + case FLOWCTRL_10G: + eiger_virtual_transmission_flowcontrol_10g = value; + if(value>0) value = 1; + break; + default: cprintf(BG_RED,"Unrecognized mode in network parameter: %d\n",mode); + return -1; + } + } + switch(mode){ + case TXN_LEFT: + return eiger_virtual_transmission_delay_left; + case TXN_RIGHT: + return eiger_virtual_transmission_delay_right; + case TXN_FRAME: + return eiger_virtual_transmission_delay_frame; + case FLOWCTRL_10G: + return eiger_virtual_transmission_flowcontrol_10g; + default: cprintf(BG_RED,"Unrecognized mode in network parameter: %d\n",mode); + return -1; + } +} + + + + + + + +/* aquisition */ + + +int prepareAcquisition(){ + return OK; +} + + +int startStateMachine(){ + + if(pthread_create(&eiger_virtual_tid, NULL, &start_timer, NULL)) { + cprintf(RED,"Could not start Virtual acquisition thread\n"); + return FAIL; + } + eiger_virtual_status = 1; + cprintf(GREEN,"***Virtual Acquisition started\n"); + return OK; +} + +void* start_timer(void* arg) { + double wait_in_s = nimages_per_request * eiger_virtual_period; + cprintf(GREEN,"going to wait for %f s\n", wait_in_s); + usleep(wait_in_s * 1000 * 1000); + cprintf(GREEN,"Virtual Timer Done***\n"); + + eiger_virtual_status = 0; + return NULL; +} + +int stopStateMachine(){ + cprintf(BG_RED,"Going to stop acquisition\n"); + return OK; +} + + +int startReadOut(){ + printf("Requesting images...\n"); + return OK; +} + + +enum runStatus getRunStatus(){ + if(eiger_virtual_status== 0){ + printf("Status: IDLE\n"); + return IDLE; + }else{ + printf("Status: RUNNING...\n"); + return RUNNING; + } + //}else printf("***** not master*** \n"); + + return IDLE; +} + + + +void readFrame(int *ret, char *mess){ + while(eiger_virtual_status) { + //cprintf(RED,"Waiting for finished flag\n"); + usleep(5000); + } + *ret = (int)FINISHED; + strcpy(mess,"acquisition successfully finished\n"); +} + + + + + + + + +/* common */ + + +int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod){ + + int ichip, idac, ichan, iadc; + int ret=OK; + +#ifdef VERBOSE + printf("Copying module %x to module %x\n",srcMod,destMod); +#endif + + if (srcMod->module>=0) { +#ifdef VERBOSE + printf("Copying module number %d to module number %d\n",srcMod->module,destMod->module); +#endif + destMod->module=srcMod->module; + } + if (srcMod->serialnumber>=0){ + + destMod->serialnumber=srcMod->serialnumber; + } + //no trimbit feature + if (destMod->nchip && ((srcMod->nchip)>(destMod->nchip))) { + printf("Number of chip of source is larger than number of chips of destination\n"); + return FAIL; + } + //no trimbit feature + if (destMod->nchan && ((srcMod->nchan)>(destMod->nchan))) { + printf("Number of channels of source is larger than number of channels of destination\n"); + return FAIL; + } + if ((srcMod->ndac)>(destMod->ndac)) { + printf("Number of dacs of source is larger than number of dacs of destination\n"); + return FAIL; + } + if ((srcMod->nadc)>(destMod->nadc)) { + printf("Number of dacs of source is larger than number of dacs of destination\n"); + return FAIL; + } + +#ifdef VERBOSE + printf("DACs: src %d, dest %d\n",srcMod->ndac,destMod->ndac); + printf("ADCs: src %d, dest %d\n",srcMod->nadc,destMod->nadc); + printf("Chips: src %d, dest %d\n",srcMod->nchip,destMod->nchip); + printf("Chans: src %d, dest %d\n",srcMod->nchan,destMod->nchan); + +#endif + destMod->ndac=srcMod->ndac; + destMod->nadc=srcMod->nadc; + destMod->nchip=srcMod->nchip; + destMod->nchan=srcMod->nchan; + if (srcMod->reg>=0) + destMod->reg=srcMod->reg; +#ifdef VERBOSE + printf("Copying register %x (%x)\n",destMod->reg,srcMod->reg ); +#endif + if (srcMod->gain>=0) + destMod->gain=srcMod->gain; + if (srcMod->offset>=0) + destMod->offset=srcMod->offset; + + if((destMod->nchip!=0) || (destMod->nchan!=0)) { + for (ichip=0; ichip<(srcMod->nchip); ichip++) { + if (*((srcMod->chipregs)+ichip)>=0) + *((destMod->chipregs)+ichip)=*((srcMod->chipregs)+ichip); + } + for (ichan=0; ichan<(srcMod->nchan); ichan++) { + if (*((srcMod->chanregs)+ichan)>=0) + *((destMod->chanregs)+ichan)=*((srcMod->chanregs)+ichan); + } + } +#ifdef VERBOSE + else printf("Not Copying trimbits\n"); +#endif + for (idac=0; idac<(srcMod->ndac); idac++) { + if (*((srcMod->dacs)+idac)>=0) + *((destMod->dacs)+idac)=*((srcMod->dacs)+idac); + } + for (iadc=0; iadc<(srcMod->nadc); iadc++) { + if (*((srcMod->adcs)+iadc)>=0) + *((destMod->adcs)+iadc)=*((srcMod->adcs)+iadc); + } + return ret; +} + + +int calculateDataBytes(){ + if(send_to_ten_gig) + return setDynamicRange(-1) * ONE_GIGA_CONSTANT * TEN_GIGA_BUFFER_SIZE; + else + return setDynamicRange(-1) * TEN_GIGA_CONSTANT * ONE_GIGA_BUFFER_SIZE; +} + + +int getTotalNumberOfChannels(){return ((int)getNumberOfChannelsPerModule() * (int)getTotalNumberOfModules());} +int getTotalNumberOfChips(){return ((int)getNumberOfChipsPerModule() * (int)getTotalNumberOfModules());} +int getTotalNumberOfModules(){return NMOD;} +int getNumberOfChannelsPerModule(){return ((int)getNumberOfChannelsPerChip() * (int)getTotalNumberOfChips());} +int getNumberOfChipsPerModule(){return NCHIP;} +int getNumberOfDACsPerModule(){return NDAC;} +int getNumberOfADCsPerModule(){return NADC;} +int getNumberOfChannelsPerChip(){return NCHAN;} +int getNumberOfGainsPerModule(){return NGAIN;} +int getNumberOfOffsetsPerModule(){return NOFFSET;} + + + + + + +/* sync */ + +enum masterFlags setMaster(enum masterFlags arg){ + return NO_MASTER; +} + + + +enum synchronizationMode setSynchronization(enum synchronizationMode arg){ + return NO_SYNCHRONIZATION; +} + + + + + + + +#endif diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h index 145af32fa..648dbb448 100644 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h @@ -202,6 +202,9 @@ int setNetworkParameter(enum NETWORKINDEX mode, int value); int prepareAcquisition(); #endif int startStateMachine(); +#ifdef VIRTUAL +void* start_timer(void* arg); +#endif int stopStateMachine(); #ifndef JUNGFRAUD int startReadOut(); diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 13ed95699..cd96a92b7 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -57,6 +57,7 @@ void init_detector(int controlserver) { #ifdef VIRTUAL printf("This is a VIRTUAL detector\n"); #endif + #ifdef SLS_DETECTOR_FUNCTION_LIST if (controlserver) initControlServer(); @@ -3412,9 +3413,17 @@ int configure_mac(int file_des) { uint32_t udpport2; uint32_t detipad; sscanf(arg[0], "%x", &ipad); +#ifdef VIRTUAL + sscanf(arg[1], "%lx", &imacadd); +#else sscanf(arg[1], "%llx", &imacadd); +#endif sscanf(arg[2], "%x", &udpport); +#ifdef VIRTUAL + sscanf(arg[3], "%lx", &idetectormacadd); +#else sscanf(arg[3], "%llx", &idetectormacadd); +#endif sscanf(arg[4], "%x", &detipad); sscanf(arg[5], "%x", &udpport2); @@ -4295,7 +4304,7 @@ int set_rate_correct(int file_des) { } #ifdef SLS_DETECTOR_FUNCTION_LIST else { - printf("Setting rate correction to %lld ns\n",tau_ns); + printf("Setting rate correction to %lld ns\n",(long long int)tau_ns); //set rate //wrong bit mode if((setDynamicRange(-1)!=32) && (setDynamicRange(-1)!=16) && (tau_ns!=0)){ From 91f3db6691f47cf5cbc92d6e3e18334566814fba Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 30 Aug 2017 15:38:43 +0200 Subject: [PATCH 2/2] separated virtual master and slave executables --- .../eigerDetectorServer/Makefile.virtual | 28 ++++++++---------- ...tual => eigerDetectorServer_virtualMaster} | Bin .../bin/eigerDetectorServer_virtualSlave | Bin 0 -> 85673 bytes 3 files changed, 13 insertions(+), 15 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerVirtual => eigerDetectorServer_virtualMaster} (100%) create mode 100755 slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_virtualSlave diff --git a/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual b/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual index 24f871d3d..ceff1fc75 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual +++ b/slsDetectorSoftware/eigerDetectorServer/Makefile.virtual @@ -1,30 +1,28 @@ CC = gcc CFLAGS += -Wall -DDACS_INT -DEIGERD -DSLS_DETECTOR_FUNCTION_LIST -DDACS_INT -DPCCOMPILE -DSTOP_SERVER #-DVERBOSE -CFLAGS += -DVIRTUAL -DVIRTUAL_9M -DVIRTUAL_MASTER - +CFLAGS += -DVIRTUAL -DVIRTUAL_9M +MASTERFLAG += -DVIRTUAL_MASTER LDLIBS += -lm -lstdc++ -pthread -PROGS = eigerDetectorServerVirtual DESTDIR ?= bin -INSTMODE = 0777 SRC_CLNT = communication_funcs.c slsDetectorServer.c slsDetectorServer_funcs.c slsDetectorFunctionList_virtual.c -OBJS = $(SRC_CLNT:.c=.o) -all: clean $(PROGS) + +all: clean master slave -boot: $(OBJS) - - -$(PROGS): $(OBJS) -# echo $(CFLAGS) -# echo $(OBJS) +master: $(SRC_CLNT) mkdir -p $(DESTDIR) - $(CC) -o $@ $(SRC_CLNT) $(CFLAGS) $(LDLIBS) - mv $(PROGS) $(DESTDIR) + $(CC) -o eigerDetectorServer_virtualMaster $(SRC_CLNT) $(CFLAGS) $(MASTERFLAG) $(LDLIBS) + mv eigerDetectorServer_virtualMaster $(DESTDIR) + +slave: $(SRC_CLNT) + mkdir -p $(DESTDIR) + $(CC) -o eigerDetectorServer_virtualSlave $(SRC_CLNT) $(CFLAGS) $(LDLIBS) + mv eigerDetectorServer_virtualSlave $(DESTDIR) clean: - rm -rf $(DESTDIR)/$(PROGS) *.o + rm -rf $(DESTDIR)/eigerDetectorServer_virtualMaster $(DESTDIR)/eigerDetectorServer_virtualSlave *.o \ No newline at end of file diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerVirtual b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_virtualMaster similarity index 100% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerVirtual rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_virtualMaster diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_virtualSlave b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_virtualSlave new file mode 100755 index 0000000000000000000000000000000000000000..b92f53b65548e1327a0c100839332937a370f0c2 GIT binary patch literal 85673 zcmeFadtg*W(l>k(7zqd@AP5M`pr8Sft0Ky(3CX|&ax)}cL<}LBkZ5jZW*{ixVn7)W ztZ}{Jb)N6QjtVSmjcMQWN?lu`K>uQPvC$(IhETl{h6yIYSw$oCGQh z{z-4vjb9`Cpk}2np zFDp8)thB;ib6(BVDd$Z&f1I;&+$1J{0yvSzW@hFwo>CwEk)pN-;2(`8m4EobnXm3D zu3SI=!F6E^52S*|02upqYNIE1WZxLzS$4vc{xq%DN26+((=lRe5b3R+LfQLU24(Q_2dQPKQ$gvC~ylc<#BpMwP3i+EGxHUx?o>2bGE(DxRP$uP#L{Q7Fz8U{j7J z9M#nomHB0rg$1tC$_k~Ru+UNEQVPo|oveN#XY8yjyvE^DoUZD^sufC!tFoeu{dOwO zs_N1TSFutBMwQiISPI&UF3NX03kxcWmC_1_E5E{3S*18jmsS*%DOGNllYSMJ6jVb% zNKv6U9c7L}ms0L1ccPIcr4>blQ%guw)0GgZyr2wHG7$<~irZP{aDXWUDrZ18k3JU) zm6aEiRw%{Q4u>)`J#BhQ{-kk}#$BM{7m~JP@gI3bj&&Dlo*Vj2nEbDshEYvQ!LaZX zga6V2$q!rc&wW~HPx82Vycngi%0^KRpbRQ4#R}G4DL^^Z;q(BFh02iz&TS?I6i=~X^57y=Lp0aGks>|1}M~S+8YD4}^(B;cDiOQzx^3h@KCrOvz zOUqRhyDp!6z5L16<@c7Efb(_v+LDj_#k%~yI{Fe_zJ9@~(&dxBoUH(9s3AjaYrX~L z`*it3b@VN|d>PYGajP!>bRB)0F8>T&zE77wT$g`Tmv7bOx9jpp=<=0QLUw+pF5g~v zB+fS*7Vi6yehu6Tld5Zq+Y`Ltos&i=!BGeBJAQZ)FiMwDO@CVuKcilwG))`*HN0Lgnt4{S5um%g5S#0S5um%fIoqymr$Ba->m8HL?G?}13fu#>onoQ5Hu=IzNCX@3Y{Vf=r_)VJU?W^pbL-xAEN3(O& znj7n%PEzd6yS6aUJPGTrZ#gO+tFI@Uva6Q0-A5?)^^LCBU<)&;di_tH-Sfp9B3yIH zHVCe`XTLNUTMShDCzAHHfdoqJ`n8+AE)ZkCsMR^LIDU948E0dR-D6n~qTqnNj7YUC zrz#hOGd9fw!?L`hm{ra z4I7_-t9bSxg6v-Al@;(6#4nyXVv6KiVJjw0mCj7Y4eEJS#c^`uA)QrQPPwbv%CZ2EoufZTwgr&0E2qn

=-QHH# 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 Of3wFCG$Zk>;QkNQ{f%@0 literal 0 HcmV?d00001