Merge branch 'refactor' of github.com:slsdetectorgroup/slsDetectorPackage into refactor

This commit is contained in:
Gemma Tinti 2019-04-10 12:31:34 +02:00
commit 6b5aa5ff66
9 changed files with 133 additions and 87 deletions

View File

@ -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) {

View File

@ -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<sharedMultiSlsDetector> multi_shm{0, -1};

View File

@ -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)

View File

@ -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);
}

View File

@ -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) {
bool slsDetector::setFileWrite(bool value) {
int fnum = F_ENABLE_RECEIVER_FILE_WRITE;
int ret = FAIL;
int arg = enable;
int arg = static_cast<int>(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));
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;
detector_shm()->rxFileWrite = retval;
}
if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables();
}
}
return detector_shm()->receiver_fileWriteEnable;
return getFileWrite();
}
int slsDetector::overwriteFile(int enable) {
if (enable >= 0) {
bool slsDetector::getFileWrite() const { return detector_shm()->rxFileWrite; }
bool slsDetector::setFileOverWrite(bool value) {
int fnum = F_ENABLE_RECEIVER_OVERWRITE;
int ret = FAIL;
int arg = enable;
int arg = static_cast<int>(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));
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;
detector_shm()->rxFileOverWrite = static_cast<bool>(retval);
}
if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables();
}
return getFileOverWrite();
}
return detector_shm()->receiver_overWriteEnable;
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<bool>(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<bool>(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<char *>(&myMod->tau),
sizeof(myMod->tau));
if (tb) {
if (tb != 0) {
if (infile.good()) {
infile.read(reinterpret_cast<char *>(myMod->chanregs),
sizeof(int) * (myMod->nchan));

View File

@ -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);
}

View File

@ -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);
if (enable > 0)
return detector.setFileOverWrite(enable, detPos);
else
return detector.getFileOverWrite(detPos);
}
int slsDetectorUsers::setReceiverStreamingFrequency(int freq, int detPos){

View File

@ -95,6 +95,12 @@ template <typename T> T minusOneIfDifferent(const std::vector<T> &container) {
return static_cast<T>(-1);
}
inline int minusOneIfDifferent(const std::vector<bool> &container) {
if (allEqual(container))
return static_cast<int>(container.front());
return -1;
}
template <typename T>
std::vector<T>
minusOneIfDifferent(const std::vector<std::vector<T>> &container) {

View File

@ -112,3 +112,14 @@ TEST_CASE("Compare a vector containing two vectors", "[support]") {
CHECK(minusOneIfDifferent(c) == std::vector<int>{-1});
CHECK(minusOneIfDifferent(d) == d[2]);
}
TEST_CASE("vector of bool", "[support]"){
std::vector<bool> a{true, true, true};
std::vector<bool> b{false, false, false};
std::vector<bool> c{true, false, true};
CHECK(minusOneIfDifferent(a) == 1);
CHECK(minusOneIfDifferent(b) == 0);
CHECK(minusOneIfDifferent(c) == -1);
}