client multi.cpp getid and checkversioncompatibility are examples of how it might look like

This commit is contained in:
maliakal_d 2018-10-03 12:31:00 +02:00
parent 586c664a43
commit 40ae74bb99
3 changed files with 82 additions and 38 deletions

View File

@ -8,6 +8,7 @@
#include "multiSlsDetectorCommand.h" #include "multiSlsDetectorCommand.h"
#include "utilities.h" #include "utilities.h"
#include "detectorData.h" #include "detectorData.h"
#include "logger.h"
#include <sys/types.h> #include <sys/types.h>
#include <iostream> #include <iostream>
@ -330,14 +331,27 @@ int multiSlsDetector::decodeNChannel(int offsetX, int offsetY, int& channelX, in
} }
std::string multiSlsDetector::getErrorMessage(int& critical) { std::string multiSlsDetector::getErrorMessage(int& critical, int detPos) {
int64_t multiMask, slsMask = 0; int64_t multiMask = 0, slsMask = 0;
std::string retval = ""; std::string retval = "";
char sNumber[100]; char sNumber[100];
critical = 0; critical = 0;
unsigned int posmin = 0, posmax = detectors.size();
// single
if (detPos >= 0) {
// position exceeds multi list size
if (detPos > detectors.size()) {
FILE_LOG(logERROR) << "Position " << detPos << " exceeds list of " << detectors.size();
return retval;
}
slsMask = getErrorMask();
posmin = (unsigned int)detPos;
posmax = posmin + 1;
}
multiMask = getErrorMask(); multiMask = getErrorMask();
if (multiMask) { if (multiMask || slsMask) {
if (multiMask & MULTI_DETECTORS_NOT_ADDED) { if (multiMask & MULTI_DETECTORS_NOT_ADDED) {
retval.append("Detectors not added:\n" + std::string(getNotAddedList()) + retval.append("Detectors not added:\n" + std::string(getNotAddedList()) +
std::string("\n")); std::string("\n"));
@ -350,15 +364,22 @@ std::string multiSlsDetector::getErrorMessage(int& critical) {
} }
if (multiMask & MULTI_CONFIG_FILE_ERROR) { if (multiMask & MULTI_CONFIG_FILE_ERROR) {
retval.append("Could not load Config File\n"); retval.append("Could not load Config File\n");
critical = 0; critical = 1;
}
if (multiMask & MULTI_POS_EXCEEDS_LIST) {
retval.append("Position exceeds multi detector list\n");
critical = 1;
} }
for (unsigned int idet = 0; idet < detectors.size(); ++idet) {
for (unsigned int idet = posmin; idet < posmax; ++idet) {
//if the detector has error //if the detector has error
if (multiMask & (1 << idet)) { if ((multiMask & (1 << idet)) || (detPos >= 0)) {
//append detector id //append detector id
sprintf(sNumber, "%d", idet); sprintf(sNumber, "%d", idet);
retval.append("Detector " + std::string(sNumber) + std::string(":\n")); retval.append("Detector " + std::string(sNumber) + std::string(":\n"));
//get sls det error mask //get sls det error mask
slsMask = detectors[idet]->getErrorMask(); slsMask = detectors[idet]->getErrorMask();
#ifdef VERYVERBOSE #ifdef VERYVERBOSE
@ -366,9 +387,11 @@ std::string multiSlsDetector::getErrorMessage(int& critical) {
sprintf(sNumber, "0x%lx", slsMask); sprintf(sNumber, "0x%lx", slsMask);
retval.append("Error Mask " + std::string(sNumber) + std::string("\n")); retval.append("Error Mask " + std::string(sNumber) + std::string("\n"));
#endif #endif
//get the error critical level //get the error critical level
if ((slsMask > 0xFFFFFFFF) | critical) if ((slsMask > 0xFFFFFFFF) | critical)
critical = 1; critical = 1;
//append error message //append error message
retval.append(errorDefs::getErrorMessage(slsMask)); retval.append(errorDefs::getErrorMessage(slsMask));
} }
@ -377,7 +400,22 @@ std::string multiSlsDetector::getErrorMessage(int& critical) {
return retval; return retval;
} }
int64_t multiSlsDetector::clearAllErrorMask() { int64_t multiSlsDetector::clearAllErrorMask(int detPos) {
// single
if (detPos >= 0) {
// position exceeds multi list size
if (detPos > detectors.size()) {
FILE_LOG(logERROR) << "Position " << detPos << " exceeds list of " << detectors.size();
setErrorMask(getErrorMask() | MULTI_POS_EXCEEDS_LIST);
return -1;
}
return detectors[idet]->clearErrorMask();
}
// multi
clearErrorMask(); clearErrorMask();
clearNotAddedList(); clearNotAddedList();
for (unsigned int idet = 0; idet < detectors.size(); ++idet) for (unsigned int idet = 0; idet < detectors.size(); ++idet)
@ -386,6 +424,7 @@ int64_t multiSlsDetector::clearAllErrorMask() {
return getErrorMask(); return getErrorMask();
} }
void multiSlsDetector::setErrorMaskFromAllDetectors() { void multiSlsDetector::setErrorMaskFromAllDetectors() {
for (unsigned int idet = 0; idet < detectors.size(); ++idet) { for (unsigned int idet = 0; idet < detectors.size(); ++idet) {
if (detectors[idet]->getErrorMask()) if (detectors[idet]->getErrorMask())
@ -412,26 +451,48 @@ bool multiSlsDetector::isAcquireReady() {
return OK; return OK;
} }
int multiSlsDetector::checkVersionCompatibility(portType t) { int multiSlsDetector::checkVersionCompatibility(portType t, int detPos) {
return parallelCallDetectorMember(&slsDetector::checkVersionCompatibility, t);
}
int64_t multiSlsDetector::getId(idMode mode, int imod) {
// single // single
{ if (detPos >= 0) {
if (imod >= 0) {
if (imod < 0 || imod >= (int)detectors.size()) // position exceeds multi list size
return -1; if (detPos > detectors.size()) {
int64_t ret = detectors[imod]->getId(mode, imod); FILE_LOG(logERROR) << "Position " << detPos << " exceeds list of " << detectors.size();
if (detectors[imod]->getErrorMask()) setErrorMask(getErrorMask() | MULTI_POS_EXCEEDS_LIST);
setErrorMask(getErrorMask() | (1 << imod)); return -1;
return ret;
} }
int ret = detectors[detPos]->checkVersionCompatibility(t);
if (detectors[detPos]->getErrorMask())
setErrorMask(getErrorMask() | (1 << detPos));
return ret;
} }
// multi // multi
return callDetectorMember(&slsDetector::getId, mode, imod); return parallelCallDetectorMember(&slsDetector::checkVersionCompatibility, t);
}
int64_t multiSlsDetector::getId(idMode mode, int detPos) {
// single
if (detPos >= 0) {
// position exceeds multi list size
if (detPos > detectors.size()) {
FILE_LOG(logERROR) << "Position " << detPos << " exceeds list of " << detectors.size();
setErrorMask(getErrorMask() | MULTI_POS_EXCEEDS_LIST);
return -1;
}
int64_t ret = detectors[detPos]->getId(mode);
if (detectors[detPos]->getErrorMask())
setErrorMask(getErrorMask() | (1 << detPos));
return ret;
}
// multi
return callDetectorMember(&slsDetector::getId, mode);
} }

View File

@ -108,17 +108,6 @@ slsDetector::~slsDetector() {
} }
int64_t slsDetector::clearAllErrorMask() {
clearErrorMask();
pthread_mutex_lock(&ms);
for(int i=0;i<multiDet->getNumberOfDetectors();++i){
multiDet->setErrorMask(multiDet->getErrorMask()|(0<<i));
}
pthread_mutex_unlock(&ms);
return getErrorMask();
}
void slsDetector::setAcquiringFlag(bool b) { void slsDetector::setAcquiringFlag(bool b) {
multiDet->setAcquiringFlag(b); multiDet->setAcquiringFlag(b);
} }

View File

@ -316,12 +316,6 @@ public:
*/ */
virtual ~slsDetector(); virtual ~slsDetector();
/**
* Clears error mask and also the bit in parent det multi error mask
* @returns error mask
*/
int64_t clearAllErrorMask();
/** /**
* Set acquiring flag in shared memory * Set acquiring flag in shared memory
* @param b acquiring flag * @param b acquiring flag