mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 13:27:14 +02:00
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:
@ -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;
|
||||||
|
@ -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){
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user