mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02: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
|
||||
|
@ -13,13 +13,17 @@ char* getFilePath();
|
||||
char* setFilePath(char fName[]);
|
||||
int getFileIndex();
|
||||
int setFileIndex(int index);
|
||||
int getFramesCaught();
|
||||
int getFrameIndex();
|
||||
int getAcquisitionIndex();
|
||||
int getFramesCaught();
|
||||
int getTotalFramesCaught();
|
||||
int resetTotalFramesCaught(int index);
|
||||
|
||||
void* startListening(void *arg);
|
||||
|
||||
int startReceiver();
|
||||
int stopReceiver();
|
||||
|
||||
char* readFrame();
|
||||
|
||||
#endif
|
||||
|
@ -105,6 +105,8 @@ int function_table() {
|
||||
flist[F_GET_RECEIVER_STATUS]=&get_receiver_status;
|
||||
flist[F_GET_FRAMES_CAUGHT]=&get_frames_caught;
|
||||
flist[F_GET_FRAME_INDEX]=&get_frame_index;
|
||||
flist[F_RESET_FRAMES_CAUGHT]=&reset_frames_caught;
|
||||
flist[F_READ_FRAME]=&read_frame;
|
||||
|
||||
flist[F_LOCK_RECEIVER]=&lock_receiver;
|
||||
flist[F_SET_PORT]=&set_port;
|
||||
@ -148,11 +150,11 @@ int set_file_name(int file_des) {
|
||||
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
|
||||
ret=FAIL;
|
||||
}
|
||||
else if((strlen(fName))&&(getReceiverStatus()==RUNNING)){
|
||||
/* else if((strlen(fName))&&(getReceiverStatus()==RUNNING)){
|
||||
strcpy(mess,"Can not set file name while receiver running");
|
||||
ret = FAIL;
|
||||
}
|
||||
else
|
||||
*/ else
|
||||
strcpy(retval,setFileName(fName));
|
||||
}
|
||||
|
||||
@ -275,11 +277,11 @@ int set_file_index(int file_des) {
|
||||
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
|
||||
ret=FAIL;
|
||||
}
|
||||
else if((index>=0)&&(getReceiverStatus()==RUNNING)){
|
||||
/* else if((index>=0)&&(getReceiverStatus()==RUNNING)){
|
||||
strcpy(mess,"Can not set file index while receiver running\n");
|
||||
ret = FAIL;
|
||||
}
|
||||
else
|
||||
*/ else
|
||||
retval=setFileIndex(index);
|
||||
}
|
||||
|
||||
@ -423,7 +425,7 @@ int get_frames_caught(int file_des) {
|
||||
|
||||
/* execute action if the arguments correctly arrived*/
|
||||
#ifdef SLS_RECEIVER_FUNCTION_LIST
|
||||
retval=getFramesCaught();
|
||||
retval=getTotalFramesCaught();
|
||||
#endif
|
||||
|
||||
if(ret==OK && differentClients){
|
||||
@ -447,14 +449,14 @@ int get_frames_caught(int file_des) {
|
||||
|
||||
|
||||
|
||||
int get_frame_index(int file_des) {
|
||||
int get_frame_index(int file_des) {printf("Getting frame Index\n");fflush(stdout);
|
||||
int ret=OK;
|
||||
int n=0;
|
||||
int retval=-1;
|
||||
|
||||
/* execute action if the arguments correctly arrived*/
|
||||
#ifdef SLS_RECEIVER_FUNCTION_LIST
|
||||
retval=getFrameIndex();
|
||||
retval=getAcquisitionIndex();
|
||||
#endif
|
||||
|
||||
if(ret==OK && differentClients){
|
||||
@ -465,6 +467,55 @@ int get_frame_index(int file_des) {
|
||||
/* send answer */
|
||||
n = sendDataOnly(file_des,&ret,sizeof(ret));
|
||||
n = sendDataOnly(file_des,&retval,sizeof(retval));
|
||||
printf("returnrdf:%d\n",retval);
|
||||
/*return ok/fail*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int reset_frames_caught(int file_des) {
|
||||
int ret=OK;
|
||||
int n=0;
|
||||
int retval=-1;
|
||||
int index=-1;
|
||||
|
||||
strcpy(mess,"Could not reset frames caught\n");
|
||||
|
||||
|
||||
/* receive arguments */
|
||||
n = receiveDataOnly(file_des,&index,sizeof(index));
|
||||
if (n < 0) {
|
||||
sprintf(mess,"Error reading from socket\n");
|
||||
ret=FAIL;
|
||||
}
|
||||
|
||||
if (ret==OK) {
|
||||
/* execute action if the arguments correctly arrived*/
|
||||
#ifdef SLS_RECEIVER_FUNCTION_LIST
|
||||
if (lockStatus==1 && differentClients==1){//necessary???
|
||||
sprintf(mess,"Receiver locked by %s\n", lastClientIP);
|
||||
ret=FAIL;
|
||||
}
|
||||
else
|
||||
retval=resetTotalFramesCaught(index);
|
||||
#endif
|
||||
}
|
||||
|
||||
if(ret==OK && differentClients){
|
||||
printf("Force update\n");
|
||||
ret=FORCE_UPDATE;
|
||||
}
|
||||
|
||||
/* send answer */
|
||||
n = sendDataOnly(file_des,&ret,sizeof(ret));
|
||||
if(ret==FAIL)
|
||||
n = sendDataOnly(file_des,mess,sizeof(mess));
|
||||
n = sendDataOnly(file_des,&retval,sizeof(retval));
|
||||
/*return ok/fail*/
|
||||
return ret;
|
||||
}
|
||||
@ -475,6 +526,37 @@ int get_frame_index(int file_des) {
|
||||
|
||||
|
||||
|
||||
int read_frame(int file_des) {
|
||||
int ret=OK;
|
||||
int n=0;
|
||||
char* retval=NULL;
|
||||
char buffer[1286*2];
|
||||
|
||||
strcpy(mess,"Could not read frame\n");
|
||||
|
||||
|
||||
/* execute action if the arguments correctly arrived*/
|
||||
#ifdef SLS_RECEIVER_FUNCTION_LIST
|
||||
retval=readFrame();
|
||||
#endif
|
||||
|
||||
|
||||
if(ret==OK && differentClients){
|
||||
printf("Force update\n");
|
||||
ret=FORCE_UPDATE;
|
||||
}
|
||||
if(getReceiverStatus==IDLE){
|
||||
ret=FAIL;
|
||||
printf("*************STOPPPED***\n");
|
||||
}
|
||||
/* send answer */
|
||||
n = sendDataOnly(file_des,&ret,sizeof(ret));
|
||||
if(ret==FAIL)
|
||||
n = sendDataOnly(file_des,mess,sizeof(mess));
|
||||
n = sendDataOnly(file_des,retval,sizeof(buffer));
|
||||
/*return ok/fail*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -36,6 +36,9 @@ int stop_receiver(int);
|
||||
int get_receiver_status(int);
|
||||
int get_frames_caught(int);
|
||||
int get_frame_index(int);
|
||||
int reset_frame_index(int);
|
||||
int reset_frames_caught(int);
|
||||
int read_frame(int);
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user