mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 08:10:02 +02:00
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:
parent
3be74327f3
commit
a4206208c9
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
@ -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"); \
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -651,6 +651,7 @@ virtual int exitReceiver()=0;
|
||||
virtual int enableWriteToFile(int enable=-1)=0;
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#define GOODBYE -200
|
||||
#define BUFFER_SIZE 1286*2
|
||||
#define SHORT_BUFFER_SIZE 518
|
||||
#define DATABYTES 2560
|
||||
#define FIFO_SIZE 25000
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user