From 1d03be832fc985b54feda0e91d03ffb89ee460bd Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Wed, 6 Feb 2013 15:22:45 +0000 Subject: [PATCH] added error mask properly inherited by base; mask exist only for cannot connect to detector, receiver and could not configure mac git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@452 951219d9-93cf-4727-9268-0efd64621fa3 --- slsDetectorSoftware/commonFiles/error_defs.h | 34 +++++++++++++++- .../commonFiles/sls_detector_defs.h | 7 ---- .../multiSlsDetector/multiSlsDetector.cpp | 40 ++++++++++++++++++- .../multiSlsDetector/multiSlsDetector.h | 24 +++-------- .../slsDetector/slsDetector.cpp | 9 ++--- slsDetectorSoftware/slsDetector/slsDetector.h | 20 ---------- .../slsDetector/slsDetectorBase.h | 20 +--------- 7 files changed, 82 insertions(+), 72 deletions(-) diff --git a/slsDetectorSoftware/commonFiles/error_defs.h b/slsDetectorSoftware/commonFiles/error_defs.h index cd5035bc1..20d569ba7 100644 --- a/slsDetectorSoftware/commonFiles/error_defs.h +++ b/slsDetectorSoftware/commonFiles/error_defs.h @@ -17,6 +17,16 @@ using namespace std; +/** Error flags */ +#define NUM_ERROR_FLAGS 32 +#define CRITICAL_ERROR_MASK 0xFFFFFFFF + +#define CANNOT_CONNECT_TO_DETECTOR 0x8000000000000000ULL +#define CANNOT_CONNECT_TO_RECEIVER 0x4000000000000000ULL +#define COULD_NOT_CONFIGURE_MAC 0x0000000000000001ULL + + + /** @short class returning all error messages for error mask */ class errorDefs { @@ -24,13 +34,13 @@ class errorDefs { public: /** Constructor */ - errorDefs(){}; + errorDefs():errorMask(0){}; /** Gets the error message * param errorMask error mask /returns error message from error mask */ - static string getErrorMessage(int slsErrorMask){ + static string getErrorMessage(int64_t slsErrorMask){ string retval = ""; @@ -48,6 +58,26 @@ public: } + /** Sets multi error mask + @param multi error mask to be set to + /returns multi error mask + */ + int64_t setErrorMask(int64_t i){errorMask=i;return getErrorMask();}; + + /**returns multi error mask */ + int64_t getErrorMask(){return errorMask;}; + + /** Clears error mask + /returns error mask + */ + int64_t clearErrorMask(){errorMask=0;return errorMask;}; + + +protected: + + /** Error Mask */ + int64_t errorMask; + }; #endif /* ERROR_DEFS_H_ */ diff --git a/slsDetectorSoftware/commonFiles/sls_detector_defs.h b/slsDetectorSoftware/commonFiles/sls_detector_defs.h index fef414876..8fa55104b 100755 --- a/slsDetectorSoftware/commonFiles/sls_detector_defs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -520,13 +520,6 @@ enum angleConversionParameter { -/** Error flags */ -#define NUM_ERROR_FLAGS 32 -#define CANNOT_CONNECT_TO_DETECTOR 0x80000000 -#define CANNOT_CONNECT_TO_RECEIVER 0x40000000 -#define COULD_NOT_CONFIGURE_MAC 0x00008000 - - //typedef struct { //float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */ //float ecenter; /**< error in the center determination */ diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index c2e048891..34a700b7e 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -93,7 +93,7 @@ int multiSlsDetector::initSharedMemory(int id=0) { -multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1),errorMask(0) +multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) { while (shmId<0) { shmId=initSharedMemory(id); @@ -3869,3 +3869,41 @@ int multiSlsDetector::setFrameIndex(int index){ return ret; } + + + +string multiSlsDetector::getErrorMessage(int &critical){ + + int64_t multiMask,slsMask=0; + string retval=""; + char sNumber[100]; + critical=0; + + multiMask = getErrorMask(); + if(multiMask){ + for (int idet=0; idetnumberOfDetectors; idet++) { + if (detectors[idet]) { + //if the detector has error + if(multiMask&(1<getErrorMask(); +#ifdef VERYVERBOSE + //append sls det error mask + sprintf(sNumber,"0x%x",slsMask); + retval.append("Error Mask " + string(sNumber)+string("\n")); +#endif + //get the error critical level + if((slsMask>0xFFFFFFFF)|critical) + critical = 1; + //append error message + retval.append(errorDefs::getErrorMessage(slsMask)); + + } + } + } + } + return retval; +} diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index f520d66dc..90486d17c 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -1134,22 +1134,13 @@ class multiSlsDetector : public slsDetectorUtils { int fillModuleMask(int *mM); - - /** - Sets multi error mask - @param multi error mask to be set to - /returns multi error mask - */ - int setErrorMask(int i=-1){errorMask=i;return getErrorMask();} - - /**returns multi error mask */ - int getErrorMask(){return errorMask;} - - /** - clears error mask - /returns error mask + /**checks error mask and returns error message if it exists + * @param myDet is the multidetector object + * @param critical is 1 if any of the messages is critical + /returns error message else an empty string */ - int clearErrorMask(){errorMask=0;return errorMask;} + string getErrorMessage(int &critical); + protected: @@ -1163,9 +1154,6 @@ class multiSlsDetector : public slsDetectorUtils { /** Shared memory structure */ sharedMultiSlsDetector *thisMultiDetector; - /** Error Mask for each detector*/ - int errorMask; - }; diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 73dcc80f1..e7bc0073c 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -126,8 +126,7 @@ slsDetector::slsDetector(int id,multiSlsDetector *p) :slsDetectorUtils(), adcs(NULL), chipregs(NULL), chanregs(NULL), - thisReceiver(NULL), - errorMask(0) + thisReceiver(NULL) { @@ -177,8 +176,7 @@ slsDetector::slsDetector(detectorType type, int id,multiSlsDetector *p): slsDete adcs(NULL), chipregs(NULL), chanregs(NULL), - thisReceiver(NULL), - errorMask(0) + thisReceiver(NULL) { while (shmId<0) { @@ -232,8 +230,7 @@ slsDetector::slsDetector(char *name, int id, int cport,multiSlsDetector *p) : sl adcs(NULL), chipregs(NULL), chanregs(NULL), - thisReceiver(NULL), - errorMask(0) + thisReceiver(NULL) { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 5897607f8..0677e1b38 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -1523,23 +1523,6 @@ class slsDetector : public slsDetectorUtils, public energyConversion { int fillModuleMask(int *mM); - - /** - Sets error mask - @param error mask to be set to - /returns error mask - */ - int setErrorMask(int i=-1){errorMask=i;return errorMask;} - - /**returns error mask */ - int getErrorMask(){return errorMask;} - - /** - clears error mask - /returns error mask - */ - int clearErrorMask(){errorMask=0;return errorMask;} - protected: @@ -1601,9 +1584,6 @@ class slsDetector : public slsDetectorUtils, public energyConversion { receiverInterface *thisReceiver; - /** Error Mask*/ - int errorMask; - /** Initializes the shared memory \param type is needed to define the size of the shared memory diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index fd3806ccc..ebcdb60a2 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -48,6 +48,7 @@ #include "sls_detector_defs.h" +#include "error_defs.h" #include @@ -63,7 +64,7 @@ using namespace std; */ //public virtual slsDetectorUsers, -class slsDetectorBase : public virtual slsDetectorDefs { +class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDefs { public: @@ -473,23 +474,6 @@ class slsDetectorBase : public virtual slsDetectorDefs { virtual int* readFrameFromReceiver(char* fName, int &fIndex)=0; - /** Gets error mask - /returns error mask - */ - virtual int getErrorMask()=0; - - /** - Sets error mask - @param error mask to be set to - /returns error mask - */ - virtual int setErrorMask(int i=-1)=0; - - /** - clears error mask - /returns error mask - */ - virtual int clearErrorMask()=0; /** returns detector type string from detector type index \param t string can be Mythen, Pilatus, Eiger, Gotthard, Agipd, Unknown