From f9a88b0f79ffab6227a23da43087fdcbeb33afa6 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 7 Feb 2022 17:10:31 +0100 Subject: [PATCH] datastream is only for 10g for eiger atm, its mentioned in comments. accordingly handled in receiver. This is better solution, in case it was disabled in 10g, and not possible to set enable in 1g mode, which is given to the receiver --- python/slsdet/detector.py | 2 +- .../slsDetectorFunctionList.c | 3 +++ .../src/slsDetectorServer_funcs.c | 11 ---------- slsDetectorSoftware/include/sls/Detector.h | 4 ++-- slsDetectorSoftware/src/CmdProxy.cpp | 4 +++- slsReceiverSoftware/src/Implementation.cpp | 21 ++++++++++++++++--- slsReceiverSoftware/src/Implementation.h | 1 + 7 files changed, 28 insertions(+), 18 deletions(-) diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 1efa837e5..c4618760a 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -1924,7 +1924,7 @@ class Detector(CppDetectorApi): def datastream(self): """ datastream [left|right] [0, 1] - [Eiger] Enables or disables data streaming from left or/and right side of detector. 1 (enabled) by default. + [Eiger] Enables or disables data streaming from left or/and right side of detector for 10GbE mode. 1 (enabled) by default. """ result = {} for port in [defs.LEFT, defs.RIGHT]: diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c index 0b936a856..0955523a1 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c @@ -2105,6 +2105,9 @@ int setDataStream(enum portPosition port, int enable) { LOG(logERROR, ("Invalid setDataStream enable argument: %d\n", enable)); return FAIL; } + LOG(logINFO, + ("%s 10GbE %s datastream\n", (enable ? "Enabling" : "Disabling"), + (port == LEFT ? "left" : "right"))); #ifdef VIRTUAL if (port == LEFT) { eiger_virtual_left_datastream = enable; diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 519080e97..9450d01f5 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -8266,9 +8266,6 @@ int get_datastream(int file_des) { "Only left and right allowed\n", arg); LOG(logERROR, (mess)); - } else if (enableTenGigabitEthernet(GET_FLAG) == 0) { - retval = 1; - LOG(logINFO, ("Datastream always enabled for 1g\n")); } else { ret = getDataStream(arg, &retval); LOG(logDEBUG1, ("datastream (%s) retval: %u\n", @@ -8315,14 +8312,6 @@ int set_datastream(int file_des) { ret = FAIL; sprintf(mess, "Could not %s. Invalid enable %d. \n", msg, enable); LOG(logERROR, (mess)); - } else if (enableTenGigabitEthernet(GET_FLAG) == 0 && enable == 0) { - ret = FAIL; - sprintf(mess, - "Could not %s. Disabling is only enabled in 10g mode.\n", - msg); - LOG(logERROR, (mess)); - } else if (enableTenGigabitEthernet(GET_FLAG) == 0 && enable == 1) { - LOG(logINFO, ("Datastream always enabled for 1g\n")); } else { ret = setDataStream(port, enable); if (ret == FAIL) { diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 1f16b7269..91f420716 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1147,8 +1147,8 @@ class Detector { Result getDataStream(const defs::portPosition port, Positions pos = {}) const; - /** [Eiger] enable or disable data streaming from left or right of detector. - * Default: enabled + /** [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 = {}); diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index c320f1435..a4c08c50c 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -1804,7 +1804,9 @@ std::string CmdProxy::DataStream(int action) { os << cmd << ' '; if (action == defs::HELP_ACTION) { os << "[left|right] [0, 1]\n\t[Eiger] Enables or disables data " - "streaming from left or/and right side of detector. 1 (enabled) " + "streaming from left or/and right side of detector for 10 GbE " + "mode. " + "1 (enabled) " "by default." << '\n'; } else if (action == defs::GET_ACTION) { diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 0fdcee058..fae4c1180 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -1466,6 +1466,21 @@ void Implementation::setTenGigaEnable(const bool b) { generalData->SetTenGigaEnable(b); SetupFifoStructure(); + + // datastream can be disabled/enabled only for Eiger 10GbE + if (detType == EIGER) { + if (!b) { + detectorDataStream[LEFT] = 1; + detectorDataStream[RIGHT] = 1; + } else { + detectorDataStream[LEFT] = detectorDataStream10GbE[LEFT]; + detectorDataStream[RIGHT] = detectorDataStream10GbE[RIGHT]; + } + LOG(logINFO) << "Detector datastream updated [Left: " + << sls::ToString(detectorDataStream[LEFT]) + << ", Right: " + << sls::ToString(detectorDataStream[RIGHT]) << "]"; + } } LOG(logINFO) << "Ten Giga: " << (tengigaEnable ? "enabled" : "disabled"); LOG(logINFO) << "Packets per Frame: " << (generalData->packetsPerFrame); @@ -1532,9 +1547,9 @@ bool Implementation::getDetectorDataStream(const portPosition port) const { void Implementation::setDetectorDataStream(const portPosition port, const bool enable) { int index = (port == LEFT ? 0 : 1); - detectorDataStream[index] = enable; - LOG(logINFO) << "Detector datastream (" << sls::ToString(port) - << " Port): " << sls::ToString(detectorDataStream[index]); + detectorDataStream10GbE[index] = enable; + LOG(logINFO) << "Detector 10GbE datastream (" << sls::ToString(port) + << " Port): " << sls::ToString(detectorDataStream10GbE[index]); } int Implementation::getReadNRows() const { return readNRows; } diff --git a/slsReceiverSoftware/src/Implementation.h b/slsReceiverSoftware/src/Implementation.h index 442f1b4db..757d64d05 100644 --- a/slsReceiverSoftware/src/Implementation.h +++ b/slsReceiverSoftware/src/Implementation.h @@ -356,6 +356,7 @@ class Implementation : private virtual slsDetectorDefs { bool quadEnable{false}; bool activated{true}; std::array detectorDataStream = {{true, true}}; + std::array detectorDataStream10GbE = {{true, true}}; int readNRows{0}; int thresholdEnergyeV{-1}; std::array thresholdAllEnergyeV = {{-1, -1, -1}};