added receiver functions

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@271 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d 2012-10-02 15:14:05 +00:00
parent 3232ce8dac
commit 11fe4522eb
2 changed files with 188 additions and 22 deletions

View File

@ -3555,12 +3555,27 @@ int multiSlsDetector::readDataFile(string fname, int *data) {
string multiSlsDetector::setupReceiver(string fileName) {
cout<<"File Name:"<<fileName<<endl;
//receiver
int multiSlsDetector::setReceiverOnline(int off) {
if (off!=GET_ONLINE_FLAG) {
thisMultiDetector->receiverOnlineFlag=off;
for (int i=0; i<thisMultiDetector->numberOfDetectors+1; i++) {
if (detectors[i])
detectors[i]->setReceiverOnline(off);
}
}
return thisMultiDetector->onlineFlag;
}
string multiSlsDetector::checkReceiverOnline() {
string retval1 = "",retval;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
retval=detectors[idet]->setupReceiver(fileName);
retval=detectors[idet]->checkReceiverOnline();
if(!retval.empty()){
retval1.append(retval);
retval1.append("+");
@ -3571,20 +3586,129 @@ string multiSlsDetector::setupReceiver(string fileName) {
}
slsDetectorDefs::runStatus multiSlsDetector::startReceiver(string status,int index) {
/**master receiver or writer?*/
string multiSlsDetector::setReceiverFileName(string fileName) {
string ret="error", ret1;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
ret1=detectors[idet]->setReceiverFileName(fileName);
if (ret1=="error")
ret=ret1;
else if (ret!=ret1)
ret="";
}
}
return ret;
}
string multiSlsDetector::setReceiverFileDir(string fileDir) {
string ret="error", ret1;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
ret1=detectors[idet]->setReceiverFileDir(fileDir);
if (ret1=="error")
ret=ret1;
else if (ret!=ret1)
ret="";
}
}
return ret;
}
int multiSlsDetector::setReceiverFileIndex(int fileIndex) {
int ret=-100, ret1;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
ret1=detectors[idet]->setReceiverFileIndex(fileIndex);
if (ret1==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
}
}
return ret;
}
int multiSlsDetector::startReceiver(){
int i=0;
int ret=OK, ret1=OK;
for (i=0; i<thisMultiDetector->numberOfDetectors; i++) {
if (i!=thisMultiDetector->masterPosition)
if (detectors[i]) {
ret=detectors[i]->startReceiver();
if (ret!=OK)
ret1=FAIL;
}
}
i=thisMultiDetector->masterPosition;
if (thisMultiDetector->masterPosition>=0) {
if (detectors[i]) {
ret=detectors[i]->startReceiver();
if (ret!=OK)
ret1=FAIL;
}
}
return ret1;
}
int multiSlsDetector::stopReceiver(){
int i=0;
int ret=OK, ret1=OK;
i=thisMultiDetector->masterPosition;
if (thisMultiDetector->masterPosition>=0) {
if (detectors[i]) {
ret=detectors[i]->stopReceiver();
if (ret!=OK)
ret1=FAIL;
}
}
for (i=0; i<thisMultiDetector->numberOfDetectors; i++) {
if (detectors[i]) {
ret=detectors[i]->stopReceiver();
if (ret!=OK)
ret1=FAIL;
}
}
return ret1;
}
slsDetectorDefs::runStatus multiSlsDetector::getReceiverStatus(){
runStatus s,s1;
if(detectors[0]) s1 = detectors[0]->startReceiver(status,index);
if (thisMultiDetector->masterPosition>=0)
if (detectors[thisMultiDetector->masterPosition])
return detectors[thisMultiDetector->masterPosition]->getReceiverStatus();
if (detectors[0]) s=detectors[0]->getReceiverStatus();
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++) {
s1=detectors[i]->getReceiverStatus();
if (s1==ERROR)
s=ERROR;
if (s1==IDLE && s!=IDLE)
s=ERROR;
for (int idet=1; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
s=detectors[idet]->startReceiver(status,index);
if(s==ERROR)
s1=ERROR;
if(s==IDLE && s1!=IDLE)
s1=ERROR;
}
return s;
}
return s1;
}

View File

@ -182,6 +182,9 @@ class multiSlsDetector : public slsDetectorUtils {
int scanPrecision[MAX_SCAN_LEVELS];
//receiver
/** online receiver flag - is set if the receiver is connected, unset if socket connection is not possible */
int receiverOnlineFlag;
};
@ -1002,19 +1005,58 @@ class multiSlsDetector : public slsDetectorUtils {
slsDetector *getSlsDetector(int pos) {if (pos>=0 && pos< MAXDET) return detectors[pos]; return NULL;};
/** Sets up the receiver
@param fileName file name
\returns receiver ip or none
//receiver
/**
calls setReceiverTCPSocket if online and sets the flag
*/
string setupReceiver(string fileName="");
int setReceiverOnline(int const online=GET_ONLINE_FLAG);
/**
Checks if the receiver is really online
*/
string checkReceiverOnline();
/**
Sets up the receiver file name
@param fileName file name
\returns file name
*/
string setReceiverFileName(string fileName="");
/**
Sets up the receiver file directory
@param fileName fileDir file directory
\returns file dir
*/
string setReceiverFileDir(string fileDir="");
/**
Sets up the receiver file index
@param fileIndex file index
\returns file index
*/
int setReceiverFileIndex(int fileIndex=-1);
/** Starts/Stops the receiver
@param status status of receiver
@param index starting index of data file
/** Starts the listening mode of receiver
\returns OK or FAIL
*/
int startReceiver();
/** Stops the listening mode of receiver
\returns OK or FAIL
*/
int stopReceiver();
/** gets the status of the listening mode of receiver
\returns status
*/
runStatus startReceiver(string status="",int index=0);
runStatus getReceiverStatus();
protected: