From ec17529c524e6459021f3a3941cc05a4a4a0c076 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 10 Apr 2019 12:15:19 +0200 Subject: [PATCH] seperate get/set --- python/src/Detector.h | 8 +- .../include/multiSlsDetector.h | 8 +- slsDetectorSoftware/include/slsDetector.h | 20 +++- slsDetectorSoftware/src/multiSlsDetector.cpp | 32 +++-- slsDetectorSoftware/src/slsDetector.cpp | 109 +++++++++--------- .../src/slsDetectorCommand.cpp | 9 +- slsDetectorSoftware/src/slsDetectorUsers.cpp | 17 ++- slsSupportLib/include/container_utils.h | 6 + slsSupportLib/tests/test-container_utils.cpp | 11 ++ 9 files changed, 133 insertions(+), 87 deletions(-) diff --git a/python/src/Detector.h b/python/src/Detector.h index 69819da8c..5ba231045 100644 --- a/python/src/Detector.h +++ b/python/src/Detector.h @@ -603,18 +603,18 @@ class Detector { } void setFileWrite(bool value) { - det.enableWriteToFile(value); + det.setFileWrite(value); } bool getFileWrite() { - return det.enableWriteToFile(-1); + return det.getFileWrite(); } void setFileOverWrite(bool value) { - det.overwriteFile(value); + det.setFileOverWrite(value); } bool getFileOverWrite() { - return det.overwriteFile(-1); + return det.getFileOverWrite(); } void setAllTrimbits(int tb) { diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index c097295b2..e8cf2392a 100644 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -1716,7 +1716,8 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns file write enable */ - int enableWriteToFile(int enable = -1, int detPos = -1); + int setFileWrite(bool value, int detPos = -1); + int getFileWrite(int detPos = -1) const; /** * Sets/Gets file overwrite enable @@ -1724,7 +1725,8 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns file overwrite enable */ - int overwriteFile(int enable = -1, int detPos = -1); + int setFileOverWrite(bool enable, int detPos = -1); + int getFileOverWrite(int detPos = -1) const; /** * (previously setReadReceiverFrequency) @@ -2062,7 +2064,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { /** Multi detector Id */ - const int multiId; + const int multiId{0}; /** Shared Memory object */ sls::SharedMemory multi_shm{0, -1}; diff --git a/slsDetectorSoftware/include/slsDetector.h b/slsDetectorSoftware/include/slsDetector.h index 6069aaea7..35077a3cd 100644 --- a/slsDetectorSoftware/include/slsDetector.h +++ b/slsDetectorSoftware/include/slsDetector.h @@ -243,10 +243,10 @@ struct sharedSlsDetector { int receiver_framesPerFile; /** filewriteenable */ - bool receiver_fileWriteEnable; + bool rxFileWrite; /** overwriteenable */ - bool receiver_overWriteEnable; + bool rxFileOverWrite; }; class slsDetector : public virtual slsDetectorDefs{ @@ -1554,14 +1554,22 @@ class slsDetector : public virtual slsDetectorDefs{ * @param enable 1 or 0 to set/reset file write enable * @returns file write enable */ - int enableWriteToFile(int enable = -1); + bool setFileWrite(bool value); + + bool getFileWrite() const; /** - * Sets/Gets file overwrite enable - * @param enable 1 or 0 to set/reset file overwrite enable + * Sets file overwrite in the receiver + * @param enable true or false to set/reset file overwrite enable * @returns file overwrite enable */ - int overwriteFile(int enable = -1); + bool setFileOverWrite(bool value); + + /** + * Gets file overwrite in the receiver + * @returns file overwrite enable + */ + bool getFileOverWrite() const; /** * (previously setReadReceiverFrequency) diff --git a/slsDetectorSoftware/src/multiSlsDetector.cpp b/slsDetectorSoftware/src/multiSlsDetector.cpp index 2488b4f4b..b6ab50d49 100644 --- a/slsDetectorSoftware/src/multiSlsDetector.cpp +++ b/slsDetectorSoftware/src/multiSlsDetector.cpp @@ -3442,25 +3442,35 @@ int multiSlsDetector::processImageWithGapPixels(char *image, char *&gpImage) { return gapdatabytes; } -int multiSlsDetector::enableWriteToFile(int enable, int detPos) { - // single +int multiSlsDetector::setFileWrite(bool value, int detPos) { if (detPos >= 0) { - return detectors[detPos]->enableWriteToFile(enable); + return detectors[detPos]->setFileWrite(value); } - - // multi - auto r = parallelCall(&slsDetector::enableWriteToFile, enable); + auto r = parallelCall(&slsDetector::setFileWrite, value); return sls::minusOneIfDifferent(r); } -int multiSlsDetector::overwriteFile(int enable, int detPos) { - // single +int multiSlsDetector::getFileWrite(int detPos) const{ if (detPos >= 0) { - return detectors[detPos]->overwriteFile(enable); + return detectors[detPos]->getFileWrite(); } + auto r = parallelCall(&slsDetector::getFileWrite); + return sls::minusOneIfDifferent(r); +} - // multi - auto r = parallelCall(&slsDetector::overwriteFile, enable); +int multiSlsDetector::setFileOverWrite(bool enable, int detPos) { + if (detPos >= 0) { + return detectors[detPos]->setFileOverWrite(enable); + } + auto r = parallelCall(&slsDetector::setFileOverWrite, enable); + return sls::minusOneIfDifferent(r); +} + +int multiSlsDetector::getFileOverWrite(int detPos) const { + if (detPos >= 0) { + return detectors[detPos]->getFileOverWrite(); + } + auto r = parallelCall(&slsDetector::getFileOverWrite); return sls::minusOneIfDifferent(r); } diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index 374aa7300..9a13ea071 100644 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -370,8 +370,8 @@ void slsDetector::initializeDetectorStructure(detectorType type) { default: break; } - detector_shm()->receiver_fileWriteEnable = true; - detector_shm()->receiver_overWriteEnable = true; + detector_shm()->rxFileWrite = true; + detector_shm()->rxFileOverWrite = true; // get the detector parameters based on type detParameters parameters{}; @@ -2132,8 +2132,8 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) { << "\nr_framesperfile:" << detector_shm()->receiver_framesPerFile << "\nr_discardpolicy:" << detector_shm()->receiver_frameDiscardMode << "\nr_padding:" << detector_shm()->receiver_framePadding - << "\nwrite enable:" << detector_shm()->receiver_fileWriteEnable - << "\noverwrite enable:" << detector_shm()->receiver_overWriteEnable + << "\nwrite enable:" << detector_shm()->rxFileWrite + << "\noverwrite enable:" << detector_shm()->rxFileOverWrite << "\nframe index needed:" << ((detector_shm()->timerValue[FRAME_NUMBER] * detector_shm()->timerValue[CYCLES_NUMBER]) > 1) @@ -2168,8 +2168,8 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) { setReceiverFramesPerFile(detector_shm()->receiver_framesPerFile); setReceiverFramesDiscardPolicy(detector_shm()->receiver_frameDiscardMode); setReceiverPartialFramesPadding(detector_shm()->receiver_framePadding); - enableWriteToFile(detector_shm()->receiver_fileWriteEnable); - overwriteFile(detector_shm()->receiver_overWriteEnable); + setFileWrite(detector_shm()->rxFileWrite); + setFileOverWrite(detector_shm()->rxFileOverWrite); setTimer(FRAME_PERIOD, detector_shm()->timerValue[FRAME_PERIOD]); setTimer(FRAME_NUMBER, detector_shm()->timerValue[FRAME_NUMBER]); setTimer(ACQUISITION_TIME, detector_shm()->timerValue[ACQUISITION_TIME]); @@ -3706,11 +3706,11 @@ int slsDetector::updateCachedReceiverVariables() const { // file write enable n += receiver.receiveData(&i32, sizeof(i32)); - detector_shm()->receiver_fileWriteEnable = i32; + detector_shm()->rxFileWrite = i32; // file overwrite enable n += receiver.receiveData(&i32, sizeof(i32)); - detector_shm()->receiver_overWriteEnable = i32; + detector_shm()->rxFileOverWrite = i32; // gap pixels n += receiver.receiveData(&i32, sizeof(i32)); @@ -3977,7 +3977,7 @@ int slsDetector::setFileIndex(int i) { } int slsDetector::incrementFileIndex() { - if (detector_shm()->receiver_fileWriteEnable) { + if (detector_shm()->rxFileWrite) { return setFileIndex(detector_shm()->receiver_fileIndex + 1); } return detector_shm()->receiver_fileIndex; @@ -4083,47 +4083,51 @@ int slsDetector::resetFramesCaught() { return ret; } -int slsDetector::enableWriteToFile(int enable) { - if (enable >= 0) { - int fnum = F_ENABLE_RECEIVER_FILE_WRITE; - int ret = FAIL; - int arg = enable; - int retval = -1; - FILE_LOG(logDEBUG1) << "Sending enable file write to receiver: " << arg; - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - auto receiver = - ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); - ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - FILE_LOG(logDEBUG1) << "Receiver file write enable: " << retval; - detector_shm()->receiver_fileWriteEnable = retval; - } - if (ret == FORCE_UPDATE) { - updateCachedReceiverVariables(); - } +bool slsDetector::setFileWrite(bool value) { + int fnum = F_ENABLE_RECEIVER_FILE_WRITE; + int ret = FAIL; + int arg = static_cast(value); + int retval = -1; + FILE_LOG(logDEBUG1) << "Sending enable file write to receiver: " << arg; + if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); + ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, + sizeof(retval)); + FILE_LOG(logDEBUG1) << "Receiver file write enable: " << retval; + detector_shm()->rxFileWrite = retval; } - return detector_shm()->receiver_fileWriteEnable; + if (ret == FORCE_UPDATE) { + updateCachedReceiverVariables(); + } + return getFileWrite(); } -int slsDetector::overwriteFile(int enable) { - if (enable >= 0) { - int fnum = F_ENABLE_RECEIVER_OVERWRITE; - int ret = FAIL; - int arg = enable; - int retval = -1; - FILE_LOG(logDEBUG1) << "Sending enable file overwrite to receiver: " << arg; +bool slsDetector::getFileWrite() const { return detector_shm()->rxFileWrite; } - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - auto receiver = - ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); - ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - FILE_LOG(logDEBUG1) << "Receiver file overwrite enable: " << retval; - detector_shm()->receiver_overWriteEnable = retval; - } - if (ret == FORCE_UPDATE) { - updateCachedReceiverVariables(); - } +bool slsDetector::setFileOverWrite(bool value) { + int fnum = F_ENABLE_RECEIVER_OVERWRITE; + int ret = FAIL; + int arg = static_cast(value); + int retval = -1; + FILE_LOG(logDEBUG1) << "Sending enable file overwrite to receiver: " << arg; + + if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); + ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, + sizeof(retval)); + FILE_LOG(logDEBUG1) << "Receiver file overwrite enable: " << retval; + detector_shm()->rxFileOverWrite = static_cast(retval); } - return detector_shm()->receiver_overWriteEnable; + if (ret == FORCE_UPDATE) { + updateCachedReceiverVariables(); + } + return getFileOverWrite(); +} + +bool slsDetector::getFileOverWrite() const { + return detector_shm()->rxFileOverWrite; } int slsDetector::setReceiverStreamingFrequency(int freq) { @@ -4142,7 +4146,7 @@ int slsDetector::setReceiverStreamingFrequency(int freq) { detector_shm()->receiver_read_freq = retval; } if (ret == FORCE_UPDATE) { - ret = updateCachedReceiverVariables(); + updateCachedReceiverVariables(); } } return detector_shm()->receiver_read_freq; @@ -4162,7 +4166,7 @@ int slsDetector::setReceiverStreamingTimer(int time_in_ms) { FILE_LOG(logDEBUG1) << "Receiver read timer: " << retval; } if (ret == FORCE_UPDATE) { - ret = updateCachedReceiverVariables(); + updateCachedReceiverVariables(); } return retval; } @@ -4180,10 +4184,10 @@ bool slsDetector::enableDataStreamingFromReceiver(int enable) { ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; - detector_shm()->receiver_upstream = retval; + detector_shm()->receiver_upstream = static_cast(retval); } if (ret == FORCE_UPDATE) { - ret = updateCachedReceiverVariables(); + updateCachedReceiverVariables(); } } return detector_shm()->receiver_upstream; @@ -4211,7 +4215,6 @@ int slsDetector::enableTenGigabitEthernet(int i) { // receiver if ((detector_shm()->receiverOnlineFlag == ONLINE_FLAG) && ret == OK) { fnum = F_ENABLE_RECEIVER_TEN_GIGA; - ret = FAIL; arg = detector_shm()->tenGigaEnable; retval = -1; FILE_LOG(logDEBUG1) << "Sending 10Gbe enable to receiver: " << arg; @@ -4258,7 +4261,7 @@ bool slsDetector::setReceiverSilentMode(int i) { ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; - detector_shm()->receiver_silentMode = retval; + detector_shm()->receiver_silentMode = static_cast(retval); } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); @@ -4550,7 +4553,7 @@ slsDetectorDefs::sls_detector_module *slsDetector::interpolateTrim(sls_detector_ } // Interpolate all trimbits - if (tb) { + if (tb != 0) { for (int i = 0; i < myMod->nchan; ++i) { myMod->chanregs[i] = linearInterpolation(energy, e1, e2, a->chanregs[i], b->chanregs[i]); @@ -4630,7 +4633,7 @@ slsDetector::readSettingsFile(const std::string &fname, sls_detector_module *myM if (infile.good()) { infile.read(reinterpret_cast(&myMod->tau), sizeof(myMod->tau)); - if (tb) { + if (tb != 0) { if (infile.good()) { infile.read(reinterpret_cast(myMod->chanregs), sizeof(int) * (myMod->nchan)); diff --git a/slsDetectorSoftware/src/slsDetectorCommand.cpp b/slsDetectorSoftware/src/slsDetectorCommand.cpp index 1c10d8a87..d8db4cbe4 100644 --- a/slsDetectorSoftware/src/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/src/slsDetectorCommand.cpp @@ -2603,11 +2603,11 @@ std::string slsDetectorCommand::cmdEnablefwrite(int narg, char *args[], int acti } if (action == PUT_ACTION) { if (sscanf(args[1], "%d", &i)) - myDet->enableWriteToFile(i, detPos); + myDet->setFileWrite(i, detPos); else return std::string("could not decode enable file write"); } - sprintf(ans, "%d", myDet->enableWriteToFile(-1, detPos)); + sprintf(ans, "%d", myDet->getFileWrite(detPos)); return std::string(ans); } @@ -2621,7 +2621,6 @@ std::string slsDetectorCommand::helpEnablefwrite(int action) { } std::string slsDetectorCommand::cmdOverwrite(int narg, char *args[], int action, int detPos) { - int i; char ans[100]; myDet->setReceiverOnline(ONLINE_FLAG, detPos); @@ -2630,11 +2629,11 @@ std::string slsDetectorCommand::cmdOverwrite(int narg, char *args[], int action, } if (action == PUT_ACTION) { if (sscanf(args[1], "%d", &i)) - myDet->overwriteFile(i, detPos); + myDet->setFileOverWrite(i, detPos); else return std::string("could not decode overwrite"); } - sprintf(ans, "%d", myDet->overwriteFile(-1, detPos)); + sprintf(ans, "%d", myDet->getFileOverWrite(detPos)); return std::string(ans); } diff --git a/slsDetectorSoftware/src/slsDetectorUsers.cpp b/slsDetectorSoftware/src/slsDetectorUsers.cpp index 68464c93c..2b54caab0 100644 --- a/slsDetectorSoftware/src/slsDetectorUsers.cpp +++ b/slsDetectorSoftware/src/slsDetectorUsers.cpp @@ -284,19 +284,26 @@ std::string slsDetectorUsers::setFileName(const std::string& s, int detPos){ } int slsDetectorUsers::getFileIndex(int detPos){ - return (int)detector.getFileIndex(detPos); + return detector.getFileIndex(detPos); } int slsDetectorUsers::setFileIndex(int i, int detPos){ - return (int)detector.setFileIndex(i, detPos); + return detector.setFileIndex(i, detPos); } int slsDetectorUsers::enableWriteToFile(int enable, int detPos){ - return detector.enableWriteToFile(enable, detPos); + if (enable >0) + return detector.setFileWrite(enable, detPos); + else + return detector.getFileWrite(detPos); + } -int slsDetectorUsers::enableOverwriteFile(int enable, int detPos){ - return detector.overwriteFile(enable, detPos); +int slsDetectorUsers::enableOverwriteFile(int enable, int detPos) { + if (enable > 0) + return detector.setFileOverWrite(enable, detPos); + else + return detector.getFileOverWrite(detPos); } int slsDetectorUsers::setReceiverStreamingFrequency(int freq, int detPos){ diff --git a/slsSupportLib/include/container_utils.h b/slsSupportLib/include/container_utils.h index 39f5de6c8..ede320f4e 100644 --- a/slsSupportLib/include/container_utils.h +++ b/slsSupportLib/include/container_utils.h @@ -95,6 +95,12 @@ template T minusOneIfDifferent(const std::vector &container) { return static_cast(-1); } +inline int minusOneIfDifferent(const std::vector &container) { + if (allEqual(container)) + return static_cast(container.front()); + return -1; +} + template std::vector minusOneIfDifferent(const std::vector> &container) { diff --git a/slsSupportLib/tests/test-container_utils.cpp b/slsSupportLib/tests/test-container_utils.cpp index ccddd517f..b2403d551 100644 --- a/slsSupportLib/tests/test-container_utils.cpp +++ b/slsSupportLib/tests/test-container_utils.cpp @@ -112,3 +112,14 @@ TEST_CASE("Compare a vector containing two vectors", "[support]") { CHECK(minusOneIfDifferent(c) == std::vector{-1}); CHECK(minusOneIfDifferent(d) == d[2]); } + + +TEST_CASE("vector of bool", "[support]"){ + std::vector a{true, true, true}; + std::vector b{false, false, false}; + std::vector c{true, false, true}; + + CHECK(minusOneIfDifferent(a) == 1); + CHECK(minusOneIfDifferent(b) == 0); + CHECK(minusOneIfDifferent(c) == -1); +} \ No newline at end of file