From 2edeb742139d3202668f36ce528eb110cfa8f141 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 1 Nov 2016 09:21:26 +0100 Subject: [PATCH 01/12] got rid of check if online --- slsDetectorSoftware/slsDetector/slsDetector.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index b21cc5e5f..b4b17a74a 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -7180,7 +7180,8 @@ int slsDetector::startReceiver(){ int ret = FAIL; char mess[MAX_STR_LENGTH] = ""; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { + //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Starting Receiver " << std::endl; #endif @@ -7216,7 +7217,8 @@ int slsDetector::stopReceiver(){ if(thisDetector->myDetectorType != EIGER && thisDetector->myDetectorType != JUNGFRAU) detectorSendToReceiver(false); - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { + //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Stopping Receiver " << std::endl; #endif @@ -7322,7 +7324,8 @@ int slsDetector::getFramesCaughtByReceiver(){ int ret = FAIL; int retval=-1; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { + //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Getting Frames Caught by Receiver " << std::endl; #endif @@ -7365,7 +7368,8 @@ int slsDetector::resetFramesCaught(){ int ret = FAIL; char mess[MAX_STR_LENGTH] = ""; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { + //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Reset Frames Caught by Receiver" << std::endl; #endif From cf8bbad93743a72b300199155cc0c0f81d168a75 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 1 Nov 2016 09:46:29 +0100 Subject: [PATCH 02/12] got rid of check if online --- .../slsDetector/slsDetector.cpp | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index b4b17a74a..061654100 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -1311,7 +1311,7 @@ int slsDetector::activate(int const enable){ #endif if(ret!=FAIL){ - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Activating/Deactivating Receiver: " << retval << std::endl; #endif @@ -1624,7 +1624,7 @@ int slsDetector::setDetectorType(detectorType const type){ //receiver if((retType != GENERIC) && (setReceiverOnline()==ONLINE_FLAG)) { retval = FAIL; - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending detector type to Receiver " << (int)thisDetector->myDetectorType << std::endl; #endif @@ -1995,7 +1995,7 @@ int64_t slsDetector::getId( idMode mode, int imod){ retval=SVNREVLIB; retval=(retval<<32) | SVNDATELIB; } else if (mode==RECEIVER_VERSION) { - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { if (connectData() == OK) ret=thisReceiver->getInt(fnum2,retval); disconnectData(); @@ -4057,7 +4057,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ if((index==FRAME_NUMBER)||(index==FRAME_PERIOD)||(index==CYCLES_NUMBER)){ if(ret != FAIL){ retval = thisDetector->timerValue[index]; - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ int64_t args[2]; args[1] = retval; if((t == -1) && (ret!= FORCE_UPDATE)) args[1] = -1; @@ -4614,7 +4614,7 @@ int slsDetector::setDynamicRange(int n){ if(ret != FAIL){ retval = thisDetector->dynamicRange; if((n==-1) && (ret!= FORCE_UPDATE)) n =-1; - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending/Getting dynamic range to/from receiver " << n << std::endl; #endif @@ -5538,7 +5538,7 @@ char* slsDetector::setReceiver(string receiverIP){ strcpy(thisDetector->receiver_hostname,receiverIP.c_str()); - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Setting up receiver with" << endl; std::cout << "detector type:" << slsDetectorBase::getDetectorType(thisDetector->myDetectorType) << endl; @@ -5746,7 +5746,7 @@ int slsDetector::setUDPConnection(){ #endif //set up receiver for UDP Connection and get receivermac address - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Setting up UDP Connection for Receiver " << args[0] << "\t" << args[1] << std::endl; #endif @@ -5911,7 +5911,7 @@ int slsDetector::configureMAC(){ pthread_mutex_unlock(&ms); //connect to receiver if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending adc val to receiver " << retval << std::endl; #endif @@ -7068,7 +7068,7 @@ string slsDetector::setFilePath(string s) { } } - else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + else if(setReceiverOnline()==ONLINE_FLAG){ strcpy(arg,s.c_str()); #ifdef VERBOSE std::cout << "Sending file path to receiver " << arg << std::endl; @@ -7109,7 +7109,7 @@ string slsDetector::setFileName(string s) { } if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ strcpy(arg,s.c_str()); #ifdef VERBOSE std::cout << "Sending file name to receiver " << arg << std::endl; @@ -7153,7 +7153,7 @@ int slsDetector::setFileIndex(int i) { } } - else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + else if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending file index to receiver " << arg << std::endl; #endif @@ -7181,7 +7181,6 @@ int slsDetector::startReceiver(){ char mess[MAX_STR_LENGTH] = ""; if (setReceiverOnline()==ONLINE_FLAG) { - //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Starting Receiver " << std::endl; #endif @@ -7218,7 +7217,6 @@ int slsDetector::stopReceiver(){ detectorSendToReceiver(false); if (setReceiverOnline()==ONLINE_FLAG) { - //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Stopping Receiver " << std::endl; #endif @@ -7243,7 +7241,7 @@ slsDetectorDefs::runStatus slsDetector::startReceiverReadout(){ int retval=-1; runStatus s=ERROR; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Starting Receiver Readout" << std::endl; #endif @@ -7300,7 +7298,7 @@ slsDetectorDefs::runStatus slsDetector::getReceiverStatus(){ int retval=-1; runStatus s=ERROR; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Getting Receiver Status" << std::endl; #endif @@ -7325,7 +7323,6 @@ int slsDetector::getFramesCaughtByReceiver(){ int retval=-1; if (setReceiverOnline()==ONLINE_FLAG) { - //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Getting Frames Caught by Receiver " << std::endl; #endif @@ -7346,7 +7343,7 @@ int slsDetector::getReceiverCurrentFrameIndex(){ int ret = FAIL; int retval=-1; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Getting Current Frame Index of Receiver " << std::endl; #endif @@ -7369,7 +7366,6 @@ int slsDetector::resetFramesCaught(){ char mess[MAX_STR_LENGTH] = ""; if (setReceiverOnline()==ONLINE_FLAG) { - //if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Reset Frames Caught by Receiver" << std::endl; #endif @@ -7395,7 +7391,7 @@ int slsDetector::lockReceiver(int lock){ int arg=lock; - if(setReceiverOnline(ONLINE_FLAG)!=ONLINE_FLAG){ + if(setReceiverOnline()!=ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Locking or Unlocking Receiver " << std::endl; #endif @@ -7419,7 +7415,7 @@ string slsDetector::getReceiverLastClientIP(){ int ret = FAIL; char retval[INET_ADDRSTRLEN]=""; - if(setReceiverOnline(ONLINE_FLAG)!=ONLINE_FLAG){ + if(setReceiverOnline()!=ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Geting Last Client IP connected to Receiver " << std::endl; #endif @@ -7470,7 +7466,7 @@ int slsDetector::updateReceiver() { int ret=OK; char mess[MAX_STR_LENGTH]=""; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { if (connectData() == OK){ dataSocket->SendDataOnly(&fnum,sizeof(fnum)); dataSocket->ReceiveDataOnly(&ret,sizeof(ret)); @@ -7497,7 +7493,7 @@ int slsDetector::exitReceiver(){ int retval; int fnum=F_EXIT_RECEIVER; - if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { + if (setReceiverOnline()==ONLINE_FLAG) { if (dataSocket) { dataSocket->Connect(); dataSocket->SendDataOnly(&fnum,sizeof(fnum)); @@ -7533,7 +7529,7 @@ int slsDetector::enableWriteToFile(int enable){ } } - else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + else if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending enable file write to receiver " << arg << std::endl; #endif @@ -7574,7 +7570,7 @@ int slsDetector::overwriteFile(int enable){ } } - else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + else if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending enable file write to receiver " << arg << std::endl; #endif @@ -7610,7 +7606,7 @@ int slsDetector::setFrameIndex(int index){ fileIO::setFrameIndex(index); } - else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + else if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending frame index to receiver " << arg << std::endl; #endif @@ -7683,7 +7679,7 @@ int slsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){ if(!getFromReceiver) return retval; - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending read frequency to receiver " << arg << std::endl; #endif @@ -7712,7 +7708,7 @@ int slsDetector::enableDataStreamingFromReceiver(int enable){ int arg = enable; - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "***************Sending Data Streaming in Receiver " << arg << std::endl; #endif @@ -7740,7 +7736,7 @@ int slsDetector::enableReceiverCompression(int i){ int retval=-1; - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Getting/Enabling/Disabling Receiver Compression with argument " << i << std::endl; #endif @@ -7761,7 +7757,7 @@ void slsDetector::setDetectorHostname(){ char retval[MAX_STR_LENGTH]=""; - if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ + if(setReceiverOnline()==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending detector hostname to Receiver " << thisDetector->hostname << std::endl; #endif From 59b5844de6170aaf5c75978d58d4a1d9326672bc Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 1 Nov 2016 09:55:38 +0100 Subject: [PATCH 03/12] got rid of check if online --- slsDetectorSoftware/slsDetector/slsDetector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 061654100..00fe75adc 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -5538,7 +5538,7 @@ char* slsDetector::setReceiver(string receiverIP){ strcpy(thisDetector->receiver_hostname,receiverIP.c_str()); - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Setting up receiver with" << endl; std::cout << "detector type:" << slsDetectorBase::getDetectorType(thisDetector->myDetectorType) << endl; From 7374a3711589801ebb916a3fcb15353e946f9b59 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 1 Nov 2016 10:03:38 +0100 Subject: [PATCH 04/12] back with checking online, got rid of getframescaught altogether --- .../slsDetector/slsDetector.cpp | 56 +++++++++---------- .../slsDetectorAnalysis/postProcessing.cpp | 5 ++ 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 00fe75adc..b21cc5e5f 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -1311,7 +1311,7 @@ int slsDetector::activate(int const enable){ #endif if(ret!=FAIL){ - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Activating/Deactivating Receiver: " << retval << std::endl; #endif @@ -1624,7 +1624,7 @@ int slsDetector::setDetectorType(detectorType const type){ //receiver if((retType != GENERIC) && (setReceiverOnline()==ONLINE_FLAG)) { retval = FAIL; - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending detector type to Receiver " << (int)thisDetector->myDetectorType << std::endl; #endif @@ -1995,7 +1995,7 @@ int64_t slsDetector::getId( idMode mode, int imod){ retval=SVNREVLIB; retval=(retval<<32) | SVNDATELIB; } else if (mode==RECEIVER_VERSION) { - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { if (connectData() == OK) ret=thisReceiver->getInt(fnum2,retval); disconnectData(); @@ -4057,7 +4057,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ if((index==FRAME_NUMBER)||(index==FRAME_PERIOD)||(index==CYCLES_NUMBER)){ if(ret != FAIL){ retval = thisDetector->timerValue[index]; - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ int64_t args[2]; args[1] = retval; if((t == -1) && (ret!= FORCE_UPDATE)) args[1] = -1; @@ -4614,7 +4614,7 @@ int slsDetector::setDynamicRange(int n){ if(ret != FAIL){ retval = thisDetector->dynamicRange; if((n==-1) && (ret!= FORCE_UPDATE)) n =-1; - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending/Getting dynamic range to/from receiver " << n << std::endl; #endif @@ -5746,7 +5746,7 @@ int slsDetector::setUDPConnection(){ #endif //set up receiver for UDP Connection and get receivermac address - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Setting up UDP Connection for Receiver " << args[0] << "\t" << args[1] << std::endl; #endif @@ -5911,7 +5911,7 @@ int slsDetector::configureMAC(){ pthread_mutex_unlock(&ms); //connect to receiver if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending adc val to receiver " << retval << std::endl; #endif @@ -7068,7 +7068,7 @@ string slsDetector::setFilePath(string s) { } } - else if(setReceiverOnline()==ONLINE_FLAG){ + else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ strcpy(arg,s.c_str()); #ifdef VERBOSE std::cout << "Sending file path to receiver " << arg << std::endl; @@ -7109,7 +7109,7 @@ string slsDetector::setFileName(string s) { } if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ strcpy(arg,s.c_str()); #ifdef VERBOSE std::cout << "Sending file name to receiver " << arg << std::endl; @@ -7153,7 +7153,7 @@ int slsDetector::setFileIndex(int i) { } } - else if(setReceiverOnline()==ONLINE_FLAG){ + else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending file index to receiver " << arg << std::endl; #endif @@ -7180,7 +7180,7 @@ int slsDetector::startReceiver(){ int ret = FAIL; char mess[MAX_STR_LENGTH] = ""; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Starting Receiver " << std::endl; #endif @@ -7216,7 +7216,7 @@ int slsDetector::stopReceiver(){ if(thisDetector->myDetectorType != EIGER && thisDetector->myDetectorType != JUNGFRAU) detectorSendToReceiver(false); - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Stopping Receiver " << std::endl; #endif @@ -7241,7 +7241,7 @@ slsDetectorDefs::runStatus slsDetector::startReceiverReadout(){ int retval=-1; runStatus s=ERROR; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Starting Receiver Readout" << std::endl; #endif @@ -7298,7 +7298,7 @@ slsDetectorDefs::runStatus slsDetector::getReceiverStatus(){ int retval=-1; runStatus s=ERROR; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Getting Receiver Status" << std::endl; #endif @@ -7322,7 +7322,7 @@ int slsDetector::getFramesCaughtByReceiver(){ int ret = FAIL; int retval=-1; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Getting Frames Caught by Receiver " << std::endl; #endif @@ -7343,7 +7343,7 @@ int slsDetector::getReceiverCurrentFrameIndex(){ int ret = FAIL; int retval=-1; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Getting Current Frame Index of Receiver " << std::endl; #endif @@ -7365,7 +7365,7 @@ int slsDetector::resetFramesCaught(){ int ret = FAIL; char mess[MAX_STR_LENGTH] = ""; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE std::cout << "Reset Frames Caught by Receiver" << std::endl; #endif @@ -7391,7 +7391,7 @@ int slsDetector::lockReceiver(int lock){ int arg=lock; - if(setReceiverOnline()!=ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)!=ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Locking or Unlocking Receiver " << std::endl; #endif @@ -7415,7 +7415,7 @@ string slsDetector::getReceiverLastClientIP(){ int ret = FAIL; char retval[INET_ADDRSTRLEN]=""; - if(setReceiverOnline()!=ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)!=ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Geting Last Client IP connected to Receiver " << std::endl; #endif @@ -7466,7 +7466,7 @@ int slsDetector::updateReceiver() { int ret=OK; char mess[MAX_STR_LENGTH]=""; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { if (connectData() == OK){ dataSocket->SendDataOnly(&fnum,sizeof(fnum)); dataSocket->ReceiveDataOnly(&ret,sizeof(ret)); @@ -7493,7 +7493,7 @@ int slsDetector::exitReceiver(){ int retval; int fnum=F_EXIT_RECEIVER; - if (setReceiverOnline()==ONLINE_FLAG) { + if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { if (dataSocket) { dataSocket->Connect(); dataSocket->SendDataOnly(&fnum,sizeof(fnum)); @@ -7529,7 +7529,7 @@ int slsDetector::enableWriteToFile(int enable){ } } - else if(setReceiverOnline()==ONLINE_FLAG){ + else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending enable file write to receiver " << arg << std::endl; #endif @@ -7570,7 +7570,7 @@ int slsDetector::overwriteFile(int enable){ } } - else if(setReceiverOnline()==ONLINE_FLAG){ + else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending enable file write to receiver " << arg << std::endl; #endif @@ -7606,7 +7606,7 @@ int slsDetector::setFrameIndex(int index){ fileIO::setFrameIndex(index); } - else if(setReceiverOnline()==ONLINE_FLAG){ + else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending frame index to receiver " << arg << std::endl; #endif @@ -7679,7 +7679,7 @@ int slsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){ if(!getFromReceiver) return retval; - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending read frequency to receiver " << arg << std::endl; #endif @@ -7708,7 +7708,7 @@ int slsDetector::enableDataStreamingFromReceiver(int enable){ int arg = enable; - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "***************Sending Data Streaming in Receiver " << arg << std::endl; #endif @@ -7736,7 +7736,7 @@ int slsDetector::enableReceiverCompression(int i){ int retval=-1; - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Getting/Enabling/Disabling Receiver Compression with argument " << i << std::endl; #endif @@ -7757,7 +7757,7 @@ void slsDetector::setDetectorHostname(){ char retval[MAX_STR_LENGTH]=""; - if(setReceiverOnline()==ONLINE_FLAG){ + if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE std::cout << "Sending detector hostname to Receiver " << thisDetector->hostname << std::endl; #endif diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index cf3bbe0a2..82162c750 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -500,6 +500,8 @@ void* postProcessing::processData(int delflag) { if (checkJoinThread()){ break; } + + /* //get progress if(setReceiverOnline() == ONLINE_FLAG){ pthread_mutex_lock(&mg); @@ -516,6 +518,9 @@ void* postProcessing::processData(int delflag) { if (checkJoinThread()){ break; } + */ + + } } From 7fc82723b52a7006c4dc3427bf4b912d33fec96b Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 1 Nov 2016 14:04:31 +0100 Subject: [PATCH 05/12] some changes --- .../slsDetector/slsDetector.cpp | 74 +++++++++++++------ .../slsDetector/slsDetectorUtils.cpp | 5 +- .../slsDetectorAnalysis/postProcessing.cpp | 9 ++- 3 files changed, 58 insertions(+), 30 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index b21cc5e5f..27220c553 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -4030,27 +4030,29 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ std::cout<< "Timer " << index << " set to "<< thisDetector->timerValue[index] << "ns" << std::endl; #endif - if ((thisDetector->myDetectorType==MYTHEN)&&(index==PROBES_NUMBER)) { - setDynamicRange(); - //cout << "Changing probes: data size = " << thisDetector->dataBytes <myDetectorType==MYTHEN)&&(index==PROBES_NUMBER)) { + setDynamicRange(); + //cout << "Changing probes: data size = " << thisDetector->dataBytes <myDetectorType == EIGER) && - getRateCorrection(r) && - (t>=0) && + //if eiger, rate corr on, a put statement, dr=32 &setting subexp or dr =16 & setting exptime, set ratecorr to update table + double r; + if( (thisDetector->myDetectorType == EIGER) && + getRateCorrection(r) && + (t>=0) && - (((index == SUBFRAME_ACQUISITION_TIME) && (thisDetector->dynamicRange == 32))|| - ((index == ACQUISITION_TIME) && (thisDetector->dynamicRange == 16))) + (((index == SUBFRAME_ACQUISITION_TIME) && (thisDetector->dynamicRange == 32))|| + ((index == ACQUISITION_TIME) && (thisDetector->dynamicRange == 16))) - && (t>=0) && getRateCorrection(r)){ - setRateCorrection(r); + && (t>=0) && getRateCorrection(r)){ + setRateCorrection(r); + } } //send acquisiton period/frame number to receiver @@ -7063,8 +7065,11 @@ string slsDetector::setFilePath(string s) { if(stat(s.c_str(),&st)){ std::cout << "path does not exist" << endl; setErrorMask((getErrorMask())|(FILE_PATH_DOES_NOT_EXIST)); - }else + }else{ + pthread_mutex_lock(&ms); fileIO::setFilePath(s); + pthread_mutex_unlock(&ms); + } } } @@ -7076,8 +7081,11 @@ string slsDetector::setFilePath(string s) { if (connectData() == OK) ret=thisReceiver->sendString(fnum,retval,arg); disconnectData(); - if(ret!=FAIL) + if(ret!=FAIL){ + pthread_mutex_lock(&ms); fileIO::setFilePath(string(retval)); + pthread_mutex_unlock(&ms); + } else if(!s.empty()){ std::cout << "path does not exist" << endl; setErrorMask((getErrorMask())|(FILE_PATH_DOES_NOT_EXIST)); @@ -7086,7 +7094,11 @@ string slsDetector::setFilePath(string s) { updateReceiver(); } - return fileIO::getFilePath(); + pthread_mutex_lock(&ms); + s = fileIO::getFilePath(); + pthread_mutex_unlock(&ms); + + return s; } @@ -7443,16 +7455,22 @@ int slsDetector::updateReceiverNoWait() { #ifdef VERBOSE cout << "Updating receiver last modified by " << lastClientIP << std::endl; #endif + n = dataSocket->ReceiveDataOnly(&ind,sizeof(ind)); pthread_mutex_lock(&ms); fileIO::setFileIndex(ind); pthread_mutex_unlock(&ms); + n = dataSocket->ReceiveDataOnly(path,MAX_STR_LENGTH); + pthread_mutex_lock(&ms); fileIO::setFilePath(path); + pthread_mutex_unlock(&ms); + n = dataSocket->ReceiveDataOnly(path,MAX_STR_LENGTH); pthread_mutex_lock(&ms); fileIO::setFileName(path); pthread_mutex_unlock(&ms); + return OK; } @@ -7603,7 +7621,9 @@ int slsDetector::setFrameIndex(int index){ int arg = index; if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){ - fileIO::setFrameIndex(index); + pthread_mutex_lock(&ms); + fileIO::setFrameIndex(index); + pthread_mutex_unlock(&ms); } else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ @@ -7612,14 +7632,20 @@ int slsDetector::setFrameIndex(int index){ #endif if (connectData() == OK) ret=thisReceiver->sendInt(fnum,retval,arg); - disconnectData(); - if(ret!=FAIL) + disconnectData(); + if(ret!=FAIL){ + pthread_mutex_lock(&ms); fileIO::setFrameIndex(retval); + pthread_mutex_unlock(&ms); + } if(ret==FORCE_UPDATE) updateReceiver(); } + pthread_mutex_lock(&ms); + retval = fileIO::getFrameIndex(); + pthread_mutex_unlock(&ms); - return fileIO::getFrameIndex(); + return retval; } diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index 4d0d6b8b5..7c3b13a6d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -146,18 +146,17 @@ int slsDetectorUtils::acquire(int delflag){ } if(receiver){ + pthread_mutex_lock(&mg); if(getReceiverStatus()!=IDLE) stopReceiver(); - if(setReceiverOnline()==OFFLINE_FLAG) - *stoppedFlag=1; //multi detectors shouldnt have different receiver read frequencies enabled/disabled if(setReadReceiverFrequency(0) < 0){ std::cout << "Error: The receiver read frequency is invalid:" << setReadReceiverFrequency(0) << std::endl; *stoppedFlag=1; } - if(setReceiverOnline()==OFFLINE_FLAG) *stoppedFlag=1; + pthread_mutex_unlock(&mg); } diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index 82162c750..7912a4bf3 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -395,7 +395,9 @@ int postProcessing::fillBadChannelMask() { void* postProcessing::processData(int delflag) { + pthread_mutex_lock(&mg); if(setReceiverOnline()==OFFLINE_FLAG){ + pthread_mutex_unlock(&mg); #ifdef VERBOSE std::cout<< " ??????????????????????????????????????????? processing data - threaded mode " << *threadedProcessing << endl; @@ -482,6 +484,7 @@ void* postProcessing::processData(int delflag) { } //receiver else{ + pthread_mutex_unlock(&mg); //cprintf(RED,"In post processing threads\n"); @@ -493,9 +496,9 @@ void* postProcessing::processData(int delflag) { else{ int caught = -1; while(true){ - cout.flush(); - cout< Date: Tue, 1 Nov 2016 15:02:14 +0100 Subject: [PATCH 06/12] make t crash --- .../multiSlsDetector/multiSlsDetector.cpp | 3 ++- slsDetectorSoftware/slsDetector/slsDetector.cpp | 6 +++++- .../slsDetectorAnalysis/postProcessing.cpp | 15 +++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 81a5ac601..27444ca07 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4928,7 +4928,7 @@ slsDetectorDefs::runStatus multiSlsDetector::getReceiverStatus(){ int multiSlsDetector::getFramesCaughtByReceiver() { int ret=0,ret1=0; - +/* if(thisMultiDetector->numberOfDetectors>10) { if (detectors[0]){ ret =detectors[0]->getFramesCaughtByReceiver(); @@ -4937,6 +4937,7 @@ int multiSlsDetector::getFramesCaughtByReceiver() { } return ret; } + */ for (int i=0; inumberOfDetectors; i++) if (detectors[i]){ diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 27220c553..6953819a2 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -7143,7 +7143,11 @@ string slsDetector::setFileName(string s) { } } - return fileIO::getFileName(); + pthread_mutex_lock(&ms); + s = fileIO::getFileName(); + pthread_mutex_unlock(&ms); + + return s; } diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index 7912a4bf3..f35b66690 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -496,21 +496,24 @@ void* postProcessing::processData(int delflag) { else{ int caught = -1; while(true){ - //cout.flush(); - //cout< Date: Tue, 1 Nov 2016 15:59:43 +0100 Subject: [PATCH 07/12] back to not asking getframescaught --- slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp | 4 ++-- .../slsDetectorAnalysis/postProcessing.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 27444ca07..e29b39151 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4928,7 +4928,7 @@ slsDetectorDefs::runStatus multiSlsDetector::getReceiverStatus(){ int multiSlsDetector::getFramesCaughtByReceiver() { int ret=0,ret1=0; -/* + if(thisMultiDetector->numberOfDetectors>10) { if (detectors[0]){ ret =detectors[0]->getFramesCaughtByReceiver(); @@ -4937,7 +4937,7 @@ int multiSlsDetector::getFramesCaughtByReceiver() { } return ret; } - */ + for (int i=0; inumberOfDetectors; i++) if (detectors[i]){ diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index f35b66690..b28e3b3c0 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -497,15 +497,15 @@ void* postProcessing::processData(int delflag) { int caught = -1; while(true){ - cout.flush(); - cout< Date: Tue, 1 Nov 2016 16:36:19 +0100 Subject: [PATCH 08/12] threadstarted not initialized --- slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index e29b39151..543c043c8 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -268,6 +268,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) getNMods(); getMaxMods(); + threadStarted = false; threadpool = 0; if(createThreadPool() == FAIL) exit(-1); From 4035f9263ad2c9ccf5defbee86f29357e6924ef1 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 2 Nov 2016 07:28:29 +0100 Subject: [PATCH 09/12] got rid completely of threaded proccessing --- .../eigerDetectorServer/slsDetectorFunctionList.c | 5 +++++ slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 104007fb7..40caa1ec9 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -871,6 +871,11 @@ void readFrame(int *ret, char *mess){ return; } } + + //wait for detector to send + + + printf("*****Done Waiting...\n"); *ret = (int)FINISHED; strcpy(mess,"acquisition successfully finished\n"); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index 7c3b13a6d..bdc02f9cc 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -160,12 +160,12 @@ int slsDetectorUtils::acquire(int delflag){ } - if (*threadedProcessing) + /*if (*threadedProcessing) startThread(delflag); #ifdef VERBOSE cout << " starting thread " << endl; #endif - +*/ //resets frames caught in receiver if(receiver){ pthread_mutex_lock(&mg); @@ -326,7 +326,7 @@ int slsDetectorUtils::acquire(int delflag){ cout << "done! " << endl; #endif - +/* if (*threadedProcessing==0){ #ifdef VERBOSE cout << "start unthreaded process data " << endl; @@ -334,7 +334,7 @@ int slsDetectorUtils::acquire(int delflag){ processData(delflag); } - +*/ } else break; @@ -461,7 +461,7 @@ int slsDetectorUtils::acquire(int delflag){ // loop measurements } - +/* // waiting for the data processing thread to finish! if (*threadedProcessing) { #ifdef VERBOSE @@ -473,7 +473,7 @@ int slsDetectorUtils::acquire(int delflag){ cout << "data processing thread joined" << endl; #endif } - +*/ if(progress_call) progress_call(getCurrentProgress(),pProgressCallArg); From 50596d87d1e575bebdf38accec286aa4f42d3869 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 2 Nov 2016 10:56:13 +0100 Subject: [PATCH 10/12] included the delay and frame counters --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 106 ++++++++++++++++++ slsDetectorSoftware/eigerDetectorServer/Beb.h | 2 + .../eigerDetectorServer/FebRegisterDefs.h | 43 +++++++ .../slsDetectorFunctionList.c | 2 +- .../slsDetectorServer_defs.h | 1 + .../eigerDetectorServer/xparameters.h | 6 + 6 files changed, 159 insertions(+), 1 deletion(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index bdd47a461..a3025fea9 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -24,6 +24,7 @@ #include "Beb.h" +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) struct BebInfo beb_infos[10]; @@ -172,6 +173,111 @@ void Beb_GetModuleCopnfiguration(int* master, int* top){ } } + + +void Beb_EndofDataSend(int tengiga){ + //mapping new memory + u_int32_t* csp0base=0; + int l_framepktcounter2, l_txndelaycounter, l_framedelaycounter, r_framepktcounter2, r_txndelaycounter, r_framedelaycounter; + int l_framepktcounter2_new, l_txndelaycounter_new, l_framedelaycounter_new, r_framepktcounter2_new, r_txndelaycounter_new, r_framedelaycounter_new; + int addr_l_framepktcounter2, addr_l_txndelaycounter, addr_l_framedelaycounter, addr_r_framepktcounter2, addr_r_txndelaycounter, addr_r_framedelaycounter; + + switch(tengiga){ + case 0: + addr_l_framepktcounter2 = ONE_GIGA_LEFT_PKT_SEND_COUNTER; + addr_l_txndelaycounter = ONE_GIGA_LEFT_TXN_DELAY_COUNTER; + addr_l_framedelaycounter = ONE_GIGA_LEFT_FRAME_DELAY_COUNTER; + addr_r_framepktcounter2 = ONE_GIGA_RIGHT_PKT_SEND_COUNTER; + addr_r_txndelaycounter = ONE_GIGA_RIGHT_TXN_DELAY_COUNTER; + addr_r_framedelaycounter = ONE_GIGA_RIGHT_FRAME_DELAY_COUNTER; + break; + case 1: + addr_l_framepktcounter2 = TEN_GIGA_LEFT_PKT_SEND_COUNTER; + addr_l_txndelaycounter = TEN_GIGA_LEFT_TXN_DELAY_COUNTER; + addr_l_framedelaycounter = TEN_GIGA_LEFT_FRAME_DELAY_COUNTER; + addr_r_framepktcounter2 = TEN_GIGA_RIGHT_PKT_SEND_COUNTER; + addr_r_txndelaycounter = TEN_GIGA_RIGHT_TXN_DELAY_COUNTER; + addr_r_framedelaycounter = TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER; + break; + } + + + //open file pointer + int fd = Beb_open(&csp0base,XPAR_COUNTER_BASEADDR); + if(fd < 0){ + cprintf(BG_RED,"Delay read counter fail\n"); + return; + }else{ + //read data first time + l_framepktcounter2 = Beb_Read32(csp0base, addr_l_framepktcounter2); + l_txndelaycounter = Beb_Read32(csp0base, addr_l_txndelaycounter); + l_framedelaycounter = Beb_Read32(csp0base, addr_l_framedelaycounter); + r_framepktcounter2 = Beb_Read32(csp0base, addr_r_framepktcounter2); + r_txndelaycounter = Beb_Read32(csp0base, addr_r_txndelaycounter); + r_framedelaycounter = Beb_Read32(csp0base, addr_r_framedelaycounter); +//#ifdef VERBOSE + printf("\nLeft\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n" + "\nRight\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n\n", + l_framepktcounter2,l_txndelaycounter,l_framedelaycounter, + r_framepktcounter2,r_txndelaycounter,r_framedelaycounter); +//#endif + + //keep comparing with previous values + int maxtimer; + while(1){ + maxtimer = MAX(MAX(l_txndelaycounter,l_framedelaycounter),MAX(r_txndelaycounter,r_framedelaycounter)); + maxtimer /= 100; + printf("Will wait for %d us\n",maxtimer); + usleep(maxtimer); + + //read new values + l_framepktcounter2_new = Beb_Read32(csp0base, addr_l_framepktcounter2); + l_txndelaycounter_new = Beb_Read32(csp0base, addr_l_txndelaycounter); + l_framedelaycounter_new = Beb_Read32(csp0base, addr_l_framedelaycounter); + r_framepktcounter2_new = Beb_Read32(csp0base, addr_r_framepktcounter2); + r_txndelaycounter_new = Beb_Read32(csp0base, addr_r_txndelaycounter); + r_framedelaycounter_new = Beb_Read32(csp0base, addr_r_framedelaycounter); +//#ifdef VERBOSE + printf("\nLeft\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n" + "\nRight\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n\n", + l_framepktcounter2_new,l_txndelaycounter_new,l_framedelaycounter_new, + r_framepktcounter2_new,r_txndelaycounter_new,r_framedelaycounter_new); +//#endif + + if ((l_framepktcounter2 == l_framepktcounter2_new) && (r_framepktcounter2 == r_framepktcounter2_new)) + break; + + //update old values + l_framepktcounter2 = l_framepktcounter2_new; + l_txndelaycounter = l_txndelaycounter_new; + l_framedelaycounter = l_framedelaycounter_new; + r_framepktcounter2 = r_framepktcounter2_new; + r_txndelaycounter = r_txndelaycounter_new; + r_framedelaycounter = r_framedelaycounter_new; + + } + + printf("Detector has send all data\n"); + //close file pointer + Beb_close(fd,csp0base); + } +} + + + + /* do not work at the moment */ int Beb_SetMasterViaSoftware(){ diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index 535b0e382..9431701ea 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -46,6 +46,8 @@ struct BebInfo{ void Beb_GetModuleCopnfiguration(int* master, int* top); + void Beb_EndofDataSend(int tengiga); + int Beb_SetMasterViaSoftware(); int Beb_SetSlaveViaSoftware(); int Beb_Activate(int enable); diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index 93f8ea404..b4b728a3d 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -153,3 +153,46 @@ //temp so far #define FEB_REG_STATUS 0xa +//1g counters +#define ONE_GIGA_LEFT_FRAME_SEND_COUNTER 0x04 +#define ONE_GIGA_LEFT_PKT_SEND_COUNTER 0x24 + +#define ONE_GIGA_LEFT_TXN_DELAY_COUNTER 0x104 +#define ONE_GIGA_LEFT_FRAME_DELAY_COUNTER 0x124 + +#define ONE_GIGA_RIGHT_FRAME_SEND_COUNTER 0x44 +#define ONE_GIGA_RIGHT_PKT_SEND_COUNTER 0x64 + +#define ONE_GIGA_RIGHT_TXN_DELAY_COUNTER 0x144 +#define ONE_GIGA_RIGHT_FRAME_DELAY_COUNTER 0x164 + +//10g counters +#define TEN_GIGA_LEFT_FRAME_SEND_COUNTER 0x84 +#define TEN_GIGA_LEFT_PKT_SEND_COUNTER 0xa4 + +#define TEN_GIGA_LEFT_TXN_DELAY_COUNTER 0x184 +#define TEN_GIGA_LEFT_FRAME_DELAY_COUNTER 0x1a4 + +#define TEN_GIGA_RIGHT_FRAME_SEND_COUNTER 0xc4 +#define TEN_GIGA_RIGHT_PKT_SEND_COUNTER 0xe4 + +#define TEN_GIGA_RIGHT_TXN_DELAY_COUNTER 0x1c4 +#define TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER 0x1e4 + + + + + + + + + + + + + + + + + + diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 40caa1ec9..3d904043c 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -873,7 +873,7 @@ void readFrame(int *ret, char *mess){ } //wait for detector to send - + Beb_EndofDataSend(send_to_ten_gig); printf("*****Done Waiting...\n"); diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h index 296e51728..f4dfdc073 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h @@ -45,4 +45,5 @@ enum detAdcIndex{TEMP_FPGAEXT, TEMP_10GE, TEMP_DCDC, TEMP_SODL, TEMP_SODR, TEMP_ enum detNetworkParameter{TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G}; + #endif /* SLSDETECTORSERVER_DEFS_H_ */ diff --git a/slsDetectorSoftware/eigerDetectorServer/xparameters.h b/slsDetectorSoftware/eigerDetectorServer/xparameters.h index 424ff8d15..446c89859 100644 --- a/slsDetectorSoftware/eigerDetectorServer/xparameters.h +++ b/slsDetectorSoftware/eigerDetectorServer/xparameters.h @@ -61,6 +61,12 @@ XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR #define XPAR_PLB_GPIO_TEST_HIGHADDR 0xD101FFFF + +/* Definitions for packet, frame and delay down counters */ +#define XPAR_COUNTER_BASEADDR 0xD1020000 +#define XPAR_COUNTER_HIGHADDR 0xD102FFFF + + /* Definitions for peripheral PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT */ #define XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR 0xC4100000 #define XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_HIGHADDR 0xC410FFFF From 5783e3f9d28a2807f66c958fbf53cbf71d1326dd Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 2 Nov 2016 11:00:51 +0100 Subject: [PATCH 11/12] counters frame delay --- .../bin/eigerDetectorServerv2.2.0.16.2 | Bin 0 -> 277530 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.2.0.16.2 diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.2.0.16.2 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.2.0.16.2 new file mode 100755 index 0000000000000000000000000000000000000000..df490126795a06f8b109a0c7ef82ffbbc6abaf4b GIT binary patch literal 277530 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 PAnmqhe!HIYpZED+w3kE@ literal 0 HcmV?d00001 From fa0580ccac26a10f0044411173f7089248ce9377 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 2 Nov 2016 11:01:59 +0100 Subject: [PATCH 12/12] to see the frames --- slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index bdc02f9cc..7c3b13a6d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -160,12 +160,12 @@ int slsDetectorUtils::acquire(int delflag){ } - /*if (*threadedProcessing) + if (*threadedProcessing) startThread(delflag); #ifdef VERBOSE cout << " starting thread " << endl; #endif -*/ + //resets frames caught in receiver if(receiver){ pthread_mutex_lock(&mg); @@ -326,7 +326,7 @@ int slsDetectorUtils::acquire(int delflag){ cout << "done! " << endl; #endif -/* + if (*threadedProcessing==0){ #ifdef VERBOSE cout << "start unthreaded process data " << endl; @@ -334,7 +334,7 @@ int slsDetectorUtils::acquire(int delflag){ processData(delflag); } -*/ + } else break; @@ -461,7 +461,7 @@ int slsDetectorUtils::acquire(int delflag){ // loop measurements } -/* + // waiting for the data processing thread to finish! if (*threadedProcessing) { #ifdef VERBOSE @@ -473,7 +473,7 @@ int slsDetectorUtils::acquire(int delflag){ cout << "data processing thread joined" << endl; #endif } -*/ + if(progress_call) progress_call(getCurrentProgress(),pProgressCallArg);