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
This commit is contained in:
l_maliakal_d
2012-11-26 15:33:53 +00:00
parent 997ffec2ee
commit d8af12456d
4 changed files with 59 additions and 50 deletions

View File

@ -5660,12 +5660,11 @@ int slsDetector::resetFramesCaught(int index){
int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){ int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){
int fnum=F_READ_FRAME; 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* retval=new int[nel];
int* origVal=new int[nel];
int arg[2];
int ret=FAIL; int ret=FAIL;
int n; int n;
char mess[100]="Nothing"; char mess[100]="Nothing";
@ -5673,7 +5672,7 @@ int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){
if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) { if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) {
#ifdef VERBOSE #ifdef VERBOSE
std::cout<< "slsDetector: Reading frame from receiver "<< thisDetector->dataBytes+HEADERLENGTH << " " <<nel <<std::endl; std::cout<< "slsDetector: Reading frame from receiver "<< thisDetector->dataBytes << " " <<nel <<std::endl;
#endif #endif
if (dataSocket) { if (dataSocket) {
if (dataSocket->Connect()>=0) { if (dataSocket->Connect()>=0) {
@ -5683,46 +5682,34 @@ int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){
if (ret==FAIL) { if (ret==FAIL) {
n= dataSocket->ReceiveDataOnly(mess,sizeof(mess)); n= dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Detector returned: " << mess << " " << n << std::endl; std::cout<< "Detector returned: " << mess << " " << n << std::endl;
delete [] origVal;
delete [] retval; delete [] retval;
return NULL; return NULL;
} else { } else {
n=dataSocket->ReceiveDataOnly(fName,MAX_STR_LENGTH); n=dataSocket->ReceiveDataOnly(fName,MAX_STR_LENGTH);
n=dataSocket->ReceiveDataOnly(arg,sizeof(arg)); n=dataSocket->ReceiveDataOnly(&fIndex,sizeof(fIndex));
n=dataSocket->ReceiveDataOnly(origVal,thisDetector->dataBytes+HEADERLENGTH); n=dataSocket->ReceiveDataOnly(retval,thisDetector->dataBytes);
#ifdef VERBOSE #ifdef VERBOSE
std::cout<< "Received "<< n << " data bytes" << std::endl; std::cout<< "Received "<< n << " data bytes" << std::endl;
#endif #endif
if (n!=thisDetector->dataBytes+HEADERLENGTH) { if (n!=thisDetector->dataBytes) {
std::cout<<endl<< "wrong data size received: received " << n << " but expected from receiver " << thisDetector->dataBytes+HEADERLENGTH << std::endl; std::cout<<endl<< "wrong data size received: received " << n << " but expected from receiver " << thisDetector->dataBytes << std::endl;
ret=FAIL; ret=FAIL;
delete [] origVal;
delete [] retval; delete [] retval;
return NULL; 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(); dataSocket->Disconnect();
} }
} }
} }
delete [] origVal; return retval;
return retval;//(retval+HEADERLENGTH/sizeof(int));
}; };
int slsDetector::lockReceiver(int lock){ int slsDetector::lockReceiver(int lock){
int fnum=F_LOCK_SERVER; int fnum=F_LOCK_SERVER;
int ret = FAIL; int ret = FAIL;

View File

@ -414,8 +414,10 @@ void* postProcessing::processData(int delflag) {
int* receiverData = readFrameFromReceiver(currentfName,currentfIndex); int* receiverData = readFrameFromReceiver(currentfName,currentfIndex);
pthread_mutex_unlock(&mg); pthread_mutex_unlock(&mg);
if(!receiverData) if(!receiverData){
cout<<"****Detector returned NULL***"<<endl;
return 0; return 0;
}
fdata=decodeData(receiverData); fdata=decodeData(receiverData);
delete [] receiverData; delete [] receiverData;
if(fdata){ if(fdata){

View File

@ -7,6 +7,7 @@
#define GOODBYE -200 #define GOODBYE -200
#define BUFFER_SIZE 1286*2 #define BUFFER_SIZE 1286*2
#define DATABYTES 2560
#define DEFAULT_UDP_PORT 50001 #define DEFAULT_UDP_PORT 50001

View File

@ -564,15 +564,21 @@ int slsReceiverFuncs::reset_frames_caught(){
int slsReceiverFuncs::read_frame(){ int slsReceiverFuncs::read_frame(){
ret=OK; ret=OK;
int i,startIndex=-1; int nel = BUFFER_SIZE/(sizeof(int));
char* retval=NULL;
char buffer[1286*2];
char fName[MAX_STR_LENGTH]; char fName[MAX_STR_LENGTH];
int arg[2];
arg[1]=1;//do not flip
int index=-1,index2=-1,fIndex=-1;;
int arg = -1;
int onebuffersize = BUFFER_SIZE/2;
int onedatasize = DATABYTES/2;
char* raw=NULL;
char* retval2=NULL;
int* origVal=new int[nel];
int* retval=new int[nel];
int index=-1,index2=-1;
int i,startIndex=-1;
strcpy(mess,"Could not read frame\n"); strcpy(mess,"Could not read frame\n");
@ -596,32 +602,45 @@ int slsReceiverFuncs::read_frame(){
//got atleast first frame, read buffer //got atleast first frame, read buffer
if(ret==OK){ if(ret==OK){
int count=0; int count=0;
do{
if(count>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; break;
} }
} }
retval=slsReceiverList->readFrame(fName); strcpy(mess,"could not read frame due to more than 20 mismatched indices\n");
index=(int)(*((int*)retval)); cout<<"same type: index:"<<index<<"\tindex2:"<<index2<<endl<<endl;
char* retval2= retval+1286; usleep(1000);
index2= (int)(*((int*)retval2));
count++; count++;
}
}while(((index%2)==(index2%2))||(index+1==index2));
fIndex=((int)(*((int*)retval)) - startIndex)/2; arg=((index - startIndex)/2)-1;
arg[0]=fIndex-1;
arg[1]=(index%2);
#ifdef VERBOSE #ifdef VERBOSE
cout << "\nstartIndex:" << startIndex << endl; cout << "\nstartIndex:" << startIndex << endl;
cout << "fName:" << fName << endl; cout << "fName:" << fName << endl;
if((index%2)==0)
cout << "\nEven Index, must flip:" << index << endl;
#endif #endif
} }
@ -636,13 +655,13 @@ int slsReceiverFuncs::read_frame(){
// send answer // send answer
socket->SendDataOnly(&ret,sizeof(ret)); socket->SendDataOnly(&ret,sizeof(ret));
if(ret==FAIL){ if(ret==FAIL){
cout<<"mess:"<<mess<<endl; cout << "mess:" << mess << endl;
socket->SendDataOnly(mess,sizeof(mess)); socket->SendDataOnly(mess,sizeof(mess));
} }
else{ else{
socket->SendDataOnly(fName,MAX_STR_LENGTH); socket->SendDataOnly(fName,MAX_STR_LENGTH);
socket->SendDataOnly(arg,sizeof(arg)); socket->SendDataOnly(&arg,sizeof(arg));
socket->SendDataOnly(retval,sizeof(buffer)); socket->SendDataOnly(retval,DATABYTES);
} }
//return ok/fail //return ok/fail
return ret; return ret;