From a1e69bba371cf54de57a7da6c9d09050d0285984 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 16 Oct 2024 11:18:03 +0200 Subject: [PATCH 1/9] updating release notes (superficial), package release version (superficial), client and receiver version (too old) --- CMakeLists.txt | 2 +- RELEASE.txt | 55 +++++++++++++------------- slsSupportLib/include/sls/versionAPI.h | 4 +- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6124fd40f..ecef8ad77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # Copyright (C) 2021 Contributors to the SLS Detector Package cmake_minimum_required(VERSION 3.14) project(slsDetectorPackage) -set(PROJECT_VERSION 7.0.0) +set(PROJECT_VERSION 9.0.0) set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") diff --git a/RELEASE.txt b/RELEASE.txt index d1eab770b..b10c52cb0 100644 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -1,7 +1,7 @@ -SLS Detector Package Major Release 7.x.x released on xx.xx.2023 +SLS Detector Package Major Release x.x.x released on xx.xx.202x =============================================================== -This document describes the differences between v7.x.x and v7.0.2 +This document describes the differences between vx.x.x and vx.0.2 @@ -28,9 +28,6 @@ This document describes the differences between v7.x.x and v7.0.2 ===================================== -- moench being made compatible with jungfrau 2.0 boards (jungfrau structure, away from ctb) -- eiger febl and feb in versions -- fix ctb slow adcs @@ -38,22 +35,24 @@ This document describes the differences between v7.x.x and v7.0.2 ========================================== - Eiger 7.0.0 - Jungfrau 7.0.2 - Mythen3 7.0.0 - Gotthard2 7.0.0 - Gotthard 7.0.0 - Moench 7.0.0 - Ctb 7.0.0 - + Eiger 9.0.0 + Jungfrau 9.0.0 + Mythen3 9.0.0 + Gotthard2 9.0.0 + Gotthard 9.0.0 + Moench 9.0.0 + On-board Detector Server Upgrade -------------------------------- From v6.1.0 (without tftp): - Using command 'updatedetectorserver' - From 5.0.0 (with tftp): - Using command 'copydetectorserver' + update only on-board detector server + Using command 'updatedetectorserver' + + + udpate both on-board detector server and firmware simultaneously + Using command 'update' Instructions available at https://slsdetectorgroup.github.io/devdoc/serverupgrade.html @@ -65,22 +64,20 @@ This document describes the differences between v7.x.x and v7.0.2 ======================== - Eiger 20.02.2023 (v31) + Eiger 02.10.2023 (v32) (updated in 7.0.3) - Jungfrau 04.11.2022 (v1.4, HW v1.0) - 03.11.2022 (v2.4, HW v2.0) + Jungfrau 01.10.2024 (v1.6, HW v1.0) (updated in 9.0.0) + 01.10.2024 (v2.6, HW v2.0) (updated in 9.0.0) - Mythen3 24.01.2023 (v1.4) + Mythen3 11.10.2024 (v1.5) (updated in 9.0.0) - Gotthard2 23.11.2022 (v0.3) + Gotthard2 03.10.2024 (v1.0) (updated in 9.0.0) + + Moench 26.10.2023 (v1.0) (updated in 9.0.0) Gotthard 08.02.2018 (50um and 25um Master) 09.02.2018 (25 um Slave) - Moench 05.12.2022 (v0.3) - - Ctb 03.04.2023 (v1.2?) - Detector Upgrade ---------------- @@ -92,7 +89,6 @@ This document describes the differences between v7.x.x and v7.0.2 Mythen3 via command <.rbf> Gotthard2 via command <.rbf> Moench via command <.pof> - Ctb via command <.pof> Gotthard cannot be upgraded remotely @@ -100,7 +96,7 @@ This document describes the differences between v7.x.x and v7.0.2 upgrade Using command 'programfpga' or - udpate both server and firmware simultaneously + udpate both on-board detector server and firmware simultaneously Using command 'update' @@ -113,6 +109,7 @@ This document describes the differences between v7.x.x and v7.0.2 4 Kernel Requirements ====================== + Blackfin -------- Latest version: Fri Oct 29 00:00:00 2021 @@ -120,10 +117,12 @@ This document describes the differences between v7.x.x and v7.0.2 Older ones will work, but might have issues with programming firmware via the package. + Nios ----- Compatible version: Mon May 10 18:00:21 CEST 2021 + Kernel Upgrade --------------- Eiger via bit files @@ -212,4 +211,4 @@ This document describes the differences between v7.x.x and v7.0.2 ------- dhanya.thattil@psi.ch - erik.frojdh@psi.ch + erik.frojdh@psi.ch \ No newline at end of file diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 3ed903583..8213afc3c 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -2,8 +2,6 @@ // Copyright (C) 2021 Contributors to the SLS Detector Package /** API versions */ #define RELEASE "developer" -#define APILIB "developer 0x230224" -#define APIRECEIVER "developer 0x230224" #define APICTB "developer 0x240918" #define APIGOTTHARD "developer 0x240918" #define APIMOENCH "developer 0x240918" @@ -12,3 +10,5 @@ #define APIMYTHEN3 "developer 0x241001" #define APIJUNGFRAU "developer 0x241001" #define APIGOTTHARD2 "developer 0x241007" +#define APILIB "developer 0x241014" +#define APIRECEIVER "developer 0x241014" From 76ab0228ac5832b8fda8e86ae60dc34acbb70239 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 16 Oct 2024 11:30:04 +0200 Subject: [PATCH 2/9] formatting and moench fw release update --- RELEASE.txt | 2 +- slsSupportLib/include/sls/versionAPI.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/RELEASE.txt b/RELEASE.txt index b10c52cb0..2e507fc43 100644 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -73,7 +73,7 @@ This document describes the differences between vx.x.x and vx.0.2 Gotthard2 03.10.2024 (v1.0) (updated in 9.0.0) - Moench 26.10.2023 (v1.0) (updated in 9.0.0) + Moench 26.10.2023 (v2.0) (updated in 9.0.0) Gotthard 08.02.2018 (50um and 25um Master) 09.02.2018 (25 um Slave) diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 8213afc3c..d0ba5af7f 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -10,5 +10,5 @@ #define APIMYTHEN3 "developer 0x241001" #define APIJUNGFRAU "developer 0x241001" #define APIGOTTHARD2 "developer 0x241007" -#define APILIB "developer 0x241014" -#define APIRECEIVER "developer 0x241014" +#define APILIB "developer 0x241014" +#define APIRECEIVER "developer 0x241014" From 6add9aad5d56e0c6360f438a9f3a40163138d644 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 21 Oct 2024 16:25:07 +0200 Subject: [PATCH 3/9] Dev/proper free (#1005) * first draft of fixing the free function available within the class * removed class member function freeSharedmemory for both Detector and Module; made the free function freeSharedmemory accessible to python interface; setHostname if there is already a module in shm will recreate the Detector object while freeing shm completely and keeping detsize and intitialchecks (previous commit), sethostname called from DetectorClass in virtual command to have one point of entry (previous commit), testing Module class frees shared memory using free function * Detector class: added copy and move constructor and assignmentoperators due to explicit destructor (DetectorImpl fwd declared), DetectorImpl class: included ZmqSocket to remove destructor (should not be virtual in any case), Module class: removed explciit destructor to allow compiler generated constructor and operators * formatting * minor fix for readme autocomplete * updated client version date --- python/src/detector.cpp | 6 +- python/src/detector_in.cpp | 4 +- slsDetectorSoftware/generator/readme.md | 2 +- slsDetectorSoftware/include/sls/Detector.h | 12 ++-- slsDetectorSoftware/src/Detector.cpp | 35 ++++++++--- slsDetectorSoftware/src/DetectorImpl.cpp | 68 ++-------------------- slsDetectorSoftware/src/DetectorImpl.h | 22 +------ slsDetectorSoftware/src/Module.cpp | 8 --- slsDetectorSoftware/src/Module.h | 6 -- slsDetectorSoftware/tests/CMakeLists.txt | 1 + slsDetectorSoftware/tests/test-Module.cpp | 25 ++++++-- slsSupportLib/include/sls/versionAPI.h | 2 +- 12 files changed, 71 insertions(+), 120 deletions(-) diff --git a/python/src/detector.cpp b/python/src/detector.cpp index fb96c3579..5ca05412b 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -21,11 +21,13 @@ void init_det(py::module &m) { using sls::Positions; using sls::Result; + m.def("freeSharedMemory", + (void (*)(const int, const int)) & sls::freeSharedMemory, + py::arg() = 0, py::arg() = -1); + py::class_ CppDetectorApi(m, "CppDetectorApi"); CppDetectorApi.def(py::init()); - CppDetectorApi.def("freeSharedMemory", - (void (Detector::*)()) & Detector::freeSharedMemory); CppDetectorApi.def("loadConfig", (void (Detector::*)(const std::string &)) & Detector::loadConfig, diff --git a/python/src/detector_in.cpp b/python/src/detector_in.cpp index ce784ee0e..e19f3c103 100644 --- a/python/src/detector_in.cpp +++ b/python/src/detector_in.cpp @@ -18,8 +18,10 @@ void init_det(py::module &m) { using sls::Positions; using sls::Result; + m.def("freeSharedMemory", (void (*)(const int, const int)) &sls::freeSharedMemory, py::arg() = 0, py::arg() = -1); + py::class_ CppDetectorApi(m, "CppDetectorApi"); CppDetectorApi.def(py::init()); - + [[FUNCTIONS]] } diff --git a/slsDetectorSoftware/generator/readme.md b/slsDetectorSoftware/generator/readme.md index 106d50e2c..2f8db837b 100644 --- a/slsDetectorSoftware/generator/readme.md +++ b/slsDetectorSoftware/generator/readme.md @@ -28,7 +28,7 @@ The dump.json is the AST of the file `slsDetectorPackage/slsSupportLib/src/ToStr ```sh # to generate the dump.json file cd slsSupportLib/src -clang++ -Xclang -ast-dump=json -Xclang -ast-dump-filter -Xclang StringTo -c ToString.cpp -I ../include/ -std=gnu++11 > ../../slsDetectorSoftware/generator/autocomplete/dump.json +clang++ -Xclang -ast-dump=json -Xclang -ast-dump-filter -Xclang StringTo -c ToString.cpp -I ../include/ -std=gnu++11 > ../../slsDetectorSoftware/generator/autocomplete/dump.json # clang version used: 14.0.0-1ubuntu1.1 ``` diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index a17b23a53..04abc8dba 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -20,7 +20,7 @@ class IpAddr; // Free function to avoid dependence on class // and avoid the option to free another objects // shm by mistake -void freeSharedMemory(int detectorIndex, int moduleIndex = -1); +void freeSharedMemory(const int detectorIndex = 0, const int moduleIndex = -1); /** * \class Detector @@ -46,9 +46,13 @@ class Detector { Detector(int shm_id = 0); ~Detector(); - /** Free the shared memory of this detector and all modules - belonging to it */ - void freeSharedMemory(); + // Disable copy since SharedMemory object is unique in DetectorImpl + Detector(const Detector &other) = delete; + Detector &operator=(const Detector &other) = delete; + + // Move constructor and assignment operator + Detector(Detector &&other) noexcept; + Detector &operator=(Detector &&other) noexcept; /** Frees shared memory before loading configuration file. Set up once normally */ diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 00ddf5b47..a8e2ad2e2 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -23,7 +23,7 @@ namespace sls { -void freeSharedMemory(int detectorIndex, int moduleIndex) { +void freeSharedMemory(const int detectorIndex, const int moduleIndex) { // single module if (moduleIndex >= 0) { @@ -34,10 +34,10 @@ void freeSharedMemory(int detectorIndex, int moduleIndex) { return; } - // detector - multi module - get number of detectors from shm - SharedMemory detectorShm(detectorIndex, -1); int numDetectors = 0; + // detector - multi module - get number of detectors from shm + SharedMemory detectorShm(detectorIndex, -1); if (detectorShm.exists()) { detectorShm.openSharedMemory(false); numDetectors = detectorShm()->totalNumberOfModules; @@ -58,15 +58,19 @@ void freeSharedMemory(int detectorIndex, int moduleIndex) { using defs = slsDetectorDefs; Detector::Detector(int shm_id) : pimpl(make_unique(shm_id)) {} - Detector::~Detector() = default; +// Move constructor +Detector::Detector(Detector &&other) noexcept = default; + +// Move assignment operator +Detector &Detector::operator=(Detector &&other) noexcept = default; + // Configuration -void Detector::freeSharedMemory() { pimpl->freeSharedMemory(); } void Detector::loadConfig(const std::string &fname) { int shm_id = getShmId(); - freeSharedMemory(); + freeSharedMemory(shm_id); pimpl = make_unique(shm_id); LOG(logINFO) << "Loading configuration file: " << fname; loadParameters(fname); @@ -105,13 +109,30 @@ Result Detector::getHostname(Positions pos) const { } void Detector::setHostname(const std::vector &hostname) { + if (pimpl->hasModulesInSharedMemory()) { + LOG(logWARNING) << "There are already module(s) in shared memory." + "Freeing Shared memory now."; + auto numChannels = getDetectorSize(); + auto initialChecks = getInitialChecks(); + freeSharedMemory(getShmId()); + pimpl = make_unique(getShmId()); + setDetectorSize(numChannels); + setInitialChecks(initialChecks); + } pimpl->setHostname(hostname); } void Detector::setVirtualDetectorServers(int numServers, uint16_t startingPort) { validatePortRange(startingPort, numServers * 2); - pimpl->setVirtualDetectorServers(numServers, startingPort); + + std::vector hostnames; + for (int i = 0; i < numServers; ++i) { + // * 2 is for control and stop port + hostnames.push_back(std::string("localhost:") + + std::to_string(startingPort + i * 2)); + } + setHostname(hostnames); } int Detector::getShmId() const { return pimpl->getDetectorIndex(); } diff --git a/slsDetectorSoftware/src/DetectorImpl.cpp b/slsDetectorSoftware/src/DetectorImpl.cpp index c9e078034..e16e57f53 100644 --- a/slsDetectorSoftware/src/DetectorImpl.cpp +++ b/slsDetectorSoftware/src/DetectorImpl.cpp @@ -37,8 +37,6 @@ DetectorImpl::DetectorImpl(int detector_index, bool verify, bool update) setupDetector(verify, update); } -DetectorImpl::~DetectorImpl() = default; - void DetectorImpl::setupDetector(bool verify, bool update) { initSharedMemory(verify); initializeMembers(verify); @@ -59,51 +57,6 @@ void DetectorImpl::setAcquiringFlag(bool flag) { shm()->acquiringFlag = flag; } int DetectorImpl::getDetectorIndex() const { return detectorIndex; } -void DetectorImpl::freeSharedMemory(int detectorIndex, int detPos) { - // single - if (detPos >= 0) { - SharedMemory moduleShm(detectorIndex, detPos); - if (moduleShm.exists()) { - moduleShm.removeSharedMemory(); - } - return; - } - - // multi - get number of modules from shm - SharedMemory detectorShm(detectorIndex, -1); - int numModules = 0; - - if (detectorShm.exists()) { - detectorShm.openSharedMemory(false); - numModules = detectorShm()->totalNumberOfModules; - detectorShm.removeSharedMemory(); - } - - for (int i = 0; i < numModules; ++i) { - SharedMemory moduleShm(detectorIndex, i); - moduleShm.removeSharedMemory(); - } - - SharedMemory ctbShm(detectorIndex, -1, CtbConfig::shm_tag()); - if (ctbShm.exists()) - ctbShm.removeSharedMemory(); -} - -void DetectorImpl::freeSharedMemory() { - zmqSocket.clear(); - for (auto &module : modules) { - module->freeSharedMemory(); - } - modules.clear(); - - // clear detector shm - shm.removeSharedMemory(); - client_downstream = false; - - if (ctb_shm.exists()) - ctb_shm.removeSharedMemory(); -} - std::string DetectorImpl::getUserDetails() { if (modules.empty()) { return std::string("none"); @@ -242,24 +195,11 @@ std::string DetectorImpl::exec(const char *cmd) { return result; } -void DetectorImpl::setVirtualDetectorServers(const int numdet, - const uint16_t port) { - std::vector hostnames; - for (int i = 0; i < numdet; ++i) { - // * 2 is for control and stop port - hostnames.push_back(std::string("localhost:") + - std::to_string(port + i * 2)); - } - setHostname(hostnames); +bool DetectorImpl::hasModulesInSharedMemory() { + return (shm.exists() && shm()->totalNumberOfModules > 0); } void DetectorImpl::setHostname(const std::vector &name) { - // do not free always to allow the previous detsize/ initialchecks command - if (shm.exists() && shm()->totalNumberOfModules != 0) { - LOG(logWARNING) << "There are already module(s) in shared memory." - "Freeing Shared memory now."; - freeSharedMemory(); - } // could be called after freeing shm from API if (!shm.exists()) { setupDetector(); @@ -292,8 +232,8 @@ void DetectorImpl::addModule(const std::string &name) { // gotthard cannot have more than 2 modules (50um=1, 25um=2 if ((type == GOTTHARD || type == GOTTHARD2) && modules.size() > 2) { - freeSharedMemory(); - throw RuntimeError("Gotthard cannot have more than 2 modules"); + throw RuntimeError("Gotthard cannot have more than 2 modules. Please " + "free the shared memory and start again."); } auto pos = modules.size(); diff --git a/slsDetectorSoftware/src/DetectorImpl.h b/slsDetectorSoftware/src/DetectorImpl.h index a4484c243..c42d9767d 100644 --- a/slsDetectorSoftware/src/DetectorImpl.h +++ b/slsDetectorSoftware/src/DetectorImpl.h @@ -5,6 +5,7 @@ #include "CtbConfig.h" #include "SharedMemory.h" #include "sls/Result.h" +#include "sls/ZmqSocket.h" #include "sls/logger.h" #include "sls/sls_detector_defs.h" @@ -19,7 +20,6 @@ namespace sls { -class ZmqSocket; class detectorData; class Module; @@ -79,11 +79,6 @@ class DetectorImpl : public virtual slsDetectorDefs { explicit DetectorImpl(int detector_index = 0, bool verify = true, bool update = true); - /** - * Destructor - */ - virtual ~DetectorImpl(); - template struct NonDeduced { using type = CT; }; template Result Parallel(RT (Module::*somefunc)(CT...), @@ -198,14 +193,6 @@ class DetectorImpl : public virtual slsDetectorDefs { /** return detector index in shared memory */ int getDetectorIndex() const; - /** Free specific shared memory from the command line without creating - * object */ - static void freeSharedMemory(int detectorIndex, int detPos = -1); - - /** Free all modules from current multi Id shared memory and delete members - */ - void freeSharedMemory(); - /** Get user details of shared memory */ std::string getUserDetails(); @@ -215,12 +202,7 @@ class DetectorImpl : public virtual slsDetectorDefs { * default enabled */ void setInitialChecks(const bool value); - /** - * Connect to Virtual Detector Servers at local host - * @param numdet number of modules - * @param port starting port number - */ - void setVirtualDetectorServers(const int numdet, const uint16_t port); + bool hasModulesInSharedMemory(); /** Sets the hostname of all sls modules in shared memory and updates * local cache */ diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index 202209919..93a50789e 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -53,14 +53,6 @@ Module::Module(int det_id, int module_index, bool verify) initSharedMemory(type, det_id, verify); } -Module::~Module() = default; - -void Module::freeSharedMemory() { - if (shm.exists()) { - shm.removeSharedMemory(); - } -} - bool Module::isFixedPatternSharedMemoryCompatible() const { return (shm()->shmversion >= MODULE_SHMAPIVERSION); } diff --git a/slsDetectorSoftware/src/Module.h b/slsDetectorSoftware/src/Module.h index b9ccaf8bc..aa6f02f1a 100644 --- a/slsDetectorSoftware/src/Module.h +++ b/slsDetectorSoftware/src/Module.h @@ -75,12 +75,6 @@ class Module : public virtual slsDetectorDefs { verify is if shared memory version matches existing one */ explicit Module(int det_id = 0, int module_index = 0, bool verify = true); - virtual ~Module(); - - /** Frees shared memory and deletes shared memory structure - Safe to call only if detector shm also deleted or its numberOfModules is - updated */ - void freeSharedMemory(); bool isFixedPatternSharedMemoryCompatible() const; std::string getHostname() const; diff --git a/slsDetectorSoftware/tests/CMakeLists.txt b/slsDetectorSoftware/tests/CMakeLists.txt index a255c12b0..521deec4d 100755 --- a/slsDetectorSoftware/tests/CMakeLists.txt +++ b/slsDetectorSoftware/tests/CMakeLists.txt @@ -33,6 +33,7 @@ target_sources(tests PRIVATE target_include_directories(tests PUBLIC "$" + "$" PRIVATE ${SLS_INTERNAL_RAPIDJSON_DIR} ) \ No newline at end of file diff --git a/slsDetectorSoftware/tests/test-Module.cpp b/slsDetectorSoftware/tests/test-Module.cpp index 203ee30f3..5e9767c36 100644 --- a/slsDetectorSoftware/tests/test-Module.cpp +++ b/slsDetectorSoftware/tests/test-Module.cpp @@ -1,5 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package +#include "Detector.h" #include "Module.h" #include "SharedMemory.h" #include "catch.hpp" @@ -10,7 +11,9 @@ using dt = slsDetectorDefs::detectorType; TEST_CASE("Construction with a defined detector type") { Module m(dt::EIGER); REQUIRE(m.getDetectorType() == dt::EIGER); - m.freeSharedMemory(); // clean up + freeSharedMemory(0, 0); // clean up + SharedMemory moduleShm(0, 0); + REQUIRE(moduleShm.exists() == false); } TEST_CASE("Read back detector type from shm") { @@ -23,7 +26,9 @@ TEST_CASE("Read back detector type from shm") { // Now both objects point to the same shm so we can only // free one! - m2.freeSharedMemory(); + freeSharedMemory(0, 0); + SharedMemory moduleShm(0, 0); + REQUIRE(moduleShm.exists() == false); } TEST_CASE("Is shm fixed pattern shm compatible") { @@ -41,25 +46,33 @@ TEST_CASE("Is shm fixed pattern shm compatible") { // Should fail since version is set to 0 REQUIRE(m.isFixedPatternSharedMemoryCompatible() == false); - m.freeSharedMemory(); + freeSharedMemory(0, 0); + SharedMemory moduleShm(0, 0); + REQUIRE(moduleShm.exists() == false); } TEST_CASE("Get default control port") { Module m(dt::MYTHEN3); REQUIRE(m.getControlPort() == 1952); - m.freeSharedMemory(); + freeSharedMemory(0, 0); + SharedMemory moduleShm(0, 0); + REQUIRE(moduleShm.exists() == false); } TEST_CASE("Get default stop port") { Module m(dt::GOTTHARD2); REQUIRE(m.getStopPort() == 1953); - m.freeSharedMemory(); + freeSharedMemory(0, 0); + SharedMemory moduleShm(0, 0); + REQUIRE(moduleShm.exists() == false); } TEST_CASE("Get default receiver TCP port") { Module m(dt::MYTHEN3); REQUIRE(m.getReceiverPort() == 1954); - m.freeSharedMemory(); + freeSharedMemory(0, 0); + SharedMemory moduleShm(0, 0); + REQUIRE(moduleShm.exists() == false); } } // namespace sls diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index d0ba5af7f..3e79c970f 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -10,5 +10,5 @@ #define APIMYTHEN3 "developer 0x241001" #define APIJUNGFRAU "developer 0x241001" #define APIGOTTHARD2 "developer 0x241007" -#define APILIB "developer 0x241014" #define APIRECEIVER "developer 0x241014" +#define APILIB "developer 0x241021" From 0b9fd0664e5e805552c9e0bdac4fe5ecd4e0e966 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 21 Oct 2024 16:33:13 +0200 Subject: [PATCH 4/9] setting detsize after hostname should throw also for single module for consistency (#1000) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Erik Fröjdh --- slsDetectorSoftware/src/DetectorImpl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slsDetectorSoftware/src/DetectorImpl.cpp b/slsDetectorSoftware/src/DetectorImpl.cpp index e16e57f53..02ddcf7f5 100644 --- a/slsDetectorSoftware/src/DetectorImpl.cpp +++ b/slsDetectorSoftware/src/DetectorImpl.cpp @@ -330,7 +330,8 @@ slsDetectorDefs::xy DetectorImpl::getNumberOfChannels() const { } void DetectorImpl::setNumberOfChannels(const slsDetectorDefs::xy c) { - if (size() > 1) { + // detsize is set before hostname + if (size() >= 1) { throw RuntimeError( "Set the number of channels before setting hostname."); } From 6fcdba56a466f6d51515da9e9876c21ad3215b1f Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 21 Oct 2024 16:39:50 +0200 Subject: [PATCH 5/9] Dev/document autocomplete (#1004) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fixed the gendoc to reflect the new parser, updated documentation to include info about autocomplete in the command line part, error in createing docs * fixed list deprecated, fixed command help (to show properly on a html, fixed other help warnings * minor indents --------- Co-authored-by: Erik Fröjdh --- docs/src/commandline.rst | 12 +- docs/src/gendoc.cpp | 10 +- docs/src/slsreceiver.rst | 2 +- docs/src/udpheader.rst | 2 + slsDetectorSoftware/generator/Caller.in.h | 1 + slsDetectorSoftware/generator/commands.yaml | 18 +- .../generator/extended_commands.yaml | 52 +-- slsDetectorSoftware/generator/gen_commands.py | 1 - slsDetectorSoftware/src/Caller.cpp | 375 +++--------------- slsDetectorSoftware/src/Caller.h | 1 + slsDetectorSoftware/src/CallerSpecial.cpp | 37 +- zsh_autocomplete.sh | 1 + 12 files changed, 137 insertions(+), 375 deletions(-) create mode 120000 zsh_autocomplete.sh diff --git a/docs/src/commandline.rst b/docs/src/commandline.rst index d7433c4d0..4b54da9b9 100644 --- a/docs/src/commandline.rst +++ b/docs/src/commandline.rst @@ -8,7 +8,7 @@ Commands can be used either with sls_detector_get or sls_detector_put .. code-block:: - sls_detector_get vrf + sls_detector_get exptime Help -------- @@ -24,6 +24,16 @@ Help # get help for a particular command sls_detector_get -h fpath sls_detector_help fpath + + # list of deprecated commands + list deprecated + + # autocompletion + # bash_autocomplete.sh or zsh_autocomplete.sh must be sourced from the + # main package folder to enable auto completion of commands and arguments + # for the command line on that shell. + source bash_autocomplete.sh + Commands diff --git a/docs/src/gendoc.cpp b/docs/src/gendoc.cpp index 86dc3a6ad..2854f6d22 100644 --- a/docs/src/gendoc.cpp +++ b/docs/src/gendoc.cpp @@ -11,7 +11,7 @@ #include #include -#include "CmdProxy.h" +#include "Caller.h" #include "sls/Detector.h" #include "sls/sls_detector_defs.h" @@ -37,8 +37,8 @@ int main() { std::cout << "Generating command line documentation!\n"; - sls::CmdProxy proxy(nullptr); - auto commands = proxy.GetProxyCommands(); + sls::Caller caller(nullptr); + auto commands = caller.getAllCommands(); std::ofstream fs("commands.rst"); fs << ".. glossary::\n"; @@ -46,7 +46,7 @@ int main() { for (const auto &cmd : commands) { std::ostringstream os; std::cout << cmd << '\n'; - proxy.Call(cmd, {}, -1, slsDetectorDefs::HELP_ACTION, os); + caller.call(cmd, {}, -1, slsDetectorDefs::HELP_ACTION, os); auto tmp = os.str().erase(0, cmd.size()); auto usage = tmp.substr(0, tmp.find_first_of('\n')); @@ -57,7 +57,7 @@ int main() { std::ofstream fs2("deprecated.csv"); fs2 << "Old, New\n"; - auto cmds = proxy.GetDeprecatedCommands(); + auto cmds = caller.GetDeprecatedCommands(); for (auto it : cmds) { fs2 << it.first << ", " << it.second << '\n'; } diff --git a/docs/src/slsreceiver.rst b/docs/src/slsreceiver.rst index 0cccaf012..09f9f782f 100644 --- a/docs/src/slsreceiver.rst +++ b/docs/src/slsreceiver.rst @@ -213,7 +213,7 @@ ZMQ: Json Header Format | | [From detector udp header] | +--------------+----------------------------------------------+ | detType | Detector type enum | - | detSpec3 | See :ref:`Detector enum` | + | detSpec3 | See :ref:`Detector enum` | | | [From detector udp header] | +--------------+----------------------------------------------+ | version | Detector header version. At 2 | diff --git a/docs/src/udpheader.rst b/docs/src/udpheader.rst index 04f3a5a6a..720aff2a9 100644 --- a/docs/src/udpheader.rst +++ b/docs/src/udpheader.rst @@ -63,6 +63,8 @@ Description * **version**: current version of the detector header (0x2). +.. _detector enum: + Detector Enum -------------- diff --git a/slsDetectorSoftware/generator/Caller.in.h b/slsDetectorSoftware/generator/Caller.in.h index 79043d514..fafe99edd 100644 --- a/slsDetectorSoftware/generator/Caller.in.h +++ b/slsDetectorSoftware/generator/Caller.in.h @@ -55,6 +55,7 @@ class Caller { } std::vector getAllCommands(); + std::map GetDeprecatedCommands(); std::string list(int action); // THIS COMMENT TO BE REPLACED BY THE ACTUAL CODE (1) diff --git a/slsDetectorSoftware/generator/commands.yaml b/slsDetectorSoftware/generator/commands.yaml index 2fd5b3ed5..75fc3ef02 100644 --- a/slsDetectorSoftware/generator/commands.yaml +++ b/slsDetectorSoftware/generator/commands.yaml @@ -793,7 +793,7 @@ selinterface: input_types: [ bool ] udp_firstdst: - help: "\n[0 - 31 (or number of udp destinations)]\n\t[Jungfrau][Moench][Gotthard2]\n[0-63]\n\t[Mythen3]\n\n\t One can set which is the first destination that the detector will stream images out from in a round robin fashion. The entry must not have been empty. Default: 0" + help: "\n\t[0 - N]\n\twhere N is the max number of udp destinations - 1.\n\t[Jungfrau][Moench][Gotthard2] Max number of udp destinations is 32.\n\t[Mythen3] Max number of udp destination is 64.\n\t One can set which is the first destination that the detector will stream images out from in a round robin fashion. The entry must not have been empty. Default: 0" inherit_actions: INTEGER_COMMAND_VEC_ID actions: GET: @@ -1074,7 +1074,7 @@ interruptsubframe: input_types: [ bool ] activate: - help: "[0, 1] \n\t[Eiger] 1 is default. 0 deactivates readout and does not send data." + help: "[0, 1]\n\t[Eiger] 1 is default. 0 deactivates readout and does not send data." inherit_actions: INTEGER_COMMAND_VEC_ID actions: GET: @@ -1779,7 +1779,7 @@ udp_validate: clearroi: inherit_actions: EXECUTE_SET_COMMAND - help: "[Gotthard] Resets Region of interest in detector. All channels enabled. Default is all channels enabled." + help: "\n\t[Gotthard] Resets Region of interest in detector. All channels enabled. Default is all channels enabled." actions: PUT: function: clearROI @@ -2034,7 +2034,7 @@ framecounter: ################# GET_COMMAND_HEX ############################ serialnumber: inherit_actions: GET_COMMAND - help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]\nSerial number of detector." + help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]\n\tSerial number of detector." actions: GET: function: getSerialNumber @@ -3429,7 +3429,7 @@ udp_dstlist: output: [ ToString(args) ] txdelay: - help: "[n_delay]\n\t[Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for all modules in the detector using the step size provided.Sets up \n\t\t[Eiger] txdelay_left to (2 * mod_index * n_delay), \n\t\t[Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay) and \n\t\t[Eiger] txdelay_frame to (2 *num_modules * n_delay) \n\t\t[Jungfrau][Moench][Mythen3] txdelay_frame to (num_modules * n_delay) \nfor every module." + help: "[n_delay]\n\t[Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for all modules in the detector using the step size provided.Sets up \n\t[Eiger] txdelay_left to (2 * mod_index * n_delay), \n\t[Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay) and \n\t[Eiger] txdelay_frame to (2 *num_modules * n_delay)\n\t[Jungfrau][Moench][Mythen3] txdelay_frame to (num_modules * n_delay) for every module." actions: GET: argc: 0 @@ -3963,7 +3963,7 @@ patloop: output: [level,"' '" , "'['" , "ToStringHex(start, 4)" , '", "' , "ToStringHex(stop, 4)", "']'" ] patloop0: - help: "Deprecated command. Use patloop." + help: "\n\tDeprecated command. Use patloop." inherit_actions: patloop actions: GET: @@ -4010,7 +4010,7 @@ patnloop: output: [ level,"' '" , nloops ] patnloop0: - help: "Deprecated command. Use patnloop." + help: "\n\tDeprecated command. Use patnloop." inherit_actions: patnloop actions: GET: @@ -4056,7 +4056,7 @@ patwait: output: [level,"' '" , "ToStringHex(addr, 4)" ] patwait0: - help: "Deprecated command. Use patwait." + help: "\n\tDeprecated command. Use patwait." inherit_actions: patwait actions: GET: @@ -4102,7 +4102,7 @@ patwaittime: output: [level,"' '" , "waittime" ] patwaittime0: - help: "Deprecated command. Use patwaittime." + help: "\n\tDeprecated command. Use patwaittime." inherit_actions: patwaittime actions: GET: diff --git a/slsDetectorSoftware/generator/extended_commands.yaml b/slsDetectorSoftware/generator/extended_commands.yaml index d60e205d2..91e3b3a4a 100644 --- a/slsDetectorSoftware/generator/extended_commands.yaml +++ b/slsDetectorSoftware/generator/extended_commands.yaml @@ -67,8 +67,7 @@ activate: store_result_in_t: false command_name: activate function_alias: activate - help: "[0, 1] \n\t[Eiger] 1 is default. 0 deactivates readout and does not send\ - \ data." + help: "[0, 1]\n\t[Eiger] 1 is default. 0 deactivates readout and does not send data." infer_action: true template: true adcclk: @@ -1206,8 +1205,8 @@ clearroi: store_result_in_t: false command_name: clearroi function_alias: clearroi - help: '[Gotthard] Resets Region of interest in detector. All channels enabled. Default - is all channels enabled.' + help: "\n\t[Gotthard] Resets Region of interest in detector. All channels enabled.\ + \ Default is all channels enabled." infer_action: true template: true clientversion: @@ -6078,7 +6077,7 @@ patloop0: store_result_in_t: false command_name: patloop0 function_alias: patloop0 - help: Deprecated command. Use patloop. + help: "\n\tDeprecated command. Use patloop." infer_action: true patloop1: actions: @@ -6147,7 +6146,7 @@ patloop1: store_result_in_t: false command_name: patloop1 function_alias: patloop1 - help: Deprecated command. Use patloop. + help: "\n\tDeprecated command. Use patloop." infer_action: true patloop2: actions: @@ -6216,7 +6215,7 @@ patloop2: store_result_in_t: false command_name: patloop2 function_alias: patloop2 - help: Deprecated command. Use patloop. + help: "\n\tDeprecated command. Use patloop." infer_action: true patmask: actions: @@ -6377,7 +6376,7 @@ patnloop0: store_result_in_t: false command_name: patnloop0 function_alias: patnloop0 - help: Deprecated command. Use patnloop. + help: "\n\tDeprecated command. Use patnloop." infer_action: true patnloop1: actions: @@ -6435,7 +6434,7 @@ patnloop1: store_result_in_t: false command_name: patnloop1 function_alias: patnloop1 - help: Deprecated command. Use patnloop. + help: "\n\tDeprecated command. Use patnloop." infer_action: true patnloop2: actions: @@ -6493,7 +6492,7 @@ patnloop2: store_result_in_t: false command_name: patnloop2 function_alias: patnloop2 - help: Deprecated command. Use patnloop. + help: "\n\tDeprecated command. Use patnloop." infer_action: true patsetbit: actions: @@ -6700,7 +6699,7 @@ patwait0: store_result_in_t: false command_name: patwait0 function_alias: patwait0 - help: Deprecated command. Use patwait. + help: "\n\tDeprecated command. Use patwait." infer_action: true patwait1: actions: @@ -6758,7 +6757,7 @@ patwait1: store_result_in_t: false command_name: patwait1 function_alias: patwait1 - help: Deprecated command. Use patwait. + help: "\n\tDeprecated command. Use patwait." infer_action: true patwait2: actions: @@ -6816,7 +6815,7 @@ patwait2: store_result_in_t: false command_name: patwait2 function_alias: patwait2 - help: Deprecated command. Use patwait. + help: "\n\tDeprecated command. Use patwait." infer_action: true patwaittime: actions: @@ -6937,7 +6936,7 @@ patwaittime0: store_result_in_t: false command_name: patwaittime0 function_alias: patwaittime0 - help: Deprecated command. Use patwaittime. + help: "\n\tDeprecated command. Use patwaittime." infer_action: true patwaittime1: actions: @@ -6995,7 +6994,7 @@ patwaittime1: store_result_in_t: false command_name: patwaittime1 function_alias: patwaittime1 - help: Deprecated command. Use patwaittime. + help: "\n\tDeprecated command. Use patwaittime." infer_action: true patwaittime2: actions: @@ -7053,7 +7052,7 @@ patwaittime2: store_result_in_t: false command_name: patwaittime2 function_alias: patwaittime2 - help: Deprecated command. Use patwaittime. + help: "\n\tDeprecated command. Use patwaittime." infer_action: true patword: actions: @@ -9754,7 +9753,7 @@ serialnumber: store_result_in_t: true command_name: serialnumber function_alias: serialnumber - help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]\nSerial number\ + help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]\n\tSerial number\ \ of detector." infer_action: true template: true @@ -11913,11 +11912,11 @@ txdelay: command_name: txdelay function_alias: txdelay help: "[n_delay]\n\t[Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for\ - \ all modules in the detector using the step size provided.Sets up \n\t\t[Eiger]\ - \ txdelay_left to (2 * mod_index * n_delay), \n\t\t[Eiger] txdelay_right to ((2\ - \ * mod_index + 1) * n_delay) and \n\t\t[Eiger] txdelay_frame to (2 *num_modules\ - \ * n_delay) \n\t\t[Jungfrau][Moench][Mythen3] txdelay_frame to (num_modules\ - \ * n_delay) \nfor every module." + \ all modules in the detector using the step size provided.Sets up \n\t[Eiger]\ + \ txdelay_left to (2 * mod_index * n_delay), \n\t[Eiger] txdelay_right to ((2\ + \ * mod_index + 1) * n_delay) and \n\t[Eiger] txdelay_frame to (2 *num_modules\ + \ * n_delay)\n\t[Jungfrau][Moench][Mythen3] txdelay_frame to (num_modules * n_delay)\ + \ for every module." infer_action: true txdelay_frame: actions: @@ -12417,10 +12416,11 @@ udp_firstdst: store_result_in_t: false command_name: udp_firstdst function_alias: udp_firstdst - help: "\n[0 - 31 (or number of udp destinations)]\n\t[Jungfrau][Moench][Gotthard2]\n\ - [0-63]\n\t[Mythen3]\n\n\t One can set which is the first destination that the\ - \ detector will stream images out from in a round robin fashion. The entry must\ - \ not have been empty. Default: 0" + help: "\n\t[0 - N]\n\twhere N is the max number of udp destinations - 1.\n\t[Jungfrau][Moench][Gotthard2]\ + \ Max number of udp destinations is 32.\n\t[Mythen3] Max number of udp destination\ + \ is 64.\n\t One can set which is the first destination that the detector will\ + \ stream images out from in a round robin fashion. The entry must not have been\ + \ empty. Default: 0" infer_action: true template: true udp_numdst: diff --git a/slsDetectorSoftware/generator/gen_commands.py b/slsDetectorSoftware/generator/gen_commands.py index 764f087a4..cc1aedf09 100644 --- a/slsDetectorSoftware/generator/gen_commands.py +++ b/slsDetectorSoftware/generator/gen_commands.py @@ -60,7 +60,6 @@ def generate( if command["help"].startswith('code:'): codegen.write_line(command["help"].strip('code:')) else: - codegen.write_line(f'os << "Command: {command_name}" << std::endl;') codegen.write_line(f'os << R"V0G0N({command["help"]} )V0G0N" << std::endl;') codegen.write_line('return os.str();') diff --git a/slsDetectorSoftware/src/Caller.cpp b/slsDetectorSoftware/src/Caller.cpp index a7913d2a2..d1ea4d30f 100644 --- a/slsDetectorSoftware/src/Caller.cpp +++ b/slsDetectorSoftware/src/Caller.cpp @@ -10,8 +10,7 @@ std::string Caller::activate(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: activate" << std::endl; - os << R"V0G0N([0, 1] + os << R"V0G0N([0, 1] [Eiger] 1 is default. 0 deactivates readout and does not send data. )V0G0N" << std::endl; return os.str(); @@ -73,7 +72,6 @@ std::string Caller::adcclk(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcclk" << std::endl; os << R"V0G0N([n_clk in MHz] [Ctb] ADC clock frequency in MHz. )V0G0N" << std::endl; @@ -136,7 +134,6 @@ std::string Caller::adcenable(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcenable" << std::endl; os << R"V0G0N([bitmask] [Ctb] ADC Enable Mask for 1Gb Enable for each 32 ADC channel. )V0G0N" << std::endl; @@ -199,7 +196,6 @@ std::string Caller::adcenable10g(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcenable10g" << std::endl; os << R"V0G0N([bitmask] [Ctb] ADC Enable Mask for 10Gb mode for each 32 ADC channel. However, if any of a consecutive 4 bits are enabled, the complete 4 bits are enabled. )V0G0N" << std::endl; @@ -262,7 +258,6 @@ std::string Caller::adcindex(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcindex" << std::endl; os << R"V0G0N([name] [Ctb][Xilinx_Ctb] Get the adc index for the given name. )V0G0N" << std::endl; @@ -311,7 +306,6 @@ std::string Caller::adcinvert(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcinvert" << std::endl; os << R"V0G0N([bitmask] [Ctb][Jungfrau][Moench] ADC Inversion Mask. [Jungfrau][Moench] Inversions on top of the default mask. )V0G0N" @@ -375,7 +369,6 @@ std::string Caller::adclist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adclist" << std::endl; os << R"V0G0N([adcname1 adcname2 .. adcname32] [Ctb][Xilinx_Ctb] Set the list of adc names for this board. )V0G0N" << std::endl; @@ -452,7 +445,6 @@ std::string Caller::adcname(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcname" << std::endl; os << R"V0G0N([0-31][name] [Ctb][Xilinx_Ctb] Set the adc at the given position to the given name. )V0G0N" << std::endl; @@ -539,7 +531,6 @@ std::string Caller::adcphase(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcphase" << std::endl; os << R"V0G0N([n_value] [(optional)deg] [Jungfrau][Moench][Ctb][Gotthard] Phase shift of ADC clock. [Jungfrau][Moench] Absolute phase shift. If deg used, then shift in degrees. Changing Speed also resets adcphase to recommended defaults. @@ -671,7 +662,6 @@ std::string Caller::adcpipeline(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcpipeline" << std::endl; os << R"V0G0N([n_value] [Ctb][Moench] Pipeline for ADC clock. )V0G0N" << std::endl; @@ -734,7 +724,6 @@ std::string Caller::adcreg(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcreg" << std::endl; os << R"V0G0N([address] [value] [Jungfrau][Moench][Ctb][Gotthard] Writes to an adc register in hex. Advanced user Function! )V0G0N" << std::endl; @@ -786,7 +775,6 @@ std::string Caller::adcvpp(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: adcvpp" << std::endl; os << R"V0G0N([dac or mV value][(optional unit) mV] [Ctb] Vpp of ADC. 0 -> 1V ; 1 -> 1.14V ; 2 -> 1.33V ; 3 -> 1.6V ; 4 -> 2V. @@ -905,7 +893,6 @@ std::string Caller::apulse(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: apulse" << std::endl; os << R"V0G0N([0, 1] [Mythen3] Enables or disables analog pulsing. Default is disabled )V0G0N" << std::endl; @@ -968,7 +955,6 @@ std::string Caller::asamples(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: asamples" << std::endl; os << R"V0G0N([n_samples] [Ctb] Number of analog samples expected. )V0G0N" << std::endl; @@ -1031,7 +1017,6 @@ std::string Caller::autocompdisable(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: autocompdisable" << std::endl; os << R"V0G0N([0, 1] [Jungfrau] Auto comparator disable mode. By default, the on-chip gain switching is active during the entire exposure.This mode disables the on - chip gain switching comparator automatically after 93.75% (only for chipv1.0) of exposure time (only for longer than 100us). It is possible to set the duration for chipv1.1 using compdisabletime command. Default is 0 or this mode disabled(comparator enabled throughout). 1 enables mode. 0 disables mode. )V0G0N" @@ -1095,7 +1080,6 @@ std::string Caller::blockingtrigger(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: blockingtrigger" << std::endl; os << R"V0G0N( [Eiger][Jungfrau][Moench] Sends software trigger signal to detector and blocks till the frames are sent out for that trigger. )V0G0N" << std::endl; @@ -1141,7 +1125,6 @@ std::string Caller::burstperiod(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: burstperiod" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Gotthard2] Period between 2 bursts. Only in burst mode and auto timing mode. )V0G0N" << std::endl; @@ -1230,7 +1213,6 @@ std::string Caller::bursts(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: bursts" << std::endl; os << R"V0G0N([n_bursts] [Gotthard2] Number of bursts per aquire. Only in auto timing mode and burst mode. Use timing command to set timing mode and burstmode command to set burst mode. )V0G0N" << std::endl; @@ -1296,7 +1278,6 @@ std::string Caller::burstsl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: burstsl" << std::endl; os << R"V0G0N( [Gotthard2] Number of bursts left in acquisition. Only in burst auto mode. )V0G0N" << std::endl; @@ -1336,7 +1317,6 @@ std::string Caller::bustest(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: bustest" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb] Bus test, ie. Writes different values in a R/W register and confirms the writes to check bus. Advanced User function! )V0G0N" @@ -1377,7 +1357,6 @@ std::string Caller::cdsgain(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: cdsgain" << std::endl; os << R"V0G0N([0, 1] [Gotthard2] Enable or disable CDS gain. Default is disabled. )V0G0N" << std::endl; @@ -1440,7 +1419,6 @@ std::string Caller::chipversion(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: chipversion" << std::endl; os << R"V0G0N( [Jungfrau] Returns chip version. Can be 1.0 or 1.1 )V0G0N" << std::endl; @@ -1480,7 +1458,6 @@ std::string Caller::clearbit(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: clearbit" << std::endl; os << R"V0G0N([reg address in hex] [bit index] Clears bit in address. Use --validate to force validation. )V0G0N" @@ -1575,7 +1552,6 @@ std::string Caller::clearbusy(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: clearbusy" << std::endl; os << R"V0G0N( If acquisition aborted during acquire command, use this to clear acquiring flag in shared memory before starting next acquisition )V0G0N" << std::endl; @@ -1618,8 +1594,8 @@ std::string Caller::clearroi(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: clearroi" << std::endl; - os << R"V0G0N([Gotthard] Resets Region of interest in detector. All channels enabled. Default is all channels enabled. )V0G0N" + os << R"V0G0N( + [Gotthard] Resets Region of interest in detector. All channels enabled. Default is all channels enabled. )V0G0N" << std::endl; return os.str(); } @@ -1657,7 +1633,6 @@ std::string Caller::clientversion(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: clientversion" << std::endl; os << R"V0G0N( Client software version )V0G0N" << std::endl; @@ -1697,7 +1672,6 @@ std::string Caller::clkdiv(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: clkdiv" << std::endl; os << R"V0G0N([n_clock] [n_divider] [Gotthard2][Mythen3] Clock Divider of clock n_clock. Must be greater than 1.n [Gotthard2] Clock index range: 0-5 [Mythen3] Clock index range: 0 )V0G0N" @@ -1791,7 +1765,6 @@ std::string Caller::clkfreq(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: clkfreq" << std::endl; os << R"V0G0N([n_clock] [freq_in_Hz] [Gotthard2][Mythen3] Frequency of clock n_clock in Hz. Use clkdiv to set frequency. [Gotthard2] Clock index range: 0-5 @@ -1849,7 +1822,6 @@ std::string Caller::clkphase(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: clkphase" << std::endl; os << R"V0G0N([n_clock] [phase] [deg (optional)] [Gotthard2][Mythen3] Phase of clock n_clock. If deg, then phase shift in degrees, else absolute phase shift values.n [Gotthard2] Clock index range: 0-5 [Mythen3] Clock index range: 0 )V0G0N" @@ -2008,7 +1980,6 @@ std::string Caller::collectionmode(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: collectionmode" << std::endl; os << R"V0G0N([hole|electron] [Jungfrau] Sets collection mode to hole or electron. Default is hole. )V0G0N" << std::endl; @@ -2072,7 +2043,6 @@ std::string Caller::column(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: column" << std::endl; os << R"V0G0N([value] Set Detector column (udp header) to value. Gui uses it to rearrange for complete image )V0G0N" @@ -2136,7 +2106,6 @@ std::string Caller::compdisabletime(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: compdisabletime" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Jungfrau] Time before end of exposure when comparator is disabled. It is only possible for chipv1.1. )V0G0N" << std::endl; @@ -2227,7 +2196,6 @@ std::string Caller::confadc(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: confadc" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all] [adc index 0-31, -1 for all] [7 bit configuration value in hex] [Gotthard2] Sets configuration for specific chip and adc, but configures 1 chip (all adcs for that chip) at a time. )V0G0N" << std::endl; @@ -2317,7 +2285,6 @@ std::string Caller::config(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: config" << std::endl; os << R"V0G0N( Frees shared memory before loading configuration file. Set up once. )V0G0N" << std::endl; @@ -2360,7 +2327,6 @@ std::string Caller::configtransceiver(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: configtransceiver" << std::endl; os << R"V0G0N( [Xilinx Ctb] Waits for transceiver to be aligned. Chip had to be configured (powered on) before this. )V0G0N" << std::endl; @@ -2593,7 +2559,6 @@ std::string Caller::dacindex(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dacindex" << std::endl; os << R"V0G0N([name] [Ctb][Xilinx_Ctb] Get the dac index for the given name. )V0G0N" << std::endl; @@ -2644,7 +2609,6 @@ std::string Caller::daclist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: daclist" << std::endl; os << R"V0G0N([dacname1 dacname2 .. dacname18] [Ctb][Xilinx_Ctb] Set the list of dac names for this detector. [All] Gets the list of dac names for every dac for this detector. )V0G0N" @@ -2722,7 +2686,6 @@ std::string Caller::dacname(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dacname" << std::endl; os << R"V0G0N([0-17][name] [Ctb][Xilinx_Ctb] Set the dac at the given position to the given name. )V0G0N" << std::endl; @@ -2804,7 +2767,6 @@ std::string Caller::datastream(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: datastream" << std::endl; os << R"V0G0N([left|right] [0, 1] [Eiger] Enables or disables data streaming from left or/and right side of detector for 10 GbE mode. 1 (enabled) by default. )V0G0N" << std::endl; @@ -2881,7 +2843,6 @@ std::string Caller::dbitclk(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dbitclk" << std::endl; os << R"V0G0N([n_clk in MHz] [Ctb] Clock for latching the digital bits in MHz. )V0G0N" << std::endl; @@ -2944,7 +2905,6 @@ std::string Caller::dbitphase(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dbitphase" << std::endl; os << R"V0G0N([n_value] [(optional)deg] [Ctb][Jungfrau] Phase shift of clock to latch digital bits. Absolute phase shift. If deg used, then shift in degrees. [Ctb]Changing dbitclk also resets dbitphase and sets to previous values. )V0G0N" @@ -3074,7 +3034,6 @@ std::string Caller::dbitpipeline(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dbitpipeline" << std::endl; os << R"V0G0N([n_value] [Ctb][Gotthard2] Pipeline of the clock for latching digital bits. [Gotthard2] Options: 0-7 @@ -3139,7 +3098,6 @@ std::string Caller::defaultdac(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: defaultdac" << std::endl; os << R"V0G0N([dac name][value][(optional)setting] Sets the default for that dac to this value. [Jungfrau][Moench][Mythen3] When settings is provided, it sets the default value only for that setting )V0G0N" @@ -3267,7 +3225,6 @@ std::string Caller::defaultpattern(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: defaultpattern" << std::endl; os << R"V0G0N( [Mythen3] Loads and runs default pattern in pattern generator. It is to go back to initial settings. )V0G0N" << std::endl; @@ -3307,7 +3264,6 @@ std::string Caller::delay(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: delay" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb][Moench][Xilinx Ctb] Delay after trigger )V0G0N" << std::endl; @@ -3396,7 +3352,6 @@ std::string Caller::delayl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: delayl" << std::endl; os << R"V0G0N( [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb][Xilinx Ctb] Delay Left in Acquisition. [Gotthard2] only in continuous mode. )V0G0N" @@ -3445,7 +3400,6 @@ std::string Caller::detectorserverversion(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: detectorserverversion" << std::endl; os << R"V0G0N( On-board detector server software version )V0G0N" << std::endl; @@ -3485,7 +3439,6 @@ std::string Caller::detsize(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: detsize" << std::endl; os << R"V0G0N([nx] [ny] Detector size, ie. Number of channels in x and y dim. This is used to calculate module coordinates included in UDP data. By default, it adds module in y dimension for 2d detectors and in x dimension for 1d detectors packet header. )V0G0N" @@ -3544,7 +3497,6 @@ std::string Caller::diodelay(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: diodelay" << std::endl; os << R"V0G0N([0-775] [Ctb] Delay for diode. Delay is in ps and max of 775 ps. Resolution is 25 ps. )V0G0N" << std::endl; @@ -3596,7 +3548,6 @@ std::string Caller::dpulse(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dpulse" << std::endl; os << R"V0G0N([0, 1] [Mythen3] Enables or disables digital pulsing. Default is disabled )V0G0N" << std::endl; @@ -3659,7 +3610,6 @@ std::string Caller::dr(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dr" << std::endl; os << R"V0G0N([value] Dynamic Range or number of bits per pixel in detector. [Eiger] Options: 4, 8, 12, 16, 32. If set to 32, also sets clkdivider to 2, else to 0. @@ -3728,7 +3678,6 @@ std::string Caller::drlist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: drlist" << std::endl; os << R"V0G0N( Gets the list of dynamic ranges for this detector. )V0G0N" << std::endl; @@ -3768,7 +3717,6 @@ std::string Caller::dsamples(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: dsamples" << std::endl; os << R"V0G0N([n_value] [Ctb] Number of digital samples expected. )V0G0N" << std::endl; @@ -3831,7 +3779,6 @@ std::string Caller::exptime(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: exptime" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Eiger][Jungfrau][Moench][Gotthard][Gotthard2][Ctb][Xilinx Ctb] Exposure time [Mythen3] Exposure time of all gate signals in auto and trigger mode (internal gating). To specify gate index, use exptime1, exptime2, exptime3. )V0G0N" @@ -3938,7 +3885,6 @@ std::string Caller::exptime1(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: exptime1" << std::endl; os << R"V0G0N([n_value] [Mythen3] Exposure time of gate signal 1 in auto and trigger mode (internal gating). )V0G0N" << std::endl; @@ -4037,7 +3983,6 @@ std::string Caller::exptime2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: exptime2" << std::endl; os << R"V0G0N([n_value] [Mythen3] Exposure time of gate signal 2 in auto and trigger mode (internal gating). )V0G0N" << std::endl; @@ -4136,7 +4081,6 @@ std::string Caller::exptime3(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: exptime3" << std::endl; os << R"V0G0N([n_value] [Mythen3] Exposure time of gate signal 3 in auto and trigger mode (internal gating). )V0G0N" << std::endl; @@ -4235,7 +4179,6 @@ std::string Caller::exptimel(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: exptimel" << std::endl; os << R"V0G0N([(optional unit) ns|us|ms|s] [Gotthard] Exposure time left for current frame. )V0G0N" << std::endl; @@ -4283,7 +4226,6 @@ std::string Caller::extrastoragecells(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: extrastoragecells" << std::endl; os << R"V0G0N([0-15] [Jungfrau] Only for chipv1.0. Number of additional storage cells. Default is 0. For advanced users only. The #images = #frames x #triggers x (#extrastoragecells + 1). )V0G0N" @@ -4352,7 +4294,6 @@ std::string Caller::extsampling(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: extsampling" << std::endl; os << R"V0G0N([0, 1] [Ctb] Enable for external sampling signal for digital data to signal by extsampling src command. For advanced users only. )V0G0N" << std::endl; @@ -4415,7 +4356,6 @@ std::string Caller::extsamplingsrc(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: extsamplingsrc" << std::endl; os << R"V0G0N([0-63] [Ctb] Sampling source signal for digital data. For advanced users only. )V0G0N" << std::endl; @@ -4478,7 +4418,6 @@ std::string Caller::extsig(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: extsig" << std::endl; os << R"V0G0N([n_signal] [signal_type] [Gotthard][Mythen3] External signal mode for trigger timing mode. [Gotthard] [0] [trigger_in_rising_edge|trigger_in_falling_edge] @@ -4558,7 +4497,6 @@ std::string Caller::fformat(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: fformat" << std::endl; os << R"V0G0N([binary|hdf5] File format of data file. For HDF5, package must be compiled with HDF5 flags. Default is binary. )V0G0N" << std::endl; @@ -4622,7 +4560,6 @@ std::string Caller::filtercells(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: filtercells" << std::endl; os << R"V0G0N([0-12] [Jungfrau] Set Filter Cell. Only for chipv1.1. Advanced user Command )V0G0N" << std::endl; @@ -4685,7 +4622,6 @@ std::string Caller::filterresistor(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: filterresistor" << std::endl; os << R"V0G0N([value] [Gotthard2][Jungfrau] Set filter resistor. Increasing values for increasing resistance. [Gotthard2] Options: [0|1|2|3]. Default is 0. [Jungfrau] Options: [0|1]. Default is 1. )V0G0N" @@ -4749,7 +4685,6 @@ std::string Caller::findex(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: findex" << std::endl; os << R"V0G0N([n_value] File or Acquisition index. )V0G0N" << std::endl; @@ -4812,7 +4747,6 @@ std::string Caller::firmwaretest(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: firmwaretest" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb][Xilinx Ctb] Firmware test, ie. reads a read fixed pattern from a register. )V0G0N" << std::endl; @@ -4852,7 +4786,6 @@ std::string Caller::firmwareversion(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: firmwareversion" << std::endl; os << R"V0G0N( Firmware version of detector in format [0xYYMMDD] or an increasing 2 digit number for Eiger. )V0G0N" << std::endl; @@ -4904,7 +4837,6 @@ std::string Caller::fliprows(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: fliprows" << std::endl; os << R"V0G0N([0, 1] [Eiger] flips rows paramater sent to slsreceiver to stream as json parameter to flip rows in gui [Jungfrau][Moench] flips rows in the detector itself. For bottom module and number of interfaces must be set to 2. slsReceiver and slsDetectorGui does not handle. )V0G0N" @@ -4968,7 +4900,6 @@ std::string Caller::flowcontrol10g(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: flowcontrol10g" << std::endl; os << R"V0G0N([0, 1] [Eiger][Jungfrau][Moench] 10GbE Flow Control. )V0G0N" << std::endl; @@ -5031,7 +4962,6 @@ std::string Caller::fmaster(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: fmaster" << std::endl; os << R"V0G0N([0, 1] Enable or disable receiver master file. Default is 1. )V0G0N" << std::endl; @@ -5100,7 +5030,6 @@ std::string Caller::fname(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: fname" << std::endl; os << R"V0G0N([name] File name prefix for output data file. Default is run. File name: [file name prefix]_d[detector index]_f[sub file index]_[acquisition/file index].raw. )V0G0N" << std::endl; @@ -5157,7 +5086,6 @@ std::string Caller::foverwrite(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: foverwrite" << std::endl; os << R"V0G0N([0, 1] Enable or disable file overwriting. Default is 1. )V0G0N" << std::endl; @@ -5220,7 +5148,6 @@ std::string Caller::fpath(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: fpath" << std::endl; os << R"V0G0N([path] Directory where output data files are written in receiver. Default is '/'. If path does not exist and fwrite enabled, it will try to create it at start of acquisition. )V0G0N" @@ -5278,7 +5205,6 @@ std::string Caller::framecounter(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: framecounter" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Mythen3][Gotthard2][Ctb][Xilinx Ctb] Number of frames from start run control. [Gotthard2] only in continuous mode. )V0G0N" @@ -5319,7 +5245,6 @@ std::string Caller::frames(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: frames" << std::endl; os << R"V0G0N([n_frames] Number of frames per acquisition. In trigger mode, number of frames per trigger. Cannot be set in modular level. @@ -5388,7 +5313,6 @@ std::string Caller::framesl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: framesl" << std::endl; os << R"V0G0N( [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb][Xilinx Ctb] Number of frames left in acquisition. [Gotthard2] only in continuous auto mode. )V0G0N" @@ -5429,7 +5353,6 @@ std::string Caller::frametime(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: frametime" << std::endl; os << R"V0G0N([(optional unit) ns|us|ms|s] [Jungfrau][Moench][Mythen3][Gotthard2][Ctb][Xilinx Ctb] Timestamp at a frame start. [Gotthard2] not in burst and auto mode. )V0G0N" @@ -5478,7 +5401,6 @@ std::string Caller::fwrite(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: fwrite" << std::endl; os << R"V0G0N([0, 1] Enable or disable receiver file write. Default is 0. )V0G0N" << std::endl; @@ -5541,7 +5463,6 @@ std::string Caller::gainmode(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: gainmode" << std::endl; os << R"V0G0N([dynamic|forceswitchg1|forceswitchg2|fixg1|fixg2|fixg0] [Jungfrau] Gain mode. CAUTION: Do not use fixg0 without caution, you can damage the detector!!! )V0G0N" @@ -5606,7 +5527,6 @@ std::string Caller::gappixels(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: gappixels" << std::endl; os << R"V0G0N([0, 1] [Eiger][Jungfrau][Moench] Include Gap pixels in client data call back in Detecor api. Will not be in detector streaming, receiver file or streaming. Default is 0. )V0G0N" << std::endl; @@ -5675,7 +5595,6 @@ std::string Caller::gatedelay(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: gatedelay" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Mythen3] Gate Delay of all gate signals in auto and trigger mode (internal gating). )V0G0N" << std::endl; @@ -5770,7 +5689,6 @@ std::string Caller::gatedelay1(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: gatedelay1" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Mythen3] Gate Delay of gate signal 1 in auto and trigger mode (internal gating). )V0G0N" << std::endl; @@ -5869,7 +5787,6 @@ std::string Caller::gatedelay2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: gatedelay2" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Mythen3] Gate Delay of gate signal 2 in auto and trigger mode (internal gating). )V0G0N" << std::endl; @@ -5968,7 +5885,6 @@ std::string Caller::gatedelay3(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: gatedelay3" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Mythen3] Gate Delay of gate signal 3 in auto and trigger mode (internal gating). )V0G0N" << std::endl; @@ -6067,7 +5983,6 @@ std::string Caller::gates(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: gates" << std::endl; os << R"V0G0N([n_gates] [Mythen3] Number of external gates in gating or trigger_gating mode (external gating). )V0G0N" << std::endl; @@ -6130,7 +6045,6 @@ std::string Caller::getbit(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: getbit" << std::endl; os << R"V0G0N([reg address in hex] [bit index] Gets bit in address. )V0G0N" << std::endl; @@ -6185,7 +6099,6 @@ std::string Caller::hardwareversion(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: hardwareversion" << std::endl; os << R"V0G0N( Hardware version of detector. [Eiger] Hardware version of front FPGA on detector. )V0G0N" @@ -6226,7 +6139,6 @@ std::string Caller::highvoltage(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: highvoltage" << std::endl; os << R"V0G0N([n_value] High voltage to the sensor in Voltage. [Gotthard] [0|90|110|120|150|180|200] @@ -6292,7 +6204,6 @@ std::string Caller::im_a(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: im_a" << std::endl; os << R"V0G0N( [Ctb] Measured current of power supply a in mA. )V0G0N" << std::endl; @@ -6333,7 +6244,6 @@ std::string Caller::im_b(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: im_b" << std::endl; os << R"V0G0N( [Ctb] Measured current of power supply b in mA. )V0G0N" << std::endl; @@ -6374,7 +6284,6 @@ std::string Caller::im_c(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: im_c" << std::endl; os << R"V0G0N( [Ctb] Measured current of power supply c in mA. )V0G0N" << std::endl; @@ -6415,7 +6324,6 @@ std::string Caller::im_d(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: im_d" << std::endl; os << R"V0G0N( [Ctb] Measured current of power supply d in mA. )V0G0N" << std::endl; @@ -6456,7 +6364,6 @@ std::string Caller::im_io(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: im_io" << std::endl; os << R"V0G0N( [Ctb] Measured current of power supply io in mA. )V0G0N" << std::endl; @@ -6497,7 +6404,6 @@ std::string Caller::imagetest(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: imagetest" << std::endl; os << R"V0G0N([0, 1] [Gotthard] 1 adds channel intensity with precalculated values when taking an acquisition. Default is 0. [Eiger][Jungfrau][Moench] Only for Virtual servers. If 0, each pixel intensity incremented by 1. If 1, all pixels almost saturated. )V0G0N" @@ -6561,7 +6467,6 @@ std::string Caller::initialchecks(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: initialchecks" << std::endl; os << R"V0G0N([0, 1] [Mythen3][Gotthard2] Enable or disable intial compatibility and other checks at detector start up. It is enabled by default. Must come before 'hostname' command to take effect. Can be used to reprogram fpga when current firmware is incompatible. Advanced User function! )V0G0N" @@ -6633,7 +6538,6 @@ std::string Caller::inj_ch(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: inj_ch" << std::endl; os << R"V0G0N([offset] [increment] [Gotthard2] Inject channels with current source for calibration. Offset is starting channel that is injected, increment determines succeeding channels to be injected. )V0G0N" << std::endl; @@ -6702,7 +6606,6 @@ std::string Caller::interpolation(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: interpolation" << std::endl; os << R"V0G0N([0, 1] [Mythen3] Enables or disables interpolation. Default is disabled. Interpolation mode enables all counters and disables vth3. Disabling sets back counter mask and vth3. )V0G0N" << std::endl; @@ -6765,7 +6668,6 @@ std::string Caller::interruptsubframe(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: interruptsubframe" << std::endl; os << R"V0G0N([0, 1] [Eiger] 1 interrupts last subframe at required exposure time. 0 will wait for last sub frame to finish exposing. 0 is default. )V0G0N" << std::endl; @@ -6828,7 +6730,6 @@ std::string Caller::kernelversion(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: kernelversion" << std::endl; os << R"V0G0N( Get kernel version on the detector including time and date. )V0G0N" << std::endl; @@ -6868,7 +6769,6 @@ std::string Caller::lastclient(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: lastclient" << std::endl; os << R"V0G0N( Client IP Address that last communicated with the detector. )V0G0N" << std::endl; @@ -6908,7 +6808,6 @@ std::string Caller::led(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: led" << std::endl; os << R"V0G0N([0, 1] [Ctb] Switches on/off all LEDs. )V0G0N" << std::endl; @@ -6971,7 +6870,6 @@ std::string Caller::lock(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: lock" << std::endl; os << R"V0G0N([0, 1] Lock detector to one IP, 1: locks. Default is unlocked )V0G0N" << std::endl; @@ -7034,7 +6932,6 @@ std::string Caller::master(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: master" << std::endl; os << R"V0G0N([0, 1] [Eiger][Gotthard2][Jungfrau][Moench] Sets (half) module to master and other(s) to slaves. [Gotthard][Gotthard2][Mythen3][Eiger][Jungfrau][Moench] Gets if the current (half) module is master. )V0G0N" @@ -7098,7 +6995,6 @@ std::string Caller::maxadcphaseshift(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: maxadcphaseshift" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Ctb] Absolute maximum Phase shift of ADC clock. )V0G0N" << std::endl; @@ -7138,7 +7034,6 @@ std::string Caller::maxclkphaseshift(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: maxclkphaseshift" << std::endl; os << R"V0G0N([n_clock] [Gotthard2][Mythen3] Absolute Maximum Phase shift of clock n_clock.n [Gotthard2] Clock index range: 0-5 [Mythen3] Clock index range: 0 )V0G0N" @@ -7195,7 +7090,6 @@ std::string Caller::maxdbitphaseshift(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: maxdbitphaseshift" << std::endl; os << R"V0G0N( [Ctb][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits. )V0G0N" << std::endl; @@ -7235,7 +7129,6 @@ std::string Caller::measuredperiod(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: measuredperiod" << std::endl; os << R"V0G0N([(optional unit) ns|us|ms|s] [Eiger] Measured frame period between last frame and previous one. Can be measured with minimum 2 frames in an acquisition. )V0G0N" << std::endl; @@ -7283,7 +7176,6 @@ std::string Caller::measuredsubperiod(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: measuredsubperiod" << std::endl; os << R"V0G0N([(optional unit) ns|us|ms|s] [Eiger] Measured sub frame period between last sub frame and previous one. )V0G0N" << std::endl; @@ -7331,7 +7223,6 @@ std::string Caller::moduleid(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: moduleid" << std::endl; os << R"V0G0N( [Gotthard2][Eiger][Mythen3][Jungfrau][Moench] 16 bit value (ideally unique) that is streamed out in the UDP header of the detector. Picked up from a file on the module. )V0G0N" << std::endl; @@ -7371,7 +7262,6 @@ std::string Caller::nextframenumber(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: nextframenumber" << std::endl; os << R"V0G0N([n_value] [Eiger][Jungfrau][Moench][Ctb][Xilinx Ctb][Gotthard2] Next frame number. Stopping acquisition might result in different frame numbers for different modules. So, after stopping, next frame number (max + 1) is set for all the modules afterwards. )V0G0N" << std::endl; @@ -7434,7 +7324,6 @@ std::string Caller::nmod(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: nmod" << std::endl; os << R"V0G0N( Number of modules in shared memory. )V0G0N" << std::endl; @@ -7474,7 +7363,6 @@ std::string Caller::numinterfaces(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: numinterfaces" << std::endl; os << R"V0G0N([1, 2] [Jungfrau][Moench] Number of udp interfaces to stream data from detector. Default: 1. Also enables second interface in receiver for listening (Writes a file per interface if writing enabled). @@ -7540,7 +7428,6 @@ std::string Caller::overflow(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: overflow" << std::endl; os << R"V0G0N([0, 1] [Eiger] Enable or disable show overflow flag in 32 bit mode. Default is disabled. )V0G0N" << std::endl; @@ -7603,7 +7490,6 @@ std::string Caller::packageversion(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: packageversion" << std::endl; os << R"V0G0N( Package version. )V0G0N" << std::endl; @@ -7643,7 +7529,6 @@ std::string Caller::parallel(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: parallel" << std::endl; os << R"V0G0N([0, 1] [Eiger][Mythen3][Gotthard2][Moench] Enable or disable parallel mode. [Mythen3] If exptime is too short, the acquisition will return ERROR status and take fewer frames than expected. @@ -7709,7 +7594,6 @@ std::string Caller::parameters(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: parameters" << std::endl; os << R"V0G0N( Sets detector measurement parameters to those contained in fname. Set up per measurement. )V0G0N" << std::endl; @@ -7752,7 +7636,6 @@ std::string Caller::partialreset(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: partialreset" << std::endl; os << R"V0G0N([0, 1] [Eiger] Sets up detector to do partial or complete reset at start of acquisition. 0 complete reset, 1 partial reset. Default is complete reset. Advanced function! )V0G0N" << std::endl; @@ -7815,7 +7698,6 @@ std::string Caller::patfname(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patfname" << std::endl; os << R"V0G0N( [Ctb][Mythen3][Xilinx Ctb] Gets the pattern file name including path of the last pattern uploaded. Returns an empty if nothing was uploaded or via a server default file )V0G0N" << std::endl; @@ -7855,7 +7737,6 @@ std::string Caller::patioctrl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patioctrl" << std::endl; os << R"V0G0N([64 bit mask] [Ctb] 64 bit mask defining input (0) and output (1) signals. )V0G0N" << std::endl; @@ -7918,7 +7799,6 @@ std::string Caller::patlimits(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patlimits" << std::endl; os << R"V0G0N([start addr] [stop addr] [Ctb][Mythen3][Xilinx Ctb] Limits of complete pattern )V0G0N" << std::endl; @@ -7971,7 +7851,6 @@ std::string Caller::patloop(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patloop" << std::endl; os << R"V0G0N([0-6] [start addr] [stop addr] [Ctb][Mythen3][Xilinx Ctb] Limits of the loop level provided. [Mythen3] Level options: 0-3 only. )V0G0N" @@ -8029,8 +7908,9 @@ std::string Caller::patloop0(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patloop0" << std::endl; - os << R"V0G0N(Deprecated command. Use patloop. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patloop. )V0G0N" + << std::endl; return os.str(); } @@ -8084,8 +7964,9 @@ std::string Caller::patloop1(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patloop1" << std::endl; - os << R"V0G0N(Deprecated command. Use patloop. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patloop. )V0G0N" + << std::endl; return os.str(); } @@ -8139,8 +8020,9 @@ std::string Caller::patloop2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patloop2" << std::endl; - os << R"V0G0N(Deprecated command. Use patloop. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patloop. )V0G0N" + << std::endl; return os.str(); } @@ -8194,7 +8076,6 @@ std::string Caller::patmask(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patmask" << std::endl; os << R"V0G0N([64 bit mask] [Ctb][Mythen3][Xilinx Ctb] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern. )V0G0N" << std::endl; @@ -8257,7 +8138,6 @@ std::string Caller::patnloop(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patnloop" << std::endl; os << R"V0G0N([0-6] [n_cycles] [Ctb][Mythen3][Xilinx Ctb] Number of cycles of the loop level provided. [Mythen3] Level options: 0-3 only. )V0G0N" @@ -8313,8 +8193,9 @@ std::string Caller::patnloop0(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patnloop0" << std::endl; - os << R"V0G0N(Deprecated command. Use patnloop. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patnloop. )V0G0N" + << std::endl; return os.str(); } @@ -8366,8 +8247,9 @@ std::string Caller::patnloop1(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patnloop1" << std::endl; - os << R"V0G0N(Deprecated command. Use patnloop. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patnloop. )V0G0N" + << std::endl; return os.str(); } @@ -8419,8 +8301,9 @@ std::string Caller::patnloop2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patnloop2" << std::endl; - os << R"V0G0N(Deprecated command. Use patnloop. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patnloop. )V0G0N" + << std::endl; return os.str(); } @@ -8472,7 +8355,6 @@ std::string Caller::patsetbit(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patsetbit" << std::endl; os << R"V0G0N([64 bit mask] [Ctb][Mythen3][Xilinx Ctb] Sets the mask applied to every pattern to the selected bits. )V0G0N" << std::endl; @@ -8535,7 +8417,6 @@ std::string Caller::pattern(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patternX" << std::endl; os << R"V0G0N([fname] [Mythen3][Ctb][Xilinx Ctb] Loads ASCII pattern file directly to server (instead of executing line by line) )V0G0N" << std::endl; @@ -8575,7 +8456,6 @@ std::string Caller::patternstart(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patternstart" << std::endl; os << R"V0G0N( [Mythen3] Starts Pattern )V0G0N" << std::endl; @@ -8615,7 +8495,6 @@ std::string Caller::patwait(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwait" << std::endl; os << R"V0G0N([0-6] [addr] [Ctb][Mythen3][Xilinx Ctb] Wait address for loop level provided. [Mythen3] Level options: 0-3 only. )V0G0N" @@ -8670,8 +8549,9 @@ std::string Caller::patwait0(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwait0" << std::endl; - os << R"V0G0N(Deprecated command. Use patwait. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patwait. )V0G0N" + << std::endl; return os.str(); } @@ -8722,8 +8602,9 @@ std::string Caller::patwait1(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwait1" << std::endl; - os << R"V0G0N(Deprecated command. Use patwait. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patwait. )V0G0N" + << std::endl; return os.str(); } @@ -8774,8 +8655,9 @@ std::string Caller::patwait2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwait2" << std::endl; - os << R"V0G0N(Deprecated command. Use patwait. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patwait. )V0G0N" + << std::endl; return os.str(); } @@ -8826,7 +8708,6 @@ std::string Caller::patwaittime(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwaittime" << std::endl; os << R"V0G0N([0-6] [n_clk] [Ctb][Mythen3][Xilinx Ctb] Wait time in clock cycles for the loop provided. [Mythen3] Level options: 0-3 only. )V0G0N" @@ -8881,8 +8762,9 @@ std::string Caller::patwaittime0(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwaittime0" << std::endl; - os << R"V0G0N(Deprecated command. Use patwaittime. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patwaittime. )V0G0N" + << std::endl; return os.str(); } @@ -8933,8 +8815,9 @@ std::string Caller::patwaittime1(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwaittime1" << std::endl; - os << R"V0G0N(Deprecated command. Use patwaittime. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patwaittime. )V0G0N" + << std::endl; return os.str(); } @@ -8985,8 +8868,9 @@ std::string Caller::patwaittime2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patwaittime2" << std::endl; - os << R"V0G0N(Deprecated command. Use patwaittime. )V0G0N" << std::endl; + os << R"V0G0N( + Deprecated command. Use patwaittime. )V0G0N" + << std::endl; return os.str(); } @@ -9037,7 +8921,6 @@ std::string Caller::patword(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: patword" << std::endl; os << R"V0G0N([step or address] [64 bit mask] [Ctb][Mythen3][Xilinx Ctb] 64 bit pattern at address of pattern memory. [Ctb] read is same as executing pattern )V0G0N" @@ -9115,7 +8998,6 @@ std::string Caller::pedestalmode(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: pedestalmode" << std::endl; os << R"V0G0N( [frames] [loops] [Jungfrau] Enable pedestal mode. The number of frames or triggers is overwritten by: @@ -9196,7 +9078,6 @@ std::string Caller::period(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: period" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] Period between frames )V0G0N" << std::endl; @@ -9285,7 +9166,6 @@ std::string Caller::periodl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: periodl" << std::endl; os << R"V0G0N( [Gotthard][Jungfrau][Moench][Ctb][Mythen3][Gotthard2][Xilinx Ctb] Period left for current frame. [Gotthard2] only in continuous mode. )V0G0N" @@ -9334,7 +9214,6 @@ std::string Caller::polarity(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: polarity" << std::endl; os << R"V0G0N([pos|neg] [Mythen3] Sets negative or positive polarity. Default is positive )V0G0N" << std::endl; @@ -9398,7 +9277,6 @@ std::string Caller::port(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: port" << std::endl; os << R"V0G0N([n] Port number of the control server on detector for detector-client tcp interface. Default is 1952. Normally unchanged. Set different ports for virtual servers on same pc. )V0G0N" << std::endl; @@ -9461,7 +9339,6 @@ std::string Caller::powerchip(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: powerchip" << std::endl; os << R"V0G0N([0, 1] [Jungfrau][Moench][Mythen3][Gotthard2][Xilinx Ctb] Power the chip. [Jungfrau][Moench] Default is 0. Get will return power status. Can be off if temperature event occured (temperature over temp_threshold with temp_control enabled. Will configure chip (only chip v1.1) @@ -9527,7 +9404,6 @@ std::string Caller::powerindex(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: powerindex" << std::endl; os << R"V0G0N([name] [Ctb][Xilinx_Ctb] Get the power index for the given name. )V0G0N" << std::endl; @@ -9578,7 +9454,6 @@ std::string Caller::powerlist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: powerlist" << std::endl; os << R"V0G0N([powername1 powername2 .. powername4] [Ctb][Xilinx_Ctb] Set the list of power names for this board. )V0G0N" << std::endl; @@ -9655,7 +9530,6 @@ std::string Caller::powername(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: powername" << std::endl; os << R"V0G0N([0-4][name] [Ctb][Xilinx_Ctb] Set the power at the given position to the given name. )V0G0N" << std::endl; @@ -9737,7 +9611,6 @@ std::string Caller::powervalues(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: powervalues" << std::endl; os << R"V0G0N([name] [Ctb][Xilinx_Ctb] Get values of all powers. )V0G0N" << std::endl; @@ -9797,7 +9670,6 @@ std::string Caller::programfpga(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: programfpga" << std::endl; os << R"V0G0N([fname.pof | fname.rbf (full path)][(opitonal)--force-delete-normal-file] [Jungfrau][Moench][Ctb] Programs FPGA from pof file (full path). Then, detector controller is rebooted. Use --force-delete-normal-file argument, if normal file found in device tree, it must be deleted, a new device drive created and programming continued. @@ -9863,7 +9735,6 @@ std::string Caller::pulse(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: pulse" << std::endl; os << R"V0G0N([n_times] [x] [y] [Eiger] Pulse pixel n number of times at coordinates (x, y). Advanced User! )V0G0N" << std::endl; @@ -9913,7 +9784,6 @@ std::string Caller::pulsechip(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: pulsechip" << std::endl; os << R"V0G0N([n_times] [Eiger] Pulse chip n times. If n is -1, resets to normal mode (reset chip completely at start of acquisition, where partialreset = 0). Advanced User! )V0G0N" << std::endl; @@ -9959,7 +9829,6 @@ std::string Caller::pulsenmove(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: pulsenmove" << std::endl; os << R"V0G0N([n_times] [x] [y] [Eiger] Pulse pixel n number of times and moves relatively by (x, y). Advanced User! )V0G0N" << std::endl; @@ -10009,7 +9878,6 @@ std::string Caller::pumpprobe(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: pumpprobe" << std::endl; os << R"V0G0N([0, 1] [Mythen3] Enables or disables pump probe mode. Default is disabled. Pump probe mode only enables vth2. Disabling sets back to previous value. )V0G0N" << std::endl; @@ -10072,7 +9940,6 @@ std::string Caller::quad(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: quad" << std::endl; os << R"V0G0N([0, 1] [Eiger] Sets detector size to a quad. 0 (disabled) is default. (Specific hardware required). )V0G0N" << std::endl; @@ -10138,7 +10005,6 @@ std::string Caller::readnrows(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: readnrows" << std::endl; os << R"V0G0N( [1-256] [Eiger] Number of rows to readout per half module starting from the centre. Options: 0 - 256. 256 is default. The permissible values depend on dynamic range and 10Gbe enabled. @@ -10205,7 +10071,6 @@ std::string Caller::readout(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: readout" << std::endl; os << R"V0G0N( [Mythen3] Starts detector readout. Status changes to TRANSMITTING and automatically returns to idle at the end of readout. )V0G0N" << std::endl; @@ -10248,7 +10113,6 @@ std::string Caller::readoutspeed(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: readoutspeed" << std::endl; os << R"V0G0N( [0 or full_speed|1 or half_speed|2 or quarter_speed] [Eiger][Jungfrau][Moench][Mythen3] Readout speed of chip. @@ -10336,7 +10200,6 @@ std::string Caller::readoutspeedlist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: readoutspeedlist" << std::endl; os << R"V0G0N( List of readout speed levels implemented for this detector. )V0G0N" << std::endl; @@ -10376,7 +10239,6 @@ std::string Caller::rebootcontroller(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rebootcontroller" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Ctb][Gotthard][Mythen3][Gotthard2][Xilinx Ctb] Reboot controller of detector. )V0G0N" << std::endl; @@ -10416,7 +10278,6 @@ std::string Caller::reg(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: reg" << std::endl; os << R"V0G0N([address] [32 bit value][(optional)--validate] [Mythen3][Gotthard2] Reads/writes to a 32 bit register in hex. Advanced Function! Goes to stop server. Hence, can be called while calling blocking acquire(). @@ -10530,7 +10391,6 @@ std::string Caller::resetdacs(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: resetdacs" << std::endl; os << R"V0G0N([(optional) hard] [Eiger][Jungfrau][Moench][Gotthard][Gotthard2][Mythen3]Reset dac values to the defaults. A 'hard' optional reset will reset the dacs to the hardcoded defaults in on-board detector server. )V0G0N" << std::endl; @@ -10582,7 +10442,6 @@ std::string Caller::resetfpga(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: resetfpga" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Ctb][Xilinx Ctb] Reset FPGA. )V0G0N" << std::endl; @@ -10622,7 +10481,6 @@ std::string Caller::roi(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: roi" << std::endl; os << R"V0G0N([xmin] [xmax] [Gotthard] Region of interest in detector. Options: Only a single ROI per module. @@ -10688,7 +10546,6 @@ std::string Caller::romode(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: romode" << std::endl; os << R"V0G0N([analog|digital|analog_digital|transceiver|digital_transceiver] [Ctb][xilinx Ctb] Readout mode. [Ctb] Default is analog. [Xilinx Ctb] Default is Transceiver (only one implemented so far) )V0G0N" << std::endl; @@ -10752,7 +10609,6 @@ std::string Caller::row(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: row" << std::endl; os << R"V0G0N([value] Set Detector row (udp header) to value. Gui uses it to rearrange for complete image )V0G0N" @@ -10816,7 +10672,6 @@ std::string Caller::runclk(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: runclk" << std::endl; os << R"V0G0N([n_clk in MHz] [Ctb] Run clock in MHz. )V0G0N" << std::endl; @@ -10879,7 +10734,6 @@ std::string Caller::runtime(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: runtime" << std::endl; os << R"V0G0N([(optional unit) ns|us|ms|s] [Jungfrau][Moench][Mythen3][Gotthard2][Ctb][Xilinx Ctb] Time from detector start up. [Gotthard2] not in burst and auto mode. )V0G0N" @@ -10928,7 +10782,6 @@ std::string Caller::rx_arping(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_arping" << std::endl; os << R"V0G0N([0, 1] Starts a thread in slsReceiver to arping the interface it is listening to every minute. Useful in 10G mode. )V0G0N" << std::endl; @@ -10991,7 +10844,6 @@ std::string Caller::rx_clearroi(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_clearroi" << std::endl; os << R"V0G0N(Resets Region of interest in receiver. Default is all channels/pixels enabled. )V0G0N" << std::endl; return os.str(); @@ -11034,7 +10886,6 @@ std::string Caller::rx_dbitoffset(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_dbitoffset" << std::endl; os << R"V0G0N([n_bytes] [Ctb] Offset in bytes in digital data to skip in receiver. )V0G0N" << std::endl; @@ -11097,7 +10948,6 @@ std::string Caller::rx_discardpolicy(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_discardpolicy" << std::endl; os << R"V0G0N([nodiscard (default)|discardempty|discardpartial(fastest)] Frame discard policy of receiver. nodiscard does not discard frames, discardempty discards empty frames, discardpartial discards partial frames. )V0G0N" << std::endl; @@ -11161,7 +11011,6 @@ std::string Caller::rx_fifodepth(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_fifodepth" << std::endl; os << R"V0G0N([n_frames] Set the number of frames in the receiver fifo depth (buffer between listener and writer threads). )V0G0N" << std::endl; @@ -11224,7 +11073,6 @@ std::string Caller::rx_frameindex(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_frameindex" << std::endl; os << R"V0G0N( Current frame index received for each port in receiver during acquisition. )V0G0N" << std::endl; @@ -11264,7 +11112,6 @@ std::string Caller::rx_framescaught(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_framescaught" << std::endl; os << R"V0G0N( Number of frames caught by each port in receiver. )V0G0N" << std::endl; @@ -11304,7 +11151,6 @@ std::string Caller::rx_framesperfile(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_framesperfile" << std::endl; os << R"V0G0N([n_frames] Number of frames per file in receiver in an acquisition. Default depends on detector type. 0 is infinite or all frames in single file. )V0G0N" << std::endl; @@ -11367,7 +11213,6 @@ std::string Caller::rx_jsonpara(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_jsonpara" << std::endl; os << R"V0G0N([key1] [value1] [Receiver] Additional json header parameter streamed out from receiver. If not found in header, the pair is appended. An empty values deletes parameter. Max 20 characters for each key/value. )V0G0N" << std::endl; @@ -11435,7 +11280,6 @@ std::string Caller::rx_lastclient(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_lastclient" << std::endl; os << R"V0G0N( Client IP Address that last communicated with the receiver. )V0G0N" << std::endl; @@ -11475,7 +11319,6 @@ std::string Caller::rx_lock(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_lock" << std::endl; os << R"V0G0N([0, 1] Lock receiver to one client IP, 1 locks, 0 unlocks. Default is unlocked. )V0G0N" << std::endl; @@ -11538,7 +11381,6 @@ std::string Caller::rx_missingpackets(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_missingpackets" << std::endl; os << R"V0G0N( Number of missing packets for receiver. If negative, they are packets in excess. )V0G0N" << std::endl; @@ -11578,7 +11420,6 @@ std::string Caller::rx_padding(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_padding" << std::endl; os << R"V0G0N([0, 1] Partial frames padding enable in the receiver. Default: enabled. Disabling is fastest. )V0G0N" << std::endl; @@ -11641,7 +11482,6 @@ std::string Caller::rx_printconfig(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_printconfig" << std::endl; os << R"V0G0N( Prints the receiver configuration. )V0G0N" << std::endl; @@ -11681,7 +11521,6 @@ std::string Caller::rx_realudpsocksize(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_realudpsocksize" << std::endl; os << R"V0G0N( Actual udp socket buffer size. Double the size of rx_udpsocksize due to kernel bookkeeping. )V0G0N" << std::endl; @@ -11722,7 +11561,6 @@ std::string Caller::rx_silent(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_silent" << std::endl; os << R"V0G0N([0, 1] Switch on or off receiver text output during acquisition. )V0G0N" << std::endl; @@ -11785,7 +11623,6 @@ std::string Caller::rx_start(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_start" << std::endl; os << R"V0G0N( Starts receiver listener for detector data packets and create a data file (if file write enabled). )V0G0N" << std::endl; @@ -11828,7 +11665,6 @@ std::string Caller::rx_status(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_status" << std::endl; os << R"V0G0N([running, idle, transmitting] Receiver listener status. )V0G0N" << std::endl; @@ -11882,7 +11718,6 @@ std::string Caller::rx_stop(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_stop" << std::endl; os << R"V0G0N( Stops receiver listener for detector data packets and closes current data file (if file write enabled). )V0G0N" << std::endl; @@ -11925,7 +11760,6 @@ std::string Caller::rx_tcpport(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_tcpport" << std::endl; os << R"V0G0N([port] TCP port for client-receiver communication. Default is 1954. Must be different if multiple receivers on same pc. Must be first command to set a receiver parameter. Multi command will automatically increment for individual modules. )V0G0N" << std::endl; @@ -11988,7 +11822,6 @@ std::string Caller::rx_threads(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_threads" << std::endl; os << R"V0G0N( Get kernel thread ids from the receiver in order of [parent, tcp, listener 0, processor 0, streamer 0, listener 1, processor 1, streamer 1, arping]. If no streamer yet or there is no second interface, it gives 0 in its place. )V0G0N" << std::endl; @@ -12028,7 +11861,6 @@ std::string Caller::rx_udpsocksize(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_udpsocksize" << std::endl; os << R"V0G0N([n_size] UDP socket buffer size in receiver. Tune rmem_default and rmem_max accordingly. Max value is INT_MAX/2. )V0G0N" << std::endl; @@ -12091,7 +11923,6 @@ std::string Caller::rx_version(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_version" << std::endl; os << R"V0G0N( Receiver version )V0G0N" << std::endl; @@ -12131,7 +11962,6 @@ std::string Caller::rx_zmqfreq(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_zmqfreq" << std::endl; os << R"V0G0N([nth frame] Frequency of frames streamed out from receiver via zmq Default: 1, Means every frame is streamed out. @@ -12197,7 +12027,6 @@ std::string Caller::rx_zmqhwm(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_zmqhwm" << std::endl; os << R"V0G0N([n_value] Receiver's zmq send high water mark. Default is the zmq library's default (1000). This is a high number and can be set to 2 for gui purposes. One must also set the client's receive high water mark to similar value. Final effect is sum of them. Also restarts receiver zmq streaming if enabled. Can set to -1 to set default value. )V0G0N" << std::endl; @@ -12263,7 +12092,6 @@ std::string Caller::rx_zmqport(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_zmqport" << std::endl; os << R"V0G0N([port] Zmq port for data to be streamed out of the receiver. Also restarts receiver zmq streaming if enabled. Default is 30001. Modified only when using an intermediate process between receiver and client(gui). Must be different for every detector (and udp port). Multi command will automatically increment for individual modules. )V0G0N" << std::endl; @@ -12326,7 +12154,6 @@ std::string Caller::rx_zmqstartfnum(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_zmqstartfnum" << std::endl; os << R"V0G0N([fnum] The starting frame index to stream out. 0 by default, which streams the first frame in an acquisition, and then depending on the rx zmq frequency/ timer )V0G0N" << std::endl; @@ -12389,7 +12216,6 @@ std::string Caller::rx_zmqstream(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: rx_zmqstream" << std::endl; os << R"V0G0N([0, 1] Enable/ disable data streaming from receiver via zmq (eg. to GUI or to another process for further processing). This creates/ destroys zmq streamer threads in receiver. Switching to Gui automatically enables data streaming in receiver. @@ -12454,7 +12280,6 @@ std::string Caller::savepattern(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: savepattern" << std::endl; os << R"V0G0N( [Ctb][Mythen3][Xilinx Ctb] Saves pattern to file (ascii). [Ctb] Also executes pattern. )V0G0N" @@ -12499,7 +12324,6 @@ std::string Caller::scan(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: scan" << std::endl; os << R"V0G0N([dac_name|0|trimbits] [start_val] [stop_val] [step_size] [dac settling time ns|us|ms|s] Enables/ disables scans for dac and trimbits Enabling scan sets number of frames to number of steps in receiver. @@ -12602,7 +12426,6 @@ std::string Caller::scanerrmsg(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: scanerrmsg" << std::endl; os << R"V0G0N( Gets Scan error message if scan ended in error for non blocking acquisitions. )V0G0N" << std::endl; @@ -12642,7 +12465,6 @@ std::string Caller::selinterface(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: selinterface" << std::endl; os << R"V0G0N([0, 1] [Jungfrau][Moench] The udp interface to stream data from detector. Effective only when number of interfaces is 1. Default: 0 (outer) )V0G0N" << std::endl; @@ -12705,10 +12527,9 @@ std::string Caller::serialnumber(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: serialnumber" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb] -Serial number of detector. )V0G0N" + Serial number of detector. )V0G0N" << std::endl; return os.str(); } @@ -12746,7 +12567,6 @@ std::string Caller::setbit(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: setbit" << std::endl; os << R"V0G0N([reg address in hex] [bit index] Sets bit in address. Use --validate to force validation. )V0G0N" @@ -12841,7 +12661,6 @@ std::string Caller::settings(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: settings" << std::endl; os << R"V0G0N([standard, fast, highgain, dynamicgain, lowgain, mediumgain, veryhighgain, highgain0, fixgain1, fixgain2, forceswitchg1, forceswitchg2, verylowgain, g1_hg, g1_lg, g2_hc_hg, g2_hc_lg, g2_lc_hg, g2_lc_lg, g4_hg, g4_lg, gain0] Detector Settings [Jungfrau] - [ gain0 | highgain0] @@ -12913,7 +12732,6 @@ std::string Caller::settingslist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: settingslist" << std::endl; os << R"V0G0N( List of settings implemented for this detector. )V0G0N" << std::endl; @@ -12953,7 +12771,6 @@ std::string Caller::settingspath(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: settingspath" << std::endl; os << R"V0G0N([path] [Eiger][Mythen3] Directory where settings files are loaded from/to. )V0G0N" << std::endl; @@ -13010,7 +12827,6 @@ std::string Caller::signalindex(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: signalindex" << std::endl; os << R"V0G0N([name] [Ctb][Xilinx_Ctb] Get the signal index for the given name. )V0G0N" << std::endl; @@ -13060,7 +12876,6 @@ std::string Caller::signallist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: signallist" << std::endl; os << R"V0G0N([signalname1 signalname2 .. signalname63] [Ctb][Xilinx_Ctb] Set the list of signal names for this board. )V0G0N" << std::endl; @@ -13137,7 +12952,6 @@ std::string Caller::signalname(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: signalname" << std::endl; os << R"V0G0N([0-63][name] [Ctb][Xilinx_Ctb] Set the signal at the given position to the given name. )V0G0N" << std::endl; @@ -13224,7 +13038,6 @@ std::string Caller::slowadcindex(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: slowadcindex" << std::endl; os << R"V0G0N([name] [Ctb][Xilinx_Ctb] Get the slowadc index for the given name. )V0G0N" << std::endl; @@ -13276,7 +13089,6 @@ std::string Caller::slowadclist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: slowadclist" << std::endl; os << R"V0G0N([slowadcname1 slowadcname2 .. slowadcname7] [Ctb][Xilinx_Ctb] Set the list of slowadc names for this board. )V0G0N" << std::endl; @@ -13354,7 +13166,6 @@ std::string Caller::slowadcname(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: slowadcname" << std::endl; os << R"V0G0N([0-7][name] [Ctb][Xilinx_Ctb] Set the slowadc at the given position to the given name. )V0G0N" << std::endl; @@ -13438,7 +13249,6 @@ std::string Caller::slowadcvalues(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: slowadcvalues" << std::endl; os << R"V0G0N([name] [Ctb][Xilinx_Ctb] Get values of all slow adcs. )V0G0N" << std::endl; @@ -13499,7 +13309,6 @@ std::string Caller::start(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: start" << std::endl; os << R"V0G0N( Starts detector acquisition. Status changes to RUNNING or WAITING and automatically returns to idle at the end of acquisition. If the acquisition was abruptly stopped, some detectors come back to STOPPED. )V0G0N" << std::endl; @@ -13539,7 +13348,6 @@ std::string Caller::status(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: status" << std::endl; os << R"V0G0N([running, error, transmitting, finished, waiting, idle] Detector status. Goes to stop server. )V0G0N" << std::endl; @@ -13593,7 +13401,6 @@ std::string Caller::stop(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: stop" << std::endl; os << R"V0G0N( Abort detector acquisition. Status changes to IDLE or STOPPED. Goes to stop server. )V0G0N" << std::endl; @@ -13633,7 +13440,6 @@ std::string Caller::stopport(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: stopport" << std::endl; os << R"V0G0N([n] Port number of the stop server on detector for detector-client tcp interface. Default is 1953. Normally unchanged. )V0G0N" << std::endl; @@ -13696,7 +13502,6 @@ std::string Caller::storagecell_delay(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: storagecell_delay" << std::endl; os << R"V0G0N([duration (0-1638375 ns)] [(optional unit) ns|us|ms|s] [Jungfrau] Additional time delay between 2 consecutive exposures in burst mode (resolution of 25ns). Only applicable for chipv1.0. For advanced users only. )V0G0N" << std::endl; @@ -13785,7 +13590,6 @@ std::string Caller::storagecell_start(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: storagecell_start" << std::endl; os << R"V0G0N([0-max] [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. )V0G0N" << std::endl; @@ -13848,7 +13652,6 @@ std::string Caller::subdeadtime(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: subdeadtime" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Eiger] Dead time of EIGER subframes in 32 bit mode. Subperiod = subexptime + subdeadtime. )V0G0N" << std::endl; @@ -13937,7 +13740,6 @@ std::string Caller::subexptime(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: subexptime" << std::endl; os << R"V0G0N([duration] [(optional unit) ns|us|ms|s] [Eiger] Exposure time of EIGER subframes in 32 bit mode. )V0G0N" << std::endl; @@ -14026,7 +13828,6 @@ std::string Caller::sync(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: sync" << std::endl; os << R"V0G0N([0, 1] [Jungfrau][Moench] Enables or disables synchronization between modules. Sync mode requires at least one master configured. Also requires flatband cabling between master and slave with termination board. )V0G0N" << std::endl; @@ -14092,7 +13893,6 @@ std::string Caller::syncclk(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: syncclk" << std::endl; os << R"V0G0N([n_clk in MHz] [Ctb] Sync clock in MHz. )V0G0N" << std::endl; @@ -14132,7 +13932,6 @@ std::string Caller::temp_10ge(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_10ge" << std::endl; os << R"V0G0N([n_value] [Eiger]Temperature close to the 10GbE )V0G0N" << std::endl; @@ -14173,7 +13972,6 @@ std::string Caller::temp_adc(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_adc" << std::endl; os << R"V0G0N([n_value] [Jungfrau][Moench][Gotthard] ADC Temperature )V0G0N" << std::endl; @@ -14214,7 +14012,6 @@ std::string Caller::temp_control(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_control" << std::endl; os << R"V0G0N([0, 1] [Jungfrau][Moench] Temperature control enable. Default is 0 (disabled). If temperature crosses threshold temperature and temperature control is enabled, power to chip will be switched off and temperature event occurs. To power on chip again, temperature has to be less than threshold temperature and temperature event has to be cleared. )V0G0N" << std::endl; @@ -14277,7 +14074,6 @@ std::string Caller::temp_dcdc(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_dcdc" << std::endl; os << R"V0G0N([n_value] [Eiger]Temperature close to the dc dc converter )V0G0N" << std::endl; @@ -14318,7 +14114,6 @@ std::string Caller::temp_event(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_event" << std::endl; os << R"V0G0N([0] [Jungfrau][Moench] 1, if a temperature event occured. To clear this event, set it to 0. If temperature crosses threshold temperature and temperature control is enabled, power to chip will be switched off and temperature event occurs. To power on chip again, temperature has to be less than threshold temperature and temperature event has to be cleared. )V0G0N" @@ -14381,7 +14176,6 @@ std::string Caller::temp_fpga(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_fpga" << std::endl; os << R"V0G0N([n_value] [Eiger][Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Xilinx CTB] FPGA Temperature )V0G0N" << std::endl; @@ -14422,7 +14216,6 @@ std::string Caller::temp_fpgaext(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_fpgaext" << std::endl; os << R"V0G0N([n_value] [Eiger]Temperature close to the FPGA )V0G0N" << std::endl; @@ -14463,7 +14256,6 @@ std::string Caller::temp_fpgafl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_fpgafl" << std::endl; os << R"V0G0N([n_value] [Eiger]Temperature of the left front end board fpga. )V0G0N" << std::endl; @@ -14504,7 +14296,6 @@ std::string Caller::temp_fpgafr(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_fpgafr" << std::endl; os << R"V0G0N([n_value] [Eiger]Temperature of the right front end board fpga. )V0G0N" << std::endl; @@ -14545,7 +14336,6 @@ std::string Caller::temp_slowadc(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_slowadc" << std::endl; os << R"V0G0N([n_value] [Ctb]Temperature of the slow adc )V0G0N" << std::endl; @@ -14586,7 +14376,6 @@ std::string Caller::temp_sodl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_sodl" << std::endl; os << R"V0G0N([n_value] [Eiger]Temperature close to the left so-dimm memory )V0G0N" << std::endl; @@ -14627,7 +14416,6 @@ std::string Caller::temp_sodr(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_sodr" << std::endl; os << R"V0G0N([n_value] [Eiger]Temperature close to the right so-dimm memory )V0G0N" << std::endl; @@ -14668,7 +14456,6 @@ std::string Caller::temp_threshold(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: temp_threshold" << std::endl; os << R"V0G0N([n_temp (in degrees)] [Jungfrau][Moench] Threshold temperature in degrees. If temperature crosses threshold temperature and temperature control is enabled, power to chip will be switched off and temperature event occurs. To power on chip again, temperature has to be less than threshold temperature and temperature event has to be cleared. )V0G0N" << std::endl; @@ -14731,7 +14518,6 @@ std::string Caller::templist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: templist" << std::endl; os << R"V0G0N( List of temperature commands implemented for this detector. )V0G0N" << std::endl; @@ -14771,7 +14557,6 @@ std::string Caller::tempvalues(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: tempvalues" << std::endl; os << R"V0G0N( Gets the values for every temperature for this detector. )V0G0N" << std::endl; @@ -14829,7 +14614,6 @@ std::string Caller::tengiga(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: tengiga" << std::endl; os << R"V0G0N([0, 1] [Eiger][Ctb][Mythen3] 10GbE Enable. )V0G0N" << std::endl; @@ -14892,7 +14676,6 @@ std::string Caller::timing(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: timing" << std::endl; os << R"V0G0N([auto|trigger|gating|burst_trigger] Timing Mode of detector. [Jungfrau][Moench][Gotthard][Ctb][Gotthard2][Xilinx Ctb] [auto|trigger] @@ -14959,7 +14742,6 @@ std::string Caller::timing_info_decoder(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: timing_info_decoder" << std::endl; os << R"V0G0N([swissfel|shine] [Jungfrau] Advanced Command and only for Swissfel and Shine. Sets the bunch id or timing info decoder. Default is swissfel. )V0G0N" << std::endl; @@ -15023,7 +14805,6 @@ std::string Caller::timinglist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: timinglist" << std::endl; os << R"V0G0N( Gets the list of timing modes for this detector. )V0G0N" << std::endl; @@ -15063,7 +14844,6 @@ std::string Caller::timingsource(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: timingsource" << std::endl; os << R"V0G0N([internal|external] [Gotthard2] Timing source. Internal is crystal and external is system timing. Default is internal. )V0G0N" << std::endl; @@ -15127,7 +14907,6 @@ std::string Caller::top(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: top" << std::endl; os << R"V0G0N([0, 1] [Eiger] Sets half module to top (1), else bottom. )V0G0N" << std::endl; @@ -15190,7 +14969,6 @@ std::string Caller::transceiverenable(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: transceiverenable" << std::endl; os << R"V0G0N([bitmask] [Ctb][Xilinx Ctb] Transceiver Enable Mask. Enable for each 4 Transceiver channel. )V0G0N" << std::endl; @@ -15253,7 +15031,6 @@ std::string Caller::trigger(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: trigger" << std::endl; os << R"V0G0N( [Eiger][Mythen3][Jungfrau][Moench] Sends software trigger signal to detector )V0G0N" << std::endl; @@ -15298,7 +15075,6 @@ std::string Caller::triggers(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: triggers" << std::endl; os << R"V0G0N([n_triggers] Number of triggers per aquire. Set timing mode to use triggers. )V0G0N" << std::endl; @@ -15364,7 +15140,6 @@ std::string Caller::triggersl(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: triggersl" << std::endl; os << R"V0G0N( [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb][Xilinx Ctb] Number of triggers left in acquisition. Only when external trigger used. )V0G0N" << std::endl; @@ -15404,7 +15179,6 @@ std::string Caller::trimbits(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: trimbits" << std::endl; os << R"V0G0N([fname] [Eiger][Mythen3] Put will load the trimbit file to detector. If no extension specified, serial number of each module is attached. Get will save the trimbits from the detector to file with serial number added to file name. )V0G0N" << std::endl; @@ -15461,7 +15235,6 @@ std::string Caller::trimval(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: trimval" << std::endl; os << R"V0G0N([n_trimval] [Eiger][Mythen3] All trimbits set to this value. Returns -1 if all trimbits are different values. )V0G0N" << std::endl; @@ -15524,7 +15297,6 @@ std::string Caller::tsamples(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: tsamples" << std::endl; os << R"V0G0N([n_value] [Ctb][Xilinx Ctb] Number of transceiver samples expected. )V0G0N" << std::endl; @@ -15588,14 +15360,12 @@ std::string Caller::txdelay(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: txdelay" << std::endl; os << R"V0G0N([n_delay] [Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for all modules in the detector using the step size provided.Sets up - [Eiger] txdelay_left to (2 * mod_index * n_delay), - [Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay) and - [Eiger] txdelay_frame to (2 *num_modules * n_delay) - [Jungfrau][Moench][Mythen3] txdelay_frame to (num_modules * n_delay) -for every module. )V0G0N" + [Eiger] txdelay_left to (2 * mod_index * n_delay), + [Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay) and + [Eiger] txdelay_frame to (2 *num_modules * n_delay) + [Jungfrau][Moench][Mythen3] txdelay_frame to (num_modules * n_delay) for every module. )V0G0N" << std::endl; return os.str(); } @@ -15662,7 +15432,6 @@ std::string Caller::txdelay_frame(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: txdelay_frame" << std::endl; os << R"V0G0N([n_delay] [Eiger][Jungfrau][Moench][Mythen3] Transmission delay of first udp packet being streamed out of the module. [Jungfrau][Moench] [0-31] Each value represents 1 ms @@ -15728,7 +15497,6 @@ std::string Caller::txdelay_left(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: txdelay_left" << std::endl; os << R"V0G0N([n_delay] [Eiger] Transmission delay of first packet in an image being streamed out of the module's left UDP port. Each value represents 10ns. Typical value is 50000. )V0G0N" << std::endl; @@ -15791,7 +15559,6 @@ std::string Caller::txdelay_right(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: txdelay_right" << std::endl; os << R"V0G0N([n_delay] [Eiger] Transmission delay of first packet in an image being streamed out of the module's right UDP port. Each value represents 10ns. Typical value is 50000. )V0G0N" << std::endl; @@ -15854,7 +15621,6 @@ std::string Caller::type(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: type" << std::endl; os << R"V0G0N( Returns detector type. Can be Eiger, Jungfrau, Gotthard, Moench, Mythen3, Gotthard2, ChipTestBoard, Xilinx_ChipTestBoard )V0G0N" << std::endl; @@ -15894,7 +15660,6 @@ std::string Caller::udp_cleardst(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_cleardst" << std::endl; os << R"V0G0N( Clears udp destination details on the detector. )V0G0N" << std::endl; @@ -15934,7 +15699,6 @@ std::string Caller::udp_dstlist(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_dstlist" << std::endl; os << R"V0G0N([ip=x.x.x.x] [(optional)ip2=x.x.x.x] [mac=xx:xx:xx:xx:xx:xx] [(optional)mac2=xx:xx:xx:xx:xx:xx] [port=value] [(optional)port2=value] @@ -16009,7 +15773,6 @@ std::string Caller::udp_dstmac(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_dstmac" << std::endl; os << R"V0G0N([x:x:x:x:x:x] Mac address of the receiver (destination) udp interface. Not mandatory to set as udp_dstip retrieves it from slsReceiver process, but must be set if you use a custom receiver (not slsReceiver). Use router mac if router between detector and receiver. )V0G0N" << std::endl; @@ -16067,7 +15830,6 @@ std::string Caller::udp_dstmac2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_dstmac2" << std::endl; os << R"V0G0N([x:x:x:x:x:x] [Jungfrau][Moench] Mac address of the receiver (destination) udp interface 2. Not mandatory to set as udp_dstip2 retrieves it from slsReceiver process but must be set if you use a custom receiver (not slsReceiver). [Jungfrau][Moench] top half or inner interface @@ -16127,7 +15889,6 @@ std::string Caller::udp_dstport(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_dstport" << std::endl; os << R"V0G0N([n] Port number of the receiver (destination) udp interface. Default is 50001. If multi command, ports for each module is calculated (incremented by 1 if no 2nd interface) )V0G0N" @@ -16191,7 +15952,6 @@ std::string Caller::udp_dstport2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_dstport2" << std::endl; os << R"V0G0N([n] [Jungfrau][Moench][Eiger][Gotthard2] Port number of the receiver (destination) udp interface 2. Default is 50002. If multi command, ports for each module is calculated (incremented by 2) @@ -16258,13 +16018,11 @@ std::string Caller::udp_firstdst(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_firstdst" << std::endl; os << R"V0G0N( -[0 - 31 (or number of udp destinations)] - [Jungfrau][Moench][Gotthard2] -[0-63] - [Mythen3] - + [0 - N] + where N is the max number of udp destinations - 1. + [Jungfrau][Moench][Gotthard2] Max number of udp destinations is 32. + [Mythen3] Max number of udp destination is 64. One can set which is the first destination that the detector will stream images out from in a round robin fashion. The entry must not have been empty. Default: 0 )V0G0N" << std::endl; return os.str(); @@ -16326,7 +16084,6 @@ std::string Caller::udp_numdst(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_numdst" << std::endl; os << R"V0G0N( [Jungfrau][Moench][Eiger][Mythen3][Gotthard2] One can enter upto 32 (64 for Mythen3) destinations that the detector will stream images out in a round robin fashion. This is get only command. Default: 1 )V0G0N" << std::endl; @@ -16366,7 +16123,6 @@ std::string Caller::udp_reconfigure(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_reconfigure" << std::endl; os << R"V0G0N( Reconfigures Detector with UDP destination. More for debugging as the configuration is done automatically when the detector has sufficient UDP details. )V0G0N" << std::endl; @@ -16406,7 +16162,6 @@ std::string Caller::udp_srcmac(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_srcmac" << std::endl; os << R"V0G0N([x:x:x:x:x:x] Mac address of the detector (source) udp interface. [Eiger] Do not set as detector will replace with its own DHCP Mac (1G) or DHCP Mac + 1 (10G). )V0G0N" @@ -16464,7 +16219,6 @@ std::string Caller::udp_srcmac2(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_srcmac2" << std::endl; os << R"V0G0N([x:x:x:x:x:x] [Jungfrau][Moench] Mac address of the top half or inner (source) udp interface. )V0G0N" << std::endl; @@ -16521,7 +16275,6 @@ std::string Caller::udp_validate(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: udp_validate" << std::endl; os << R"V0G0N( Validates that UDP configuration in the detector is valid. If not configured, it will throw with error message requesting missing udp information. )V0G0N" << std::endl; @@ -16561,7 +16314,6 @@ std::string Caller::update(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: update" << std::endl; os << R"V0G0N( Without tftp: [server_name (incl fullpath)] [fname.pof (incl full path)] This does not use tftp. [Jungfrau][Moench][Gotthard][Ctb] Updates the firmware, detector server, deletes old server, creates the symbolic link and then reboots detector controller. @@ -16610,7 +16362,6 @@ std::string Caller::updatedetectorserver(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: updatedetectorserver" << std::endl; os << R"V0G0N([server_name with full path] [Jungfrau][Moench][Eiger][Ctb][Mythen3][Gotthard2] Copies detector server via TCP (without tftp). Makes a symbolic link with a shorter name (without vx.x.x). Then, detector controller reboots (except Eiger). [Jungfrau][Moench][Ctb]Also changes respawn server to the link, which is effective after a reboot. )V0G0N" @@ -16651,7 +16402,6 @@ std::string Caller::updatekernel(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: updatekernel" << std::endl; os << R"V0G0N([kernel_name with full path] [Jungfrau][Moench][Ctb][Mythen3][Gotthard2] Advanced Command!! You could damage the detector. Please use with caution. Updates the kernel image. Then, detector controller reboots with new kernel. )V0G0N" @@ -16692,7 +16442,6 @@ std::string Caller::updatemode(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: updatemode" << std::endl; os << R"V0G0N([0|1] Restart the detector server in update mode or not. This is useful when server-firmware compatibility is at its worst and server cannot start up normally )V0G0N" << std::endl; @@ -16755,7 +16504,6 @@ std::string Caller::user(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: user" << std::endl; os << R"V0G0N( User details from shared memory (hostname, type, PID, User, Date). )V0G0N" << std::endl; @@ -16798,7 +16546,6 @@ std::string Caller::v_a(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: v_a" << std::endl; os << R"V0G0N([n_value] [Ctb][Xilinx Ctb] Power supply a in mV. )V0G0N" << std::endl; @@ -16861,7 +16608,6 @@ std::string Caller::v_b(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: v_b" << std::endl; os << R"V0G0N([n_value] [Ctb][Xilinx Ctb] Power supply b in mV. )V0G0N" << std::endl; @@ -16924,7 +16670,6 @@ std::string Caller::v_c(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: v_c" << std::endl; os << R"V0G0N([n_value] [Ctb][Xilinx Ctb] Power supply c in mV. )V0G0N" << std::endl; @@ -16987,7 +16732,6 @@ std::string Caller::v_chip(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: v_chip" << std::endl; os << R"V0G0N([n_value] [Ctb] Power supply chip in mV. Do not use it unless you are completely sure you will not fry the board. )V0G0N" << std::endl; @@ -17051,7 +16795,6 @@ std::string Caller::v_d(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: v_d" << std::endl; os << R"V0G0N([n_value] [Ctb][Xilinx Ctb] Power supply d in mV. )V0G0N" << std::endl; @@ -17114,7 +16857,6 @@ std::string Caller::v_io(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: v_io" << std::endl; os << R"V0G0N([n_value] [Ctb][Xilinx Ctb] Power supply io in mV. Minimum 1200 mV. Must be the first power regulator to be set after fpga reset (on-board detector server start up). )V0G0N" << std::endl; @@ -17177,7 +16919,6 @@ std::string Caller::v_limit(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: v_limit" << std::endl; os << R"V0G0N([n_value] [Ctb][Xilinx Ctb] Soft limit for power supplies (ctb only) and DACS in mV. )V0G0N" << std::endl; @@ -17240,7 +16981,6 @@ std::string Caller::vchip_comp_adc(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vchip_comp_adc" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all][10 bit hex value] [Gotthard2] On chip Dac for comparator current of ADC. )V0G0N" << std::endl; @@ -17317,7 +17057,6 @@ std::string Caller::vchip_comp_fe(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vchip_comp_fe" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all][10 bit hex value] [Gotthard2] On chip Dac for comparator current of analogue front end. )V0G0N" << std::endl; @@ -17394,7 +17133,6 @@ std::string Caller::vchip_cs(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vchip_cs" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all][10 bit hex value] [Gotthard2] On chip Dac for current injection into preamplifier. )V0G0N" << std::endl; @@ -17471,7 +17209,6 @@ std::string Caller::vchip_opa_1st(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vchip_opa_1st" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all][10 bit hex value] [Gotthard2] On chip Dac for opa current for driving the other DACs in chip. )V0G0N" << std::endl; @@ -17548,7 +17285,6 @@ std::string Caller::vchip_opa_fd(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vchip_opa_fd" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all][10 bit hex value] [Gotthard2] On chip Dac current for CDS opa stage. )V0G0N" << std::endl; @@ -17625,7 +17361,6 @@ std::string Caller::vchip_ref_comp_fe(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vchip_ref_comp_fe" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all][10 bit hex value] [Gotthard2] On chip Dac for reference voltage of the comparator of analogue front end. )V0G0N" << std::endl; @@ -17702,7 +17437,6 @@ std::string Caller::veto(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: veto" << std::endl; os << R"V0G0N([0, 1] [Gotthard2] Enable or disable veto data data from chip. Default is 0. )V0G0N" << std::endl; @@ -17765,7 +17499,6 @@ std::string Caller::vetoalg(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vetoalg" << std::endl; os << R"V0G0N([hits|raw] [lll|10gbe] [Gotthard2] Set the veto algorithm. Default is hits. )V0G0N" << std::endl; @@ -17840,7 +17573,6 @@ std::string Caller::vetofile(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vetofile" << std::endl; os << R"V0G0N([chip index 0-9, -1 for all] [file name] [Gotthard2] Set veto reference for each 128 channels for specific chip. The file should have 128 rows of gain index and 12 bit value in dec )V0G0N" << std::endl; @@ -17899,7 +17631,6 @@ std::string Caller::vetophoton(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vetophoton" << std::endl; os << R"V0G0N([ichip] [#photons] [energy in keV] [reference file] [Gotthard2] Set veto reference for 128 channels for chip ichip according to reference file and #photons and energy in keV. [ichip] [output file] @@ -17983,7 +17714,6 @@ std::string Caller::vetoref(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vetoref" << std::endl; os << R"V0G0N([gain index] [12 bit value] [Gotthard2] Set veto reference for all 128 channels for all chips. )V0G0N" << std::endl; @@ -18048,7 +17778,6 @@ std::string Caller::virtualFunction(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: virtual" << std::endl; os << R"V0G0N([n_servers] [starting_port_number] Connecs to n virtual server at local host starting at specific control port. Every virtual server will have a stop port (control port + 1) )V0G0N" << std::endl; @@ -18103,7 +17832,6 @@ std::string Caller::vm_a(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vm_a" << std::endl; os << R"V0G0N( [Ctb] Measured voltage of power supply a in mV. )V0G0N" << std::endl; @@ -18144,7 +17872,6 @@ std::string Caller::vm_b(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vm_b" << std::endl; os << R"V0G0N( [Ctb] Measured voltage of power supply b in mV. )V0G0N" << std::endl; @@ -18185,7 +17912,6 @@ std::string Caller::vm_c(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vm_c" << std::endl; os << R"V0G0N( [Ctb] Measured voltage of power supply c in mV. )V0G0N" << std::endl; @@ -18226,7 +17952,6 @@ std::string Caller::vm_d(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vm_d" << std::endl; os << R"V0G0N( [Ctb] Measured voltage of power supply d in mV. )V0G0N" << std::endl; @@ -18267,7 +17992,6 @@ std::string Caller::vm_io(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: vm_io" << std::endl; os << R"V0G0N( [Ctb] Measured voltage of power supply io in mV. )V0G0N" << std::endl; @@ -18308,7 +18032,6 @@ std::string Caller::zmqhwm(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: zmqhwm" << std::endl; os << R"V0G0N([n_limit] Client's zmq receive high water mark. Default is the zmq library's default (1000), can also be set here using -1. This is a high number and can be set to 2 for gui purposes. @@ -18374,7 +18097,6 @@ std::string Caller::zmqip(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: zmqip" << std::endl; os << R"V0G0N([x.x.x.x] Ip Address to listen to zmq data streamed out from receiver or intermediate process. Default connects to receiver zmq Ip Address (from rx_hostname). Modified only when using an intermediate process between receiver and client(gui). Also restarts client zmq streaming if enabled. )V0G0N" << std::endl; @@ -18431,7 +18153,6 @@ std::string Caller::zmqport(int action) { std::ostringstream os; // print help if (action == slsDetectorDefs::HELP_ACTION) { - os << "Command: zmqport" << std::endl; os << R"V0G0N([port] Zmq port in client(gui) or intermediate process for data to be streamed to from receiver. Default connects to receiver zmq streaming out port (30001). Modified only when using an intermediate process between receiver and client(gui). Also restarts client zmq streaming if enabled. Must be different for every detector (and udp port). Multi command will automatically increment for individual modules. )V0G0N" << std::endl; diff --git a/slsDetectorSoftware/src/Caller.h b/slsDetectorSoftware/src/Caller.h index d9c74800e..b1f1e58b3 100644 --- a/slsDetectorSoftware/src/Caller.h +++ b/slsDetectorSoftware/src/Caller.h @@ -55,6 +55,7 @@ class Caller { } std::vector getAllCommands(); + std::map GetDeprecatedCommands(); std::string list(int action); std::string acquire(int action); diff --git a/slsDetectorSoftware/src/CallerSpecial.cpp b/slsDetectorSoftware/src/CallerSpecial.cpp index a5881a778..80b2a9867 100644 --- a/slsDetectorSoftware/src/CallerSpecial.cpp +++ b/slsDetectorSoftware/src/CallerSpecial.cpp @@ -16,6 +16,10 @@ std::vector Caller::getAllCommands() { return ret; } +std::map Caller::GetDeprecatedCommands() { + return deprecated_functions; +} + void Caller::call(const std::string &command, const std::vector &arguments, int detector_id, int action, std::ostream &os, int receiver_id) { @@ -63,12 +67,35 @@ bool Caller::ReplaceIfDeprecated(std::string &command) { } std::string Caller::list(int action) { - std::string ret = "free\n"; - for (auto &f : functions) { - ret += f.first + "\n"; + if (action == defs::HELP_ACTION) { + return "[deprecated(optional)]\n\tlists all available commands, list " + "deprecated - list deprecated commands\n"; + } + if (args.empty()) { + std::string ret = "free\n"; + for (auto &f : functions) { + ret += f.first + "\n"; + } + return ret; + } else if (args.size() == 1) { + if (args[0] == "deprecated") { + std::ostringstream os; + os << "The following " << deprecated_functions.size() + << " commands are deprecated\n"; + const size_t field_width = 20; + for (const auto &it : deprecated_functions) { + os << std::right << std::setw(field_width) << it.first << " -> " + << it.second << '\n'; + } + return os.str(); + } else { + throw RuntimeError( + "Could not decode argument. Possible options: deprecated"); + } + } else { + WrongNumberOfParameters(0); + return ""; } - - return ret; } /* Network Configuration (Detector<->Receiver) */ diff --git a/zsh_autocomplete.sh b/zsh_autocomplete.sh new file mode 120000 index 000000000..143520002 --- /dev/null +++ b/zsh_autocomplete.sh @@ -0,0 +1 @@ +slsDetectorSoftware/generator/autocomplete/zsh_autocomplete.sh \ No newline at end of file From 37e65634d49fbc8e25f5c35fd8a60baf65d452b2 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 22 Oct 2024 17:19:28 +0200 Subject: [PATCH 6/9] Dev/g2 fix configure chip startup (#1009) * g2: chip reconfigure variable not set when powering on at startup because readconfig is the one configuring the chip the first time to default chip settings * cleaning up code --- .../bin/gotthard2DetectorServer_developer | Bin 295836 -> 295836 bytes .../slsDetectorFunctionList.c | 11 +++++++++-- slsSupportLib/include/sls/versionAPI.h | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer index 8a98b5fd2e2bde34e38073c5fc897e4136924c54..e4f5ed96fdb8c9fd590b7e090ab8344581d02054 100755 GIT binary patch delta 70178 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 E0{xK!CjbBd delta 70211 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 diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c index 6e87c56ec..bcb3a8f87 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c @@ -987,6 +987,8 @@ int readConfigFile() { // to inform powerchip config parameters are set startupPowerChipConfigDone = 1; + chipConfigured = 1; + LOG(logINFOBLUE, ("Chip configured\n")); } return initError; } @@ -2278,8 +2280,7 @@ int powerChip(int on, char *mess) { if (on) { LOG(logINFO, ("Powering chip: on\n")); bus_w(CONTROL_REG, bus_r(CONTROL_REG) | CONTROL_PWR_CHIP_MSK); - // only if power chip config done, configure chip with current set up - if (startupPowerChipConfigDone == 1 && configureChip(mess) == FAIL) + if (configureChip(mess) == FAIL) return FAIL; } else { // throw if high voltage on @@ -2310,6 +2311,12 @@ int getPowerChip() { int isChipConfigured() { return chipConfigured; } int configureChip(char *mess) { + + if (!startupPowerChipConfigDone) { + LOG(logINFOBLUE, + ("Startup: Chip to be configured when reading config file\n")); + return OK; + } LOG(logINFOBLUE, ("\tConfiguring chip\n")); // on chip dacs diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 3e79c970f..00b5edda5 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -9,6 +9,6 @@ #define APIEIGER "developer 0x240918" #define APIMYTHEN3 "developer 0x241001" #define APIJUNGFRAU "developer 0x241001" -#define APIGOTTHARD2 "developer 0x241007" #define APIRECEIVER "developer 0x241014" #define APILIB "developer 0x241021" +#define APIGOTTHARD2 "developer 0x241022" From 60868ae74ef776a9d4d046549b4160767b1d978a Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 23 Oct 2024 12:39:03 +0200 Subject: [PATCH 7/9] Dev/rm volatile (#1007) * Removing volatile and replacing with atomic to ensure atomicity * compiling header include issue --- slsDetectorSoftware/src/DetectorImpl.h | 2 +- slsReceiverSoftware/src/Fifo.h | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/slsDetectorSoftware/src/DetectorImpl.h b/slsDetectorSoftware/src/DetectorImpl.h index c42d9767d..424330043 100644 --- a/slsDetectorSoftware/src/DetectorImpl.h +++ b/slsDetectorSoftware/src/DetectorImpl.h @@ -434,7 +434,7 @@ class DetectorImpl : public virtual slsDetectorDefs { /** data streaming (down stream) enabled in client (zmq sckets created) */ bool client_downstream{false}; std::vector> zmqSocket; - volatile int numZmqRunning{0}; + std::atomic numZmqRunning{0}; /** mutex to synchronize main and data processing threads */ mutable std::mutex mp; diff --git a/slsReceiverSoftware/src/Fifo.h b/slsReceiverSoftware/src/Fifo.h index d07fe5fef..7166c3968 100644 --- a/slsReceiverSoftware/src/Fifo.h +++ b/slsReceiverSoftware/src/Fifo.h @@ -13,9 +13,10 @@ #include "sls/logger.h" #include "sls/sls_detector_defs.h" - #include "sls/CircularFifo.h" +#include + namespace sls { class Fifo : private virtual slsDetectorDefs { @@ -49,8 +50,8 @@ class Fifo : private virtual slsDetectorDefs { CircularFifo *fifoFree; CircularFifo *fifoStream; int fifoDepth; - volatile int status_fifoBound; - volatile int status_fifoFree; + std::atomic status_fifoBound; + std::atomic status_fifoFree; }; } // namespace sls From 5f805f8789f659445e94abd6e63dfc92d60784d6 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 24 Oct 2024 15:53:49 +0200 Subject: [PATCH 8/9] Dev/jf firmware rollback (#1011) * jf: rolling back firmware required to v1.5 and 2.5, updated release notes, fixed a bug when updating server (when server name same as link name:throws with no message, pedestal mode check changed for the time being for loops to be 0xFF size * compensating for jf fw bug for pedestalmode where loops should be 16 bit, but is 8 bit in fw. to be fixed in next version * formatting * formatting, merge fix * fixed python test simulator to kill previous servers * rmeoved merge binary --- RELEASE.txt | 4 ++-- .../bin/jungfrauDetectorServer_developer | Bin 315568 -> 315864 bytes .../slsDetectorFunctionList.c | 1 + .../slsDetectorServer_defs.h | 5 +++-- .../src/slsDetectorServer_funcs.c | 10 ++++++++- .../tests/Caller/test-Caller-jungfrau.cpp | 21 +++++++++--------- slsReceiverSoftware/src/Fifo.h | 2 +- slsSupportLib/include/sls/versionAPI.h | 4 ++-- tests/scripts/test_simulators.py | 16 +++++++++++++ 9 files changed, 45 insertions(+), 18 deletions(-) diff --git a/RELEASE.txt b/RELEASE.txt index 2e507fc43..92d8fb1a9 100644 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -66,8 +66,8 @@ This document describes the differences between vx.x.x and vx.0.2 Eiger 02.10.2023 (v32) (updated in 7.0.3) - Jungfrau 01.10.2024 (v1.6, HW v1.0) (updated in 9.0.0) - 01.10.2024 (v2.6, HW v2.0) (updated in 9.0.0) + Jungfrau 20.09.2023 (v1.5, HW v1.0) (updated in 8.0.0) + 21.09.2023 (v2.5, HW v2.0) (updated in 8.0.0) Mythen3 11.10.2024 (v1.5) (updated in 9.0.0) diff --git a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index d24cea3e5a049b00a503a128894b55f14e02ae43..653d6fba5069e7e9a03b3a4c086913b9c719096f 100755 GIT binary patch delta 143025 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 hZ*FG(zJ{adh)4P2 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℞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

Tij#7UH*D(yuJ$ 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 diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index 7d707f3a8..b4eb368de 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -2555,6 +2555,7 @@ void getPedestalParameters(uint8_t *frames, uint16_t *loops) { } void setPedestalMode(int enable, uint8_t frames, uint16_t loops) { + // Note: loops is 8 bit in firmware as a bug.To be fixed in next version int prevPedestalEnable = getPedestalMode(); uint32_t addr = PEDESTAL_MODE_REG; diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h index bdcd2f2a8..84c9647a5 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -5,8 +5,8 @@ #include "sls/sls_detector_defs.h" #define MIN_REQRD_VRSN_T_RD_API 0x171220 -#define REQRD_FRMWRE_VRSN_BOARD2 0x241001 // 1.0 pcb (version = 010) -#define REQRD_FRMWRE_VRSN 0x241001 // 2.0 pcb (version = 011) +#define REQRD_FRMWRE_VRSN_BOARD2 0x230920 // 1.0 pcb (version = 010) +#define REQRD_FRMWRE_VRSN 0x230921 // 2.0 pcb (version = 011) #define NUM_HARDWARE_VERSIONS (2) #define HARDWARE_VERSION_NUMBERS \ @@ -62,6 +62,7 @@ #define DEFAULT_TIMING_INFO_DECODER (SWISSFEL) #define DEFAULT_ELECTRON_COLLECTION_MODE (0) +#define MAX_PEDESTAL_LOOPS (0xFF) // until fixed in firmware #define HIGHVOLTAGE_MIN (60) #define HIGHVOLTAGE_MAX (200) #define DAC_MIN_MV (0) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index c39210f03..ca5cc4e17 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -9863,11 +9863,12 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) { strcpy(mess, "Server name is the same as the symbolic link. Please " "use a different server name\n"); LOG(logERROR, (mess)); + Server_SendResult(file_des, INT32, NULL, 0); } // in same folder as current process (will also work for virtual then // with write permissions) - { + if (ret == OK) { const int fileNameSize = 128; char fname[fileNameSize]; if (getAbsPath(fname, fileNameSize, serverName) == FAIL) { @@ -11038,6 +11039,13 @@ int set_pedestal_mode(int file_des) { "be 0. [%hhu, %hu].\n", frames, loops); LOG(logERROR, (mess)); + } else if (loops > MAX_PEDESTAL_LOOPS) { + ret = FAIL; + sprintf(mess, + "Could not set pedestal mode. Loops [%hu] cannot be " + "greater than %d.\n", + loops, MAX_PEDESTAL_LOOPS); + LOG(logERROR, (mess)); } else { setPedestalMode(enable, frames, loops); int retvalEnable = getPedestalMode(); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp index 614404ad1..e63f99144 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp @@ -530,13 +530,14 @@ TEST_CASE("pedestalmode", "[.cmdcall]") { REQUIRE_THROWS(caller.call("pedestalmode", {"256", "10"}, -1, PUT)); REQUIRE_THROWS(caller.call("pedestalmode", {"-1", "10"}, 0, PUT)); - REQUIRE_THROWS(caller.call("pedestalmode", {"20", "65536"}, 0, PUT)); + REQUIRE_THROWS(caller.call("pedestalmode", {"20", "1000"}, 0, PUT)); + REQUIRE_THROWS(caller.call("pedestalmode", {"2000", "100"}, 0, PUT)); REQUIRE_THROWS(caller.call("pedestalmode", {"20", "-1"}, 0, PUT)); { std::ostringstream oss; - caller.call("pedestalmode", {"30", "1000"}, -1, PUT, oss); - REQUIRE(oss.str() == "pedestalmode [30, 1000]\n"); + caller.call("pedestalmode", {"30", "100"}, -1, PUT, oss); + REQUIRE(oss.str() == "pedestalmode [30, 100]\n"); } // cannot change any of these in pedestal mode REQUIRE_THROWS_WITH(caller.call("frames", {"200"}, -1, PUT), @@ -563,20 +564,20 @@ TEST_CASE("pedestalmode", "[.cmdcall]") { { std::ostringstream oss; - caller.call("pedestalmode", {"50", "500"}, -1, PUT, oss); - REQUIRE(oss.str() == "pedestalmode [50, 500]\n"); + caller.call("pedestalmode", {"50", "100"}, -1, PUT, oss); + REQUIRE(oss.str() == "pedestalmode [50, 100]\n"); } { std::ostringstream oss; caller.call("pedestalmode", {}, -1, GET, oss); - REQUIRE(oss.str() == "pedestalmode [enabled, 50, 500]\n"); + REQUIRE(oss.str() == "pedestalmode [enabled, 50, 100]\n"); } { auto pedemode = det.getPedestalMode().tsquash( "Inconsistent pedestal mode to test"); REQUIRE(pedemode.enable == true); REQUIRE(pedemode.frames == 50); - REQUIRE(pedemode.loops == 500); + REQUIRE(pedemode.loops == 100); } { std::ostringstream oss; @@ -590,7 +591,7 @@ TEST_CASE("pedestalmode", "[.cmdcall]") { } uint8_t pedestalFrames = 50; - uint16_t pedestalLoops = 1000; + uint16_t pedestalLoops = 100; int64_t expNumFrames = pedestalFrames * pedestalLoops * 2; auto origFrames = det.getNumberOfFrames().squash(-1); auto origTriggers = det.getNumberOfTriggers().squash(-1); @@ -671,11 +672,11 @@ TEST_CASE("timing_info_decoder", "[.cmdcall]") { Caller caller(&det); if (det.getDetectorType().squash() == defs::JUNGFRAU) { auto prev_val = det.getTimingInfoDecoder(); - { + /*{ std::ostringstream oss; caller.call("timing_info_decoder", {"shine"}, -1, PUT, oss); REQUIRE(oss.str() == "timing_info_decoder shine\n"); - } + }*/ { std::ostringstream oss; caller.call("timing_info_decoder", {"swissfel"}, -1, PUT, oss); diff --git a/slsReceiverSoftware/src/Fifo.h b/slsReceiverSoftware/src/Fifo.h index 7166c3968..729ce368b 100644 --- a/slsReceiverSoftware/src/Fifo.h +++ b/slsReceiverSoftware/src/Fifo.h @@ -11,9 +11,9 @@ *@short constructs the fifo structure */ +#include "sls/CircularFifo.h" #include "sls/logger.h" #include "sls/sls_detector_defs.h" -#include "sls/CircularFifo.h" #include diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 00b5edda5..c233d8086 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -8,7 +8,7 @@ #define APIXILINXCTB "developer 0x240918" #define APIEIGER "developer 0x240918" #define APIMYTHEN3 "developer 0x241001" -#define APIJUNGFRAU "developer 0x241001" #define APIRECEIVER "developer 0x241014" -#define APILIB "developer 0x241021" +#define APILIB "developer 0x241021" #define APIGOTTHARD2 "developer 0x241022" +#define APIJUNGFRAU "developer 0x241024" diff --git a/tests/scripts/test_simulators.py b/tests/scripts/test_simulators.py index 03d435004..34f7ca9ba 100644 --- a/tests/scripts/test_simulators.py +++ b/tests/scripts/test_simulators.py @@ -51,6 +51,20 @@ def killProcess(name): else: print('process not running : ' + name) + +def killAllStaleProcesses(): + killProcess('eigerDetectorServer_virtual') + killProcess('jungfrauDetectorServer_virtual') + killProcess('mythen3DetectorServer_virtual') + killProcess('gotthard2DetectorServer_virtual') + killProcess('gotthardDetectorServer_virtual') + killProcess('ctbDetectorServer_virtual') + killProcess('moenchDetectorServer_virtual') + killProcess('xilinx_ctbDetectorServer_virtual') + killProcess('slsReceiver') + killProcess('slsMultiReceiver') + cleanSharedmemory() + def cleanup(name): ''' kill both servers, receivers and clean shared memory @@ -202,6 +216,8 @@ with open(fname, 'w') as fp: Log(Fore.BLUE, 'General tests (results: ' + file_results + ')') startGeneralTests(fp, file_results) + killAllStaleProcesses() + for server in servers: try: # print to terminal for progress From 06266f39056fb385cc80867b978e56e44240b3ec Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 28 Oct 2024 09:39:40 +0100 Subject: [PATCH 9/9] gui: hide 'complete image' and just show 'missing packets' when there are missing packets in that image form the receiver (#1014) --- slsDetectorGui/forms/form_plot.ui | 3 ++- slsDetectorGui/include/qDrawPlot.h | 2 +- slsDetectorGui/src/qDrawPlot.cpp | 2 +- slsDetectorSoftware/src/DetectorImpl.cpp | 3 +-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/slsDetectorGui/forms/form_plot.ui b/slsDetectorGui/forms/form_plot.ui index cfc799d54..66d6e64a8 100644 --- a/slsDetectorGui/forms/form_plot.ui +++ b/slsDetectorGui/forms/form_plot.ui @@ -457,7 +457,7 @@ <html><head/><body><p>If sub images have missing packets</p></body></html> - Complete Image + Qt::AlignCenter @@ -523,6 +523,7 @@ + Cantarell 10 diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h index 3dd42244e..92f660b50 100644 --- a/slsDetectorGui/include/qDrawPlot.h +++ b/slsDetectorGui/include/qDrawPlot.h @@ -123,7 +123,7 @@ class qDrawPlot : public QWidget, private Ui::PlotObject { QString zTitle2d{"Intensity"}; QString plotTitle{""}; QString indexTitle{""}; - bool completeImage{false}; + bool completeImage{true}; bool xyRangeChanged{false}; double xyRange[4]{0, 0, 0, 0}; bool isXYRange[4]{false, false, false, false}; diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index 8617c8206..804a26f49 100644 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -107,7 +107,7 @@ void qDrawPlot::SetupPlots() { LOG(logINFO) << "nPixelsY:" << nPixelsY; widgetStatistics->hide(); - lblCompleteImage->hide(); + lblCompleteImage->show(); lblInCompleteImage->hide(); lblRxRoiEnabled->hide(); diff --git a/slsDetectorSoftware/src/DetectorImpl.cpp b/slsDetectorSoftware/src/DetectorImpl.cpp index 02ddcf7f5..e637d9106 100644 --- a/slsDetectorSoftware/src/DetectorImpl.cpp +++ b/slsDetectorSoftware/src/DetectorImpl.cpp @@ -557,7 +557,7 @@ void DetectorImpl::readFrameFromReceiver() { memset(multiframe.get(), 0xFF, multisize); } - completeImage = (numZmqRunning == (int)zmqSocket.size()); + completeImage = true; // get each frame for (unsigned int isocket = 0; isocket < zmqSocket.size(); ++isocket) { @@ -574,7 +574,6 @@ void DetectorImpl::readFrameFromReceiver() { // parse error, version error or end of acquisition for // socket runningList[isocket] = false; - completeImage = false; --numZmqRunning; continue; }