From 97442cf91a2c39301acf7df8f73ce95073196273 Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Mon, 17 Dec 2012 08:14:38 +0000 Subject: [PATCH] included enable write option in receiver git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@386 951219d9-93cf-4727-9268-0efd64621fa3 --- slsDetectorSoftware/slsReceiver/Makefile | 3 +- .../slsReceiver/slsReceiverFunctionList.cpp | 70 ++++++++++++------- .../slsReceiver/slsReceiverFunctionList.h | 10 +++ .../slsReceiver/slsReceiver_funcs.cpp | 51 ++++++++++++++ .../slsReceiver/slsReceiver_funcs.h | 5 ++ 5 files changed, 111 insertions(+), 28 deletions(-) diff --git a/slsDetectorSoftware/slsReceiver/Makefile b/slsDetectorSoftware/slsReceiver/Makefile index 68c4ff8a7..e389dc8eb 100644 --- a/slsDetectorSoftware/slsReceiver/Makefile +++ b/slsDetectorSoftware/slsReceiver/Makefile @@ -24,5 +24,4 @@ $(PROGS): clean: - rm -rf $(PROGS) *.o - + rm -rf $(DESTDIR)/$(PROGS) *.o diff --git a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp index e4624044e..0dfdcb228 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp +++ b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp @@ -26,6 +26,7 @@ FILE* slsReceiverFunctionList::sfilefd(NULL); int slsReceiverFunctionList::listening_thread_running(0); slsReceiverFunctionList::slsReceiverFunctionList(bool shortfname): + enableFileWrite(1), shortFileName(shortfname), shortFileNameIndex(0), fileIndex(0), @@ -55,6 +56,13 @@ slsReceiverFunctionList::slsReceiverFunctionList(bool shortfname): +int slsReceiverFunctionList::setEnableFileWrite(int i){ + if(i!=-1) + enableFileWrite=i; + return enableFileWrite; +} + + void slsReceiverFunctionList::setEthernetInterface(char* c){ strcpy(eth,c); } @@ -315,45 +323,54 @@ int slsReceiverFunctionList::startWriting(){ framesCaught=0; frameIndex=0; - latestData = new char[BUFFER_SIZE]; + if(sfilefd) sfilefd=0; - //create file name - if(!frameIndexNeeded) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex); - else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex); + strcpy(savefilename,""); + strcpy(actualfilename,""); - //for sebastian - if(!shortFileName) strcpy(actualfilename,savefilename); - else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, 0); - //start writing - sfilefd = fopen((const char *) (actualfilename), "w"); - cout << "Ready! " << endl << "Saving to " << actualfilename << endl; + cout << "Ready!" << endl; + + if(enableFileWrite){ + //create file name + if(!frameIndexNeeded) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex); + else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex); + + //for sebastian + if(!shortFileName) strcpy(actualfilename,savefilename); + else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, 0); + + //start writing + sfilefd = fopen((const char *) (actualfilename), "w"); + cout << "Saving to " << actualfilename << endl; + } while(listening_thread_running){ //when it reaches MAX_FRAMES_PER_FILE,start writing new file if (framesInFile == MAX_FRAMES_PER_FILE) { - fclose(sfilefd); - - //create file name - if(!frameIndexNeeded) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex); - else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex); - //for sebastian - if(!shortFileName) strcpy(actualfilename,savefilename); - else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, shortFileNameIndex); - shortFileNameIndex++; + if(enableFileWrite){ + fclose(sfilefd); + //create file name + if(!frameIndexNeeded) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex); + else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex); + //for sebastian + if(!shortFileName) strcpy(actualfilename,savefilename); + else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, shortFileNameIndex); + shortFileNameIndex++; + //start writing in new file + sfilefd = fopen((const char *) (actualfilename), "w"); + cout << "saving to " << actualfilename << "\t"; + } currframenum=(int)(*((int*)latestData)); - cout << "saving to " << actualfilename << "\t" - "packet loss " << fixed << setprecision(4) << ((currframenum-prevframenum-(2*framesInFile))/(double)(2*framesInFile))*100.000 << "%\t\t" + cout << "packet loss " << fixed << setprecision(4) << ((currframenum-prevframenum-(2*framesInFile))/(double)(2*framesInFile))*100.000 << "%\t\t" "framenum " << currframenum << "\t\t" "p " << prevframenum << endl; - //start writing in new file - sfilefd = fopen((const char *) (actualfilename), "w"); prevframenum=currframenum; framesInFile = 0; } @@ -368,7 +385,8 @@ int slsReceiverFunctionList::startWriting(){ totalFramesCaught++; memcpy(latestData,dataWriteFrame->buffer,BUFFER_SIZE); //cout<<"list write \t index:"<<(int)(*(int*)latestData)<buffer, 1, dataWriteFrame->rc, sfilefd); + if(enableFileWrite) + fwrite(dataWriteFrame->buffer, 1, dataWriteFrame->rc, sfilefd); framesInFile++; delete dataWriteFrame->buffer; delete dataWriteFrame; @@ -378,9 +396,9 @@ int slsReceiverFunctionList::startWriting(){ } cout << "Total Frames Caught:"<< totalFramesCaught << endl; - //delete latestData; //close file - fclose(sfilefd); + if(sfilefd) + fclose(sfilefd); #ifdef VERBOSE cout << "sfield:" << (int)sfilefd << endl; diff --git a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h index d23cae4fe..b09518f6f 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h +++ b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h @@ -105,6 +105,13 @@ public: */ int setFileIndex(int i); + /** + * Set enable file write + * @param i file write enable + * Returns file write enable + */ + int setEnableFileWrite(int i); + /** * Resets the Total Frames Caught * This is how the receiver differentiates between entire acquisitions @@ -169,6 +176,9 @@ private: static const int MAX_FRAMES_PER_FILE = 20000; + /** File write enable */ + int enableFileWrite; + /** Complete File name */ char savefilename[MAX_STR_LENGTH]; diff --git a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp index 7449fa0ce..4e15c3300 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp +++ b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp @@ -125,6 +125,7 @@ int slsReceiverFuncs::function_table(){ flist[F_GET_FRAME_INDEX] = &slsReceiverFuncs::get_frame_index; flist[F_RESET_FRAMES_CAUGHT] = &slsReceiverFuncs::reset_frames_caught; flist[F_READ_FRAME] = &slsReceiverFuncs::read_frame; + flist[F_ENABLE_FILE_WRITE] = &slsReceiverFuncs::enable_file_write; //General Functions flist[F_LOCK_SERVER] = &slsReceiverFuncs::lock_receiver; @@ -758,6 +759,56 @@ int slsReceiverFuncs::read_frame(){ +int slsReceiverFuncs::enable_file_write(){ + ret=OK; + int retval=-1; + int enable; + strcpy(mess,"Could not set/get enable file write\n"); + + + // receive arguments + if(socket->ReceiveDataOnly(&enable,sizeof(enable)) < 0 ){ + strcpy(mess,"Error reading from socket\n"); + ret = FAIL; + } + + // execute action if the arguments correctly arrived +#ifdef SLS_RECEIVER_FUNCTION_LIST + if (ret==OK) { + if (lockStatus==1 && socket->differentClients==1){//necessary??? + sprintf(mess,"Receiver locked by %s\n", socket->lastClientIP); + ret=FAIL; + } + else{ + retval=slsReceiverList->setEnableFileWrite(enable); + if((enable!=-1)&&(enable!=retval)) + ret=FAIL; + } + } +#endif + + if(ret==OK && socket->differentClients){ + cout << "Force update" << endl; + ret=FORCE_UPDATE; + } + + // send answer + socket->SendDataOnly(&ret,sizeof(ret)); + if(ret==FAIL) + socket->SendDataOnly(mess,sizeof(mess)); + socket->SendDataOnly(&retval,sizeof(retval)); + + //return ok/fail + return ret; +} + + + + + + + + int slsReceiverFuncs::lock_receiver() { ret=OK; int lock; diff --git a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h index 8cd21d9fb..852c4ccd8 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h +++ b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h @@ -77,6 +77,9 @@ public: /** Reads Frame/ buffer */ int read_frame(); + /** Enable File Write*/ + int enable_file_write(); + //General Functions /** Locks Receiver */ int lock_receiver(); @@ -99,6 +102,8 @@ public: /** Execute command */ int exec_command(); + + //private: /** Socket */