diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 56e29800f..3c9086694 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -2423,11 +2423,18 @@ class Detector(CppDetectorApi): @property def datastream(self): """ - datastream [left|right] [0, 1] - [Eiger] Enables or disables data streaming from left or/and right side of detector for 10GbE mode. 1 (enabled) by default. + datastream [LEFT|RIGHT|TOP|BOTTOM] [0, 1] + [Eiger] Enables or disables data streaming from left or/and right side of detector for 10GbE mode. 1 (enabled) by default. Options: LEFT, RIGHT. + [Jungfrau][Moench] Enables or disables data stream from top or/and bottom receiver. Can change only if numinterfaces is 2. 1 (enabled) by default. Options: TOP, BOTTOM. + Enum: portPosition """ result = {} - for port in [defs.LEFT, defs.RIGHT]: + if self.type in [detectorType.JUNGFRAU, detectorType.MOENCH]: + ports = [defs.TOP, defs.BOTTOM] + else: + ports = [defs.LEFT, defs.RIGHT] + + for port in ports: result[port] = element_if_equal(self.getDataStream(port)) return result diff --git a/slsDetectorGui/include/qDefs.h b/slsDetectorGui/include/qDefs.h index 375d62d6c..018790c46 100644 --- a/slsDetectorGui/include/qDefs.h +++ b/slsDetectorGui/include/qDefs.h @@ -39,7 +39,7 @@ class qDefs : public QWidget { /** * Empty Constructor */ - qDefs(){}; + qDefs() {}; static QFont GetDefaultFont() { return QFont("Cantarell", 10, QFont::Normal); diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/ctbDetectorServer/slsDetectorServer_defs.h index 61b59b66a..6f7e3bdd2 100644 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorServer_defs.h @@ -7,11 +7,9 @@ #define MIN_REQRD_VRSN_T_RD_API 0x181130 #define REQRD_FRMWR_VRSN 0x260504 -#define NUM_HARDWARE_VERSIONS (1) -#define HARDWARE_VERSION_NUMBERS \ - { 0x3f } -#define HARDWARE_VERSION_NAMES \ - { "5.1" } +#define NUM_HARDWARE_VERSIONS (1) +#define HARDWARE_VERSION_NUMBERS {0x3f} +#define HARDWARE_VERSION_NAMES {"5.1"} #define LINKED_SERVER_NAME "ctbDetectorServer" diff --git a/slsDetectorServers/eigerDetectorServer/FebControl.c b/slsDetectorServers/eigerDetectorServer/FebControl.c index 85a89f2d9..500d82d14 100644 --- a/slsDetectorServers/eigerDetectorServer/FebControl.c +++ b/slsDetectorServers/eigerDetectorServer/FebControl.c @@ -636,8 +636,8 @@ int Feb_Control_SetTrimbits(unsigned int *trimbits, int top) { << ((7 - i) * 4); // upper } } // end column loop i - } // end supercolumn loop sc - } // end row loop + } // end supercolumn loop sc + } // end row loop if (Feb_Control_activated) { if (!Feb_Interface_WriteMemoryInLoops(Feb_Control_leftAddress, @@ -654,7 +654,7 @@ int Feb_Control_SetTrimbits(unsigned int *trimbits, int top) { } } // end row_set loop (groups of 16 rows) - } // end l_r loop + } // end l_r loop memcpy(Feb_Control_last_downloaded_trimbits, trimbits, Feb_Control_trimbit_size * sizeof(unsigned int)); diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h index 5e4a62f1b..aa87505b3 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h @@ -7,8 +7,7 @@ #define NUM_HARDWARE_VERSIONS (2) #define HARDWARE_VERSION_NUMBERS {0x0, 0x1}; -#define HARDWARE_VERSION_NAMES \ - { "FX70T", "FX30T" } +#define HARDWARE_VERSION_NAMES {"FX70T", "FX30T"} #define REQUIRED_FIRMWARE_VERSION (32) // virtual ones renamed for consistency diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h index d275cb400..a696221c9 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h @@ -9,8 +9,7 @@ #define NUM_HARDWARE_VERSIONS (2) #define HARDWARE_VERSION_NUMBERS {0x0, 0x2}; -#define HARDWARE_VERSION_NAMES \ - { "1.0", "1.2" } +#define HARDWARE_VERSION_NAMES {"1.0", "1.2"} #define LINKED_SERVER_NAME "gotthard2DetectorServer" diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h index cc2b0928b..88e30f1c4 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -8,11 +8,9 @@ #define REQRD_FRMWRE_VRSN_BOARD2 0x250209 // 1.0 pcb (version = 010) #define REQRD_FRMWRE_VRSN 0x250208 // 2.0 pcb (version = 011) -#define NUM_HARDWARE_VERSIONS (2) -#define HARDWARE_VERSION_NUMBERS \ - { 0x2, 0x3 } -#define HARDWARE_VERSION_NAMES \ - { "1.0", "2.0" } +#define NUM_HARDWARE_VERSIONS (2) +#define HARDWARE_VERSION_NUMBERS {0x2, 0x3} +#define HARDWARE_VERSION_NAMES {"1.0", "2.0"} #define ID_FILE "detid_jungfrau.txt" #define LINKED_SERVER_NAME "jungfrauDetectorServer" @@ -214,13 +212,11 @@ enum DACINDEX { enum MASTERINDEX { MASTER_HARDWARE, OW_MASTER, OW_SLAVE }; #define MASTER_NAMES "hardware", "master", "slave" -#define NUMSETTINGS (2) -#define NSPECIALDACS (3) -#define SPECIALDACINDEX {J_VREF_PRECH, J_VREF_DS, J_VREF_COMP}; -#define SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS \ - { 1450, 480, 420 } -#define SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS \ - { 1550, 450, 620 } +#define NUMSETTINGS (2) +#define NSPECIALDACS (3) +#define SPECIALDACINDEX {J_VREF_PRECH, J_VREF_DS, J_VREF_COMP}; +#define SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS {1450, 480, 420} +#define SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS {1550, 450, 620} enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G }; enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS }; diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h index aa4133d7a..22d8e68ba 100644 --- a/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h @@ -7,11 +7,9 @@ #define REQRD_FRMWRE_VRSN_BOARD2 0x444445 // 1.0 pcb (version = 010) #define REQRD_FRMWRE_VRSN 0x231026 // 2.0 pcb (version = 011) -#define NUM_HARDWARE_VERSIONS (2) -#define HARDWARE_VERSION_NUMBERS \ - { 0x2, 0x3 } -#define HARDWARE_VERSION_NAMES \ - { "1.0", "2.0" } +#define NUM_HARDWARE_VERSIONS (2) +#define HARDWARE_VERSION_NUMBERS {0x2, 0x3} +#define HARDWARE_VERSION_NAMES {"1.0", "2.0"} #define ID_FILE ("detid_moench.txt") #define LINKED_SERVER_NAME "moenchDetectorServer" diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h index 47824e32d..0b342f657 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h @@ -9,8 +9,7 @@ #define NUM_HARDWARE_VERSIONS (2) #define HARDWARE_VERSION_NUMBERS {0x0, 0x2}; -#define HARDWARE_VERSION_NAMES \ - { "1.0", "1.2" } +#define HARDWARE_VERSION_NAMES {"1.0", "1.2"} #define LINKED_SERVER_NAME "mythen3DetectorServer" @@ -131,15 +130,12 @@ enum DACINDEX { enum ADCINDEX { TEMP_FPGA }; -#define NUMSETTINGS (3) -#define NSPECIALDACS (2) -#define SPECIALDACINDEX {M_VRPREAMP, M_VRSHAPER}; -#define SPECIAL_DEFAULT_STANDARD_DAC_VALS \ - { 1100, 1280 } -#define SPECIAL_DEFAULT_FAST_DAC_VALS \ - { 300, 1500 } -#define SPECIAL_DEFAULT_HIGHGAIN_DAC_VALS \ - { 1300, 1100 } +#define NUMSETTINGS (3) +#define NSPECIALDACS (2) +#define SPECIALDACINDEX {M_VRPREAMP, M_VRSHAPER}; +#define SPECIAL_DEFAULT_STANDARD_DAC_VALS {1100, 1280} +#define SPECIAL_DEFAULT_FAST_DAC_VALS {300, 1500} +#define SPECIAL_DEFAULT_HIGHGAIN_DAC_VALS {1300, 1100} enum CLKINDEX { SYSTEM_C0, SYSTEM_C1, SYSTEM_C2, NUM_CLOCKS }; #define NUM_CLOCKS_TO_SET (1) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index f4d9d930f..bfd7ab883 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -2382,7 +2382,7 @@ int get_exptime(int file_des) { if (receiveData(file_des, &gateIndex, sizeof(gateIndex), INT32) < 0) return printSocketReadError(); - // get only + // get only #ifdef MYTHEN3D if (gateIndex < 0 || gateIndex > 2) { ret = FAIL; @@ -7018,7 +7018,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // bursts + // bursts #ifdef GOTTHARD2D i64 = getNumBursts(); #else @@ -7028,7 +7028,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // additional storage cells + // additional storage cells #if defined(JUNGFRAUD) i32 = getNumAdditionalStorageCells(); #else @@ -7038,7 +7038,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // analog samples + // analog samples #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) i32 = getNumAnalogSamples(); #else @@ -7048,7 +7048,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // digital samples + // digital samples #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) i32 = getNumDigitalSamples(); #else @@ -7058,7 +7058,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // exptime + // exptime #ifdef MYTHEN3D i64 = 0; #elif defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) @@ -7087,7 +7087,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // sub exptime + // sub exptime #ifdef EIGERD i64 = getSubExpTime(); #else @@ -7097,7 +7097,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // sub deadtime + // sub deadtime #ifdef EIGERD i64 = getSubDeadTime(); #else @@ -7107,7 +7107,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // activate + // activate #ifdef EIGERD i32 = 0; getActivate(&i32); @@ -7118,7 +7118,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // data stream left + // data stream left #ifdef EIGERD i32 = 0; getDataStream(LEFT, &i32); @@ -7129,7 +7129,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // data stream right + // data stream right #ifdef EIGERD i32 = 0; getDataStream(RIGHT, &i32); @@ -7140,7 +7140,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // quad + // quad #ifdef EIGERD i32 = getQuad(); #else @@ -7150,7 +7150,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // ReadNRows + // ReadNRows #if defined(EIGERD) || defined(JUNGFRAUD) || defined(MOENCHD) i32 = getReadNRows(); #else @@ -7191,7 +7191,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // 10 gbe + // 10 gbe #if defined(EIGERD) || defined(CHIPTESTBOARDD) || defined(MYTHEN3D) i32 = enableTenGigabitEthernet(GET_FLAG); #else @@ -7201,7 +7201,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // readout mode + // readout mode #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) i32 = getReadoutMode(); #else @@ -7211,7 +7211,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // adc mask + // adc mask #if defined(CHIPTESTBOARDD) u32 = getADCEnableMask(); #else @@ -7221,7 +7221,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // 10g adc mask + // 10g adc mask #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) u32 = getADCEnableMask_10G(); #else @@ -7231,7 +7231,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // counter mask + // counter mask #ifdef MYTHEN3D u32 = getCounterMask(); #else @@ -7241,7 +7241,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // burst mode + // burst mode #ifdef GOTTHARD2D i32 = (int)getBurstMode(); #else @@ -7251,7 +7251,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // exptime1 + // exptime1 #ifdef MYTHEN3D i64 = getExpTime(0); #else @@ -7261,7 +7261,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // exptime2 + // exptime2 #ifdef MYTHEN3D i64 = getExpTime(1); #else @@ -7271,7 +7271,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // exptime3 + // exptime3 #ifdef MYTHEN3D i64 = getExpTime(2); #else @@ -7281,7 +7281,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // gatedelay1 + // gatedelay1 #ifdef MYTHEN3D i64 = getGateDelay(0); #else @@ -7291,7 +7291,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // gatedelay2 + // gatedelay2 #ifdef MYTHEN3D i64 = getGateDelay(1); #else @@ -7301,7 +7301,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // gatedelay3 + // gatedelay3 #ifdef MYTHEN3D i64 = getGateDelay(2); #else @@ -7311,7 +7311,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // gates + // gates #ifdef MYTHEN3D i32 = getNumGates(); #else @@ -7341,7 +7341,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // transceiver samples + // transceiver samples #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) i32 = getNumTransceiverSamples(); #else @@ -7351,7 +7351,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // transceiver mask + // transceiver mask #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) u32 = getTransceiverEnableMask(); #else @@ -7361,7 +7361,7 @@ int get_receiver_parameters(int file_des) { if (n < 0) return printSocketReadError(); - // readout speed + // readout speed #if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) ret = getReadoutSpeed(&i32); if (ret == FAIL) { diff --git a/slsDetectorSoftware/generator/commands.yaml b/slsDetectorSoftware/generator/commands.yaml index 9e069f830..eb680fe72 100644 --- a/slsDetectorSoftware/generator/commands.yaml +++ b/slsDetectorSoftware/generator/commands.yaml @@ -3611,7 +3611,7 @@ quad: output: [ args.front() ] datastream: - help: "[left|right] [0, 1]\n\t[Eiger] Enables or disables data streaming from left or/and right side of detector for 10 GbE mode. 1 (enabled) by default." + help: "[left|right|top|bottom] [0, 1]\n\t[Eiger] Enables or disables data streaming from left or/and right side of detector for 10 GbE mode. Options: left, right. 1 (enabled) by default.\n\t[Jungfrau][Moench] Enables or disables data stream from top or/and bottom side of receiver. Can change only if numinterfaces is 2. Options: top, bottom.1 (enabled) by default." actions: GET: argc: 1 diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index d107370de..bbc2fde25 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -897,6 +897,22 @@ class Detector { */ void setTransmissionDelay(int step); + /** [Eiger] Module Level disable. Options: LEFT, RIGHT + * [Jungfrau][Moench] Only Receiver level diable. Options: TOP, BOTTOM + * + */ + Result getDataStream(const defs::portPosition port, + Positions pos = {}) const; + + /** [Eiger] enable or disable data streaming from left or right of detector + * for 10GbE. Default: enabled + * [Jungfrau][Moench] Enable/Disable data streaming from the top or bottom + * of receiver. Default: enabled. Disabling of any port works only if number + * of interfaces is 2. + */ + void setDataStream(const defs::portPosition port, const bool enable, + Positions pos = {}); + ///@} /** @name Receiver Configuration */ @@ -1251,16 +1267,6 @@ class Detector { * hardware required). */ void setQuad(const bool enable); - /** [Eiger] */ - Result getDataStream(const defs::portPosition port, - Positions pos = {}) const; - - /** [Eiger] enable or disable data streaming from left or right of detector - * for 10GbE. Default: enabled - */ - void setDataStream(const defs::portPosition port, const bool enable, - Positions pos = {}); - /** [Eiger] Advanced */ Result getTop(Positions pos = {}) const; diff --git a/slsDetectorSoftware/include/sls/Result.h b/slsDetectorSoftware/include/sls/Result.h index 5554bdaa8..f2d6cc27d 100644 --- a/slsDetectorSoftware/include/sls/Result.h +++ b/slsDetectorSoftware/include/sls/Result.h @@ -32,7 +32,7 @@ template > class Result { public: Result() = default; - Result(std::initializer_list list) : vec(list){}; + Result(std::initializer_list list) : vec(list) {}; /** Custom constructor from integer type to Result or Result */ template setTransmissionDelay(step); } +Result Detector::getDataStream(const defs::portPosition port, + Positions pos) const { + return pimpl->Parallel(&Module::getDataStream, pos, port); +} + +void Detector::setDataStream(const defs::portPosition port, const bool enable, + Positions pos) { + pimpl->Parallel(&Module::setDataStream, pos, port, enable); +} + // Receiver Result Detector::getUseReceiverFlag(Positions pos) const { @@ -1746,16 +1756,6 @@ void Detector::setQuad(const bool enable) { pimpl->Parallel(&Module::setQuad, {}, enable); } -Result Detector::getDataStream(const defs::portPosition port, - Positions pos) const { - return pimpl->Parallel(&Module::getDataStream, pos, port); -} - -void Detector::setDataStream(const defs::portPosition port, const bool enable, - Positions pos) { - pimpl->Parallel(&Module::setDataStream, pos, port, enable); -} - Result Detector::getTop(Positions pos) const { return pimpl->Parallel(&Module::getTop, pos); } diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index 17fe8841b..79ae7b74c 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -1407,6 +1407,33 @@ void Module::setTransmissionDelayRight(int value) { sendToDetector(F_SET_TRANSMISSION_DELAY_RIGHT, value, nullptr); } +bool Module::getDataStream(const portPosition port) const { + // receiver only + if (shm()->detType == JUNGFRAU || shm()->detType == MOENCH) { + if (!shm()->useReceiverFlag) { + throw RuntimeError("No receiver to get datastream."); + } + return sendToReceiver(F_RECEIVER_GET_UDP_DATASTREAM, + static_cast(port)); + } else + return sendToDetector(F_GET_DATASTREAM, static_cast(port)); +} + +void Module::setDataStream(const portPosition port, const bool enable) { + int args[]{static_cast(port), static_cast(enable)}; + if (shm()->detType == JUNGFRAU || shm()->detType == MOENCH) { + if (!shm()->useReceiverFlag) { + throw RuntimeError("No receiver to set datastream."); + } + sendToReceiver(F_RECEIVER_SET_UDP_DATASTREAM, args, nullptr); + } else { + sendToDetector(F_SET_DATASTREAM, args, nullptr); + if (shm()->useReceiverFlag) { + sendToReceiver(F_RECEIVER_SET_UDP_DATASTREAM, args, nullptr); + } + } +} + // Receiver Config bool Module::getUseReceiverFlag() const { return shm()->useReceiverFlag; } @@ -1948,18 +1975,6 @@ void Module::setQuad(const bool enable) { } } -bool Module::getDataStream(const portPosition port) const { - return sendToDetector(F_GET_DATASTREAM, static_cast(port)); -} - -void Module::setDataStream(const portPosition port, const bool enable) { - int args[]{static_cast(port), static_cast(enable)}; - sendToDetector(F_SET_DATASTREAM, args, nullptr); - if (shm()->useReceiverFlag) { - sendToReceiver(F_RECEIVER_SET_DATASTREAM, args, nullptr); - } -} - bool Module::getTop() const { return (static_cast(sendToDetector(F_GET_TOP))); } diff --git a/slsDetectorSoftware/src/Module.h b/slsDetectorSoftware/src/Module.h index cf4672c93..a27a3c1bc 100644 --- a/slsDetectorSoftware/src/Module.h +++ b/slsDetectorSoftware/src/Module.h @@ -279,6 +279,8 @@ class Module : public virtual slsDetectorDefs { void setTransmissionDelayLeft(int value); int getTransmissionDelayRight() const; void setTransmissionDelayRight(int value); + bool getDataStream(const portPosition port) const; + void setDataStream(const portPosition port, const bool enable); /************************************************** * * @@ -388,8 +390,6 @@ class Module : public virtual slsDetectorDefs { void pulseChip(int n_pulses = 0); bool getQuad() const; void setQuad(const bool enable); - bool getDataStream(const portPosition port) const; - void setDataStream(const portPosition port, const bool enable); bool getTop() const; void setTop(bool value); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp index 5c91a50fe..f325d0edd 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp @@ -589,46 +589,6 @@ TEST_CASE("quad", "[.detectorintegration]") { } } -TEST_CASE("datastream", "[.detectorintegration]") { - Detector det; - Caller caller(&det); - auto det_type = det.getDetectorType().squash(); - if (det_type == defs::EIGER) { - auto prev_val_left = det.getDataStream(defs::LEFT); - auto prev_val_right = det.getDataStream(defs::RIGHT); - // no "left" or "right" - REQUIRE_THROWS(caller.call("datastream", {"1"}, -1, PUT)); - { - std::ostringstream oss; - caller.call("datastream", {"left", "0"}, -1, PUT, oss); - REQUIRE(oss.str() == "datastream [left, 0]\n"); - } - { - std::ostringstream oss; - caller.call("datastream", {"right", "0"}, -1, PUT, oss); - REQUIRE(oss.str() == "datastream [right, 0]\n"); - } - { - std::ostringstream oss; - caller.call("datastream", {"left", "1"}, -1, PUT, oss); - REQUIRE(oss.str() == "datastream [left, 1]\n"); - } - { - std::ostringstream oss; - caller.call("datastream", {"right", "1"}, -1, PUT, oss); - REQUIRE(oss.str() == "datastream [right, 1]\n"); - } - for (int i = 0; i != det.size(); ++i) { - det.setDataStream(defs::LEFT, prev_val_left[i], {i}); - det.setDataStream(defs::RIGHT, prev_val_right[i], {i}); - } - } else { - REQUIRE_THROWS(caller.call("datastream", {}, -1, GET)); - REQUIRE_THROWS(caller.call("datastream", {"1"}, -1, PUT)); - REQUIRE_THROWS(caller.call("datastream", {"left", "1"}, -1, PUT)); - } -} - TEST_CASE("top", "[.detectorintegration]") { Detector det; Caller caller(&det); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller.cpp b/slsDetectorSoftware/tests/Caller/test-Caller.cpp index 150548f4b..095610b89 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller.cpp @@ -3068,6 +3068,92 @@ TEST_CASE("txdelay", "[.detectorintegration]") { } } +TEST_CASE("datastream", "[.detectorintegration]") { + Detector det; + Caller caller(&det); + auto det_type = det.getDetectorType().squash(); + if (det_type == defs::EIGER) { + auto prev_val_left = det.getDataStream(defs::LEFT); + auto prev_val_right = det.getDataStream(defs::RIGHT); + + // invalid args + REQUIRE_THROWS(caller.call("datastream", {"top", "1"}, -1, PUT)); + REQUIRE_THROWS(caller.call("datastream", {"bottom", "1"}, -1, PUT)); + // no "left" or "right" argument + REQUIRE_THROWS(caller.call("datastream", {"1"}, -1, PUT)); + { + std::ostringstream oss; + caller.call("datastream", {"left", "0"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [left, 0]\n"); + } + { + std::ostringstream oss; + caller.call("datastream", {"right", "0"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [right, 0]\n"); + } + { + std::ostringstream oss; + caller.call("datastream", {"left", "1"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [left, 1]\n"); + } + { + std::ostringstream oss; + caller.call("datastream", {"right", "1"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [right, 1]\n"); + } + for (int i = 0; i != det.size(); ++i) { + det.setDataStream(defs::LEFT, prev_val_left[i], {i}); + det.setDataStream(defs::RIGHT, prev_val_right[i], {i}); + } + } else if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) { + + // throw with 1 interface + if (det.getNumberofUDPInterfaces().squash() == 1) { + REQUIRE_THROWS(caller.call("datastream", {"top", "0"}, -1, PUT)); + } + // 2 interfaces + else { + auto prev_val_top = det.getDataStream(defs::TOP); + auto prev_val_bottom = det.getDataStream(defs::BOTTOM); + + // invalid args + REQUIRE_THROWS(caller.call("datastream", {"left", "1"}, -1, PUT)); + REQUIRE_THROWS(caller.call("datastream", {"right", "1"}, -1, PUT)); + // no "top" or "bottom" argument + REQUIRE_THROWS(caller.call("datastream", {"1"}, -1, PUT)); + { + std::ostringstream oss; + caller.call("datastream", {"top", "0"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [top, 0]\n"); + } + { + std::ostringstream oss; + caller.call("datastream", {"bottom", "0"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [bottom, 0]\n"); + } + { + std::ostringstream oss; + caller.call("datastream", {"top", "1"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [top, 1]\n"); + } + { + std::ostringstream oss; + caller.call("datastream", {"bottom", "1"}, -1, PUT, oss); + REQUIRE(oss.str() == "datastream [bottom, 1]\n"); + } + for (int i = 0; i != det.size(); ++i) { + det.setDataStream(defs::TOP, prev_val_top[i], {i}); + det.setDataStream(defs::BOTTOM, prev_val_bottom[i], {i}); + } + } + } else { + REQUIRE_THROWS(caller.call("datastream", {}, -1, GET)); + REQUIRE_THROWS(caller.call("datastream", {"1"}, -1, PUT)); + REQUIRE_THROWS(caller.call("datastream", {"left", "1"}, -1, PUT)); + REQUIRE_THROWS(caller.call("datastream", {"top", "1"}, -1, PUT)); + } +} + /* ZMQ Streaming Parameters (Receiver<->Client) */ TEST_CASE("zmqport", "[.detectorintegration]") { diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 0c08534a8..82a55e07b 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -207,7 +207,7 @@ int ClientInterface::functionTable(){ flist[F_GET_RECEIVER_STREAMING_HWM] = &ClientInterface::get_streaming_hwm; flist[F_SET_RECEIVER_STREAMING_HWM] = &ClientInterface::set_streaming_hwm; flist[F_RECEIVER_SET_ALL_THRESHOLD] = &ClientInterface::set_all_threshold; - flist[F_RECEIVER_SET_DATASTREAM] = &ClientInterface::set_detector_datastream; + flist[F_RECEIVER_SET_UDP_DATASTREAM] = &ClientInterface::set_port_udp_datastream; flist[F_GET_RECEIVER_ARPING] = &ClientInterface::get_arping; flist[F_SET_RECEIVER_ARPING] = &ClientInterface::set_arping; flist[F_RECEIVER_GET_RECEIVER_ROI] = &ClientInterface::get_receiver_roi; @@ -221,6 +221,7 @@ int ClientInterface::functionTable(){ flist[F_SET_RECEIVER_DBIT_REORDER] = &ClientInterface::set_dbit_reorder; flist[F_RECEIVER_GET_ROI_METADATA] = &ClientInterface::get_roi_metadata; flist[F_SET_RECEIVER_READOUT_SPEED] = &ClientInterface::set_readout_speed; + flist[F_RECEIVER_GET_UDP_DATASTREAM] = &ClientInterface::get_port_udp_datastream; for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) { LOG(logDEBUG1) << "function fnum: " << i << " (" << @@ -383,8 +384,8 @@ int ClientInterface::setup_receiver(Interface &socket) { impl()->setSubPeriod(std::chrono::nanoseconds(arg.subExpTimeNs) + std::chrono::nanoseconds(arg.subDeadTimeNs)); impl()->setActivate(static_cast(arg.activate)); - impl()->setDetectorDataStream(LEFT, arg.dataStreamLeft); - impl()->setDetectorDataStream(RIGHT, arg.dataStreamRight); + impl()->setUDPDataStream(LEFT, arg.dataStreamLeft); + impl()->setUDPDataStream(RIGHT, arg.dataStreamRight); impl()->setQuad(arg.quad == 0 ? false : true); impl()->setThresholdEnergy(arg.thresholdEnergyeV[0]); } @@ -1653,27 +1654,55 @@ int ClientInterface::set_all_threshold(Interface &socket) { return socket.Send(OK); } -int ClientInterface::set_detector_datastream(Interface &socket) { - int args[2]{-1, -1}; - socket.Receive(args); - portPosition port = static_cast(args[0]); +void ClientInterface::validate_port_position(const portPosition port) { + bool exists = false; switch (port) { case LEFT: case RIGHT: + if (detType == EIGER) { + exists = true; + } + break; + case TOP: + case BOTTOM: + if (detType == JUNGFRAU || detType == MOENCH) { + exists = true; + } break; default: throw RuntimeError("Invalid port type"); } - bool enable = static_cast(args[1]); - LOG(logDEBUG1) << "Setting datastream (" << ToString(port) << ") to " + if (!exists) { + modeNotImplemented("Port type", port); + } +} + +int ClientInterface::set_port_udp_datastream(Interface &socket) { + int args[2]{-1, -1}; + socket.Receive(args); + portPosition port = static_cast(args[0]); + validate_port_position(port); + bool enable = static_cast(args[1]); + LOG(logDEBUG1) << "Setting udp datastream (" << ToString(port) << ") to " << ToString(enable); - if (detType != EIGER) - functionNotImplemented(); verifyIdle(socket); - impl()->setDetectorDataStream(port, enable); + if (detType != EIGER && detType != JUNGFRAU && detType != MOENCH) + functionNotImplemented(); + impl()->setUDPDataStream(port, enable); return socket.Send(OK); } +int ClientInterface::get_port_udp_datastream(Interface &socket) { + auto arg = socket.Receive(); + portPosition port = static_cast(arg); + validate_port_position(port); + LOG(logDEBUG1) << "Getting udp datastream (" << ToString(port) << ")"; + if (detType != EIGER && detType != JUNGFRAU && detType != MOENCH) + functionNotImplemented(); + auto retval = static_cast(impl()->getUDPDataStream(port)); + return socket.sendResult(retval); +} + int ClientInterface::get_arping(Interface &socket) { auto retval = static_cast(impl()->getArping()); LOG(logDEBUG1) << "arping thread status:" << retval; diff --git a/slsReceiverSoftware/src/ClientInterface.h b/slsReceiverSoftware/src/ClientInterface.h index f2dbaa764..feedebda2 100644 --- a/slsReceiverSoftware/src/ClientInterface.h +++ b/slsReceiverSoftware/src/ClientInterface.h @@ -154,7 +154,9 @@ class ClientInterface : private virtual slsDetectorDefs { int get_streaming_hwm(ServerInterface &socket); int set_streaming_hwm(ServerInterface &socket); int set_all_threshold(ServerInterface &socket); - int set_detector_datastream(ServerInterface &socket); + void validate_port_position(const portPosition port); + int set_port_udp_datastream(ServerInterface &socket); + int get_port_udp_datastream(ServerInterface &socket); int get_arping(ServerInterface &socket); int set_arping(ServerInterface &socket); int get_receiver_roi(ServerInterface &socket); diff --git a/slsReceiverSoftware/src/DataProcessor.cpp b/slsReceiverSoftware/src/DataProcessor.cpp index e6303c188..f6359274c 100644 --- a/slsReceiverSoftware/src/DataProcessor.cpp +++ b/slsReceiverSoftware/src/DataProcessor.cpp @@ -153,14 +153,14 @@ void DataProcessor::CreateFirstFiles(const std::filesystem::path &filePath, const uint64_t fileIndex, const bool overWriteEnable, const bool silentMode, - const bool detectorDataStream) { + const bool udpDataStream) { if (dataFile == nullptr) { throw RuntimeError("file object not contstructed"); } CloseFiles(); // deactivated (half module/ single port or no roi), dont write file - if (!activated || !detectorDataStream || isOutsideRoi) { + if (!activated || !udpDataStream || isOutsideRoi) { return; } diff --git a/slsReceiverSoftware/src/DataProcessor.h b/slsReceiverSoftware/src/DataProcessor.h index 9aef85445..40037bee2 100644 --- a/slsReceiverSoftware/src/DataProcessor.h +++ b/slsReceiverSoftware/src/DataProcessor.h @@ -63,7 +63,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { void CreateFirstFiles(const std::filesystem::path &filePath, const std::string &fileNamePrefix, const uint64_t fileIndex, const bool overWriteEnable, - const bool silentMode, const bool detectorDataStream); + const bool silentMode, const bool udpDataStream); #ifdef HDF5C uint32_t GetFilesInAcquisition() const; std::string CreateVirtualFile(const std::filesystem::path &filePath, @@ -173,7 +173,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { uint32_t streamingTimerInMs; uint32_t streamingStartFnum; uint32_t currentFreqCount{0}; - struct timespec timerbegin {}; + struct timespec timerbegin{}; bool framePadding; std::atomic startedFlag{false}; std::atomic firstIndex{0}; diff --git a/slsReceiverSoftware/src/File.h b/slsReceiverSoftware/src/File.h index 18bc32496..f52e104f9 100644 --- a/slsReceiverSoftware/src/File.h +++ b/slsReceiverSoftware/src/File.h @@ -17,8 +17,8 @@ namespace sls { class File : private virtual slsDetectorDefs { public: - File(){}; - virtual ~File(){}; + File() {}; + virtual ~File() {}; virtual fileFormat GetFileFormat() const = 0; virtual void CloseFile() = 0; diff --git a/slsReceiverSoftware/src/GeneralData.h b/slsReceiverSoftware/src/GeneralData.h index b5b6e0b26..7cebb91e6 100644 --- a/slsReceiverSoftware/src/GeneralData.h +++ b/slsReceiverSoftware/src/GeneralData.h @@ -193,8 +193,8 @@ class GeneralData { slsDetectorDefs::NO_DISCARD}; /* actual image size after ctboffset and ctbreorder */ uint32_t actualImageSize{0}; - GeneralData(){}; - virtual ~GeneralData(){}; + GeneralData() {}; + virtual ~GeneralData() {}; // Returns the pixel depth in byte, 4 bits being 0.5 byte float GetPixelDepth() { return float(dynamicRange) / 8; } diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 292c5df29..b495b5789 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -188,7 +188,7 @@ void Implementation::SetupListener(int i) { listener[i]->SetEthernetInterface(eth[i]); listener[i]->SetActivate(activated); listener[i]->SetIsOutsideRoi(portRois[i].noRoi()); - listener[i]->SetDetectorDatastream(detectorDataStream[i]); + listener[i]->SetUDPDatastream(udpDataStream[i]); listener[i]->SetSilentMode(silentMode); } @@ -606,7 +606,7 @@ double Implementation::getProgress() const { double progress = 0; int index = 0; for (const auto &it : listener) { - if (detectorDataStream[index] && it->GetStartedFlag()) { + if (udpDataStream[index] && it->GetStartedFlag()) { progress += (it->GetListenedIndex() + 1) / totalFrames; } ++index; @@ -746,9 +746,9 @@ void Implementation::stopReceiver() { std::string summary; if (!activated) { summary = "\n\tDeactivated Receiver"; - } else if (!detectorDataStream[i]) { - summary = (i == 0 ? "\n\tDeactivated Left Port" - : "\n\tDeactivated Right Port"); + } else if (!udpDataStream[i]) { + summary = "\n\tDeactivated " + ToString(udpDataStreamType[i]) + + " Port"; } else if (portRois[i].noRoi()) { summary = "\n\tNo Roi on Port[" + std::to_string(i) + ']'; } else { @@ -895,9 +895,9 @@ void Implementation::SetupWriter() { std::string fileNamePrefix = fileName + "_d" + std::to_string(modulePos * generalData->numUDPInterfaces + i); - dataProcessor[i]->CreateFirstFiles( - filePath, fileNamePrefix, fileIndex, overwriteEnable, - silentMode, detectorDataStream[i]); + dataProcessor[i]->CreateFirstFiles(filePath, fileNamePrefix, + fileIndex, overwriteEnable, + silentMode, udpDataStream[i]); } } catch (const RuntimeError &e) { shutDownUDPSockets(); @@ -1612,15 +1612,15 @@ void Implementation::setTenGigaEnable(const bool b) { // datastream can be disabled/enabled only for Eiger 10GbE if (generalData->detType == EIGER) { if (!b) { - detectorDataStream[LEFT] = 1; - detectorDataStream[RIGHT] = 1; + udpDataStream[LEFT] = 1; + udpDataStream[RIGHT] = 1; } else { - detectorDataStream[LEFT] = detectorDataStream10GbE[LEFT]; - detectorDataStream[RIGHT] = detectorDataStream10GbE[RIGHT]; + udpDataStream[LEFT] = udpDataStream10GbE[LEFT]; + udpDataStream[RIGHT] = udpDataStream10GbE[RIGHT]; } LOG(logDEBUG) << "Detector datastream updated [Left: " - << ToString(detectorDataStream[LEFT]) - << ", Right: " << ToString(detectorDataStream[RIGHT]) + << ToString(udpDataStream[LEFT]) + << ", Right: " << ToString(udpDataStream[RIGHT]) << "]"; } } @@ -1670,24 +1670,39 @@ void Implementation::setActivate(bool enable) { LOG(logINFO) << "Activation: " << (activated ? "enabled" : "disabled"); } -bool Implementation::getDetectorDataStream(const portPosition port) const { - int index = (port == LEFT ? 0 : 1); - return detectorDataStream[index]; +bool Implementation::getUDPDataStream(const portPosition port) const { + int index = 0; + if (port == BOTTOM || port == RIGHT) + index = 1; + return udpDataStream[index]; } -void Implementation::setDetectorDataStream(const portPosition port, - const bool enable) { - int index = (port == LEFT ? 0 : 1); - detectorDataStream10GbE[index] = enable; - LOG(logINFO) << "Detector 10GbE datastream (" << ToString(port) - << " Port): " << ToString(detectorDataStream10GbE[index]); - // update datastream for 10g - if (generalData->tengigaEnable) { - detectorDataStream[index] = detectorDataStream10GbE[index]; - LOG(logDEBUG) << "Detector datastream updated [" - << (index == 0 ? "Left" : "Right") - << "] : " << ToString(detectorDataStream[index]); +void Implementation::setUDPDataStream(const portPosition port, + const bool enable) { + int index = 0; + if (port == BOTTOM || port == RIGHT) + index = 1; + udpDataStreamType[index] = port; + // jungfrau and moench: straightforward + if (generalData->detType != EIGER) { + udpDataStream[index] = enable; + LOG(logINFO) << "Detector datastream (" << ToString(port) + << " Port): " << ToString(udpDataStream[index]); } + // eiger: data stream can be disabled/enabled only for 10GbE + else { + udpDataStream10GbE[index] = enable; + LOG(logINFO) << "Detector 10GbE datastream (" << ToString(port) + << " Port): " << ToString(udpDataStream10GbE[index]); + // update datastream for 10g + if (generalData->tengigaEnable) { + udpDataStream[index] = udpDataStream10GbE[index]; + LOG(logDEBUG) << "Detector datastream updated (" << ToString(port) + << " Port): " << ToString(udpDataStream[index]); + } + } + for (size_t i = 0; i != listener.size(); ++i) + listener[i]->SetUDPDatastream(udpDataStream[i]); } int Implementation::getReadNRows() const { return readNRows; } diff --git a/slsReceiverSoftware/src/Implementation.h b/slsReceiverSoftware/src/Implementation.h index 3680cb84e..7e29c1e4e 100644 --- a/slsReceiverSoftware/src/Implementation.h +++ b/slsReceiverSoftware/src/Implementation.h @@ -225,12 +225,11 @@ class Implementation : private virtual slsDetectorDefs { /** [Eiger] If deactivated, receiver will create dummy data if deactivated * padding is enabled (as it will receive nothing from detector) */ void setActivate(const bool enable); - bool getDetectorDataStream(const portPosition port) const; - /** [Eiger] If datastream is disabled, receiver will create dummy data if - * deactivated - * padding for that port is enabled (as it will receive nothing from - * detector) */ - void setDetectorDataStream(const portPosition port, const bool enable); + bool getUDPDataStream(const portPosition port) const; + /** [Jungfrau][Moench] deactivated at receiver level only + * [Eiger] deactivated at module level + */ + void setUDPDataStream(const portPosition port, const bool enable); int getReadNRows() const; /* [Eiger][Jungfrau][Moench] */ void setReadNRows(const int value); @@ -366,8 +365,10 @@ class Implementation : private virtual slsDetectorDefs { bool flipRows{false}; bool quadEnable{false}; bool activated{true}; - std::array detectorDataStream = {{true, true}}; - std::array detectorDataStream10GbE = {{true, true}}; + std::array udpDataStream = {{true, true}}; + std::array udpDataStreamType = {{LEFT, RIGHT}}; + // only for Eiger to remember (10Gbe selectable) + std::array udpDataStream10GbE = {{true, true}}; int readNRows{0}; int thresholdEnergyeV{-1}; std::array thresholdAllEnergyeV = {{-1, -1, -1}}; diff --git a/slsReceiverSoftware/src/Listener.cpp b/slsReceiverSoftware/src/Listener.cpp index f1450e847..08443b5cb 100644 --- a/slsReceiverSoftware/src/Listener.cpp +++ b/slsReceiverSoftware/src/Listener.cpp @@ -85,17 +85,17 @@ void Listener::SetEthernetInterface(const std::string e) { void Listener::SetActivate(bool enable) { activated = enable; - disabledPort = (!activated || !detectorDataStream || isOutsideRoi); + disabledPort = (!activated || !udpDataStream || isOutsideRoi); } -void Listener::SetDetectorDatastream(bool enable) { - detectorDataStream = enable; - disabledPort = (!activated || !detectorDataStream || isOutsideRoi); +void Listener::SetUDPDatastream(bool enable) { + udpDataStream = enable; + disabledPort = (!activated || !udpDataStream || isOutsideRoi); } void Listener::SetIsOutsideRoi(bool enable) { isOutsideRoi = enable; - disabledPort = (!activated || !detectorDataStream || isOutsideRoi); + disabledPort = (!activated || !udpDataStream || isOutsideRoi); } void Listener::SetSilentMode(bool enable) { silentMode = enable; } diff --git a/slsReceiverSoftware/src/Listener.h b/slsReceiverSoftware/src/Listener.h index 628c8e349..57caacb57 100644 --- a/slsReceiverSoftware/src/Listener.h +++ b/slsReceiverSoftware/src/Listener.h @@ -42,7 +42,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject { void SetUdpPortNumber(const uint16_t portNumber); void SetEthernetInterface(const std::string e); void SetActivate(bool enable); - void SetDetectorDatastream(bool enable); + void SetUDPDatastream(bool enable); void SetIsOutsideRoi(bool enable); void SetSilentMode(bool enable); @@ -115,7 +115,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject { uint16_t udpPortNumber{0}; std::string eth; bool activated{false}; - bool detectorDataStream{true}; + bool udpDataStream{true}; bool isOutsideRoi{false}; bool silentMode; bool disabledPort{false}; diff --git a/slsReceiverSoftware/tests/test-ArrangeDataBasedOnBitList.cpp b/slsReceiverSoftware/tests/test-ArrangeDataBasedOnBitList.cpp index 54f60d0cb..651a7815c 100644 --- a/slsReceiverSoftware/tests/test-ArrangeDataBasedOnBitList.cpp +++ b/slsReceiverSoftware/tests/test-ArrangeDataBasedOnBitList.cpp @@ -47,8 +47,8 @@ class GeneralDataTest : public GeneralData { // dummy DataProcessor class for testing class DataProcessorTest : public DataProcessor { public: - DataProcessorTest() : DataProcessor(0){}; - ~DataProcessorTest(){}; + DataProcessorTest() : DataProcessor(0) {}; + ~DataProcessorTest() {}; void ArrangeDbitData(size_t &size, char *data) { DataProcessor::ArrangeDbitData(size, data); } diff --git a/slsSupportLib/include/sls/ClientSocket.h b/slsSupportLib/include/sls/ClientSocket.h index dcfc02b25..a31e2a269 100644 --- a/slsSupportLib/include/sls/ClientSocket.h +++ b/slsSupportLib/include/sls/ClientSocket.h @@ -21,29 +21,29 @@ class ClientSocket : public DataSocket { private: void readReply(int &ret, void *retval, size_t retval_size); - struct sockaddr_in serverAddr {}; + struct sockaddr_in serverAddr{}; std::string socketType; }; class ReceiverSocket : public ClientSocket { public: ReceiverSocket(const std::string &hostname, uint16_t port_number) - : ClientSocket("Receiver", hostname, port_number){}; - ReceiverSocket(struct sockaddr_in addr) : ClientSocket("Receiver", addr){}; + : ClientSocket("Receiver", hostname, port_number) {}; + ReceiverSocket(struct sockaddr_in addr) : ClientSocket("Receiver", addr) {}; }; class DetectorSocket : public ClientSocket { public: DetectorSocket(const std::string &hostname, uint16_t port_number) - : ClientSocket("Detector", hostname, port_number){}; - DetectorSocket(struct sockaddr_in addr) : ClientSocket("Detector", addr){}; + : ClientSocket("Detector", hostname, port_number) {}; + DetectorSocket(struct sockaddr_in addr) : ClientSocket("Detector", addr) {}; }; class GuiSocket : public ClientSocket { public: GuiSocket(const std::string &hostname, uint16_t port_number) - : ClientSocket("Gui", hostname, port_number){}; - GuiSocket(struct sockaddr_in addr) : ClientSocket("Gui", addr){}; + : ClientSocket("Gui", hostname, port_number) {}; + GuiSocket(struct sockaddr_in addr) : ClientSocket("Gui", addr) {}; }; }; // namespace sls diff --git a/slsSupportLib/include/sls/Timer.h b/slsSupportLib/include/sls/Timer.h index b22909b33..7409bb8fe 100644 --- a/slsSupportLib/include/sls/Timer.h +++ b/slsSupportLib/include/sls/Timer.h @@ -33,5 +33,5 @@ class Timer { std::string name_; }; -}; // namespace sls +}; // namespace sls #endif // TIMER_H diff --git a/slsSupportLib/include/sls/logger.h b/slsSupportLib/include/sls/logger.h index 5754286e7..3f73f0c1f 100644 --- a/slsSupportLib/include/sls/logger.h +++ b/slsSupportLib/include/sls/logger.h @@ -42,7 +42,7 @@ class Logger { public: Logger() = default; - explicit Logger(TLogLevel level) : level(level){}; + explicit Logger(TLogLevel level) : level(level) {}; ~Logger() { // output in the destructor to allow for << syntax os << RESET << '\n'; diff --git a/slsSupportLib/include/sls/sls_detector_defs.h b/slsSupportLib/include/sls/sls_detector_defs.h index 283eb2f5e..c06c90325 100644 --- a/slsSupportLib/include/sls/sls_detector_defs.h +++ b/slsSupportLib/include/sls/sls_detector_defs.h @@ -137,7 +137,7 @@ class slsDetectorDefs { int x{0}; int y{0}; xy() = default; - xy(int x, int y) : x(x), y(y){}; + xy(int x, int y) : x(x), y(y) {}; constexpr bool operator==(const xy &other) const { return ((x == other.x) && (y == other.y)); } @@ -223,7 +223,7 @@ class slsDetectorDefs { struct Hz { int value{0}; - explicit Hz(int v) : value(v){}; + explicit Hz(int v) : value(v) {}; constexpr bool operator==(const Hz &other) const { return (value == other.value); } @@ -252,9 +252,9 @@ class slsDetectorDefs { int ymin{-1}; int ymax{-1}; ROI() = default; - ROI(int xmin, int xmax) : xmin(xmin), xmax(xmax){}; + ROI(int xmin, int xmax) : xmin(xmin), xmax(xmax) {}; ROI(int xmin, int xmax, int ymin, int ymax) - : xmin(xmin), xmax(xmax), ymin(ymin), ymax(ymax){}; + : xmin(xmin), xmax(xmax), ymin(ymin), ymax(ymax) {}; constexpr int width() const { return (xmax - xmin + 1); } constexpr int height() const { return (ymax - ymin + 1); } constexpr std::array getIntArray() const { diff --git a/slsSupportLib/include/sls/sls_detector_funcs.h b/slsSupportLib/include/sls/sls_detector_funcs.h index c2fd7eb82..0acf62990 100755 --- a/slsSupportLib/include/sls/sls_detector_funcs.h +++ b/slsSupportLib/include/sls/sls_detector_funcs.h @@ -409,7 +409,7 @@ enum detFuncs { F_GET_RECEIVER_STREAMING_HWM, F_SET_RECEIVER_STREAMING_HWM, F_RECEIVER_SET_ALL_THRESHOLD, - F_RECEIVER_SET_DATASTREAM, + F_RECEIVER_SET_UDP_DATASTREAM, F_GET_RECEIVER_ARPING, F_SET_RECEIVER_ARPING, F_RECEIVER_GET_RECEIVER_ROI, @@ -423,6 +423,7 @@ enum detFuncs { F_SET_RECEIVER_DBIT_REORDER, F_RECEIVER_GET_ROI_METADATA, F_SET_RECEIVER_READOUT_SPEED, + F_RECEIVER_GET_UDP_DATASTREAM, NUM_REC_FUNCTIONS }; @@ -828,7 +829,7 @@ const char* getFunctionNameFromEnum(enum detFuncs func) { case F_GET_RECEIVER_STREAMING_HWM: return "F_GET_RECEIVER_STREAMING_HWM"; case F_SET_RECEIVER_STREAMING_HWM: return "F_SET_RECEIVER_STREAMING_HWM"; case F_RECEIVER_SET_ALL_THRESHOLD: return "F_RECEIVER_SET_ALL_THRESHOLD"; - case F_RECEIVER_SET_DATASTREAM: return "F_RECEIVER_SET_DATASTREAM"; + case F_RECEIVER_SET_UDP_DATASTREAM: return "F_RECEIVER_SET_UDP_DATASTREAM"; case F_GET_RECEIVER_ARPING: return "F_GET_RECEIVER_ARPING"; case F_SET_RECEIVER_ARPING: return "F_SET_RECEIVER_ARPING"; case F_RECEIVER_GET_RECEIVER_ROI: return "F_RECEIVER_GET_RECEIVER_ROI"; @@ -842,6 +843,7 @@ const char* getFunctionNameFromEnum(enum detFuncs func) { case F_SET_RECEIVER_DBIT_REORDER: return "F_SET_RECEIVER_DBIT_REORDER"; case F_RECEIVER_GET_ROI_METADATA: return "F_RECEIVER_GET_ROI_METADATA"; case F_SET_RECEIVER_READOUT_SPEED: return "F_SET_RECEIVER_READOUT_SPEED"; + case F_RECEIVER_GET_UDP_DATASTREAM: return "F_RECEIVER_GET_UDP_DATASTREAM"; case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS"; default: return "Unknown Function"; diff --git a/slsSupportLib/src/UdpRxSocket.cpp b/slsSupportLib/src/UdpRxSocket.cpp index 2cb8c079c..b28c70ed6 100644 --- a/slsSupportLib/src/UdpRxSocket.cpp +++ b/slsSupportLib/src/UdpRxSocket.cpp @@ -18,7 +18,7 @@ namespace sls { UdpRxSocket::UdpRxSocket(uint16_t port, ssize_t packet_size, const char *hostname, int kernel_buffer_size) : packet_size_(packet_size) { - struct addrinfo hints {}; + struct addrinfo hints{}; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; diff --git a/slsSupportLib/src/ZmqSocket.cpp b/slsSupportLib/src/ZmqSocket.cpp index 2fafe4799..eed0c7221 100644 --- a/slsSupportLib/src/ZmqSocket.cpp +++ b/slsSupportLib/src/ZmqSocket.cpp @@ -531,7 +531,7 @@ void ZmqSocket::PrintError() { // Nested class to do RAII handling of socket descriptors ZmqSocket::mySocketDescriptors::mySocketDescriptors(bool server) - : server(server), contextDescriptor(nullptr), socketDescriptor(nullptr){}; + : server(server), contextDescriptor(nullptr), socketDescriptor(nullptr) {}; ZmqSocket::mySocketDescriptors::~mySocketDescriptors() { Disconnect(); Close(); diff --git a/slsSupportLib/src/md5.c b/slsSupportLib/src/md5.c index 99a84f7ac..ecbd095c5 100644 --- a/slsSupportLib/src/md5.c +++ b/slsSupportLib/src/md5.c @@ -71,244 +71,244 @@ namespace sls { a += b; \ }; -/* - * Implemented from RFC1321 The MD5 Message-Digest Algorithm - */ + /* + * Implemented from RFC1321 The MD5 Message-Digest Algorithm + */ #define INIT_DATA_A (unsigned long)0x67452301L #define INIT_DATA_B (unsigned long)0xefcdab89L #define INIT_DATA_C (unsigned long)0x98badcfeL #define INIT_DATA_D (unsigned long)0x10325476L -int MD5_Init_SLS(MD5_CTX *c) { - memset(c, 0, sizeof(*c)); - c->A = INIT_DATA_A; - c->B = INIT_DATA_B; - c->C = INIT_DATA_C; - c->D = INIT_DATA_D; - return 1; -} + int MD5_Init_SLS(MD5_CTX * c) { + memset(c, 0, sizeof(*c)); + c->A = INIT_DATA_A; + c->B = INIT_DATA_B; + c->C = INIT_DATA_C; + c->D = INIT_DATA_D; + return 1; + } -void md5_block_data_order(MD5_CTX *c, const void *data_, size_t num) { - const unsigned char *data = data_; - register unsigned MD32_REG_T A, B, C, D, l; - /* See comment in crypto/sha/sha_local.h for details. */ - unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7, XX8, XX9, XX10, - XX11, XX12, XX13, XX14, XX15; + void md5_block_data_order(MD5_CTX * c, const void *data_, size_t num) { + const unsigned char *data = data_; + register unsigned MD32_REG_T A, B, C, D, l; + /* See comment in crypto/sha/sha_local.h for details. */ + unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7, XX8, XX9, + XX10, XX11, XX12, XX13, XX14, XX15; #define X(i) XX##i - A = c->A; - B = c->B; - C = c->C; - D = c->D; + A = c->A; + B = c->B; + C = c->C; + D = c->D; - for (; num--;) { - (void)HOST_c2l(data, l); - X(0) = l; - (void)HOST_c2l(data, l); - X(1) = l; - /* Round 0 */ - R0(A, B, C, D, X(0), 7, 0xd76aa478L); - (void)HOST_c2l(data, l); - X(2) = l; - R0(D, A, B, C, X(1), 12, 0xe8c7b756L); - (void)HOST_c2l(data, l); - X(3) = l; - R0(C, D, A, B, X(2), 17, 0x242070dbL); - (void)HOST_c2l(data, l); - X(4) = l; - R0(B, C, D, A, X(3), 22, 0xc1bdceeeL); - (void)HOST_c2l(data, l); - X(5) = l; - R0(A, B, C, D, X(4), 7, 0xf57c0fafL); - (void)HOST_c2l(data, l); - X(6) = l; - R0(D, A, B, C, X(5), 12, 0x4787c62aL); - (void)HOST_c2l(data, l); - X(7) = l; - R0(C, D, A, B, X(6), 17, 0xa8304613L); - (void)HOST_c2l(data, l); - X(8) = l; - R0(B, C, D, A, X(7), 22, 0xfd469501L); - (void)HOST_c2l(data, l); - X(9) = l; - R0(A, B, C, D, X(8), 7, 0x698098d8L); - (void)HOST_c2l(data, l); - X(10) = l; - R0(D, A, B, C, X(9), 12, 0x8b44f7afL); - (void)HOST_c2l(data, l); - X(11) = l; - R0(C, D, A, B, X(10), 17, 0xffff5bb1L); - (void)HOST_c2l(data, l); - X(12) = l; - R0(B, C, D, A, X(11), 22, 0x895cd7beL); - (void)HOST_c2l(data, l); - X(13) = l; - R0(A, B, C, D, X(12), 7, 0x6b901122L); - (void)HOST_c2l(data, l); - X(14) = l; - R0(D, A, B, C, X(13), 12, 0xfd987193L); - (void)HOST_c2l(data, l); - X(15) = l; - R0(C, D, A, B, X(14), 17, 0xa679438eL); - R0(B, C, D, A, X(15), 22, 0x49b40821L); - /* Round 1 */ - R1(A, B, C, D, X(1), 5, 0xf61e2562L); - R1(D, A, B, C, X(6), 9, 0xc040b340L); - R1(C, D, A, B, X(11), 14, 0x265e5a51L); - R1(B, C, D, A, X(0), 20, 0xe9b6c7aaL); - R1(A, B, C, D, X(5), 5, 0xd62f105dL); - R1(D, A, B, C, X(10), 9, 0x02441453L); - R1(C, D, A, B, X(15), 14, 0xd8a1e681L); - R1(B, C, D, A, X(4), 20, 0xe7d3fbc8L); - R1(A, B, C, D, X(9), 5, 0x21e1cde6L); - R1(D, A, B, C, X(14), 9, 0xc33707d6L); - R1(C, D, A, B, X(3), 14, 0xf4d50d87L); - R1(B, C, D, A, X(8), 20, 0x455a14edL); - R1(A, B, C, D, X(13), 5, 0xa9e3e905L); - R1(D, A, B, C, X(2), 9, 0xfcefa3f8L); - R1(C, D, A, B, X(7), 14, 0x676f02d9L); - R1(B, C, D, A, X(12), 20, 0x8d2a4c8aL); - /* Round 2 */ - R2(A, B, C, D, X(5), 4, 0xfffa3942L); - R2(D, A, B, C, X(8), 11, 0x8771f681L); - R2(C, D, A, B, X(11), 16, 0x6d9d6122L); - R2(B, C, D, A, X(14), 23, 0xfde5380cL); - R2(A, B, C, D, X(1), 4, 0xa4beea44L); - R2(D, A, B, C, X(4), 11, 0x4bdecfa9L); - R2(C, D, A, B, X(7), 16, 0xf6bb4b60L); - R2(B, C, D, A, X(10), 23, 0xbebfbc70L); - R2(A, B, C, D, X(13), 4, 0x289b7ec6L); - R2(D, A, B, C, X(0), 11, 0xeaa127faL); - R2(C, D, A, B, X(3), 16, 0xd4ef3085L); - R2(B, C, D, A, X(6), 23, 0x04881d05L); - R2(A, B, C, D, X(9), 4, 0xd9d4d039L); - R2(D, A, B, C, X(12), 11, 0xe6db99e5L); - R2(C, D, A, B, X(15), 16, 0x1fa27cf8L); - R2(B, C, D, A, X(2), 23, 0xc4ac5665L); - /* Round 3 */ - R3(A, B, C, D, X(0), 6, 0xf4292244L); - R3(D, A, B, C, X(7), 10, 0x432aff97L); - R3(C, D, A, B, X(14), 15, 0xab9423a7L); - R3(B, C, D, A, X(5), 21, 0xfc93a039L); - R3(A, B, C, D, X(12), 6, 0x655b59c3L); - R3(D, A, B, C, X(3), 10, 0x8f0ccc92L); - R3(C, D, A, B, X(10), 15, 0xffeff47dL); - R3(B, C, D, A, X(1), 21, 0x85845dd1L); - R3(A, B, C, D, X(8), 6, 0x6fa87e4fL); - R3(D, A, B, C, X(15), 10, 0xfe2ce6e0L); - R3(C, D, A, B, X(6), 15, 0xa3014314L); - R3(B, C, D, A, X(13), 21, 0x4e0811a1L); - R3(A, B, C, D, X(4), 6, 0xf7537e82L); - R3(D, A, B, C, X(11), 10, 0xbd3af235L); - R3(C, D, A, B, X(2), 15, 0x2ad7d2bbL); - R3(B, C, D, A, X(9), 21, 0xeb86d391L); + for (; num--;) { + (void)HOST_c2l(data, l); + X(0) = l; + (void)HOST_c2l(data, l); + X(1) = l; + /* Round 0 */ + R0(A, B, C, D, X(0), 7, 0xd76aa478L); + (void)HOST_c2l(data, l); + X(2) = l; + R0(D, A, B, C, X(1), 12, 0xe8c7b756L); + (void)HOST_c2l(data, l); + X(3) = l; + R0(C, D, A, B, X(2), 17, 0x242070dbL); + (void)HOST_c2l(data, l); + X(4) = l; + R0(B, C, D, A, X(3), 22, 0xc1bdceeeL); + (void)HOST_c2l(data, l); + X(5) = l; + R0(A, B, C, D, X(4), 7, 0xf57c0fafL); + (void)HOST_c2l(data, l); + X(6) = l; + R0(D, A, B, C, X(5), 12, 0x4787c62aL); + (void)HOST_c2l(data, l); + X(7) = l; + R0(C, D, A, B, X(6), 17, 0xa8304613L); + (void)HOST_c2l(data, l); + X(8) = l; + R0(B, C, D, A, X(7), 22, 0xfd469501L); + (void)HOST_c2l(data, l); + X(9) = l; + R0(A, B, C, D, X(8), 7, 0x698098d8L); + (void)HOST_c2l(data, l); + X(10) = l; + R0(D, A, B, C, X(9), 12, 0x8b44f7afL); + (void)HOST_c2l(data, l); + X(11) = l; + R0(C, D, A, B, X(10), 17, 0xffff5bb1L); + (void)HOST_c2l(data, l); + X(12) = l; + R0(B, C, D, A, X(11), 22, 0x895cd7beL); + (void)HOST_c2l(data, l); + X(13) = l; + R0(A, B, C, D, X(12), 7, 0x6b901122L); + (void)HOST_c2l(data, l); + X(14) = l; + R0(D, A, B, C, X(13), 12, 0xfd987193L); + (void)HOST_c2l(data, l); + X(15) = l; + R0(C, D, A, B, X(14), 17, 0xa679438eL); + R0(B, C, D, A, X(15), 22, 0x49b40821L); + /* Round 1 */ + R1(A, B, C, D, X(1), 5, 0xf61e2562L); + R1(D, A, B, C, X(6), 9, 0xc040b340L); + R1(C, D, A, B, X(11), 14, 0x265e5a51L); + R1(B, C, D, A, X(0), 20, 0xe9b6c7aaL); + R1(A, B, C, D, X(5), 5, 0xd62f105dL); + R1(D, A, B, C, X(10), 9, 0x02441453L); + R1(C, D, A, B, X(15), 14, 0xd8a1e681L); + R1(B, C, D, A, X(4), 20, 0xe7d3fbc8L); + R1(A, B, C, D, X(9), 5, 0x21e1cde6L); + R1(D, A, B, C, X(14), 9, 0xc33707d6L); + R1(C, D, A, B, X(3), 14, 0xf4d50d87L); + R1(B, C, D, A, X(8), 20, 0x455a14edL); + R1(A, B, C, D, X(13), 5, 0xa9e3e905L); + R1(D, A, B, C, X(2), 9, 0xfcefa3f8L); + R1(C, D, A, B, X(7), 14, 0x676f02d9L); + R1(B, C, D, A, X(12), 20, 0x8d2a4c8aL); + /* Round 2 */ + R2(A, B, C, D, X(5), 4, 0xfffa3942L); + R2(D, A, B, C, X(8), 11, 0x8771f681L); + R2(C, D, A, B, X(11), 16, 0x6d9d6122L); + R2(B, C, D, A, X(14), 23, 0xfde5380cL); + R2(A, B, C, D, X(1), 4, 0xa4beea44L); + R2(D, A, B, C, X(4), 11, 0x4bdecfa9L); + R2(C, D, A, B, X(7), 16, 0xf6bb4b60L); + R2(B, C, D, A, X(10), 23, 0xbebfbc70L); + R2(A, B, C, D, X(13), 4, 0x289b7ec6L); + R2(D, A, B, C, X(0), 11, 0xeaa127faL); + R2(C, D, A, B, X(3), 16, 0xd4ef3085L); + R2(B, C, D, A, X(6), 23, 0x04881d05L); + R2(A, B, C, D, X(9), 4, 0xd9d4d039L); + R2(D, A, B, C, X(12), 11, 0xe6db99e5L); + R2(C, D, A, B, X(15), 16, 0x1fa27cf8L); + R2(B, C, D, A, X(2), 23, 0xc4ac5665L); + /* Round 3 */ + R3(A, B, C, D, X(0), 6, 0xf4292244L); + R3(D, A, B, C, X(7), 10, 0x432aff97L); + R3(C, D, A, B, X(14), 15, 0xab9423a7L); + R3(B, C, D, A, X(5), 21, 0xfc93a039L); + R3(A, B, C, D, X(12), 6, 0x655b59c3L); + R3(D, A, B, C, X(3), 10, 0x8f0ccc92L); + R3(C, D, A, B, X(10), 15, 0xffeff47dL); + R3(B, C, D, A, X(1), 21, 0x85845dd1L); + R3(A, B, C, D, X(8), 6, 0x6fa87e4fL); + R3(D, A, B, C, X(15), 10, 0xfe2ce6e0L); + R3(C, D, A, B, X(6), 15, 0xa3014314L); + R3(B, C, D, A, X(13), 21, 0x4e0811a1L); + R3(A, B, C, D, X(4), 6, 0xf7537e82L); + R3(D, A, B, C, X(11), 10, 0xbd3af235L); + R3(C, D, A, B, X(2), 15, 0x2ad7d2bbL); + R3(B, C, D, A, X(9), 21, 0xeb86d391L); - A = c->A += A; - B = c->B += B; - C = c->C += C; - D = c->D += D; - } -} - -/** - * Modification 2021 Paul Scherrer Institut - * from md32_common.h - */ -int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) { - const unsigned char *data = data_; - unsigned char *p; - HASH_LONG l; - size_t n; - - if (len == 0) - return 1; - - l = (c->Nl + (((HASH_LONG)len) << 3)) & 0xffffffffUL; - if (l < c->Nl) /* overflow */ - c->Nh++; - c->Nh += (HASH_LONG)(len >> 29); /* might cause compiler warning on - * 16-bit */ - c->Nl = l; - - n = c->num; - if (n != 0) { - p = (unsigned char *)c->data; - - if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { - memcpy(p + n, data, HASH_CBLOCK - n); - HASH_BLOCK_DATA_ORDER(c, p, 1); - n = HASH_CBLOCK - n; - data += n; - len -= n; - c->num = 0; - /* - * We use memset rather than OPENSSL_cleanse() here deliberately. - * Using OPENSSL_cleanse() here could be a performance issue. It - * will get properly cleansed on finalisation so this isn't a - * security problem. - */ - memset(p, 0, HASH_CBLOCK); /* keep it zeroed */ - } else { - memcpy(p + n, data, len); - c->num += (unsigned int)len; - return 1; + A = c->A += A; + B = c->B += B; + C = c->C += C; + D = c->D += D; } } - n = len / HASH_CBLOCK; - if (n > 0) { - HASH_BLOCK_DATA_ORDER(c, data, n); - n *= HASH_CBLOCK; - data += n; - len -= n; + /** + * Modification 2021 Paul Scherrer Institut + * from md32_common.h + */ + int HASH_UPDATE(HASH_CTX * c, const void *data_, size_t len) { + const unsigned char *data = data_; + unsigned char *p; + HASH_LONG l; + size_t n; + + if (len == 0) + return 1; + + l = (c->Nl + (((HASH_LONG)len) << 3)) & 0xffffffffUL; + if (l < c->Nl) /* overflow */ + c->Nh++; + c->Nh += (HASH_LONG)(len >> 29); /* might cause compiler warning on + * 16-bit */ + c->Nl = l; + + n = c->num; + if (n != 0) { + p = (unsigned char *)c->data; + + if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { + memcpy(p + n, data, HASH_CBLOCK - n); + HASH_BLOCK_DATA_ORDER(c, p, 1); + n = HASH_CBLOCK - n; + data += n; + len -= n; + c->num = 0; + /* + * We use memset rather than OPENSSL_cleanse() here + * deliberately. Using OPENSSL_cleanse() here could be a + * performance issue. It will get properly cleansed on + * finalisation so this isn't a security problem. + */ + memset(p, 0, HASH_CBLOCK); /* keep it zeroed */ + } else { + memcpy(p + n, data, len); + c->num += (unsigned int)len; + return 1; + } + } + + n = len / HASH_CBLOCK; + if (n > 0) { + HASH_BLOCK_DATA_ORDER(c, data, n); + n *= HASH_CBLOCK; + data += n; + len -= n; + } + + if (len != 0) { + p = (unsigned char *)c->data; + c->num = (unsigned int)len; + memcpy(p, data, len); + } + return 1; } - if (len != 0) { - p = (unsigned char *)c->data; - c->num = (unsigned int)len; - memcpy(p, data, len); - } - return 1; -} + /** + * Modification 2021 Paul Scherrer Institut + * from md32_common.h + */ + int HASH_FINAL(unsigned char *md, HASH_CTX *c) { + unsigned char *p = (unsigned char *)c->data; + size_t n = c->num; -/** - * Modification 2021 Paul Scherrer Institut - * from md32_common.h - */ -int HASH_FINAL(unsigned char *md, HASH_CTX *c) { - unsigned char *p = (unsigned char *)c->data; - size_t n = c->num; + p[n] = 0x80; /* there is always room for one */ + n++; - p[n] = 0x80; /* there is always room for one */ - n++; + if (n > (HASH_CBLOCK - 8)) { + memset(p + n, 0, HASH_CBLOCK - n); + n = 0; + HASH_BLOCK_DATA_ORDER(c, p, 1); + } + memset(p + n, 0, HASH_CBLOCK - 8 - n); - if (n > (HASH_CBLOCK - 8)) { - memset(p + n, 0, HASH_CBLOCK - n); - n = 0; - HASH_BLOCK_DATA_ORDER(c, p, 1); - } - memset(p + n, 0, HASH_CBLOCK - 8 - n); - - p += HASH_CBLOCK - 8; + p += HASH_CBLOCK - 8; #if defined(DATA_ORDER_IS_BIG_ENDIAN) - (void)HOST_l2c(c->Nh, p); - (void)HOST_l2c(c->Nl, p); + (void)HOST_l2c(c->Nh, p); + (void)HOST_l2c(c->Nl, p); #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) (void)HOST_l2c(c->Nl, p); (void)HOST_l2c(c->Nh, p); #endif - p -= HASH_CBLOCK; - HASH_BLOCK_DATA_ORDER(c, p, 1); - c->num = 0; - // OPENSSL_cleanse(p, HASH_CBLOCK); - // Erik: Since we don't do encryption secure cleaning is not needed - memset(p, 0, HASH_CBLOCK); + p -= HASH_CBLOCK; + HASH_BLOCK_DATA_ORDER(c, p, 1); + c->num = 0; + // OPENSSL_cleanse(p, HASH_CBLOCK); + // Erik: Since we don't do encryption secure cleaning is not needed + memset(p, 0, HASH_CBLOCK); - HASH_MAKE_STRING(c, md); + HASH_MAKE_STRING(c, md); - return 1; -} + return 1; + } #ifdef __cplusplus } // namespace sls diff --git a/slsSupportLib/src/network_utils.cpp b/slsSupportLib/src/network_utils.cpp index c8f92732d..7ce137c7c 100644 --- a/slsSupportLib/src/network_utils.cpp +++ b/slsSupportLib/src/network_utils.cpp @@ -225,7 +225,7 @@ void validatePortRange(uint16_t startPort, int numPorts) { void setupSignalHandler(int signal, void (*handler)(int)) { // Catch signal SIGINT to close files and call destructors properly - struct sigaction sa {}; + struct sigaction sa{}; sa.sa_handler = handler; sigemptyset(&sa.sa_mask); // dont block additional signals sa.sa_flags = 0;