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..92d8fb1a9 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 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 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 (v2.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/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/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/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/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer index 8a98b5fd2..e4f5ed96f 100755 Binary files a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer and b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer differ 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/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index d24cea3e5..653d6fba5 100755 Binary files a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer and b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer differ 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/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/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/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/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..e637d9106 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(); @@ -390,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."); } @@ -616,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) { @@ -633,7 +574,6 @@ void DetectorImpl::readFrameFromReceiver() { // parse error, version error or end of acquisition for // socket runningList[isocket] = false; - completeImage = false; --numZmqRunning; continue; } diff --git a/slsDetectorSoftware/src/DetectorImpl.h b/slsDetectorSoftware/src/DetectorImpl.h index a4484c243..424330043 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 */ @@ -452,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/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/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/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/slsReceiverSoftware/src/Fifo.h b/slsReceiverSoftware/src/Fifo.h index d07fe5fef..729ce368b 100644 --- a/slsReceiverSoftware/src/Fifo.h +++ b/slsReceiverSoftware/src/Fifo.h @@ -11,10 +11,11 @@ *@short constructs the fifo structure */ +#include "sls/CircularFifo.h" #include "sls/logger.h" #include "sls/sls_detector_defs.h" -#include "sls/CircularFifo.h" +#include namespace sls { @@ -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 diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 3ed903583..c233d8086 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -2,13 +2,13 @@ // 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" #define APIXILINXCTB "developer 0x240918" #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" +#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 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