somewhere

This commit is contained in:
Dhanya Maliakal 2017-11-16 09:12:54 +01:00
parent fd34bab34b
commit 7dee07b9c5
3 changed files with 93 additions and 78 deletions

View File

@ -240,7 +240,7 @@ public:
retval.append("Could not activate/deactivate receiver\n"); retval.append("Could not activate/deactivate receiver\n");
if(slsErrorMask&DATA_STREAMING) if(slsErrorMask&DATA_STREAMING)
retval.append("Could not set/reset Data Streaming\n"); retval.append("Could not enable/disable Data Streaming\n");
if(slsErrorMask&RESET_ERROR) if(slsErrorMask&RESET_ERROR)
retval.append("Could not reset the FPGA\n"); retval.append("Could not reset the FPGA\n");

View File

@ -209,6 +209,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1)
thisMultiDetector->receiver_read_freq = 0; thisMultiDetector->receiver_read_freq = 0;
thisMultiDetector->acquiringFlag = false; thisMultiDetector->acquiringFlag = false;
thisMultiDetector->externalgui = false; thisMultiDetector->externalgui = false;
thisMultiDetector->receiver_datastream = false;
thisMultiDetector->alreadyExisting=1; thisMultiDetector->alreadyExisting=1;
} }
@ -274,7 +275,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1)
getNMods(); getNMods();
getMaxMods(); getMaxMods();
dataSocketsStarted = false; client_datastream = false;
for(int i=0;i<MAXDET;++i) for(int i=0;i<MAXDET;++i)
zmqSocket[i] = 0; zmqSocket[i] = 0;
threadpool = 0; threadpool = 0;
@ -3694,12 +3695,15 @@ string multiSlsDetector::setNetworkParameter(networkParameter p, string s){
case RECEIVER_STREAMING_PORT: case RECEIVER_STREAMING_PORT:
prev_streaming = enableDataStreamingFromReceiver(); prev_streaming = enableDataStreamingFromReceiver();
enableDataStreamingFromReceiver(0); enableDataStreamingFromReceiver(0);
} break;
if (p == RECEIVER_STREAMING_PORT || p == CLIENT_STREAMING_PORT) { case CLIENT_STREAMING_PORT:
prev_streaming = enableDataStreamingToClient(); prev_streaming = enableDataStreamingToClient();
enableDataStreamingFromReceiver(0); enableDataStreamingToClient(0);
break;
default: break;
} }
if (s.find('+')==string::npos) { if (s.find('+')==string::npos) {
if(!threadpool){ if(!threadpool){
@ -3753,8 +3757,17 @@ string multiSlsDetector::setNetworkParameter(networkParameter p, string s){
} }
//enable data streaming if it was on //enable data streaming if it was on
if ((p == RECEIVER_STREAMING_PORT || p == CLIENT_STREAMING_PORT) && prev_streaming) if (prev_streaming) {
switch (p) {
case RECEIVER_STREAMING_PORT:
enableDataStreamingFromReceiver(1); enableDataStreamingFromReceiver(1);
break;
case CLIENT_STREAMING_PORT:
enableDataStreamingToClient(1);
break;
default: break;
}
}
return getNetworkParameter(p); return getNetworkParameter(p);
@ -5666,7 +5679,7 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy){
zmqSocket[i] = 0; zmqSocket[i] = 0;
} }
} }
dataSocketsStarted = false; client_datastream = false;
cout << "Destroyed Receiving Data Socket(s)" << endl; cout << "Destroyed Receiving Data Socket(s)" << endl;
return OK; return OK;
} }
@ -5674,14 +5687,9 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy){
cprintf(MAGENTA,"Going to create data sockets\n"); cprintf(MAGENTA,"Going to create data sockets\n");
for(int i=0;i<numSockets; ++i){ for(int i=0;i<numSockets; ++i){
uint32_t portnum; uint32_t portnum = 0;
sscanf(detectors[i/numSocketsPerDetector]->getReceiverStreamingPort().c_str(),"%d",&portnum); sscanf(detectors[i/numSocketsPerDetector]->getClientStreamingPort().c_str(),"%d",&portnum);
if (portnum == 0) {
portnum = DEFAULT_ZMQ_PORTNO +
(i/numSocketsPerDetector)*numSocketsPerDetector + (i%numSocketsPerDetector); // *num and /num is not same cuz its integers
}else{
portnum += (i%numSocketsPerDetector); portnum += (i%numSocketsPerDetector);
}
zmqSocket[i] = new ZmqSocket(detectors[i/numSocketsPerDetector]->getReceiver().c_str(), portnum); zmqSocket[i] = new ZmqSocket(detectors[i/numSocketsPerDetector]->getReceiver().c_str(), portnum);
if (zmqSocket[i]->IsError()) { if (zmqSocket[i]->IsError()) {
@ -5692,7 +5700,7 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy){
printf("Zmq Client[%d] at %s\n",i, zmqSocket[i]->GetZmqServerAddress()); printf("Zmq Client[%d] at %s\n",i, zmqSocket[i]->GetZmqServerAddress());
} }
dataSocketsStarted = true; client_datastream = true;
cout << "Receiving Data Socket(s) created" << endl; cout << "Receiving Data Socket(s) created" << endl;
return OK; return OK;
} }
@ -6155,34 +6163,28 @@ int multiSlsDetector::setReceiverReadTimer(int time_in_ms){
return ret; return ret;
} }
int multiSlsDetector::enableDataStreamingToClient() { int multiSlsDetector::enableDataStreamingToClient(int enable) {
return dataSocketsStarted;
}
int multiSlsDetector::enableDataStreamingFromReceiver(int enable){//cannot parrallize due to serReceiver calling parentdet->enabledatastremain
//create client sockets only if no external gui
if (!thisMultiDetector->externalgui) {
if(enable >= 0){ if(enable >= 0){
//destroy data threads //destroy data threads
if(dataSocketsStarted) if (!enable)
createReceivingDataSockets(true); createReceivingDataSockets(true);
//create data threads //create data threads
if(enable > 0){ else {
if(createReceivingDataSockets() == FAIL){ if(createReceivingDataSockets() == FAIL){
std::cout << "Could not create data threads in client. Aborting creating data sockets in receiver" << std::endl; std::cout << "Could not create data threads in client." << std::endl;
//only for the first det as theres no general one //only for the first det as theres no general one
setErrorMask(getErrorMask()|(1<<0)); setErrorMask(getErrorMask()|(1<<0));
detectors[0]->setErrorMask((detectors[0]->getErrorMask())|(DATA_STREAMING)); detectors[0]->setErrorMask((detectors[0]->getErrorMask())|(DATA_STREAMING));
return -1;
}
} }
} }
} }
return client_datastream;
}
int multiSlsDetector::enableDataStreamingFromReceiver(int enable){
if(enable >= 0){
int ret=-100; int ret=-100;
if(!threadpool){ if(!threadpool){
cout << "Error in creating threadpool. Exiting" << endl; cout << "Error in creating threadpool. Exiting" << endl;
@ -6214,12 +6216,10 @@ int multiSlsDetector::enableDataStreamingFromReceiver(int enable){//cannot parra
} }
} }
} }
thisMultiDetector->receiver_datastream = ret;
if (!thisMultiDetector->externalgui) {
if (ret != dataSocketsStarted)
ret = -1;
} }
return ret;
return thisMultiDetector->receiver_datastream;
} }
int multiSlsDetector::enableReceiverCompression(int i){ int multiSlsDetector::enableReceiverCompression(int i){

View File

@ -777,8 +777,9 @@ 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 = DEFAULT_ZMQ_CL_PORTNO + (posId * (thisDetector->myDetectorType == EIGER) ? 2 : 1); thisDetector->zmqport = 0;
thisDetector->receiver_zmqport = DEFAULT_ZMQ_RX_PORTNO + (posId * (thisDetector->myDetectorType == EIGER) ? 2 : 1); thisDetector->receiver_zmqport = 0;
thisDetector->receiver_datastream = false;
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");
@ -923,6 +924,14 @@ int slsDetector::initializeDetectorSize(detectorType type) {
delete thisReceiver; delete thisReceiver;
thisReceiver = new receiverInterface(dataSocket); thisReceiver = new receiverInterface(dataSocket);
// zmq ports
if (posId != -1) {
if (thisDetector->zmqport == 0)
thisDetector->zmqport = DEFAULT_ZMQ_CL_PORTNO + (posId * ((thisDetector->myDetectorType == EIGER) ? 2 : 1));
if (thisDetector->receiver_zmqport == 0)
thisDetector->receiver_zmqport = DEFAULT_ZMQ_RX_PORTNO + (posId * ((thisDetector->myDetectorType == EIGER) ? 2 : 1));
}
// setAngularConversionPointer(thisDetector->angOff,&thisDetector->nMods, thisDetector->nChans*thisDetector->nChips); // setAngularConversionPointer(thisDetector->angOff,&thisDetector->nMods, thisDetector->nChans*thisDetector->nChips);
#ifdef VERBOSE #ifdef VERBOSE
@ -5967,6 +5976,8 @@ string slsDetector::getNetworkParameter(networkParameter index) {
case DETECTOR_TXN_DELAY_FRAME: case DETECTOR_TXN_DELAY_FRAME:
case FLOW_CONTROL_10G: case FLOW_CONTROL_10G:
return setDetectorNetworkParameter(index, -1); return setDetectorNetworkParameter(index, -1);
case CLIENT_STREAMING_PORT:
return getClientStreamingPort();
case RECEIVER_STREAMING_PORT: case RECEIVER_STREAMING_PORT:
return getReceiverStreamingPort(); return getReceiverStreamingPort();
default: default:
@ -8261,6 +8272,10 @@ int slsDetector::updateReceiverNoWait() {
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind)); n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
thisDetector->receiver_zmqport = ind; thisDetector->receiver_zmqport = ind;
// receiver streaming enable
n += dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
thisDetector->receiver_datastream = ind;
if (!n) printf("n: %d\n", n); if (!n) printf("n: %d\n", n);
return OK; return OK;