From a31b741f7bf7ec7ed25d660db085eb7a59400450 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Fri, 30 Jul 2021 10:08:33 +0200 Subject: [PATCH 1/4] added python --- .clang-tidy | 3 ++- python/src/detector.cpp | 33 ++++++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 6e94d11e4..be4381b08 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -18,7 +18,8 @@ Checks: '*, -google-readability-todo, -google-readability-braces-around-statements, -modernize-use-trailing-return-type, - -readability-isolate-declaration' + -readability-isolate-declaration, + -llvmlibc-*' HeaderFilterRegex: \.h AnalyzeTemporaryDtors: false diff --git a/python/src/detector.cpp b/python/src/detector.cpp index 9e558a235..e265814c7 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -354,9 +354,28 @@ void init_det(py::module &m) { py::arg(), py::arg() = Positions{}) .def("getDacList", (std::vector(Detector::*)() const) & Detector::getDacList) - .def("setDefaultDacs", - (void (Detector::*)(sls::Positions)) & Detector::setDefaultDacs, - py::arg() = Positions{}) + .def("getDefaultDac", + (Result(Detector::*)(defs::dacIndex, sls::Positions)) & + Detector::getDefaultDac, + py::arg(), py::arg() = Positions{}) + .def("setDefaultDac", + (void (Detector::*)(defs::dacIndex, int, sls::Positions)) & + Detector::setDefaultDac, + py::arg(), py::arg(), py::arg() = Positions{}) + .def("getDefaultDac", + (Result(Detector::*)(defs::dacIndex, defs::detectorSettings, + sls::Positions)) & + Detector::getDefaultDac, + py::arg(), py::arg(), py::arg() = Positions{}) + .def("setDefaultDac", + (void (Detector::*)(defs::dacIndex, int, defs::detectorSettings, + sls::Positions)) & + Detector::setDefaultDac, + py::arg(), py::arg(), py::arg(), py::arg() = Positions{}) + .def("resetToDefaultDacs", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::resetToDefaultDacs, + py::arg(), py::arg() = Positions{}) .def("getDAC", (Result(Detector::*)(defs::dacIndex, bool, sls::Positions) const) & @@ -923,6 +942,10 @@ void init_det(py::module &m) { sls::Positions)) & Detector::setDataStream, py::arg(), py::arg(), py::arg() = Positions{}) + .def("getChipVersion", + (Result(Detector::*)(sls::Positions) const) & + Detector::getChipVersion, + py::arg() = Positions{}) .def("getThresholdTemperature", (Result(Detector::*)(sls::Positions) const) & Detector::getThresholdTemperature, @@ -947,10 +970,6 @@ void init_det(py::module &m) { (void (Detector::*)(sls::Positions)) & Detector::resetTemperatureEvent, py::arg() = Positions{}) - .def("getChipVersion", - (Result(Detector::*)(sls::Positions) const) & - Detector::getChipVersion, - py::arg() = Positions{}) .def("getAutoCompDisable", (Result(Detector::*)(sls::Positions) const) & Detector::getAutoCompDisable, From d64df393010b2cdb3f2e05bd329bb0fe47787474 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 30 Jul 2021 15:32:36 +0200 Subject: [PATCH 2/4] storagecells for jungfrauvchip1.1: cannot set addl, storagecelldealy and storagecell start is only from 0-3 --- python/slsdet/detector.py | 6 ++-- .../slsDetectorFunctionList.c | 35 +++++++++++++++---- .../slsDetectorServer_defs.h | 2 ++ .../include/slsDetectorFunctionList.h | 1 + .../src/slsDetectorServer_funcs.c | 28 +++++++++++---- slsDetectorSoftware/include/sls/Detector.h | 7 ++-- slsDetectorSoftware/src/CmdProxy.h | 8 ++--- 7 files changed, 63 insertions(+), 24 deletions(-) diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 3ed0ee5d4..82df910b0 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -2040,7 +2040,7 @@ class Detector(CppDetectorApi): [Jungfrau] Number of additional storage cells. Note ---- - For advanced users only. \n + Only for chip v1.0. For advanced users only. \n Options: 0 - 15. Default is 0. The #images = #frames x #triggers x (#storagecells + 1) """ @@ -2059,7 +2059,7 @@ class Detector(CppDetectorApi): Note ---- For advanced users only. - Options 0-15. Default is 15. \n + Options 0-max. max is 15 (default) for chipv1.0 and 3 (default) for chipv1.1. \n """ return self.getStorageCellStart() @@ -2073,7 +2073,7 @@ class Detector(CppDetectorApi): [Jungfrau] Additional time delay between 2 consecutive exposures in burst mode, accepts either a value in seconds or datetime.timedelta Note ----- - For advanced users only \n + Only applicable for chipv1.0. For advanced users only \n Value: 0-1638375 ns (resolution of 25ns) \n :getter: always returns in seconds. To get in datetime.delta, use getStorageCellDelay diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index f6d15482a..e66fa29e4 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -458,8 +458,13 @@ void setupDetector() { setPeriod(DEFAULT_PERIOD); setDelayAfterTrigger(DEFAULT_DELAY); setNumAdditionalStorageCells(DEFAULT_NUM_STRG_CLLS); - setStorageCellDelay(DEFAULT_STRG_CLL_DLY); - selectStoragecellStart(DEFAULT_STRG_CLL_STRT); + if (getChipVersion() == 11) { + selectStoragecellStart(DEFAULT_STRG_CLL_STRT_CHIP11); + } else { + selectStoragecellStart(DEFAULT_STRG_CLL_STRT); + // not applicable for chipv1.1 + setStorageCellDelay(DEFAULT_STRG_CLL_DLY); + } /*setClockDivider(RUN_CLK, HALF_SPEED); depends if all the previous stuff * works*/ setTiming(DEFAULT_TIMING_MODE); @@ -773,14 +778,30 @@ uint32_t getADCInvertRegister() { /* parameters - timer */ int selectStoragecellStart(int pos) { + int value = pos; + uint32_t addr = DAQ_REG; + uint32_t mask = DAQ_STRG_CELL_SLCT_MSK; + int offset = DAQ_STRG_CELL_SLCT_OFST; + if (getChipVersion() == 11) { + value = 1 << pos; + addr = CONFIG_V11_REG; + mask = CONFIG_V11_STRG_CLL_MSK; + offset = CONFIG_V11_STRG_CLL_OFST; + } if (pos >= 0) { LOG(logINFO, ("Setting storage cell start: %d\n", pos)); - bus_w(DAQ_REG, bus_r(DAQ_REG) & ~DAQ_STRG_CELL_SLCT_MSK); - bus_w(DAQ_REG, bus_r(DAQ_REG) | ((pos << DAQ_STRG_CELL_SLCT_OFST) & - DAQ_STRG_CELL_SLCT_MSK)); + bus_w(addr, bus_r(addr) & ~mask); + bus_w(addr, bus_r(addr) | ((value << offset) & mask)); + } + return ((bus_r(addr) & mask) >> offset); +} + +int getMaxStoragecellStart() { + if (getChipVersion() == 11) { + return MAX_STORAGE_CELL_CHIP11_VAL; + } else { + return MAX_STORAGE_CELL_VAL; } - return ((bus_r(DAQ_REG) & DAQ_STRG_CELL_SLCT_MSK) >> - DAQ_STRG_CELL_SLCT_OFST); } int setNextFrameNumber(uint64_t value) { diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h index 7e37bb5a4..0c74880ce 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -102,6 +102,7 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS }; #define DEFAULT_TMP_THRSHLD (65 * 1000) // milli degree Celsius #define DEFAULT_NUM_STRG_CLLS (0) #define DEFAULT_STRG_CLL_STRT (0xf) +#define DEFAULT_STRG_CLL_STRT_CHIP11 (0x3) #define DEFAULT_STRG_CLL_DLY (0) #define HIGHVOLTAGE_MIN (60) @@ -113,6 +114,7 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS }; #define MAX_TIMESLOT_VAL (0x1F) #define MAX_THRESHOLD_TEMP_VAL (127999) // millidegrees #define MAX_STORAGE_CELL_VAL (15) // 0xF +#define MAX_STORAGE_CELL_CHIP11_VAL (3) #define MAX_STORAGE_CELL_DLY_NS_VAL (ASIC_CTRL_EXPSRE_TMR_MAX_VAL) #define ACQ_TIME_MIN_CLOCK (2) diff --git a/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h index 6edd11497..e86f8907a 100644 --- a/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h +++ b/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h @@ -202,6 +202,7 @@ int getReadoutMode(); // parameters - timer #ifdef JUNGFRAUD int selectStoragecellStart(int pos); +int getMaxStoragecellStart(); #endif #if defined(JUNGFRAUD) || defined(EIGERD) int setNextFrameNumber(uint64_t value); diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 93cdff606..d9c6e4b8c 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -2036,10 +2036,14 @@ int set_num_additional_storage_cells(int file_des) { #else // only set if (Server_VerifyLock() == OK) { - if (arg > MAX_STORAGE_CELL_VAL) { + if (getChipVersion() == 11) { + ret = FAIL; + sprintf(mess, "Cannot set addl. number of storage cells for chip v1.1\n"); + LOG(logERROR, (mess)); + } else if (arg > getMaxStoragecellStart()) { ret = FAIL; sprintf(mess, "Max Storage cell number should not exceed %d\n", - MAX_STORAGE_CELL_VAL); + getMaxStoragecellStart()); LOG(logERROR, (mess)); } else { setNumAdditionalStorageCells(arg); @@ -2483,9 +2487,15 @@ int get_storage_cell_delay(int file_des) { functionNotImplemented(); #else // get only - retval = getStorageCellDelay(); - LOG(logDEBUG1, + if (getChipVersion() == 11) { + ret = FAIL; + strcpy(mess, "Storage cell delay is not applicable for chipv 1.1\n"); + LOG(logERROR, (mess)); + } else { + retval = getStorageCellDelay(); + LOG(logDEBUG1, ("retval storage cell delay %lld ns\n", (long long int)retval)); + } #endif return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); } @@ -2505,7 +2515,11 @@ int set_storage_cell_delay(int file_des) { #else // only set if (Server_VerifyLock() == OK) { - if (arg > MAX_STORAGE_CELL_DLY_NS_VAL) { + if (getChipVersion() == 11) { + ret = FAIL; + strcpy(mess, "Storage cell delay is not applicable for chipv 1.1\n"); + LOG(logERROR, (mess)); + } else if (arg > MAX_STORAGE_CELL_DLY_NS_VAL) { ret = FAIL; sprintf(mess, "Max Storage cell delay value should not exceed %lld ns\n", @@ -4007,9 +4021,9 @@ int storage_cell_start(int file_des) { #else // set & get if ((arg == GET_FLAG) || (Server_VerifyLock() == OK)) { - if (arg > MAX_STORAGE_CELL_VAL) { + if (arg > getMaxStoragecellStart()) { ret = FAIL; - strcpy(mess, "Max Storage cell number should not exceed 15\n"); + strcpy(mess, "Max Storage cell number should not exceed %d\n", getMaxStoragecellStart()); LOG(logERROR, (mess)); } else { retval = selectStoragecellStart(arg); diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 15d241578..024e41893 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1144,7 +1144,7 @@ class Detector { Result getNumberOfAdditionalStorageCells(Positions pos = {}) const; /** [Jungfrau] Advanced \n - * Options: 0 - 15. Default: 0. \n + * Only for chipv1.0. Options: 0 - 15. Default: 0. \n * The #images = #frames x #triggers x (#storagecells + 1) */ void setNumberOfAdditionalStorageCells(int value); @@ -1152,7 +1152,7 @@ class Detector { Result getStorageCellStart(Positions pos = {}) const; /** [Jungfrau] Advanced. Sets the storage cell storing the first acquisition - * of the series. Options: 0-15. Default: 15. + * of the series. Options: 0-max. max is 15 (default) for chipv1.0 and 3 (default) for chipv1.1. */ void setStorageCellStart(int cell, Positions pos = {}); @@ -1160,7 +1160,8 @@ class Detector { Result getStorageCellDelay(Positions pos = {}) const; /** [Jungfrau] Advanced \n Additional time delay between 2 consecutive - * exposures in burst mode. \n Options: (0-1638375 ns (resolution of 25ns) + * exposures in burst mode. \n Options: (0-1638375 ns (resolution of 25ns)\n + * Only applicable for chipv1.0. */ void setStorageCellDelay(ns value, Positions pos = {}); ///@{ diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 6575fcf24..87eb12bab 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -1848,21 +1848,21 @@ class CmdProxy { INTEGER_COMMAND_SET_NOID_GET_ID( storagecells, getNumberOfAdditionalStorageCells, setNumberOfAdditionalStorageCells, StringTo, - "[0-15]\n\t[Jungfrau] Number of additional storage cells. Default is " + "[0-15]\n\t[Jungfrau] Only for chipv1.0. Number of additional storage cells. Default is " "0. For advanced users only. \n\tThe #images = #frames x #triggers x " "(#storagecells + 1)."); INTEGER_COMMAND_VEC_ID( storagecell_start, getStorageCellStart, setStorageCellStart, StringTo, - "[0-15]\n\t[Jungfrau] Storage cell that stores the first acquisition " - "of the series. Default is 15. For advanced users only."); + "[0-max]\n\t[Jungfrau] Storage cell that stores the first acquisition " + "of the series. max is 15 (default) for chipv1.0 and 3 (default) for chipv1.1. For advanced users only."); TIME_COMMAND( storagecell_delay, getStorageCellDelay, setStorageCellDelay, "[duration (0-1638375 ns)] [(optional unit) ns|us|ms|s]\n\t[Jungfrau] " "Additional time delay between 2 consecutive exposures in burst mode " - "(resolution of 25ns). For advanced users only."); + "(resolution of 25ns). Only applicable for chipv1.0. For advanced users only."); /* Gotthard Specific */ TIME_GET_COMMAND(exptimel, getExptimeLeft, From c989be1e17587916ee71f3ad25601296f2074efc Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 30 Jul 2021 15:35:57 +0200 Subject: [PATCH 3/4] minor --- .../jungfrauDetectorServer/slsDetectorFunctionList.c | 2 +- .../slsDetectorServer/src/slsDetectorServer_funcs.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index e66fa29e4..5d830487c 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -457,10 +457,10 @@ void setupDetector() { setExpTime(DEFAULT_EXPTIME); setPeriod(DEFAULT_PERIOD); setDelayAfterTrigger(DEFAULT_DELAY); - setNumAdditionalStorageCells(DEFAULT_NUM_STRG_CLLS); if (getChipVersion() == 11) { selectStoragecellStart(DEFAULT_STRG_CLL_STRT_CHIP11); } else { + setNumAdditionalStorageCells(DEFAULT_NUM_STRG_CLLS); selectStoragecellStart(DEFAULT_STRG_CLL_STRT); // not applicable for chipv1.1 setStorageCellDelay(DEFAULT_STRG_CLL_DLY); diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index d9c6e4b8c..443ec30eb 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -4023,7 +4023,7 @@ int storage_cell_start(int file_des) { if ((arg == GET_FLAG) || (Server_VerifyLock() == OK)) { if (arg > getMaxStoragecellStart()) { ret = FAIL; - strcpy(mess, "Max Storage cell number should not exceed %d\n", getMaxStoragecellStart()); + sprintf(mess, "Max Storage cell number should not exceed %d\n", getMaxStoragecellStart()); LOG(logERROR, (mess)); } else { retval = selectStoragecellStart(arg); From 6f817419317fdce856719b017fda608b23cb432c Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 30 Jul 2021 15:51:23 +0200 Subject: [PATCH 4/4] fix for storagecell bitwise start --- .../slsDetectorFunctionList.c | 14 ++- .../tests/test-CmdProxy-jungfrau.cpp | 111 +++++++++++------- 2 files changed, 81 insertions(+), 44 deletions(-) diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index 5d830487c..bf2c6c031 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -783,6 +783,7 @@ int selectStoragecellStart(int pos) { uint32_t mask = DAQ_STRG_CELL_SLCT_MSK; int offset = DAQ_STRG_CELL_SLCT_OFST; if (getChipVersion() == 11) { + // set the bit value = 1 << pos; addr = CONFIG_V11_REG; mask = CONFIG_V11_STRG_CLL_MSK; @@ -793,7 +794,18 @@ int selectStoragecellStart(int pos) { bus_w(addr, bus_r(addr) & ~mask); bus_w(addr, bus_r(addr) | ((value << offset) & mask)); } - return ((bus_r(addr) & mask) >> offset); + int retval = ((bus_r(addr) & mask) >> offset); + if (getChipVersion() == 11) { + // get which bit + int max = getMaxStoragecellStart(); + for (int i = 0; i != max + 1; ++i) { + if (retval & (1 << i)) { + return i; + } + } + } + // chip v1.0 + return retval; } int getMaxStoragecellStart() { diff --git a/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp b/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp index 069410689..154a67d12 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp @@ -288,30 +288,38 @@ TEST_CASE("storagecells", "[.cmd]") { CmdProxy proxy(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::JUNGFRAU) { - auto prev_val = det.getNumberOfAdditionalStorageCells().tsquash( - "inconsistent #additional storage cells to test"); - { - std::ostringstream oss; - proxy.Call("storagecells", {"1"}, -1, PUT, oss); - REQUIRE(oss.str() == "storagecells 1\n"); + // chip version 1.0 + if (det.getChipVersion().squash()*10 == 10) { + auto prev_val = det.getNumberOfAdditionalStorageCells().tsquash( + "inconsistent #additional storage cells to test"); + { + std::ostringstream oss; + proxy.Call("storagecells", {"1"}, -1, PUT, oss); + REQUIRE(oss.str() == "storagecells 1\n"); + } + { + std::ostringstream oss; + proxy.Call("storagecells", {"15"}, -1, PUT, oss); + REQUIRE(oss.str() == "storagecells 15\n"); + } + { + std::ostringstream oss; + proxy.Call("storagecells", {"0"}, -1, PUT, oss); + REQUIRE(oss.str() == "storagecells 0\n"); + } + { + std::ostringstream oss; + proxy.Call("storagecells", {}, -1, GET, oss); + REQUIRE(oss.str() == "storagecells 0\n"); + } + REQUIRE_THROWS(proxy.Call("storagecells", {"16"}, -1, PUT)); + det.setNumberOfAdditionalStorageCells(prev_val); + } + // chip version 1.1 + else { + // cannot set number of addl. storage cells + REQUIRE_THROWS(proxy.Call("storagecells", {"1"}, -1, PUT)); } - { - std::ostringstream oss; - proxy.Call("storagecells", {"15"}, -1, PUT, oss); - REQUIRE(oss.str() == "storagecells 15\n"); - } - { - std::ostringstream oss; - proxy.Call("storagecells", {"0"}, -1, PUT, oss); - REQUIRE(oss.str() == "storagecells 0\n"); - } - { - std::ostringstream oss; - proxy.Call("storagecells", {}, -1, GET, oss); - REQUIRE(oss.str() == "storagecells 0\n"); - } - REQUIRE_THROWS(proxy.Call("storagecells", {"16"}, -1, PUT)); - det.setNumberOfAdditionalStorageCells(prev_val); } else { REQUIRE_THROWS(proxy.Call("storagecells", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("storagecells", {"0"}, -1, PUT)); @@ -329,10 +337,19 @@ TEST_CASE("storagecell_start", "[.cmd]") { proxy.Call("storagecell_start", {"1"}, -1, PUT, oss); REQUIRE(oss.str() == "storagecell_start 1\n"); } - { + // chip version 1.0 + if (det.getChipVersion().squash()*10 == 10) { std::ostringstream oss; proxy.Call("storagecell_start", {"15"}, -1, PUT, oss); REQUIRE(oss.str() == "storagecell_start 15\n"); + } + // chip version 1.1 + else { + // max is 3 + REQUIRE_THROWS(proxy.Call("storagecell_start", {"15"}, -1, PUT)); + std::ostringstream oss; + proxy.Call("storagecell_start", {"3"}, -1, PUT, oss); + REQUIRE(oss.str() == "storagecell_start 3\n"); } { std::ostringstream oss; @@ -359,25 +376,33 @@ TEST_CASE("storagecell_delay", "[.cmd]") { CmdProxy proxy(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::JUNGFRAU) { - auto prev_val = det.getStorageCellDelay(); - { - std::ostringstream oss; - proxy.Call("storagecell_delay", {"1.62ms"}, -1, PUT, oss); - REQUIRE(oss.str() == "storagecell_delay 1.62ms\n"); - } - { - std::ostringstream oss; - proxy.Call("storagecell_delay", {}, -1, GET, oss); - REQUIRE(oss.str() == "storagecell_delay 1.62ms\n"); - } - { - std::ostringstream oss; - proxy.Call("storagecell_delay", {"0"}, -1, PUT, oss); - REQUIRE(oss.str() == "storagecell_delay 0\n"); - } - REQUIRE_THROWS(proxy.Call("storagecell_delay", {"1638376ns"}, -1, PUT)); - for (int i = 0; i != det.size(); ++i) { - det.setStorageCellDelay(prev_val[i], {i}); + // chip version 1.0 + if (det.getChipVersion().squash()*10 == 10) { + auto prev_val = det.getStorageCellDelay(); + { + std::ostringstream oss; + proxy.Call("storagecell_delay", {"1.62ms"}, -1, PUT, oss); + REQUIRE(oss.str() == "storagecell_delay 1.62ms\n"); + } + { + std::ostringstream oss; + proxy.Call("storagecell_delay", {}, -1, GET, oss); + REQUIRE(oss.str() == "storagecell_delay 1.62ms\n"); + } + { + std::ostringstream oss; + proxy.Call("storagecell_delay", {"0"}, -1, PUT, oss); + REQUIRE(oss.str() == "storagecell_delay 0\n"); + } + REQUIRE_THROWS(proxy.Call("storagecell_delay", {"1638376ns"}, -1, PUT)); + for (int i = 0; i != det.size(); ++i) { + det.setStorageCellDelay(prev_val[i], {i}); + } + } + // chip version 1.1 + else { + // cannot set storage cell delay + REQUIRE_THROWS(proxy.Call("storagecell_delay", {"1.62ms"}, -1, PUT)); } } else { REQUIRE_THROWS(proxy.Call("storagecell_delay", {}, -1, GET));