mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-23 06:50:02 +02:00
Merge branch 'refactor' of github.com:slsdetectorgroup/slsDetectorPackage into refactor
This commit is contained in:
commit
6b5aa5ff66
@ -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) {
|
||||
|
@ -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};
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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){
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user