diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 085966642..1391eae6e 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -3423,6 +3423,24 @@ int multiSlsDetector::exitServer() return ival; } +int multiSlsDetector::callDetectorMemeber(int (slsDetector::*somefunc)(int), int value){ + int ret = -100, ret1; + for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) + if (detectors[idet]) { + // ret1 = detectors[idet]->setReceiverSilentMode(i); + ret1 = (detectors[idet]->*somefunc)(value); + if (detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask() | (1 << idet)); + if (ret == -100) + ret = ret1; + else if (ret != ret1) + ret = -1; + } + return ret; +} + + + string multiSlsDetector::callDetectorMemeber(string (slsDetector::*somefunc)()) { string concatenatedValue, firstValue; @@ -6252,66 +6270,22 @@ int multiSlsDetector::enableDataStreamingFromReceiver(int enable) int multiSlsDetector::enableReceiverCompression(int i) { - int ret = -100, ret1; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) - if (detectors[idet]) { - ret1 = detectors[idet]->enableReceiverCompression(i); - if (detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask() | (1 << idet)); - if (ret == -100) - ret = ret1; - else if (ret != ret1) - ret = -1; - } - return ret; + return callDetectorMemeber(&slsDetector::enableReceiverCompression, i); } int multiSlsDetector::enableTenGigabitEthernet(int i) { - int ret = -100, ret1; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) - if (detectors[idet]) { - ret1 = detectors[idet]->enableTenGigabitEthernet(i); - if (detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask() | (1 << idet)); - if (ret == -100) - ret = ret1; - else if (ret != ret1) - ret = -1; - } - return ret; + return callDetectorMemeber(&slsDetector::enableTenGigabitEthernet, i); } int multiSlsDetector::setReceiverFifoDepth(int i) { - int ret = -100, ret1; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) - if (detectors[idet]) { - ret1 = detectors[idet]->setReceiverFifoDepth(i); - if (detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask() | (1 << idet)); - if (ret == -100) - ret = ret1; - else if (ret != ret1) - ret = -1; - } - return ret; + return callDetectorMemeber(&slsDetector::setReceiverFifoDepth, i); } int multiSlsDetector::setReceiverSilentMode(int i) { - int ret = -100, ret1; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) - if (detectors[idet]) { - ret1 = detectors[idet]->setReceiverSilentMode(i); - if (detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask() | (1 << idet)); - if (ret == -100) - ret = ret1; - else if (ret != ret1) - ret = -1; - } - return ret; + return callDetectorMemeber(&slsDetector::setReceiverSilentMode, i); } /** opens pattern file and sends pattern to CTB diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 9473ab7d5..8969329c5 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -1045,6 +1045,7 @@ class multiSlsDetector : public slsDetectorUtils { std::string callDetectorMemeber(std::string(slsDetector::*somefunc)()); + int callDetectorMemeber(int (slsDetector::*somefunc)(int), int value); /** returns the detector trimbit/settings directory \sa sharedSlsDetector */ std::string getSettingsDir();