mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-02-17 20:58:41 +01:00
gotthard receiver works so far without cpu file write and tcp generic socket lock
git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@337 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
@@ -40,7 +40,10 @@ int err = 0;
|
||||
pthread_t gui_acquisition_thread;
|
||||
|
||||
|
||||
char buffer[BUFFER_LENGTH];
|
||||
char buffer[BUFFER_LENGTH*2];
|
||||
char sendbuffer[BUFFER_LENGTH*2];
|
||||
|
||||
char onebuffer[BUFFER_LENGTH];
|
||||
int sd = -1;
|
||||
int sockfd, sfilefd;
|
||||
|
||||
@@ -49,11 +52,24 @@ int sockfd, sfilefd;
|
||||
char filePath[MAX_STR_LENGTH]="";
|
||||
char fileName[MAX_STR_LENGTH]="run";
|
||||
int fileIndex=0;
|
||||
int frameIndexNeeded=1;
|
||||
|
||||
//for each scan
|
||||
int frameIndex=0;
|
||||
int startFrameIndex=-1;
|
||||
int framesInFile=0;
|
||||
int framesCaught=0;
|
||||
|
||||
//for each acquisition
|
||||
int acquisitionIndex=0;
|
||||
int startAcquisitionIndex=-1;//to remember progress for scans
|
||||
int totalFramesCaught=0;
|
||||
|
||||
int framesInFile=0;//to know when to start next file
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
enum runStatus status = IDLE;
|
||||
|
||||
|
||||
@@ -124,9 +140,7 @@ int setFileIndex(int index){
|
||||
|
||||
|
||||
|
||||
int getFramesCaught(){
|
||||
return framesCaught;
|
||||
}
|
||||
|
||||
|
||||
int getFrameIndex(){
|
||||
if(startFrameIndex==-1)
|
||||
@@ -137,6 +151,33 @@ int getFrameIndex(){
|
||||
}
|
||||
|
||||
|
||||
int getAcquisitionIndex(){
|
||||
if(startAcquisitionIndex==-1)
|
||||
acquisitionIndex=0;
|
||||
else
|
||||
acquisitionIndex=((int)(*((int*)buffer)) - startAcquisitionIndex)/2;
|
||||
return acquisitionIndex;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int getFramesCaught(){
|
||||
return framesCaught;
|
||||
}
|
||||
|
||||
|
||||
int getTotalFramesCaught(){
|
||||
return totalFramesCaught;
|
||||
}
|
||||
|
||||
|
||||
int resetTotalFramesCaught(int index){
|
||||
startAcquisitionIndex=-1;
|
||||
totalFramesCaught=0;
|
||||
frameIndexNeeded=index;
|
||||
return frameIndexNeeded;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void* startListening(void *arg){
|
||||
@@ -149,16 +190,17 @@ void* startListening(void *arg){
|
||||
sd = -1;
|
||||
int rc1, rc2, rc;
|
||||
int currframenum, prevframenum;
|
||||
char buffer2[BUFFER_LENGTH];
|
||||
// char buffer2[BUFFER_LENGTH];
|
||||
char savefilename[128];
|
||||
struct sockaddr_in serveraddr;
|
||||
struct sockaddr_in clientaddr;
|
||||
|
||||
int clientaddrlen = sizeof(clientaddr);
|
||||
framesInFile=0;
|
||||
framesCaught=0;
|
||||
frameIndex = 0;
|
||||
frameIndex=0;
|
||||
startFrameIndex=-1;
|
||||
framesCaught=0;
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
/* Catch signal SIGINT to close files properly */
|
||||
@@ -167,7 +209,10 @@ void* startListening(void *arg){
|
||||
|
||||
|
||||
//create file name
|
||||
sprintf(savefilename, "%s/%s_f%09d_%d.dat", filePath,fileName,frameIndex,fileIndex);
|
||||
if(!frameIndexNeeded)
|
||||
sprintf(savefilename, "%s/%s_%d.dat", filePath,fileName,fileIndex);
|
||||
else
|
||||
sprintf(savefilename, "%s/%s_f%012d_%d.dat", filePath,fileName,framesCaught,fileIndex);
|
||||
|
||||
/***********************************************************************/
|
||||
/* A do/while(FALSE) loop is used to make error cleanup easier. The */
|
||||
@@ -221,7 +266,11 @@ void* startListening(void *arg){
|
||||
|
||||
currframenum=(int)(*((int*)buffer));
|
||||
getFrameIndex();
|
||||
sprintf(savefilename, "%s/%s_f%09d_%d.dat", filePath,fileName,frameIndex,fileIndex);
|
||||
//create file name
|
||||
if(!frameIndexNeeded)
|
||||
sprintf(savefilename, "%s/%s_%d.dat", filePath,fileName,fileIndex);
|
||||
else
|
||||
sprintf(savefilename, "%s/%s_f%012d_%d.dat", filePath,fileName,framesCaught,fileIndex);
|
||||
|
||||
printf("saving to %s\t\tpacket loss %f \%\t\tframenum %d\n", savefilename,((currframenum-prevframenum-(2*framesInFile))/(double)(2*framesInFile))*100.000,currframenum);
|
||||
sfilefd = fopen((const char *) (savefilename), "w");
|
||||
@@ -230,16 +279,22 @@ void* startListening(void *arg){
|
||||
}
|
||||
status = RUNNING;
|
||||
|
||||
rc1 = recvfrom(sd, buffer, sizeof(buffer), 0,
|
||||
rc1 = recvfrom(sd, buffer, sizeof(onebuffer), 0,
|
||||
(struct sockaddr *) &clientaddr, &clientaddrlen);
|
||||
//printf("rc1 done\n");
|
||||
rc2 = recvfrom(sd, buffer2, sizeof(buffer2), 0,
|
||||
rc2 = recvfrom(sd, buffer+sizeof(onebuffer), sizeof(onebuffer), 0,
|
||||
(struct sockaddr *) &clientaddr, &clientaddrlen);
|
||||
|
||||
|
||||
//for each scan
|
||||
if(startFrameIndex==-1){
|
||||
startFrameIndex=(int)(*((int*)buffer))-2;
|
||||
prevframenum=startFrameIndex;
|
||||
}
|
||||
//start of acquisition
|
||||
if(startAcquisitionIndex==-1)
|
||||
startAcquisitionIndex=startFrameIndex;
|
||||
|
||||
//printf("rc2 done\n");
|
||||
if ((rc1 < 0) || (rc2 < 0)) {
|
||||
perror("recvfrom() failed");
|
||||
@@ -249,9 +304,10 @@ void* startListening(void *arg){
|
||||
//so that it doesnt write the last frame twice
|
||||
if(gui_acquisition_thread_running){
|
||||
fwrite(buffer, 1, rc1, sfilefd);
|
||||
fwrite(buffer2, 1, rc2, sfilefd);
|
||||
fwrite(buffer+sizeof(onebuffer), 1, rc2, sfilefd);
|
||||
framesInFile++;
|
||||
framesCaught++;
|
||||
totalFramesCaught++;
|
||||
//printf("saving\n");
|
||||
}
|
||||
}
|
||||
@@ -332,6 +388,22 @@ int stopReceiver(){
|
||||
}
|
||||
|
||||
|
||||
char* readFrame(){
|
||||
// volatile char* now_ptr=NULL;
|
||||
//u_int32_t* ram_values=NULL;
|
||||
|
||||
// now_ptr=(char*)ram_values;
|
||||
|
||||
//memcpy(now_ptr,buffer ,sizeof(buffer));
|
||||
|
||||
// memcpy(sendbuffer,buffer ,sizeof(buffer));
|
||||
|
||||
while (((int)*((int*)buffer))%2==0) ;//usleep(20000);
|
||||
|
||||
// memcpy(sendbuffer,buffer ,sizeof(buffer));
|
||||
|
||||
//printf("freamenum%d\n",*((int*) sendbuffer));
|
||||
return buffer;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user