implemented a trial error class

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@434 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d 2013-01-22 11:16:37 +00:00
parent 3be74327f3
commit a4206208c9
10 changed files with 116 additions and 24 deletions

View File

@ -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 */

View File

@ -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; i<thisMultiDetector->numberOfDetectors; i++) {
if (detectors[i])
if (detectors[i]){
detectors[i]->setOnline(off);
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
}
}
}
return thisMultiDetector->onlineFlag;
@ -2528,6 +2531,8 @@ char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
detectors[idet]->setNetworkParameter(p,s);
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
}
}
} else {
@ -2724,6 +2729,8 @@ int multiSlsDetector::configureMAC(int adc) {
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
ret1=detectors[idet]->configureMAC(adc);
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
@ -3527,6 +3534,8 @@ int multiSlsDetector::setReceiverOnline(int off) {
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++)
if (detectors[i]){
ret1=detectors[i]->setReceiverOnline(off);
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
if(ret==-100)
ret=ret1;
else if (ret!=ret1)

View File

@ -1128,6 +1128,24 @@ 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
*/
int clearErrorMask(){errorMask=0;return errorMask;}
protected:
@ -1140,7 +1158,8 @@ class multiSlsDetector : public slsDetectorUtils {
/** Shared memory structure */
sharedMultiSlsDetector *thisMultiDetector;
/** Error Mask for each detector*/
int errorMask;

View File

@ -35,6 +35,8 @@ class multiSlsDetectorCommand : public slsDetectorCommand {
if (d) { \
slsDetectorCommand *cmd=new slsDetectorCommand(d); \
s=cmd->executeLine(narg, args, action); \
if(d->getErrorMask()) \
myDet->setErrorMask((myDet->getErrorMask())|(1<<id)); \
delete cmd;
} else
s=string("detector does no exist"); \

View File

@ -126,7 +126,8 @@ slsDetector::slsDetector(int id,multiSlsDetector *p) :slsDetectorUtils(),
adcs(NULL),
chipregs(NULL),
chanregs(NULL),
thisReceiver(NULL)
thisReceiver(NULL),
errorMask(0)
{
@ -176,7 +177,9 @@ slsDetector::slsDetector(detectorType type, int id,multiSlsDetector *p): slsDete
adcs(NULL),
chipregs(NULL),
chanregs(NULL),
thisReceiver(NULL)
thisReceiver(NULL),
errorMask(0)
{
while (shmId<0) {
/**Initlializes shared memory \sa initSharedMemory
@ -229,7 +232,9 @@ slsDetector::slsDetector(char *name, int id, int cport,multiSlsDetector *p) : sl
adcs(NULL),
chipregs(NULL),
chanregs(NULL),
thisReceiver(NULL)
thisReceiver(NULL),
errorMask(0)
{
detectorType type=(detectorType)getDetectorType(name, cport);
@ -934,6 +939,10 @@ int slsDetector::setOnline(int off) {
cout << "Detector connecting for the first time - updating!" << endl;
updateDetector();
}
else if(thisDetector->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));
}
}
}
}

View File

@ -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:
@ -1557,9 +1575,6 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
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

View File

@ -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

View File

@ -651,6 +651,7 @@ virtual int exitReceiver()=0;
virtual int enableWriteToFile(int enable=-1)=0;
protected:

View File

@ -7,6 +7,7 @@
#define GOODBYE -200
#define BUFFER_SIZE 1286*2
#define SHORT_BUFFER_SIZE 518
#define DATABYTES 2560
#define FIFO_SIZE 25000