diff --git a/slsDetectorSoftware/Makefile b/slsDetectorSoftware/Makefile index 012d91723..9654bb3c5 100644 --- a/slsDetectorSoftware/Makefile +++ b/slsDetectorSoftware/Makefile @@ -11,7 +11,7 @@ DFLAGS= -DDACS_INT -DTHIS_PATH='"$(shell pwd)"' CC=g++ -SRC_CLNT= slsDetectorAnalysis/fileIO.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/postProcessingFuncs.cpp slsReceiverInterface/receiverInterface.cpp +SRC_CLNT= slsDetectorAnalysis/fileIO.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/postProcessingFuncs.cpp slsReceiverInterface/receiverInterface.cpp OBJS = $(SRC_CLNT:.cpp=.o) diff --git a/slsDetectorSoftware/commonFiles/sls_detector_defs.h b/slsDetectorSoftware/commonFiles/sls_detector_defs.h index 758e7b600..12fa8504a 100755 --- a/slsDetectorSoftware/commonFiles/sls_detector_defs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -517,6 +517,13 @@ 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 //cant seem to get this error + + //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 9aee67377..fed02dd2c 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) +multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1),errorMask(0) { while (shmId<0) { shmId=initSharedMemory(id); @@ -868,8 +868,11 @@ int multiSlsDetector::setOnline(int off) { if (off!=GET_ONLINE_FLAG) { thisMultiDetector->onlineFlag=off; for (int i=0; inumberOfDetectors; i++) { - if (detectors[i]) - detectors[i]->setOnline(off); + if (detectors[i]){ + detectors[i]->setOnline(off); + if(detectors[i]->getErrorMask()) + setErrorMask(getErrorMask()|(1<onlineFlag; @@ -2527,7 +2530,9 @@ char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){ if (s.find('+')==string::npos) { for (int idet=0; idetnumberOfDetectors; idet++) { if (detectors[idet]) { - detectors[idet]->setNetworkParameter(p,s); + detectors[idet]->setNetworkParameter(p,s); + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; idet++) { if (detectors[idet]) { ret1=detectors[idet]->configureMAC(adc); + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; i++) if (detectors[i]){ ret1=detectors[i]->setReceiverOnline(off); + if(detectors[i]->getErrorMask()) + setErrorMask(getErrorMask()|(1<executeLine(narg, args, action); \ + if(d->getErrorMask()) \ + myDet->setErrorMask((myDet->getErrorMask())|(1<onlineFlag==OFFLINE_FLAG){ + std::cout << "cannot connect to detector" << endl; + setErrorMask((getErrorMask())|(CANNOT_CONNECT_TO_DETECTOR)); + } } } return thisDetector->onlineFlag; @@ -4547,9 +4556,7 @@ char* slsDetector::setReceiver(string receiverIP){ setFileIndex(fileIO::getFileIndex()); enableWriteToFile(parentDet->enableWriteToFileMask()); setUDPConnection(); - }else - std::cout << "cannot connect to receiver" << endl; - + } return thisDetector->receiver_hostname; } @@ -4649,15 +4656,14 @@ int slsDetector::setUDPConnection(){ updateReceiver(); //configure detector with udp details - if(configureMAC()!=OK){ + if(configureMAC()==FAIL){ setReceiverOnline(OFFLINE_FLAG); std::cout << "could not configure mac" << endl; } } - }else{ + }else ret=FAIL; - std::cout << "cannot connect to receiver" << endl; - } + return ret; } @@ -4685,6 +4691,7 @@ int slsDetector::configureMAC(int adc){ strcpy(thisDetector->receiverUDPIP,inet_ntoa(*(struct in_addr*)he->h_addr)); else{ std::cout << "no rx_udpip given and invalid receiver hostname" << endl; + setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC)); return FAIL; } } @@ -4703,6 +4710,7 @@ int slsDetector::configureMAC(int adc){ for(i=0;i<2;i++){ if(!strcmp(arg[i],"none")){ std::cout<< "Configure MAC Error. IP/MAC Addresses not set"<< std::endl; + setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC)); return FAIL; } } @@ -4767,17 +4775,18 @@ int slsDetector::configureMAC(int adc){ if (ret==FAIL){ controlSocket->ReceiveDataOnly(mess,sizeof(mess)); std::cout<< "Detector returned error: " << mess << std::endl; + setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC)); } controlSocket->Disconnect(); if (ret==FORCE_UPDATE) updateDetector(); } } - }else - std::cout << "cannot connect to detector" << endl; + } if (ret==FAIL) { std::cout<< "Configuring MAC failed " << std::endl; + setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC)); } return ret; } @@ -5440,8 +5449,10 @@ int slsDetector::setReceiverOnline(int off) { thisDetector->receiverOnlineFlag=off; if (thisDetector->receiverOnlineFlag==ONLINE_FLAG){ setReceiverTCPSocket(); - if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG) + if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){ std::cout << "cannot connect to receiver" << endl; + setErrorMask((getErrorMask())|(CANNOT_CONNECT_TO_RECEIVER)); + } } } } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 99c8742e9..e849f8eb2 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -247,7 +247,6 @@ class slsDetector : public slsDetectorUtils, public energyConversion { /** online flag - is set if the receiver is connected, unset if socket connection is not possible */ int receiverOnlineFlag; - } sharedSlsDetector; @@ -1515,6 +1514,25 @@ 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: @@ -1555,11 +1573,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion { socket for data acquisition */ MySocketTCP *dataSocket; + - - - - /** pointer to flat field coefficients */ double *ffcoefficients; /** pointer to flat field coefficient errors */ @@ -1579,6 +1594,10 @@ 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 \param id is the detector id needed to define the shared memory id diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index 3e6da4cd3..fd3806ccc 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -472,6 +472,25 @@ 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 \returns MYTHEN, PILATUS, EIGER, GOTTHARD, AGIPD, GENERIC @@ -663,5 +682,9 @@ class slsDetectorBase : public virtual slsDetectorDefs { default: return string("idle"); \ }}; + + }; + + #endif diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h index 246d6326c..f1b8f2fb5 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h @@ -651,6 +651,7 @@ virtual int exitReceiver()=0; virtual int enableWriteToFile(int enable=-1)=0; + protected: diff --git a/slsDetectorSoftware/slsReceiver/receiver_defs.h b/slsDetectorSoftware/slsReceiver/receiver_defs.h index c54cd1119..6f30ebf69 100755 --- a/slsDetectorSoftware/slsReceiver/receiver_defs.h +++ b/slsDetectorSoftware/slsReceiver/receiver_defs.h @@ -7,6 +7,7 @@ #define GOODBYE -200 #define BUFFER_SIZE 1286*2 +#define SHORT_BUFFER_SIZE 518 #define DATABYTES 2560 #define FIFO_SIZE 25000