From 96f7bc2685b79ea2b4ea57801edfc78703a4459d Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 30 Apr 2026 09:47:10 +0200 Subject: [PATCH] some more changes to exptime and validations --- .../slsDetectorFunctionList.c | 51 +++++++++++++++---- .../slsDetectorFunctionList.h | 4 +- .../src/slsDetectorServer_funcs.c | 23 ++++++++- 3 files changed, 64 insertions(+), 14 deletions(-) diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c index b9b1e8e73..30b5900a8 100644 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c @@ -633,10 +633,16 @@ void setupDetector() { DEFAULT_NUM_SAMPLES); // update databytes and allocate ram setNumTransceiverSamples(DEFAULT_NUM_SAMPLES); setNumFrames(DEFAULT_NUM_FRAMES); - setExpTime(DEFAULT_EXPTIME); + initError = setExpTime(DEFAULT_EXPTIME, initErrorMessage); + if (initError == FAIL) + return; setNumTriggers(DEFAULT_NUM_CYCLES); - setPeriod(DEFAULT_PERIOD); - setDelayAfterTrigger(DEFAULT_DELAY); + initError = setPeriod(DEFAULT_PERIOD, initErrorMessage); + if (initError == FAIL) + return; + initError = setDelayAfterTrigger(DEFAULT_DELAY, initErrorMessage); + if (initError == FAIL) + return; setTiming(DEFAULT_TIMING_MODE); setADCEnableMask(BIT32_MSK); setADCEnableMask_10G(BIT32_MSK); @@ -1135,17 +1141,29 @@ int setNumTransceiverSamples(int val) { int getNumTransceiverSamples() { return ntSamples; } -int setExpTime(int64_t val) { +int setExpTime(int64_t val, char *mess) { setPatternWaitInterval(0, val); - int64_t retval = getExpTime(); - if (retval != val) { + // validate for tolerance + int64_t retval = 0; + if (getExpTime(&retval, mess) == FAIL) { + return FAIL; + } + int ret = OK; + validate64_timer(&ret, mess, val, retval, clkFrequency[RUN_CLK], + "exposure time"); + return ret; +} + +int getExpTime(int64_t *retval, char *mess) { + *retval = getPatternWaitInterval(0); + if (*retval == -1) { + sprintf(mess, "Failed to get exposure time.\n"); + LOG(logERROR, (mess)); return FAIL; } return OK; } -int64_t getExpTime() { return getPatternWaitInterval(0); } - int setPeriod(int64_t val, char *mess) { if (val < 0) { sprintf(mess, "Invalid period: %lld ns\n", (long long int)val); @@ -2533,10 +2551,21 @@ void *start_timer(void *arg) { return NULL; } - int64_t periodNs = getPeriod(); + int64_t periodNs = 0; + int64_t expUs = 0; + { + char mess[MAX_STR_LENGTH] = {0}; + if (getPeriod(&periodNs, mess) == FAIL) { + LOG(logERROR, ("Failed to get period.\n")); + return NULL; + } + if (getExpTime(&expUs, mess) == FAIL) { + LOG(logERROR, ("Failed to get exposure time.\n")); + return NULL; + } + expUs /= 1000; + } int numFrames = (getNumFrames() * getNumTriggers()); - int64_t expUs = getExpTime() / 1000; - int imageSize = dataBytes; int dataSize = UDP_PACKET_DATA_BYTES; int packetSize = sizeof(sls_detector_header) + dataSize; diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h index 10fc4f155..1bacf0853 100644 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h @@ -98,8 +98,8 @@ void setNumFrames(int64_t val); int64_t getNumFrames(); void setNumTriggers(int64_t val); int64_t getNumTriggers(); -int setExpTime(int64_t val); -int64_t getExpTime(); +int setExpTime(int64_t val, char *mess); +int getExpTime(int64_t *retval, char *mess); int setPeriod(int64_t val, char *mess); int getPeriod(int64_t *retval, char *mess); int setNumAnalogSamples(int val); diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 5485640e8..aac9c1dd9 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -2402,7 +2402,11 @@ int get_exptime(int file_des) { "for this detector\n"); LOG(logERROR, (mess)); } else { +#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) + ret = getExpTime(&retval, mess); +#else retval = getExpTime(); +#endif LOG(logDEBUG1, ("retval exptime %lld ns\n", (long long int)retval)); } #endif @@ -2472,6 +2476,9 @@ int set_exptime(int file_des) { "for this detector\n"); LOG(logERROR, (mess)); } else { +#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) + ret = setExpTime(val, mess); +#else ret = setExpTime(val); int64_t retval = getExpTime(); LOG(logDEBUG1, ("retval exptime %lld ns\n", (long long int)retval)); @@ -2482,6 +2489,7 @@ int set_exptime(int file_des) { (long long int)val, (long long int)retval); LOG(logERROR, (mess)); } +#endif } #endif } @@ -2525,7 +2533,7 @@ int set_period(int file_des) { (long long int)arg, (long long int)retval); LOG(logERROR, (mess)); } -#endif +#endif } return Server_SendResult(file_des, INT64, NULL, 0); } @@ -7045,6 +7053,11 @@ int get_receiver_parameters(int file_des) { // exptime #ifdef MYTHEN3D i64 = 0; +#elif defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) + if (getExpTime(&i64, mess) == FAIL) { + sprintf(mess, "Could not get exposure time.\n"); + return sendError(file_des); + } #else i64 = getExpTime(); #endif @@ -7053,7 +7066,15 @@ int get_receiver_parameters(int file_des) { return printSocketReadError(); // period + i64 = 0; +#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) + if (getPeriod(&i64, mess) == FAIL) { + sprintf(mess, "Could not get period.\n"); + return sendError(file_des); + } +#else i64 = getPeriod(); +#endif n += sendData(file_des, &i64, sizeof(i64), INT64); if (n < 0) return printSocketReadError();