receiver read freq should save value in shm even if no receiver present

This commit is contained in:
Dhanya Maliakal 2017-11-23 18:21:54 +01:00
parent 5eb8402742
commit 16e4fbf8dd
8 changed files with 40 additions and 47 deletions

View File

@ -206,7 +206,6 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1)
thisMultiDetector->scanPrecision[iscan]=0; thisMultiDetector->scanPrecision[iscan]=0;
} }
thisMultiDetector->receiver_read_freq = 0;
thisMultiDetector->acquiringFlag = false; thisMultiDetector->acquiringFlag = false;
thisMultiDetector->externalgui = false; thisMultiDetector->externalgui = false;
thisMultiDetector->receiver_datastream = false; thisMultiDetector->receiver_datastream = false;
@ -6119,15 +6118,12 @@ int multiSlsDetector::calibratePedestal(int frames){
return ret; return ret;
} }
int multiSlsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){ int multiSlsDetector::setReadReceiverFrequency(int freq){
int ret=-100, ret1; int ret=-100, ret1;
if(!getFromReceiver)
return thisMultiDetector->receiver_read_freq;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet) { for (int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) { if (detectors[idet]) {
ret1=detectors[idet]->setReadReceiverFrequency(getFromReceiver,freq); ret1=detectors[idet]->setReadReceiverFrequency(freq);
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100) if (ret==-100)
@ -6137,8 +6133,6 @@ int multiSlsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){
} }
} }
thisMultiDetector->receiver_read_freq = ret;
return ret; return ret;
} }

View File

@ -195,9 +195,6 @@ class multiSlsDetector : public slsDetectorUtils {
mysteps scanSteps[MAX_SCAN_LEVELS]; mysteps scanSteps[MAX_SCAN_LEVELS];
int scanPrecision[MAX_SCAN_LEVELS]; int scanPrecision[MAX_SCAN_LEVELS];
/* Receiver read frequency */
int receiver_read_freq;
/** flag for acquiring */ /** flag for acquiring */
bool acquiringFlag; bool acquiringFlag;
@ -1328,12 +1325,10 @@ class multiSlsDetector : public slsDetectorUtils {
/** Sets the read receiver frequency /** Sets the read receiver frequency
if data required from receiver randomly readRxrFrequency=0, if data required from receiver randomly readRxrFrequency=0,
else every nth frame to be sent to gui 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 @param freq is the receiver read frequency
/returns read receiver frequency /returns read receiver frequency
*/ */
int setReadReceiverFrequency(int getFromReceiver, int freq=-1); int setReadReceiverFrequency(int freq=-1);
/** Sets the read receiver timer /** Sets the read receiver timer
if data required from receiver randomly readRxrFrequency=0, if data required from receiver randomly readRxrFrequency=0,

View File

@ -780,6 +780,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
thisDetector->zmqport = 0; thisDetector->zmqport = 0;
thisDetector->receiver_zmqport = 0; thisDetector->receiver_zmqport = 0;
thisDetector->receiver_datastream = false; thisDetector->receiver_datastream = false;
thisDetector->receiver_read_freq = 0;
for (int ia=0; ia<MAX_ACTIONS; ++ia) { for (int ia=0; ia<MAX_ACTIONS; ++ia) {
strcpy(thisDetector->actionScript[ia],"none"); strcpy(thisDetector->actionScript[ia],"none");
@ -6077,6 +6078,7 @@ string slsDetector::setReceiver(string receiverIP){
std::cout << "dynamic range:" << thisDetector->dynamicRange << endl << endl; std::cout << "dynamic range:" << thisDetector->dynamicRange << endl << endl;
std::cout << "flippeddatax:" << thisDetector->flippedData[d] << endl; std::cout << "flippeddatax:" << thisDetector->flippedData[d] << endl;
std::cout << "10GbE:" << thisDetector->tenGigaEnable << endl << 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 << "rx streaming port:" << thisDetector->receiver_zmqport << endl;
//std::cout << "dataStreaming:" << enableDataStreamingFromReceiver(-1) << endl << endl; //std::cout << "dataStreaming:" << enableDataStreamingFromReceiver(-1) << endl << endl;
@ -6122,6 +6124,7 @@ string slsDetector::setReceiver(string receiverIP){
enableTenGigabitEthernet(thisDetector->tenGigaEnable); enableTenGigabitEthernet(thisDetector->tenGigaEnable);
// data streaming // data streaming
setReadReceiverFrequency(thisDetector->receiver_read_freq);
setReceiverStreamingPort(getReceiverStreamingPort()); setReceiverStreamingPort(getReceiverStreamingPort());
enableDataStreamingFromReceiver(enableDataStreamingFromReceiver(-1)); enableDataStreamingFromReceiver(enableDataStreamingFromReceiver(-1));
} }
@ -8270,6 +8273,10 @@ int slsDetector::updateReceiverNoWait() {
parentDet->enableOverwriteMask(ind); parentDet->enableOverwriteMask(ind);
pthread_mutex_unlock(&ms); pthread_mutex_unlock(&ms);
// receiver read frequency
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
thisDetector->receiver_read_freq = ind;
// receiver streaming port // receiver streaming port
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind)); n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
thisDetector->receiver_zmqport = ind; thisDetector->receiver_zmqport = ind;
@ -8510,15 +8517,16 @@ int64_t slsDetector::clearAllErrorMask(){
int slsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){ int slsDetector::setReadReceiverFrequency(int freq){
if (freq >= 0) {
thisDetector->receiver_read_freq = freq;
int fnum=F_READ_RECEIVER_FREQUENCY; int fnum=F_READ_RECEIVER_FREQUENCY;
int ret = FAIL; int ret = FAIL;
int retval=-1; int retval=-1;
int arg = freq; int arg = freq;
if(!getFromReceiver)
return retval;
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
#ifdef VERBOSE #ifdef VERBOSE
std::cout << "Sending read frequency to receiver " << arg << std::endl; std::cout << "Sending read frequency to receiver " << arg << std::endl;
@ -8527,17 +8535,17 @@ int slsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){
ret=thisReceiver->sendInt(fnum,retval,arg); ret=thisReceiver->sendInt(fnum,retval,arg);
disconnectData(); disconnectData();
} }
if(ret==FAIL) if((ret == FAIL) || (retval != freq)) {
retval = -1;
if(ret==FORCE_UPDATE)
updateReceiver();
}
if ((freq > 0) && (retval != freq)){
cout << "could not set receiver read frequency to " << freq <<" Returned:" << retval << endl; cout << "could not set receiver read frequency to " << freq <<" Returned:" << retval << endl;
setErrorMask((getErrorMask())|(RECEIVER_READ_FREQUENCY)); setErrorMask((getErrorMask())|(RECEIVER_READ_FREQUENCY));
} }
return retval;
if(ret==FORCE_UPDATE)
updateReceiver();
}
}
return thisDetector->receiver_read_freq;
} }

View File

@ -275,6 +275,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
int receiver_zmqport; int receiver_zmqport;
/** data streaming (up stream) enable in receiver */ /** data streaming (up stream) enable in receiver */
bool receiver_datastream; bool receiver_datastream;
/* Receiver read frequency */
int receiver_read_freq;
} sharedSlsDetector; } sharedSlsDetector;
@ -1766,12 +1768,10 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
/** Sets the read receiver frequency /** Sets the read receiver frequency
if data required from receiver randomly readRxrFrequency=0, if data required from receiver randomly readRxrFrequency=0,
else every nth frame to be sent to gui 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 @param freq is the receiver read frequency
/returns read receiver frequency /returns read receiver frequency
*/ */
int setReadReceiverFrequency(int getFromReceiver, int freq=-1); int setReadReceiverFrequency(int freq=-1);
/** Sets the read receiver timer /** Sets the read receiver timer
if data required from receiver randomly readRxrFrequency=0, if data required from receiver randomly readRxrFrequency=0,

View File

@ -580,12 +580,10 @@ virtual void readFrameFromReceiver()=0;
/** Sets the read receiver frequency /** Sets the read receiver frequency
if data required from receiver randomly readRxrFrequency=0, if data required from receiver randomly readRxrFrequency=0,
else every nth frame to be sent to gui 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 @param freq is the receiver read frequency
/returns read receiver 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 /** Sets the receiver to start any readout remaining in the fifo and
* change status to transmitting. * change status to transmitting.

View File

@ -5949,9 +5949,9 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) {
if (!sscanf(args[1],"%d",&ival)) if (!sscanf(args[1],"%d",&ival))
return string("Could not scan read frequency mode ")+string(args[1]); return string("Could not scan read frequency mode ")+string(args[1]);
if(ival>=0) if(ival>=0)
myDet->setReadReceiverFrequency(1,ival); myDet->setReadReceiverFrequency(ival);
} }
sprintf(answer,"%d",myDet->setReadReceiverFrequency(1)); sprintf(answer,"%d",myDet->setReadReceiverFrequency());
return string(answer); return string(answer);
} }

View File

@ -224,7 +224,7 @@ void slsDetectorUsers::finalizeDataset(double *a, double *v, double *e, int &np)
} }
int slsDetectorUsers::setReceiverMode(int n){ int slsDetectorUsers::setReceiverMode(int n){
return myDetector->setReadReceiverFrequency(1,n); return myDetector->setReadReceiverFrequency(n);
} }
int slsDetectorUsers::enableDataStreamingFromReceiver(int i){ int slsDetectorUsers::enableDataStreamingFromReceiver(int i){

View File

@ -768,12 +768,10 @@ virtual ROI* getROI(int &n)=0;
/** Sets the read receiver frequency /** Sets the read receiver frequency
if data required from receiver randomly readRxrFrequency=0, if data required from receiver randomly readRxrFrequency=0,
else every nth frame to be sent to gui 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 @param freq is the receiver read frequency
/returns read receiver 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 /** Enable or disable streaming data from receiver to client
* @param enable 0 to disable 1 to enable -1 to only get the value * @param enable 0 to disable 1 to enable -1 to only get the value