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/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer index d180ff497..c41f2ede9 100755 Binary files a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer and b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer differ 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}}; diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 9b9902df8..c1723fbcb 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -12,4 +12,4 @@ #define APIJUNGFRAU 0x220203 #define APIMYTHEN3 0x220203 #define APIMOENCH 0x220203 -#define APIEIGER 0x220204 +#define APIEIGER 0x220207