From 41288302f434e2da0d894461d9d06e915b404bfa Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 4 Aug 2017 14:01:17 +0200 Subject: [PATCH] fixed resolution for exptime, period and delay in server --- .../gotthardDetectorServer/firmware_funcs.c | 31 +++++++++++++++--- .../gotthardDetectorServerv3.0.0.3 | Bin 131592 -> 0 bytes .../gotthardDetectorServerv3.0.0.4 | Bin 0 -> 132072 bytes 3 files changed, 27 insertions(+), 4 deletions(-) delete mode 100755 slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.0.0.3 create mode 100755 slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.0.0.4 diff --git a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c index b472f4843..08ba5e901 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c @@ -17,6 +17,7 @@ #include + //for memory mapping u_int64_t CSP0BASE; @@ -1054,8 +1055,16 @@ int64_t getFrames(){ int64_t setExposureTime(int64_t value){ /* time is in ns */ - if (value!=-1) - value*=(1E-9*CLK_FREQ); + if (value!=-1) { + double actualvalue = value*(1E-9*CLK_FREQ); + value*=(1E-9*CLK_FREQ); + if(fabs(actualvalue-value)>= 0.5){ + if(actualvalue > value) + value++; + else + value--; + } + } return set64BitReg(value,SET_EXPTIME_LSB_REG, SET_EXPTIME_MSB_REG)/(1E-9*CLK_FREQ); } @@ -1074,7 +1083,14 @@ int64_t getGates(){ int64_t setPeriod(int64_t value){ /* time is in ns */ if (value!=-1) { - value*=(1E-9*CLK_FREQ); + double actualvalue = value*(1E-9*CLK_FREQ); + value*=(1E-9*CLK_FREQ); + if(fabs(actualvalue-value)>= 0.5){ + if(actualvalue > value) + value++; + else + value--; + } } @@ -1093,7 +1109,14 @@ int64_t setDelay(int64_t value){ value += masterdefaultdelay; cprintf(BLUE,"Actual delay for master: %lld\n", (long long int) value); } - value*=(1E-9*CLK_FREQ); + double actualvalue = value*(1E-9*CLK_FREQ); + value*=(1E-9*CLK_FREQ); + if(fabs(actualvalue-value)>= 0.5){ + if(actualvalue > value) + value++; + else + value--; + } } int64_t retval = set64BitReg(value,SET_DELAY_LSB_REG, SET_DELAY_MSB_REG)/(1E-9*CLK_FREQ); if (masterflags == IS_MASTER) { diff --git a/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.0.0.3 b/slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.0.0.3 deleted file mode 100755 index 8872f4574ad0fb23ce2bb414740903caf6fed6dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131592 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