From 16e4fbf8dd98d80c3549904f870eea2029d8ce0e Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Thu, 23 Nov 2017 18:21:54 +0100 Subject: [PATCH] receiver read freq should save value in shm even if no receiver present --- .../multiSlsDetector/multiSlsDetector.cpp | 10 +--- .../multiSlsDetector/multiSlsDetector.h | 7 +-- .../slsDetector/slsDetector.cpp | 50 +++++++++++-------- slsDetectorSoftware/slsDetector/slsDetector.h | 6 +-- .../slsDetector/slsDetectorBase.h | 4 +- .../slsDetector/slsDetectorCommand.cpp | 4 +- .../slsDetector/slsDetectorUsers.cpp | 2 +- .../slsDetector/slsDetectorUtils.h | 4 +- 8 files changed, 40 insertions(+), 47 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index c866721e2..8ac4a6ede 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -206,7 +206,6 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) thisMultiDetector->scanPrecision[iscan]=0; } - thisMultiDetector->receiver_read_freq = 0; thisMultiDetector->acquiringFlag = false; thisMultiDetector->externalgui = false; thisMultiDetector->receiver_datastream = false; @@ -6119,15 +6118,12 @@ int multiSlsDetector::calibratePedestal(int frames){ return ret; } -int multiSlsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){ +int multiSlsDetector::setReadReceiverFrequency(int freq){ int ret=-100, ret1; - if(!getFromReceiver) - return thisMultiDetector->receiver_read_freq; - for (int idet=0; idetnumberOfDetectors; ++idet) { if (detectors[idet]) { - ret1=detectors[idet]->setReadReceiverFrequency(getFromReceiver,freq); + ret1=detectors[idet]->setReadReceiverFrequency(freq); if(detectors[idet]->getErrorMask()) setErrorMask(getErrorMask()|(1<receiver_read_freq = ret; - return ret; } diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 7f82c9642..1ef7c625d 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -195,9 +195,6 @@ class multiSlsDetector : public slsDetectorUtils { mysteps scanSteps[MAX_SCAN_LEVELS]; int scanPrecision[MAX_SCAN_LEVELS]; - /* Receiver read frequency */ - int receiver_read_freq; - /** flag for acquiring */ bool acquiringFlag; @@ -1328,12 +1325,10 @@ class multiSlsDetector : public slsDetectorUtils { /** Sets the read receiver frequency if data required from receiver randomly readRxrFrequency=0, else every nth frame to be sent to gui - @param getFromReceiver is 1 if it should ask the receiver, - 0 if it can get it from multi structure @param freq is the receiver read frequency /returns read receiver frequency */ - int setReadReceiverFrequency(int getFromReceiver, int freq=-1); + int setReadReceiverFrequency(int freq=-1); /** Sets the read receiver timer if data required from receiver randomly readRxrFrequency=0, diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index b869513bb..705c687ee 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -780,6 +780,7 @@ int slsDetector::initializeDetectorSize(detectorType type) { thisDetector->zmqport = 0; thisDetector->receiver_zmqport = 0; thisDetector->receiver_datastream = false; + thisDetector->receiver_read_freq = 0; for (int ia=0; iaactionScript[ia],"none"); @@ -6077,6 +6078,7 @@ string slsDetector::setReceiver(string receiverIP){ std::cout << "dynamic range:" << thisDetector->dynamicRange << endl << endl; std::cout << "flippeddatax:" << thisDetector->flippedData[d] << endl; std::cout << "10GbE:" << thisDetector->tenGigaEnable << endl << endl; + std::cout << "r_readfreq:" << thisDetector->receiver_read_freq << endl << endl; std::cout << "rx streaming port:" << thisDetector->receiver_zmqport << endl; //std::cout << "dataStreaming:" << enableDataStreamingFromReceiver(-1) << endl << endl; @@ -6122,6 +6124,7 @@ string slsDetector::setReceiver(string receiverIP){ enableTenGigabitEthernet(thisDetector->tenGigaEnable); // data streaming + setReadReceiverFrequency(thisDetector->receiver_read_freq); setReceiverStreamingPort(getReceiverStreamingPort()); enableDataStreamingFromReceiver(enableDataStreamingFromReceiver(-1)); } @@ -8270,6 +8273,10 @@ int slsDetector::updateReceiverNoWait() { parentDet->enableOverwriteMask(ind); pthread_mutex_unlock(&ms); + // receiver read frequency + n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind)); + thisDetector->receiver_read_freq = ind; + // receiver streaming port n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind)); thisDetector->receiver_zmqport = ind; @@ -8510,34 +8517,35 @@ int64_t slsDetector::clearAllErrorMask(){ -int slsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){ - int fnum=F_READ_RECEIVER_FREQUENCY; - int ret = FAIL; - int retval=-1; - int arg = freq; +int slsDetector::setReadReceiverFrequency(int freq){ - if(!getFromReceiver) - return retval; + if (freq >= 0) { + thisDetector->receiver_read_freq = freq; - if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ + int fnum=F_READ_RECEIVER_FREQUENCY; + int ret = FAIL; + int retval=-1; + int arg = freq; + + if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ #ifdef VERBOSE - std::cout << "Sending read frequency to receiver " << arg << std::endl; + std::cout << "Sending read frequency to receiver " << arg << std::endl; #endif - if (connectData() == OK){ - ret=thisReceiver->sendInt(fnum,retval,arg); - disconnectData(); + if (connectData() == OK){ + ret=thisReceiver->sendInt(fnum,retval,arg); + disconnectData(); + } + if((ret == FAIL) || (retval != freq)) { + cout << "could not set receiver read frequency to " << freq <<" Returned:" << retval << endl; + setErrorMask((getErrorMask())|(RECEIVER_READ_FREQUENCY)); + } + + if(ret==FORCE_UPDATE) + updateReceiver(); } - if(ret==FAIL) - retval = -1; - if(ret==FORCE_UPDATE) - updateReceiver(); } - if ((freq > 0) && (retval != freq)){ - cout << "could not set receiver read frequency to " << freq <<" Returned:" << retval << endl; - setErrorMask((getErrorMask())|(RECEIVER_READ_FREQUENCY)); - } - return retval; + return thisDetector->receiver_read_freq; } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 3e058fad7..ebeb6624e 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -275,6 +275,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion { int receiver_zmqport; /** data streaming (up stream) enable in receiver */ bool receiver_datastream; + /* Receiver read frequency */ + int receiver_read_freq; } sharedSlsDetector; @@ -1766,12 +1768,10 @@ class slsDetector : public slsDetectorUtils, public energyConversion { /** Sets the read receiver frequency if data required from receiver randomly readRxrFrequency=0, else every nth frame to be sent to gui - @param getFromReceiver is 1 if it should ask the receiver, - 0 if it can get it from multi structure @param freq is the receiver read frequency /returns read receiver frequency */ - int setReadReceiverFrequency(int getFromReceiver, int freq=-1); + int setReadReceiverFrequency(int freq=-1); /** Sets the read receiver timer if data required from receiver randomly readRxrFrequency=0, diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index f8a8b4626..b31ccabeb 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -580,12 +580,10 @@ virtual void readFrameFromReceiver()=0; /** Sets the read receiver frequency if data required from receiver randomly readRxrFrequency=0, else every nth frame to be sent to gui - @param getFromReceiver is 1 if it should ask the receiver, - 0 if it can get it from multi structure @param freq is the receiver read frequency /returns read receiver frequency */ - virtual int setReadReceiverFrequency(int getFromReceiver, int freq=-1)=0; + virtual int setReadReceiverFrequency(int freq=-1)=0; /** Sets the receiver to start any readout remaining in the fifo and * change status to transmitting. diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index f1f826017..f517f9119 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -5949,9 +5949,9 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) { if (!sscanf(args[1],"%d",&ival)) return string("Could not scan read frequency mode ")+string(args[1]); if(ival>=0) - myDet->setReadReceiverFrequency(1,ival); + myDet->setReadReceiverFrequency(ival); } - sprintf(answer,"%d",myDet->setReadReceiverFrequency(1)); + sprintf(answer,"%d",myDet->setReadReceiverFrequency()); return string(answer); } diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp index 6c94ebc0d..56d5606f6 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp @@ -224,7 +224,7 @@ void slsDetectorUsers::finalizeDataset(double *a, double *v, double *e, int &np) } int slsDetectorUsers::setReceiverMode(int n){ - return myDetector->setReadReceiverFrequency(1,n); + return myDetector->setReadReceiverFrequency(n); } int slsDetectorUsers::enableDataStreamingFromReceiver(int i){ diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h index 4bed0764c..8142197cc 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h @@ -768,12 +768,10 @@ virtual ROI* getROI(int &n)=0; /** Sets the read receiver frequency if data required from receiver randomly readRxrFrequency=0, else every nth frame to be sent to gui - @param getFromReceiver is 1 if it should ask the receiver, - 0 if it can get it from multi structure @param freq is the receiver read frequency /returns read receiver frequency */ -virtual int setReadReceiverFrequency(int getFromReceiver, int freq=-1)=0; +virtual int setReadReceiverFrequency(int freq=-1)=0; /** Enable or disable streaming data from receiver to client * @param enable 0 to disable 1 to enable -1 to only get the value