diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index dbb4ebad0..f14995fe7 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -42,6 +42,7 @@ unsigned int Feb_Control_subFrameMode; unsigned int Feb_Control_nimages; double Feb_Control_exposure_time_in_sec; int64_t Feb_Control_subframe_exposure_time_in_10nsec; +int64_t Feb_Control_subframe_period_in_10nsec; double Feb_Control_exposure_period_in_sec; int64_t Feb_Control_RateTable_Tau_in_nsec = -1; @@ -1380,6 +1381,14 @@ int Feb_Control_SetSubFrameExposureTime(int64_t the_subframe_exposure_time_in_10 } int64_t Feb_Control_GetSubFrameExposureTime(){return Feb_Control_subframe_exposure_time_in_10nsec*10;} +int Feb_Control_SetSubFramePeriod(int64_t the_subframe_period_in_10nsec){ + Feb_Control_subframe_period_in_10nsec = the_subframe_period_in_10nsec; + printf("Sub Frame Period set to: %lld\n",(long long int)Feb_Control_subframe_period_in_10nsec); + return 1; +} +int64_t Feb_Control_GetSubFramePeriod(){return Feb_Control_subframe_period_in_10nsec*10;} + + 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); @@ -1510,9 +1519,11 @@ int Feb_Control_PrepareForAcquisition(){//return 1; reg_vals[4]=(Feb_Control_acquireNReadoutMode|Feb_Control_triggerMode|Feb_Control_externalEnableMode|Feb_Control_subFrameMode); reg_nums[5]=DAQ_REG_SUBFRAME_EXPOSURES; reg_vals[5]= Feb_Control_subframe_exposure_time_in_10nsec; //(1 means 10ns, 100 means 1000ns) + reg_nums[6]=DAQ_REG_SUBFRAME_PERIOD; + reg_vals[6]= Feb_Control_subframe_period_in_10nsec; //(1 means 10ns, 100 means 1000ns) // if(!Feb_Interface_WriteRegisters((Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1])),20,reg_nums,reg_vals,0,0)){ if(Feb_Control_activated){ - if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),6,reg_nums,reg_vals,0,0)){ + if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),7,reg_nums,reg_vals,0,0)){ printf("Trouble starting acquisition....\n");; return 0; } diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.h b/slsDetectorSoftware/eigerDetectorServer/FebControl.h index 892d6b22c..02252cf62 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.h @@ -164,6 +164,8 @@ int Feb_Control_GetModuleNumber(); int64_t Feb_Control_GetExposureTime_in_nsec(); int Feb_Control_SetSubFrameExposureTime(int64_t the_subframe_exposure_time_in_10nsec); int64_t Feb_Control_GetSubFrameExposureTime(); + int Feb_Control_SetSubFramePeriod(int64_t the_subframe_period_in_10nsec); + int64_t Feb_Control_GetSubFramePeriod(); 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); diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index 87d4ae70a..5950a85f8 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -6,19 +6,28 @@ //daq register definitions -#define DAQ_REG_CTRL 1 -#define DAQ_REG_CHIP_CMDS 2 -#define DAQ_REG_STATIC_BITS 3 -#define DAQ_REG_CLK_ROW_CLK_NTIMES 3 -#define DAQ_REG_SHIFT_IN_32 3 -#define DAQ_REG_READOUT_NROWS 3 -#define DAQ_REG_SEND_N_TESTPULSES 3 +#define DAQ_REG_CTRL 1 +#define DAQ_REG_CHIP_CMDS 2 +#define DAQ_REG_STATIC_BITS 3 +#define DAQ_REG_CLK_ROW_CLK_NTIMES 3 +#define DAQ_REG_SHIFT_IN_32 3 +#define DAQ_REG_READOUT_NROWS 3 +#define DAQ_REG_SEND_N_TESTPULSES 3 + +#define DAQ_REG_NEXPOSURES 3 +#define DAQ_REG_EXPOSURE_TIMER 4 // == (31 downto 3) * 10^(2 downto 0) +#define DAQ_REG_EXPOSURE_REPEAT_TIMER 5 // == (31 downto 3) * 10^(2 downto 0) +#define DAQ_REG_SUBFRAME_EXPOSURES 6 +#define DAQ_REG_SUBFRAME_PERIOD 7 //also pg and fifo status register + + +#define DAQ_REG_RO_OFFSET 12 +#define DAQ_REG_STATUS (0 + DAQ_REG_RO_OFFSET) //also pg and fifo status register +//temp so far +#define FEB_REG_STATUS (3 + DAQ_REG_RO_OFFSET) + + -#define DAQ_REG_NEXPOSURES 3 -#define DAQ_REG_EXPOSURE_TIMER 4 // == (31 downto 3) * 10^(2 downto 0) -#define DAQ_REG_EXPOSURE_REPEAT_TIMER 5 // == (31 downto 3) * 10^(2 downto 0) -#define DAQ_REG_SUBFRAME_EXPOSURES 6 -#define DAQ_REG_STATUS 7 //also pg and fifo status register #define DAQ_CTRL_RESET 0x80000000 #define DAQ_CTRL_START 0x40000000 @@ -152,9 +161,6 @@ #define FRAME_NUM_RESET_OFFSET 0xA0 -//temp so far -#define FEB_REG_STATUS 0xa - //1g counters #define ONE_GIGA_LEFT_INDEX_LSB_COUNTER 0x04 #define ONE_GIGA_LEFT_INDEX_MSB_COUNTER 0x24 diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer index a524d96cb..e47c32260 100755 Binary files a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer and b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer differ diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt index d59f5e74d..ba9b56634 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: 5b01b4cbd808a3c43f1ec97032a1020c8f2ce37a -Revision: 331 +Repsitory UUID: 23d73ae5aee55e52d1d05452c633073ac1c6ad1a +Revision: 334 Branch: developer Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3807 -Last Changed Date: 2018-05-02 17:42:08.000000002 +0200 ./Beb.c +Last Changed Rev: 3817 +Last Changed Date: 2018-05-15 16:16:15.000000002 +0200 ./FebRegisterDefs.h diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h index 17e358a29..4362e67fc 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "5b01b4cbd808a3c43f1ec97032a1020c8f2ce37a" +#define GITREPUUID "23d73ae5aee55e52d1d05452c633073ac1c6ad1a" #define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3807 -#define GITDATE 0x20180502 +#define GITREV 0x3817 +#define GITDATE 0x20180515 #define GITBRANCH "developer" diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 83caa23c9..5475acbde 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -328,7 +328,8 @@ void setupDetector() { //setting default measurement parameters setTimer(FRAME_NUMBER, DEFAULT_NUM_FRAMES); setTimer(ACQUISITION_TIME, DEFAULT_EXPTIME); - setTimer(SUBFRAME_ACQUISITION_TIME, DEFAULT_SUBFRAME_EXPOSURE_VAL); + setTimer(SUBFRAME_ACQUISITION_TIME, DEFAULT_SUBFRAME_EXPOSURE); + setTimer(SUBFRAME_PERIOD, DEFAULT_SUBFRAME_PERIOD); setTimer(FRAME_PERIOD, DEFAULT_PERIOD); setDynamicRange(DEFAULT_DYNAMIC_RANGE); eiger_photonenergy = DEFAULT_PHOTON_ENERGY; @@ -498,6 +499,12 @@ int64_t setTimer(enum timerIndex ind, int64_t val){ } return (Feb_Control_GetSubFrameExposureTime()); + case SUBFRAME_PERIOD: + if(val >= 0){ + printf(" Setting sub period: %lldns\n",(long long int)val/10); + Feb_Control_SetSubFramePeriod(val/10); + } + return (Feb_Control_GetSubFramePeriod()); case FRAME_PERIOD: if(val >= 0){ diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c index 5b2d92451..4900f32d3 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList_virtual.c @@ -216,7 +216,8 @@ void setupDetector() { //setting default measurement parameters setTimer(FRAME_NUMBER, DEFAULT_NUM_FRAMES); setTimer(ACQUISITION_TIME, DEFAULT_EXPTIME); - setTimer(SUBFRAME_ACQUISITION_TIME, DEFAULT_SUBFRAME_EXPOSURE_VAL); + setTimer(SUBFRAME_ACQUISITION_TIME, DEFAULT_SUBFRAME_EXPOSURE); + setTimer(SUBFRAME_PERIOD, DEFAULT_SUBFRAME_PERIOD); setTimer(FRAME_PERIOD, DEFAULT_PERIOD); setDynamicRange(DEFAULT_DYNAMIC_RANGE); eiger_photonenergy = DEFAULT_PHOTON_ENERGY; diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h index e6afb173b..8493a6f50 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h @@ -73,7 +73,8 @@ enum NETWORKINDEX {TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G}; #define DEFAULT_DELAY (0) #define DEFAULT_HIGH_VOLTAGE (0) #define DEFAULT_SETTINGS (DYNAMICGAIN) -#define DEFAULT_SUBFRAME_EXPOSURE_VAL (2621440) // 2.6ms +#define DEFAULT_SUBFRAME_EXPOSURE (2621440) // 2.6ms +#define DEFAULT_SUBFRAME_PERIOD (0) #define DEFAULT_DYNAMIC_RANGE (16) #define DEFAULT_READOUT_FLAG (NONPARALLEL) #define DEFAULT_CLK_SPEED (HALF_SPEED) diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index 4ab729023..367d7428f 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -5662,7 +5662,7 @@ string slsDetectorCommand::cmdTimer(int narg, char *args[], int action) { else if (cmd=="period") index=FRAME_PERIOD; else if (cmd=="subperiod") - index=SUBFRAME_FRAME_PERIOD; + index=SUBFRAME_PERIOD; else if (cmd=="delay") index=DELAY_AFTER_TRIGGER; else if (cmd=="gates") @@ -5701,7 +5701,7 @@ string slsDetectorCommand::cmdTimer(int narg, char *args[], int action) { return string("cannot scan timer value ")+string(args[1]); if (index==ACQUISITION_TIME || index==SUBFRAME_ACQUISITION_TIME || index==FRAME_PERIOD || index==DELAY_AFTER_TRIGGER || - index == SUBFRAME_FRAME_PERIOD) { + index == SUBFRAME_PERIOD) { // t=(int64_t)(val*1E+9); for precision of eg.0.0000325, following done val*=1E9; t = (int64_t)val; @@ -5718,7 +5718,7 @@ string slsDetectorCommand::cmdTimer(int narg, char *args[], int action) { if ((ret!=-1) && (index==ACQUISITION_TIME || index==SUBFRAME_ACQUISITION_TIME || index==FRAME_PERIOD || index==DELAY_AFTER_TRIGGER || - index == SUBFRAME_FRAME_PERIOD)) { + index == SUBFRAME_PERIOD)) { rval=(double)ret*1E-9; sprintf(answer,"%0.9f",rval); } diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 65ef1dd16..b5e9e6177 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -2755,6 +2755,16 @@ int set_timer(int file_des) { strcpy(mess,"Sub Frame exposure time should not exceed 5.368 seconds\n"); break; } + retval = setTimer(ind,tns); + break; + case SUBFRAME_PERIOD: + if (tns > ((int64_t)MAX_SUBFRAME_EXPOSURE_VAL_IN_10NS*10) ){ + ret=FAIL; + strcpy(mess,"Sub Frame Period should not exceed 5.368 seconds\n"); + break; + } + retval = setTimer(ind,tns); + break; #endif #ifdef MYTHEN case PROBES_NUMBER: diff --git a/slsReceiverSoftware/include/sls_receiver_defs.h b/slsReceiverSoftware/include/sls_receiver_defs.h index 0a00aade3..5108fe304 100755 --- a/slsReceiverSoftware/include/sls_receiver_defs.h +++ b/slsReceiverSoftware/include/sls_receiver_defs.h @@ -112,7 +112,7 @@ public: SAMPLES_JCTB, SUBFRAME_ACQUISITION_TIME, /**< subframe exposure time */ STORAGE_CELL_NUMBER, /**