ctb moench: added feature set pattern mask and set pattern bit mask, removed CTB prefix for all the patern functions

This commit is contained in:
2019-03-01 12:28:11 +01:00
parent 35b1ad39f7
commit 8c067437e6
10 changed files with 455 additions and 83 deletions

View File

@ -3521,10 +3521,10 @@ int multiSlsDetector::setReceiverSilentMode(int i, int detPos) {
return sls::minusOneIfDifferent(r);
}
int multiSlsDetector::setCTBPattern(const std::string &fname, int detPos) {
int multiSlsDetector::setPattern(const std::string &fname, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setCTBPattern(fname);
return detectors[detPos]->setPattern(fname);
}
// multi
@ -3539,7 +3539,7 @@ int multiSlsDetector::setCTBPattern(const std::string &fname, int detPos) {
uint64_t word;
while (fread(&word, sizeof(word), 1, fd)) {
serialCall(&slsDetector::setCTBWord, addr, word);
serialCall(&slsDetector::setPatternWord, addr, word);
++addr;
}
@ -3547,54 +3547,112 @@ int multiSlsDetector::setCTBPattern(const std::string &fname, int detPos) {
return addr;
}
uint64_t multiSlsDetector::setCTBWord(int addr, uint64_t word, int detPos) {
uint64_t multiSlsDetector::setPatternWord(int addr, uint64_t word, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setCTBWord(addr, word);
return detectors[detPos]->setPatternWord(addr, word);
}
// multi
auto r = parallelCall(&slsDetector::setCTBWord, addr, word);
auto r = parallelCall(&slsDetector::setPatternWord, addr, word);
return sls::minusOneIfDifferent(r);
}
int multiSlsDetector::setCTBPatLoops(int level, int &start, int &stop, int &n,
int multiSlsDetector::setPatternLoops(int level, int &start, int &stop, int &n,
int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setCTBPatLoops(level, start, stop, n);
return detectors[detPos]->setPatternLoops(level, start, stop, n);
}
// multi
std::vector<int> r;
for (auto &d : detectors) {
r.push_back(d->setCTBPatLoops(level, start, stop, n));
r.push_back(d->setPatternLoops(level, start, stop, n));
}
return sls::allEqualTo(r, static_cast<int>(OK)) ? OK : FAIL;
}
int multiSlsDetector::setCTBPatWaitAddr(int level, int addr, int detPos) {
int multiSlsDetector::setPatternWaitAddr(int level, int addr, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setCTBPatWaitAddr(level, addr);
return detectors[detPos]->setPatternWaitAddr(level, addr);
}
// multi
auto r = parallelCall(&slsDetector::setCTBPatWaitAddr, level, addr);
auto r = parallelCall(&slsDetector::setPatternWaitAddr, level, addr);
return sls::minusOneIfDifferent(r);
}
uint64_t multiSlsDetector::setCTBPatWaitTime(int level, uint64_t t, int detPos) {
uint64_t multiSlsDetector::setPatternWaitTime(int level, uint64_t t, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setCTBPatWaitTime(level, t);
return detectors[detPos]->setPatternWaitTime(level, t);
}
// multi
auto r = parallelCall(&slsDetector::setCTBPatWaitTime, level, t);
auto r = parallelCall(&slsDetector::setPatternWaitTime, level, t);
return sls::minusOneIfDifferent(r);
}
int multiSlsDetector::setPatternMask(uint64_t mask, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setPatternMask(mask);
}
// multi
auto r = parallelCall(&slsDetector::setPatternMask, mask);
return sls::allEqualTo(r, static_cast<int>(OK)) ? OK : FAIL;
}
uint64_t multiSlsDetector::getPatternMask(int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->getPatternMask();
}
// multi
auto r = parallelCall(&slsDetector::getPatternMask);
if (sls::allEqual(r)) {
return r.front();
}
// can't have different values
FILE_LOG(logERROR) << "Error: Different Values returned)";
setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES);
return -1;
}
int multiSlsDetector::setPatternBitMask(uint64_t mask, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setPatternBitMask(mask);
}
// multi
auto r = parallelCall(&slsDetector::setPatternBitMask, mask);
return sls::allEqualTo(r, static_cast<int>(OK)) ? OK : FAIL;
}
uint64_t multiSlsDetector::getPatternBitMask(int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->getPatternBitMask();
}
// multi
auto r = parallelCall(&slsDetector::getPatternBitMask);
if (sls::allEqual(r)) {
return r.front();
}
// can't have different values
FILE_LOG(logERROR) << "Error: Different Values returned)";
setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES);
return -1;
}
int multiSlsDetector::setLEDEnable(int enable, int detPos) {
// single
if (detPos >= 0) {

View File

@ -1693,7 +1693,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns OK/FAIL
*/
int setCTBPattern(const std::string& fname, int detPos = -1);
int setPattern(const std::string& fname, int detPos = -1);
/**
* Writes a pattern word to the CTB
@ -1703,7 +1703,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns actual value
*/
uint64_t setCTBWord(int addr, uint64_t word = -1, int detPos = -1);
uint64_t setPatternWord(int addr, uint64_t word = -1, int detPos = -1);
/**
* Sets the pattern or loop limits in the CTB
@ -1714,7 +1714,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns OK/FAIL
*/
int setCTBPatLoops(int level, int &start, int &stop, int &n,
int setPatternLoops(int level, int &start, int &stop, int &n,
int detPos = -1);
/**
@ -1724,7 +1724,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns actual value
*/
int setCTBPatWaitAddr(int level, int addr = -1, int detPos = -1);
int setPatternWaitAddr(int level, int addr = -1, int detPos = -1);
/**
* Sets the wait time in the CTB
@ -1733,7 +1733,37 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns actual value
*/
uint64_t setCTBPatWaitTime(int level, uint64_t t = -1, int detPos = -1);
uint64_t setPatternWaitTime(int level, uint64_t t = -1, int detPos = -1);
/**
* Sets the mask applied to every pattern
* @param mask mask to be applied
* @param detPos -1 for all detectors in list or specific detector position
* @returns OK or FAIL
*/
int setPatternMask(uint64_t mask, int detPos = -1);
/**
* Gets the mask applied to every pattern
* @param detPos -1 for all detectors in list or specific detector position
* @returns mask set
*/
uint64_t getPatternMask(int detPos = -1);
/**
* Selects the bits that the mask will be applied to for every pattern
* @param mask mask to select bits
* @param detPos -1 for all detectors in list or specific detector position
* @returns OK or FAIL
*/
int setPatternBitMask(uint64_t mask, int detPos = -1);
/**
* Gets the bits that the mask will be applied to for every pattern
* @param detPos -1 for all detectors in list or specific detector position
* @returns mask of bits selected
*/
uint64_t getPatternBitMask(int detPos = -1);
/**
* Set LED Enable (Moench, CTB only)