diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 82d2866bc..dc2a8740b 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -3730,20 +3730,16 @@ string multiSlsDetector::setNetworkParameter(networkParameter p, string s){ // disable data streaming before changing zmq port (but only if they were on) int prev_streaming = 0; switch (p) { - case RECEIVER_STREAMING_PORT: + case CLIENT_STREAMING_PORT: + case CLIENT_STREAMING_SRC_IP: prev_streaming = enableDataStreamingFromReceiver(); enableDataStreamingFromReceiver(0); - break; - case CLIENT_STREAMING_PORT: - prev_streaming = enableDataStreamingToClient(); enableDataStreamingToClient(0); break; + case RECEIVER_STREAMING_PORT: case RECEIVER_STREAMING_SRC_IP: prev_streaming = enableDataStreamingFromReceiver(); enableDataStreamingFromReceiver(0); - break; - case CLIENT_STREAMING_SRC_IP: - prev_streaming = enableDataStreamingToClient(); enableDataStreamingToClient(0); break; default: break; @@ -3806,15 +3802,10 @@ string multiSlsDetector::setNetworkParameter(networkParameter p, string s){ if (prev_streaming) { switch (p) { case RECEIVER_STREAMING_PORT: - enableDataStreamingFromReceiver(1); - break; case CLIENT_STREAMING_PORT: - enableDataStreamingToClient(1); - break; case RECEIVER_STREAMING_SRC_IP: - enableDataStreamingFromReceiver(1); - break; case CLIENT_STREAMING_SRC_IP: + enableDataStreamingFromReceiver(1); enableDataStreamingToClient(1); break; default: break; diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 461969f66..137e21f3e 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -8774,31 +8774,35 @@ int slsDetector::setReceiverReadTimer(int time_in_ms){ int slsDetector::enableDataStreamingFromReceiver(int enable){ - int fnum=F_STREAM_DATA_FROM_RECEIVER; - int ret = FAIL; - int retval=-1; - int arg = enable; + + if (enable >= 0) { + int fnum=F_STREAM_DATA_FROM_RECEIVER; + int ret = FAIL; + int retval=-1; + int arg = enable; - if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ + if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ #ifdef VERBOSE - std::cout << "***************Sending Data Streaming in Receiver " << arg << std::endl; + std::cout << "***************Sending Data Streaming in 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 = -1; + cout << "could not set data streaming in receiver to " << enable <<" Returned:" << retval << endl; + setErrorMask((getErrorMask())|(DATA_STREAMING)); + } else { + thisDetector->receiver_datastream = retval; + if(ret==FORCE_UPDATE) + updateReceiver(); + } } - if(ret==FAIL) - retval = -1; - if(ret==FORCE_UPDATE) - updateReceiver(); } - if ((enable > 0) && (retval != enable)){ - cout << "could not set data streaming in receiver to " << enable <<" Returned:" << retval << endl; - setErrorMask((getErrorMask())|(DATA_STREAMING)); - } - return retval; + return thisDetector->receiver_datastream; } diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index 56721cc7a..0b84c29e3 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -2338,6 +2338,15 @@ string slsDetectorCommand::cmdAcquire(int narg, char *args[], int action) { myDet->setOnline(ONLINE_FLAG); int r_online = myDet->setReceiverOnline(ONLINE_FLAG); + // switch off data streaming to prevent extra images in zmq gui buffer + if (r_online == ONLINE_FLAG) { + if (myDet->enableDataStreamingFromReceiver() != 0) { + if (myDet->enableDataStreamingFromReceiver(0) != 0) { + std::cout << "Error: Unable to switch off data streaming in receiver. If GUI on, extra image(s) in zmq GUI buffer" << std::endl; + } + } + } + if(myDet->acquire() == FAIL) return string("acquire unsuccessful"); if(r_online){ @@ -5934,10 +5943,18 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) { myDet->setOnline(ONLINE_FLAG); - myDet->setReceiverOnline(ONLINE_FLAG); + int r_online = myDet->setReceiverOnline(ONLINE_FLAG); if(cmd=="receiver"){ if (action==PUT_ACTION) { + // switch off data streaming to prevent extra images in zmq gui buffer + if (r_online == ONLINE_FLAG) { + if (myDet->enableDataStreamingFromReceiver() != 0) { + if (myDet->enableDataStreamingFromReceiver(0) != 0) { + std::cout << "Error: Unable to switch off data streaming in receiver. If GUI on, extra image(s) in zmq GUI buffer" << std::endl; + } + } + } if(!strcasecmp(args[1],"start")) myDet->startReceiver(); else if(!strcasecmp(args[1],"stop"))