diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index ccedbe7f6..11794d101 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -213,7 +213,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; @@ -6317,15 +6316,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 6ea818dc3..9443e44cd 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -207,9 +207,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; @@ -1353,12 +1350,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 ccaef9638..969889137 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -798,6 +798,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"); @@ -6189,8 +6190,8 @@ string slsDetector::setReceiver(string receiverIP){ std::cout << "rx streaming source ip:" << thisDetector->receiver_zmqip << endl; std::cout << "enable gap pixels:" << thisDetector->gappixels << endl; std::cout << "rx streaming port:" << thisDetector->receiver_zmqport << endl; - - //std::cout << "dataStreaming:" << enableDataStreamingFromReceiver(-1) << endl << endl; + std::cout << "r_readfreq:" << thisDetector->receiver_read_freq << endl << endl; + std::cout << "rx_datastream:" << enableDataStreamingFromReceiver(-1) << endl << endl; /** enable compresison, */ #endif if(setDetectorType()!= GENERIC){ @@ -6231,6 +6232,7 @@ string slsDetector::setReceiver(string receiverIP){ enableGapPixels(enableGapPixels(-1)); // data streaming + setReadReceiverFrequency(thisDetector->receiver_read_freq); setReceiverStreamingPort(getReceiverStreamingPort()); setReceiverStreamingIP(getReceiverStreamingIP()); enableDataStreamingFromReceiver(enableDataStreamingFromReceiver(-1)); @@ -8507,6 +8509,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; @@ -8721,34 +8727,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 1ef903b0b..8b5a3bbf3 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; /** zmq tcp src ip address in client (only data) **/ char zmqip[MAX_STR_LENGTH]; /** zmq tcp src ip address in receiver (only data) **/ @@ -286,6 +288,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion { /** data bytes including gap pixels */ int dataBytesInclGapPixels; + + } sharedSlsDetector; @@ -1800,12 +1804,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 8cd627b19..f86772d53 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -6001,9 +6001,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 77bbfb90d..39e5a8d81 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h @@ -779,12 +779,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