From 11fe4522eb9dee2ee7cf467c224c834b7dfc06db Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Tue, 2 Oct 2012 15:14:05 +0000 Subject: [PATCH] added receiver functions git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@271 951219d9-93cf-4727-9268-0efd64621fa3 --- .../multiSlsDetector/multiSlsDetector.cpp | 152 ++++++++++++++++-- .../multiSlsDetector/multiSlsDetector.h | 58 ++++++- 2 files changed, 188 insertions(+), 22 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 037d53275..348056e86 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -3555,12 +3555,27 @@ int multiSlsDetector::readDataFile(string fname, int *data) { -string multiSlsDetector::setupReceiver(string fileName) { - cout<<"File Name:"<receiverOnlineFlag=off; + for (int i=0; inumberOfDetectors+1; i++) { + if (detectors[i]) + detectors[i]->setReceiverOnline(off); + } + } + return thisMultiDetector->onlineFlag; +} + + + +string multiSlsDetector::checkReceiverOnline() { string retval1 = "",retval; for (int idet=0; idetnumberOfDetectors; 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?*/ - runStatus s, s1; - if(detectors[0]) s1 = detectors[0]->startReceiver(status,index); - for (int idet=1; idetnumberOfDetectors; idet++) { + +string multiSlsDetector::setReceiverFileName(string fileName) { + string ret="error", ret1; + + for (int idet=0; idetnumberOfDetectors; idet++) { if (detectors[idet]) { - s=detectors[idet]->startReceiver(status,index); - if(s==ERROR) - s1=ERROR; - if(s==IDLE && s1!=IDLE) - s1=ERROR; + ret1=detectors[idet]->setReceiverFileName(fileName); + if (ret1=="error") + ret=ret1; + else if (ret!=ret1) + ret=""; } } - return s1; + return ret; } + + +string multiSlsDetector::setReceiverFileDir(string fileDir) { + string ret="error", ret1; + + for (int idet=0; idetnumberOfDetectors; 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; idetnumberOfDetectors; 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; inumberOfDetectors; 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; inumberOfDetectors; i++) { + if (detectors[i]) { + ret=detectors[i]->stopReceiver(); + if (ret!=OK) + ret1=FAIL; + } + } + return ret1; +} + + + + +slsDetectorDefs::runStatus multiSlsDetector::getReceiverStatus(){ + + runStatus s,s1; + + if (thisMultiDetector->masterPosition>=0) + if (detectors[thisMultiDetector->masterPosition]) + return detectors[thisMultiDetector->masterPosition]->getReceiverStatus(); + + + if (detectors[0]) s=detectors[0]->getReceiverStatus(); + + for (int i=0; inumberOfDetectors; i++) { + s1=detectors[i]->getReceiverStatus(); + if (s1==ERROR) + s=ERROR; + if (s1==IDLE && s!=IDLE) + s=ERROR; + + } + return s; +} + + diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index e0027ff6e..3b4722e80 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -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: