diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h index f9755bb5e..2bc8a533d 100644 --- a/slsDetectorSoftware/include/Detector.h +++ b/slsDetectorSoftware/include/Detector.h @@ -1172,6 +1172,7 @@ class Detector { /** [CTB] Value between 0-63 */ void setExternalSamplingSource(int value, Positions pos = {}); + // TODO! does any of them need the option to take positions /** [CTB] */ uint32_t getADCInvert() const; @@ -1179,13 +1180,62 @@ class Detector { void setADCInvert(uint32_t value); /** [CTB]*/ - uint32_t getADCEnableMask(int detPos = -1); + uint32_t getADCEnableMask() const; /** [CTB]*/ void setADCEnableMask(uint32_t mask); - /** [CTB]*/ - uint32_t getADCEnableMask() const; + /** [Gotthard] */ + Result getCounterBit(Positions pos = {}) const; + + /** [Gotthard] possible values? */ + void setCounterBit(int i, Positions pos = {}); + + /** + * [Gotthard] startACQ = 1 to start acq after resetting counter + * TODO! does it make sense to call one detector? + * + */ + void resetCounterBlock(int startACQ = 0, Positions pos = {}); + + // TODO getROI, setROI, verifyMinMaxROI + + // writeCounterBlockFile + + void loadImageToDetector(defs::imageType index, const std::string &fname, + Positions pos = {}); + + /** [Gotthard] + * @param value 1 to set or 0 to clear the digital test bit -1? + */ + Result digitalTest(defs::digitalTestMode mode, int ival = -1, + Positions pos = {}); + + /** [Eiger] */ + void setFlowControl10G(bool enable, Positions pos = {}); + + /** [Eiger] */ + Result getFlowControl10G(Positions pos = {}) const; + + Result + getReceiverRealUDPSocketBufferSize(Positions pos = {}) const; + + Result getReceiverUDPSocketBufferSize(Positions pos = {}) const; + + void setReceiverUDPSocketBufferSize(int64_t udpsockbufsize, + Positions pos = {}); + + /** [Moench] TODO! How do we do this best??? Can be refactored to something + * else? Use a generic zmq message passing system... + * For now limiting to all detectors working the same*/ + int setDetectorMode(defs::detectorModeType value); + int setFrameMode(defs::frameModeType value); + int setDetectorMinMaxEnergyThreshold(const int index, int value); + + void setAdditionalJsonHeader(const std::string &jsonheader, + Positions pos = {}); + + Result getAdditionalJsonHeader(Positions pos = {}) const; }; } // namespace sls \ No newline at end of file diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index 63bb8da30..4c8c85544 100755 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -1293,7 +1293,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { */ std::string setAdditionalJsonParameter(const std::string &key, const std::string &value, - int detPos = -1); + int detPos = -1); // /** * Returns the additional json header parameter value @@ -1303,7 +1303,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * empty if no parameter found in additional json header */ std::string getAdditionalJsonParameter(const std::string &key, - int detPos = -1); + int detPos = -1); // /** * Sets the detector minimum/maximum energy threshold in processor (for @@ -1314,7 +1314,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * error in computing json parameter value) */ int setDetectorMinMaxEnergyThreshold(const int index, int value, - int detPos = -1); + int detPos = -1); // /** * Sets the frame mode in processor (Moench only) @@ -1341,21 +1341,21 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @returns receiver udp socket buffer size */ int64_t setReceiverUDPSocketBufferSize(int64_t udpsockbufsize = -1, - int detPos = -1); + int detPos = -1); // /** * Returns the receiver UDP socket buffer size * @param detPos -1 for all detectors in list or specific detector position * @returns the receiver UDP socket buffer size */ - int64_t getReceiverUDPSocketBufferSize(int detPos = -1); + int64_t getReceiverUDPSocketBufferSize(int detPos = -1); // /** * Returns the receiver real UDP socket buffer size * @param detPos -1 for all detectors in list or specific detector position * @returns the receiver real UDP socket buffer size */ - int64_t getReceiverRealUDPSocketBufferSize(int detPos = -1); + int64_t getReceiverRealUDPSocketBufferSize(int detPos = -1); // /** (users only) * Set 10GbE Flow Control (Eiger) @@ -1363,7 +1363,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns 10GbE flow Control */ - int setFlowControl10G(int enable = -1, int detPos = -1); + int setFlowControl10G(int enable = -1, int detPos = -1); // /** * Execute a digital test (Gotthard) @@ -1381,7 +1381,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position */ void loadImageToDetector(imageType index, const std::string &fname, - int detPos = -1); + int detPos = -1); // /** * Writes the counter memory block from the detector (Gotthard) @@ -1397,7 +1397,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param startACQ is 1 to start acquisition after resetting counter * @param detPos -1 for all detectors in list or specific detector position */ - void resetCounterBlock(int startACQ = 0, int detPos = -1); + void resetCounterBlock(int startACQ = 0, int detPos = -1); // /** * Set/get counter bit in detector (Gotthard) @@ -1406,7 +1406,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns the counter bit in detector */ - int setCounterBit(int i = -1, int detPos = -1); + int setCounterBit(int i = -1, int detPos = -1); // /** * Ensures that min is less than max in both dimensions (Gotthard) diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index e4f2d70b5..0cee028d1 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -924,8 +924,8 @@ void Detector::setExternalSamplingSource(int value, Positions pos) { } uint32_t Detector::getADCInvert() const { - auto res = pimpl->Parallel(&slsDetector::getADCInvert, {}); - return res.tsquash("Different Values for function getADCInvert"); + return pimpl->Parallel(&slsDetector::getADCInvert, {}) + .tsquash("Different Values for function getADCInvert"); } void Detector::setADCInvert(uint32_t value) { @@ -941,4 +941,72 @@ void Detector::setADCEnableMask(uint32_t mask) { pimpl->Parallel(&slsDetector::setADCEnableMask, {}, mask); } +Result Detector::getCounterBit(Positions pos) const { + return pimpl->Parallel(&slsDetector::setCounterBit, pos, -1); +} + +void Detector::setCounterBit(int i, Positions pos) { + pimpl->Parallel(&slsDetector::setCounterBit, pos, i); +} + +void Detector::resetCounterBlock(int startACQ, Positions pos) { + pimpl->Parallel(&slsDetector::resetCounterBlock, pos, startACQ); +} + +void Detector::loadImageToDetector(defs::imageType index, + const std::string &fname, Positions pos) { + // TODO! optimize away multiple loads + pimpl->Parallel(&slsDetector::loadImageToDetector, pos, index, fname); +} + +Result Detector::digitalTest(defs::digitalTestMode mode, int ival, + Positions pos) { + return pimpl->Parallel(&slsDetector::digitalTest, pos, mode, ival); +} + +void Detector::setFlowControl10G(bool enable, Positions pos) { + pimpl->Parallel(&slsDetector::setDetectorNetworkParameter, pos, + defs::FLOW_CONTROL_10G, static_cast(enable)); +} + +Result Detector::getFlowControl10G(Positions pos) const { + return pimpl->Parallel(&slsDetector::setDetectorNetworkParameter, pos, + defs::FLOW_CONTROL_10G, -1); +} + +Result +Detector::getReceiverRealUDPSocketBufferSize(Positions pos) const { + return pimpl->Parallel(&slsDetector::getReceiverRealUDPSocketBufferSize, + pos); +} + +Result Detector::getReceiverUDPSocketBufferSize(Positions pos) const { + return pimpl->Parallel(&slsDetector::getReceiverUDPSocketBufferSize, pos); +} + +void Detector::setReceiverUDPSocketBufferSize(int64_t udpsockbufsize, + Positions pos) { + pimpl->Parallel(&slsDetector::setReceiverUDPSocketBufferSize, pos, + udpsockbufsize); +} + +int Detector::setDetectorMode(defs::detectorModeType value) { + return pimpl->setDetectorMode(value); +} +int Detector::setFrameMode(defs::frameModeType value) { + return pimpl->setFrameMode(value); +} +int Detector::setDetectorMinMaxEnergyThreshold(const int index, int value) { + return pimpl->setDetectorMinMaxEnergyThreshold(index, value); +} + +void Detector::setAdditionalJsonHeader(const std::string &jsonheader, + Positions pos) { + pimpl->Parallel(&slsDetector::setAdditionalJsonHeader, pos, jsonheader); +} + +Result Detector::getAdditionalJsonHeader(Positions pos) const { + return pimpl->Parallel(&slsDetector::getAdditionalJsonHeader, pos); +} + } // namespace sls \ No newline at end of file