From bd77ea231b568ab7342e8cd67e0c7f4487a040b7 Mon Sep 17 00:00:00 2001 From: Martin Mueller Date: Fri, 24 Apr 2026 15:07:49 +0200 Subject: [PATCH] also added tolerance check for patwaittime --- .../slsDetectorServer/src/loadPattern.c | 18 +++++++++++++++++- .../src/slsDetectorServer_funcs.c | 16 ++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/slsDetectorServers/slsDetectorServer/src/loadPattern.c b/slsDetectorServers/slsDetectorServer/src/loadPattern.c index fcb47a109..9b5eb25c9 100644 --- a/slsDetectorServers/slsDetectorServer/src/loadPattern.c +++ b/slsDetectorServers/slsDetectorServer/src/loadPattern.c @@ -342,7 +342,23 @@ int validate_setPatternWaitClocksAndInterval(char *message, int level, char mode[128]; memset(mode, 0, sizeof(mode)); sprintf(mode, "set pattern Loop %d wait time", level); - validate64(&ret, message, waittime, retval, mode, DEC); + + if (clocks) { + validate64(&ret, message, waittime, retval, mode, DEC); + } else { +#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) + int runclk = 0; + runclk = clkFrequency[RUN_CLK]; + + int64_t toleranceNs = 3 * (1000000000 / runclk); + int64_t diff = (int64_t)waittime - (int64_t)retval; + if (diff < -toleranceNs || diff > toleranceNs) { + validate64(&ret, message, waittime, retval, mode, DEC); + } +#else + validate64(&ret, message, waittime, retval, mode, DEC); +#endif + } return ret; } diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index b67c6f37c..b3b8cbed7 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -10902,8 +10902,20 @@ int set_pattern_wait_interval(int file_des) { uint64_t retval = 0; ret = validate_getPatternWaitClocksAndInterval(mess, loopLevel, &retval, 0); - validate64(&ret, mess, (int64_t)timeval, retval, - "set pattern wait interval", DEC); + if (ret == OK) { // is this not already validated ? why do this again here ? +#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) + int runclk = getFrequency(RUN_CLK); + int64_t toleranceNs = 3 * (1000000000 / runclk); + int64_t diff = (int64_t)timeval - (int64_t)retval; + if (diff < -toleranceNs || diff > toleranceNs) { + validate64(&ret, mess, (int64_t)timeval, retval, + "set pattern wait interval", DEC); + } +#else + validate64(&ret, mess, (int64_t)timeval, retval, + "set pattern wait interval", DEC); +#endif + } } }