in between separating datastreaming in client and receiver

This commit is contained in:
Dhanya Maliakal
2017-11-15 17:16:47 +01:00
parent 6d6133be59
commit 2b0d07387a
5 changed files with 40 additions and 81 deletions

View File

@ -207,6 +207,9 @@ class multiSlsDetector : public slsDetectorUtils {
/** receiver online flag - is set if the receiver is connected, unset if socket connection is not possible */ /** receiver online flag - is set if the receiver is connected, unset if socket connection is not possible */
int receiverOnlineFlag; int receiverOnlineFlag;
/** data streaming (up stream) enable in receiver */
bool receiver_datastream;
} sharedMultiSlsDetector; } sharedMultiSlsDetector;
@ -1342,17 +1345,19 @@ class multiSlsDetector : public slsDetectorUtils {
/** /**
* Get Streaming sockets created in client from reciever * Enable data streaming to client
/returns 1 if sockets created, else 0 * @param enable 0 to disable, 1 to enable, -1 to get the value
* @returns data streaming to client enable
*/ */
int getStreamingSocketsCreatedInClient(); int enableDataStreamingToClient(int enable=-1);
/** 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
* @returns data streaming * @returns data streaming to receiver enable
*/ */
int enableDataStreamingFromReceiver(int enable=-1); int enableDataStreamingFromReceiver(int enable=-1);
/** updates the multidetector offsets */ /** updates the multidetector offsets */
void updateOffsets(); void updateOffsets();
@ -1489,8 +1494,8 @@ private:
int getData(const int isocket, const bool masking, int* image, const int size, uint64_t &acqIndex, uint64_t &frameIndex, uint32_t &subframeIndex, string &filename); int getData(const int isocket, const bool masking, int* image, const int size, uint64_t &acqIndex, uint64_t &frameIndex, uint32_t &subframeIndex, string &filename);
/** Ensures if sockets created successfully */ /** data streaming (down stream) enabled in client (zmq sckets created) */
bool dataSocketsStarted; bool client_datastream;
/** ZMQ Socket - Receiver to Client */ /** ZMQ Socket - Receiver to Client */
ZmqSocket* zmqSocket[MAXDET]; ZmqSocket* zmqSocket[MAXDET];

View File

@ -777,7 +777,8 @@ int slsDetector::initializeDetectorSize(detectorType type) {
thisDetector->acquiringFlag = false; thisDetector->acquiringFlag = false;
thisDetector->flippedData[0] = 0; thisDetector->flippedData[0] = 0;
thisDetector->flippedData[1] = 0; thisDetector->flippedData[1] = 0;
thisDetector->zmqport = 0; thisDetector->zmqport = DEFAULT_ZMQ_CL_PORTNO + (posId * (thisDetector->myDetectorType == EIGER) ? 2 : 1);
thisDetector->receiver_zmqport = DEFAULT_ZMQ_RX_PORTNO + (posId * (thisDetector->myDetectorType == EIGER) ? 2 : 1);
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");
@ -6067,7 +6068,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 << "streaming port:" << thisDetector->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;
/** enable compresison, */ /** enable compresison, */
@ -6113,19 +6114,7 @@ string slsDetector::setReceiver(string receiverIP){
// data streaming // data streaming
setReceiverStreamingPort(getReceiverStreamingPort()); setReceiverStreamingPort(getReceiverStreamingPort());
int clientSockets = parentDet->getStreamingSocketsCreatedInClient(); enableDataStreamingFromReceiver(enableDataStreamingFromReceiver(-1));
int recSockets = enableDataStreamingFromReceiver(-1);
if(clientSockets != recSockets) {
pthread_mutex_lock(&ms);
if(clientSockets)
printf("Enabling Data Streaming\n");
else
printf("Disabling Data Streaming\n");
// push client state to receiver
/*parentDet->enableDataStreamingFromReceiver(clientSockets);*/
enableDataStreamingFromReceiver(clientSockets);
pthread_mutex_unlock(&ms);
}
} }
} }
@ -6224,7 +6213,7 @@ int slsDetector::setReceiverUDPPort2(int udpport){
} }
int slsDetector::setReceiverStreamingPort(string port) { int slsDetector::setClientStreamingPort(string port) {
int defaultport = 0; int defaultport = 0;
int numsockets = (thisDetector->myDetectorType == EIGER) ? 2:1; int numsockets = (thisDetector->myDetectorType == EIGER) ? 2:1;
int arg = 0; int arg = 0;
@ -8268,9 +8257,9 @@ int slsDetector::updateReceiverNoWait() {
parentDet->enableOverwriteMask(ind); parentDet->enableOverwriteMask(ind);
pthread_mutex_unlock(&ms); pthread_mutex_unlock(&ms);
// streaming port // receiver streaming port
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind)); n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
thisDetector->zmqport = ind; thisDetector->receiver_zmqport = ind;
if (!n) printf("n: %d\n", n); if (!n) printf("n: %d\n", n);

View File

@ -273,7 +273,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
int zmqport; int zmqport;
/** tcp port from receiver to gui/different process (only data) */ /** tcp port from receiver to gui/different process (only data) */
int receiver_zmqport; int receiver_zmqport;
/** data streaming (up stream) enable in receiver */
bool receiver_datastream;
} sharedSlsDetector; } sharedSlsDetector;
@ -1781,8 +1782,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
int setReceiverReadTimer(int time_in_ms=500); int setReceiverReadTimer(int time_in_ms=500);
/** 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
* @returns data streaming * @returns data streaming to receiver enable
*/ */
int enableDataStreamingFromReceiver(int enable=-1); int enableDataStreamingFromReceiver(int enable=-1);

View File

@ -255,13 +255,6 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
commands to configure detector data structure commands to configure detector data structure
*/ */
/*! \page config
- <b> externalgui </b>sets/gets external gui flag. 1 sets and enables the 0MQ data stream (0MQ threads created) from receiver to client, while 0 unsets and disables. \c Returns \c (int)
*/
descrToFuncMap[i].m_pFuncName="externalgui"; //
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdDataStream;
++i;
/*! \page config /*! \page config
- \b free Free shared memory on the control PC - \b free Free shared memory on the control PC
*/ */
@ -1907,6 +1900,13 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter; descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter;
++i; ++i;
/*! \page network
- <b> rx_datastream </b>enables/disables data streaming from receiver. 1 enables 0MQ data stream from receiver (creates streamer threads), while 0 disables (destroys streamer threads). \c Returns \c (int)
*/
descrToFuncMap[i].m_pFuncName="rx_datastream"; //
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdDataStream;
++i;
/*! \page network /*! \page network
- <b>configuremac [i]</b> configures the MAC of the detector with these parameters: detectorip, detectormac, rx_udpip, rx_udpmac, rx_udpport, rx_udpport2 (if applicable). This command is already included in \c rx_hsotname. Only put!. \c Returns \c (int) - <b>configuremac [i]</b> configures the MAC of the detector with these parameters: detectorip, detectormac, rx_udpip, rx_udpmac, rx_udpport, rx_udpport2 (if applicable). This command is already included in \c rx_hsotname. Only put!. \c Returns \c (int)
*/ */
@ -2316,16 +2316,6 @@ string slsDetectorCommand::cmdAcquire(int narg, char *args[], int action) {
myDet->setOnline(ONLINE_FLAG); myDet->setOnline(ONLINE_FLAG);
int r_online = myDet->setReceiverOnline(ONLINE_FLAG); int r_online = myDet->setReceiverOnline(ONLINE_FLAG);
if ((!myDet->getExternalGuiFlag()) && (r_online == ONLINE_FLAG)) {
// command line: must be off, if receiver on or there was -1, then
if (myDet->enableDataStreamingFromReceiver(-1) != 0){
//switch it off, if error
if (myDet->enableDataStreamingFromReceiver(0) != 0) {
return string("could not disable data streaming in receiver\n");
}
}
}
if(myDet->acquire() == FAIL) if(myDet->acquire() == FAIL)
return string("acquire unsuccessful"); return string("acquire unsuccessful");
if(r_online){ if(r_online){
@ -2490,18 +2480,11 @@ string slsDetectorCommand::cmdDataStream(int narg, char *args[], int action) {
if (action==PUT_ACTION) { if (action==PUT_ACTION) {
if (!sscanf(args[1],"%d",&ival)) if (!sscanf(args[1],"%d",&ival))
return string ("cannot scan externalgui mode"); return string ("cannot scan rx_datastream mode");
myDet->setExternalGuiFlag(ival>0?true:false);
myDet->enableDataStreamingFromReceiver(ival); myDet->enableDataStreamingFromReceiver(ival);
} }
int retval = myDet->getExternalGuiFlag(); sprintf(ans,"%d",myDet->enableDataStreamingFromReceiver());
//if external gui on and datastreaming off
if (retval && !myDet->enableDataStreamingFromReceiver()) {
retval=-1;
printf("Error: data streaming in receiver is switched off while external gui flag in shared memory is off.\n");
}
sprintf(ans,"%d",myDet->getExternalGuiFlag());
return string(ans); return string(ans);
} }
@ -2510,9 +2493,9 @@ string slsDetectorCommand::helpDataStream(int narg, char *args[], int action) {
ostringstream os; ostringstream os;
if (action==GET_ACTION || action==HELP_ACTION) if (action==GET_ACTION || action==HELP_ACTION)
os << string("externalgui \t gets external gui flag. 1/0 means the 0MQ data stream (0MQ threads created) from receiver to client is enabled/disabled. -1 for inconsistency. \n"); os << string("rx_datastream \t enables/disables data streaming from receiver. 1 is 0MQ data stream from receiver enabled, while 0 is 0MQ disabled. -1 for inconsistency between multiple receivers. \n");
if (action==PUT_ACTION || action==HELP_ACTION) if (action==PUT_ACTION || action==HELP_ACTION)
os << string("externalgui i\t sets external gui flag. 1/0 means the 0MQ data stream (0MQ threads created) from receiver to client is enabled/disabled. \n"); os << string("rx_datastream i\t enables/disables data streaming from receiver. i is 1 enables 0MQ data stream from receiver (creates streamer threads), while 0 disables (destroys streamer threads). \n");
return os.str(); return os.str();
} }
@ -5899,33 +5882,14 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) {
myDet->setOnline(ONLINE_FLAG); myDet->setOnline(ONLINE_FLAG);
int receivers = myDet->setReceiverOnline(ONLINE_FLAG); myDet->setReceiverOnline(ONLINE_FLAG);
if(cmd=="receiver"){ if(cmd=="receiver"){
if (action==PUT_ACTION) { if (action==PUT_ACTION) {
if(!strcasecmp(args[1],"start")) { if(!strcasecmp(args[1],"start"))
//to ensure data streaming enable is the same across client and receiver
if ((!myDet->getExternalGuiFlag()) && (receivers == ONLINE_FLAG)) {
//if it was not off
if (myDet->enableDataStreamingFromReceiver(-1) != 0){
//switch it off, if error
if (myDet->enableDataStreamingFromReceiver(0) != 0) {
return string("could not disable data streaming in receiver\n");
}
}
}
myDet->startReceiver(); myDet->startReceiver();
} else if(!strcasecmp(args[1],"stop"))
else if(!strcasecmp(args[1],"stop")){
//myDet->stopReceiver();
// myDet->startReceiverReadout();
/*runStatus s = myDet->getReceiverStatus();
while(s != RUN_FINISHED){
usleep(50000);
s = myDet->getReceiverStatus();
}*/
myDet->stopReceiver(); myDet->stopReceiver();
}
else else
return helpReceiver(narg, args, action); return helpReceiver(narg, args, action);
} }

View File

@ -749,9 +749,9 @@ virtual ROI* getROI(int &n)=0;
*/ */
virtual int setReadReceiverFrequency(int getFromReceiver, int freq=-1)=0; virtual int setReadReceiverFrequency(int getFromReceiver, int freq=-1)=0;
/** Enable or disable streaming of 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
* @returns data streaming * @returns data streaming to receiver enable
*/ */
virtual int enableDataStreamingFromReceiver(int enable=-1)=0; virtual int enableDataStreamingFromReceiver(int enable=-1)=0;