From d8af12456d7576d4aa78b264f72ef72ce2b0d814 Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Mon, 26 Nov 2012 15:33:53 +0000 Subject: [PATCH] receiver does the flipping and processing before sending client the correct frame to display git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@361 951219d9-93cf-4727-9268-0efd64621fa3 --- .../slsDetector/slsDetector.cpp | 33 +++------ .../slsDetectorAnalysis/postProcessing.cpp | 4 +- .../slsReceiver/receiver_defs.h | 1 + .../slsReceiver/slsReceiver_funcs.cpp | 71 ++++++++++++------- 4 files changed, 59 insertions(+), 50 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 33aefdeda..63e68e12f 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -5660,12 +5660,11 @@ int slsDetector::resetFramesCaught(int index){ + int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){ int fnum=F_READ_FRAME; - int nel=(thisDetector->dataBytes+HEADERLENGTH)/sizeof(int);//2572/ + int nel=thisDetector->dataBytes/sizeof(int); int* retval=new int[nel]; - int* origVal=new int[nel]; - int arg[2]; int ret=FAIL; int n; char mess[100]="Nothing"; @@ -5673,7 +5672,7 @@ int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){ if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { #ifdef VERBOSE - std::cout<< "slsDetector: Reading frame from receiver "<< thisDetector->dataBytes+HEADERLENGTH << " " <dataBytes << " " <Connect()>=0) { @@ -5683,46 +5682,34 @@ int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){ if (ret==FAIL) { n= dataSocket->ReceiveDataOnly(mess,sizeof(mess)); std::cout<< "Detector returned: " << mess << " " << n << std::endl; - delete [] origVal; delete [] retval; return NULL; } else { n=dataSocket->ReceiveDataOnly(fName,MAX_STR_LENGTH); - n=dataSocket->ReceiveDataOnly(arg,sizeof(arg)); - n=dataSocket->ReceiveDataOnly(origVal,thisDetector->dataBytes+HEADERLENGTH); + n=dataSocket->ReceiveDataOnly(&fIndex,sizeof(fIndex)); + n=dataSocket->ReceiveDataOnly(retval,thisDetector->dataBytes); #ifdef VERBOSE std::cout<< "Received "<< n << " data bytes" << std::endl; #endif - if (n!=thisDetector->dataBytes+HEADERLENGTH) { - std::cout<dataBytes+HEADERLENGTH << std::endl; + if (n!=thisDetector->dataBytes) { + std::cout<dataBytes << std::endl; ret=FAIL; - delete [] origVal; delete [] retval; return NULL; - }//worked - else{ - fIndex=arg[0]; - if(arg[1]){ - memcpy(retval,((char*) origVal)+2, getDataBytes()/2); - memcpy((((char*)retval)+getDataBytes()/2), ((char*) origVal)+8+getDataBytes()/2, getDataBytes()/2); - } - else{ - memcpy((((char*)retval)+getDataBytes()/2),((char*) origVal)+2, getDataBytes()/2); - memcpy(retval, ((char*) origVal)+8+getDataBytes()/2, getDataBytes()/2); - } } } dataSocket->Disconnect(); } } } - delete [] origVal; - return retval;//(retval+HEADERLENGTH/sizeof(int)); + return retval; }; + + int slsDetector::lockReceiver(int lock){ int fnum=F_LOCK_SERVER; int ret = FAIL; diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index 2c36143b5..6f93e8770 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -414,8 +414,10 @@ void* postProcessing::processData(int delflag) { int* receiverData = readFrameFromReceiver(currentfName,currentfIndex); pthread_mutex_unlock(&mg); - if(!receiverData) + if(!receiverData){ + cout<<"****Detector returned NULL***"<0){ - cout << endl << "unmatching/wrong order: index:" << index <<" index2:" << index2 << endl; - if(count>10){ - strcpy(mess,"unmatching index/wrong order. could not read frame.\n"); - ret=FAIL; + ret=FAIL; + while(count<20){ + //get frame + raw=slsReceiverList->readFrame(fName); + index=(int)(*((int*)raw)); + index2= (int)(*((int*)((char*)(raw+onebuffersize)))); + memcpy(origVal,raw,BUFFER_SIZE); + + if((index%2)!=index2%2){ + //ideal situation (should be odd, even(index+1)) + if(index%2){ + memcpy(retval,((char*) origVal)+2, onedatasize); + memcpy((((char*)retval)+onedatasize), ((char*) origVal)+8+onedatasize, onedatasize); + ret=OK; + break; + } + + //swap to even,odd + if(index2%2){ + memcpy((((char*)retval)+onedatasize),((char*) origVal)+2, onedatasize); + memcpy(retval, ((char*) origVal)+8+onedatasize, onedatasize); + index=index2; + ret=OK; break; } } - retval=slsReceiverList->readFrame(fName); - index=(int)(*((int*)retval)); - char* retval2= retval+1286; - index2= (int)(*((int*)retval2)); + strcpy(mess,"could not read frame due to more than 20 mismatched indices\n"); + cout<<"same type: index:"<SendDataOnly(&ret,sizeof(ret)); if(ret==FAIL){ - cout<<"mess:"<SendDataOnly(mess,sizeof(mess)); } else{ socket->SendDataOnly(fName,MAX_STR_LENGTH); - socket->SendDataOnly(arg,sizeof(arg)); - socket->SendDataOnly(retval,sizeof(buffer)); + socket->SendDataOnly(&arg,sizeof(arg)); + socket->SendDataOnly(retval,DATABYTES); } //return ok/fail return ret;