mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-07-01 17:45:51 +02:00
first draft of disabling data port at the receiver side. Todo: master file and stream for gui to use
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ class qDefs : public QWidget {
|
||||
/**
|
||||
* Empty Constructor
|
||||
*/
|
||||
qDefs(){};
|
||||
qDefs() {};
|
||||
|
||||
static QFont GetDefaultFont() {
|
||||
return QFont("Cantarell", 10, QFont::Normal);
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<bool> 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<bool> 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<bool> getTop(Positions pos = {}) const;
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ template <class T, class Allocator = std::allocator<T>> class Result {
|
||||
|
||||
public:
|
||||
Result() = default;
|
||||
Result(std::initializer_list<T> list) : vec(list){};
|
||||
Result(std::initializer_list<T> list) : vec(list) {};
|
||||
|
||||
/** Custom constructor from integer type to Result<ns> or Result<bool> */
|
||||
template <typename V, typename = typename std::enable_if<
|
||||
|
||||
@@ -17,12 +17,12 @@ class detectorData {
|
||||
: progressIndex(progressIndex), fileName(fileName),
|
||||
fileIndex(fileIndex), nx(nx), ny(ny), data(data),
|
||||
databytes(databytes), dynamicRange(dynamicRange),
|
||||
completeImage(completeImage){};
|
||||
completeImage(completeImage) {};
|
||||
|
||||
/**
|
||||
* data has to be deleted by caller
|
||||
*/
|
||||
~detectorData(){};
|
||||
~detectorData() {};
|
||||
|
||||
int64_t getChannel(int i) {
|
||||
int off = dynamicRange / 8;
|
||||
|
||||
@@ -1317,6 +1317,16 @@ void Detector::setTransmissionDelay(int step) {
|
||||
pimpl->setTransmissionDelay(step);
|
||||
}
|
||||
|
||||
Result<bool> 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<bool> Detector::getUseReceiverFlag(Positions pos) const {
|
||||
@@ -1746,16 +1756,6 @@ void Detector::setQuad(const bool enable) {
|
||||
pimpl->Parallel(&Module::setQuad, {}, enable);
|
||||
}
|
||||
|
||||
Result<bool> 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<bool> Detector::getTop(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getTop, pos);
|
||||
}
|
||||
|
||||
@@ -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<int>(F_RECEIVER_GET_UDP_DATASTREAM,
|
||||
static_cast<int>(port));
|
||||
} else
|
||||
return sendToDetector<int>(F_GET_DATASTREAM, static_cast<int>(port));
|
||||
}
|
||||
|
||||
void Module::setDataStream(const portPosition port, const bool enable) {
|
||||
int args[]{static_cast<int>(port), static_cast<int>(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<int>(F_GET_DATASTREAM, static_cast<int>(port));
|
||||
}
|
||||
|
||||
void Module::setDataStream(const portPosition port, const bool enable) {
|
||||
int args[]{static_cast<int>(port), static_cast<int>(enable)};
|
||||
sendToDetector(F_SET_DATASTREAM, args, nullptr);
|
||||
if (shm()->useReceiverFlag) {
|
||||
sendToReceiver(F_RECEIVER_SET_DATASTREAM, args, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
bool Module::getTop() const {
|
||||
return (static_cast<bool>(sendToDetector<int>(F_GET_TOP)));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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]") {
|
||||
|
||||
@@ -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<bool>(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<portPosition>(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<int>(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<portPosition>(args[0]);
|
||||
validate_port_position(port);
|
||||
bool enable = static_cast<bool>(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<int>();
|
||||
portPosition port = static_cast<portPosition>(arg);
|
||||
validate_port_position(port);
|
||||
LOG(logDEBUG1) << "Getting udp datastream (" << ToString(port) << ")";
|
||||
if (detType != EIGER && detType != JUNGFRAU && detType != MOENCH)
|
||||
functionNotImplemented();
|
||||
auto retval = static_cast<int>(impl()->getUDPDataStream(port));
|
||||
return socket.sendResult(retval);
|
||||
}
|
||||
|
||||
int ClientInterface::get_arping(Interface &socket) {
|
||||
auto retval = static_cast<int>(impl()->getArping());
|
||||
LOG(logDEBUG1) << "arping thread status:" << retval;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<bool> startedFlag{false};
|
||||
std::atomic<uint64_t> firstIndex{0};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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<bool, 2> detectorDataStream = {{true, true}};
|
||||
std::array<bool, 2> detectorDataStream10GbE = {{true, true}};
|
||||
std::array<bool, 2> udpDataStream = {{true, true}};
|
||||
std::array<portPosition, 2> udpDataStreamType = {{LEFT, RIGHT}};
|
||||
// only for Eiger to remember (10Gbe selectable)
|
||||
std::array<bool, 2> udpDataStream10GbE = {{true, true}};
|
||||
int readNRows{0};
|
||||
int thresholdEnergyeV{-1};
|
||||
std::array<int, 3> thresholdAllEnergyeV = {{-1, -1, -1}};
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -33,5 +33,5 @@ class Timer {
|
||||
std::string name_;
|
||||
};
|
||||
|
||||
}; // namespace sls
|
||||
}; // namespace sls
|
||||
#endif // TIMER_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';
|
||||
|
||||
@@ -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<int, 4> getIntArray() const {
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
+212
-212
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user