From 8b833b0f7e92ca1fbd962c25d74647feb2b41fe5 Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Tue, 25 Mar 2014 15:32:12 +0000 Subject: [PATCH] removed salas code for the time being, implemented overwrite, fixed prob of communciating between detector and receiver for settimer git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@803 951219d9-93cf-4727-9268-0efd64621fa3 --- slsDetectorSoftware/commonFiles/error_defs.h | 2 +- .../commonFiles/sls_detector_defs.h | 5 +- .../commonFiles/sls_detector_funcs.h | 4 +- .../EigerHighLevelFunctions.c | 4 +- .../bin/eigerDetectorServer | Bin 134397 -> 128334 bytes .../slsDetectorFunctionList.c | 7 +- .../multiSlsDetector/multiSlsDetector.cpp | 35 +++++++ .../multiSlsDetector/multiSlsDetector.h | 7 ++ .../slsDetector/slsDetector.cpp | 96 ++++++++++++------ slsDetectorSoftware/slsDetector/slsDetector.h | 7 ++ .../slsDetector/slsDetectorCommand.cpp | 45 +++++++- .../slsDetector/slsDetectorCommand.h | 2 + .../slsDetector/slsDetectorUtils.h | 9 +- .../slsDetectorAnalysis/postProcessing.h | 1 + .../slsReceiver/eigerReceiver.cpp | 15 ++- .../slsReceiver/eigerReceiver.h | 13 +++ .../slsReceiver/slsReceiverFunctionList.cpp | 39 ++++++- .../slsReceiver/slsReceiverFunctionList.h | 14 ++- .../slsReceiver/slsReceiver_funcs.cpp | 58 +++++++++++ .../slsReceiver/slsReceiver_funcs.h | 3 + 20 files changed, 314 insertions(+), 52 deletions(-) diff --git a/slsDetectorSoftware/commonFiles/error_defs.h b/slsDetectorSoftware/commonFiles/error_defs.h index 3703be979..b0696901c 100644 --- a/slsDetectorSoftware/commonFiles/error_defs.h +++ b/slsDetectorSoftware/commonFiles/error_defs.h @@ -86,7 +86,7 @@ public: retval.append("Could not create UDP socket to start receiver\n"); if(slsErrorMask&COULDNOT_CREATE_FILE) - retval.append("Could not create file to start receiver.\nCheck permissions of output directory\n"); + retval.append("Could not create file to start receiver.\nCheck permissions of output directory or the overwrite flag\n"); if(slsErrorMask&COULDNOT_ENABLE_COMPRESSION) retval.append("Could not enable/disable data compression in receiver.\nThread creation failed or recompile code with MYROOT1 flag.\n"); diff --git a/slsDetectorSoftware/commonFiles/sls_detector_defs.h b/slsDetectorSoftware/commonFiles/sls_detector_defs.h index a182a381c..dd979f220 100755 --- a/slsDetectorSoftware/commonFiles/sls_detector_defs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -494,8 +494,9 @@ enum correctionFlags { FLAT_FIELD_CORRECTION, /**< data are flat field corrected */ RATE_CORRECTION, /**< data are rate corrected */ ANGULAR_CONVERSION,/**< angular conversion is calculated */ - WRITE_FILE, - I0_NORMALIZATION + WRITE_FILE, /**< file write enable */ + I0_NORMALIZATION, + OVERWRITE_FILE /**< file over write enable */ }; /** port type */ enum portType { diff --git a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h index 8801c9103..23ae01d29 100644 --- a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h @@ -138,7 +138,9 @@ enum { F_ENABLE_COMPRESSION, /**< enable compression in receiver */ - F_SET_DETECTOR_HOSTNAME /**< set detector hostname in receiver */ + F_SET_DETECTOR_HOSTNAME, /**< set detector hostname in receiver */ + + F_ENABLE_OVERWRITE /**< set overwrite flag in receiver */ /* Always append functions hereafter!!! */ }; diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c index 0584e6266..9393ab611 100644 --- a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c +++ b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c @@ -35,8 +35,8 @@ unsigned int eigergetphotonenergy = 8000; unsigned int EigerGetPhotonEnergy(){return eigergetphotonenergy;} /* for later */ int eigernumberofexposureseries = 1; -unsigned int EigerGetNumberOfExposureSeries(){return eigernumberofexposureseries;} -int EigerSetNumberOfExposureSeries(unsigned int i){eigernumberofexposureseries = i;} +int EigerGetNumberOfExposureSeries(){return eigernumberofexposureseries;} +int EigerSetNumberOfExposureSeries(int i){eigernumberofexposureseries = i;return 1;} diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 813dbe43f3b990ff206acdff4fd4180c919a9666..a7fc22c8d7ce7117b8ca2807a7af0b4a4aff3d30 100755 GIT binary patch delta 28979 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 CmFp(} diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 45ad8ffee..9aaaa50f8 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -144,7 +144,10 @@ int setDAC(enum detDacIndex ind, int val, int imod){ char iname[10]; strcpy(iname,EigerGetDACName((int)ind)); //#ifdef VERBOSE - printf("Setting dac %d: %s to %d mV\n",ind, iname,val); + if(val >= 0) + printf("Setting dac %d: %s to %d mV\n",ind, iname,val); + else + printf("Getting dac %d: %s\n",ind, iname); //#endif if(val >= 0) EigerSetDAC(iname,val/1000); @@ -267,7 +270,7 @@ int64_t setTimer(enum timerIndex ind, int64_t val){ if(val >= 0){ printf(" Setting exp time: %fs\n",val/(1E9)); EigerSetExposureTime(val/(1E9)); - }return EigerGetExposureTime(); + }return (EigerGetExposureTime()*(1E9)); case FRAME_PERIOD: if(val >= 0){ printf(" Setting acq period: %fs\n",val/(1E9)); diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 5b52c58c9..0a3713926 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -144,6 +144,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) /** set correction mask to 0*/ thisMultiDetector->correctionMask=1<correctionMask|=(1<tDead=0; /** sets bad channel list file to none */ @@ -4620,6 +4621,24 @@ int multiSlsDetector::enableWriteToFile(int enable){ +int multiSlsDetector::overwriteFile(int enable){ + int ret=-100, ret1; + + for (int idet=0; idetnumberOfDetectors; idet++) { + if (detectors[idet]) { + ret1=detectors[idet]->overwriteFile(enable); + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1< #include #include +#include #include "svnInfoLib.h" @@ -3482,7 +3483,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ #ifdef VERBOSE - std::cout<< "Setting timer "<< index << " to " << t << "ns" << std::endl; + std::cout<< "Setting timer "<< index << " to " << t << "ns/value" << std::endl; #endif if (thisDetector->onlineFlag==ONLINE_FLAG) { if (connectControl() == OK){ @@ -3496,7 +3497,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ setErrorMask((getErrorMask())|(DETECTOR_TIMER_VALUE_NOT_SET)); } else { controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); - thisDetector->timerValue[index]=retval; + thisDetector->timerValue[index]=retval; } controlSocket->Disconnect(); if (ret==FORCE_UPDATE) { @@ -3534,7 +3535,6 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ - //send acquisiton period/frame number to receiver if((index==FRAME_NUMBER)||(index==FRAME_PERIOD)) { @@ -3545,14 +3545,16 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ if(t == -1) args[1] = -1; + if(index==FRAME_NUMBER){ #ifdef VERBOSE - std::cout << "Sending/Getting number of frames to/from receiver " << retval << std::endl; + + std::cout << "Setting/Getting number of frames " << index <<" to/from receiver " << args[1] << std::endl; #endif args[0] = FRAME_NUMBER; }else{ #ifdef VERBOSE - std::cout << "Sending/Getting acquisition period to/from receiver " << retval << std::endl; + std::cout << "Setting/Getting acquisition period " << index << " to/from receiver " << args[1] << std::endl; #endif args[0] = FRAME_PERIOD; //if acquisition period is zero, then #frames/buffer depends on exposure time and not acq period @@ -3560,22 +3562,26 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ args[1] = timerValue[ACQUISITION_TIME]; } + if (connectData() == OK) ret=thisReceiver->sendIntArray(fnum,ut,args); if((ut != retval)|| (ret==FAIL)){ ret = FAIL; if(index==FRAME_PERIOD){ - cout << "ERROR:Acquisition Period in receiver set incorrectly to " << ut << " instead of " << retval << endl; - setErrorMask((getErrorMask())|(RECEIVER_ACQ_PERIOD_NOT_SET)); + //exptime sent if acq period = 0 + if(retval){ + cout << "ERROR:Acquisition Period in receiver set incorrectly to " << ut << " instead of " << retval << endl; + setErrorMask((getErrorMask())|(RECEIVER_ACQ_PERIOD_NOT_SET)); + } }else{ cout << "ERROR:Number of Frames in receiver set incorrectly to " << ut << " instead of " << retval << endl; setErrorMask((getErrorMask())|(RECEIVER_FRAME_NUM_NOT_SET)); } } + if(ret==FORCE_UPDATE) updateReceiver(); } - } } return thisDetector->timerValue[index]; @@ -4873,39 +4879,38 @@ char* slsDetector::setReceiver(string receiverIP){ if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE - std::cout << "Setting up receiver with" << endl << - "file path:" << fileIO::getFilePath() << endl << - "file name:" << fileIO::getFileName() << endl << - "write enable:" << parentDet->enableWriteToFileMask(); - if(thisDetector->myDetectorType != EIGER){ - std::cout << "file index:" << fileIO::getFileIndex() << endl << - "frame index needed:" << ((setTimer(FRAME_NUMBER,-1)*setTimer(CYCLES_NUMBER,-1))>1) << endl << - "frame period:" << setTimer(FRAME_PERIOD,-1) ; - } - std::cout << endl; + std::cout << "Setting up receiver with" << endl; + std::cout << "file path:" << fileIO::getFilePath() << endl; + std::cout << "file name:" << fileIO::getFileName() << endl; + std::cout << "file index:" << fileIO::getFileIndex() << endl; + std::cout << "write enable:" << parentDet->enableWriteToFileMask() << endl; + std::cout << "overwrite enable:" << parentDet->enableOverwriteMask() << endl; + std::cout << "frame index needed:" << ((thisDetector->timerValue[FRAME_NUMBER]*thisDetector->timerValue[CYCLES_NUMBER])>1) << endl; + std::cout << "frame period:" << thisDetector->timerValue[FRAME_PERIOD] << endl; + std::cout << "frame number:" << thisDetector->timerValue[FRAME_NUMBER] << endl; + std::cout << "dynamic range:" << thisDetector->dynamicRange << endl << endl; + #endif if(thisDetector->myDetectorType == EIGER) setDetectorHostname(); setFilePath(fileIO::getFilePath()); setFileName(fileIO::getFileName()); + setFileIndex(fileIO::getFileIndex()); enableWriteToFile(parentDet->enableWriteToFileMask()); + overwriteFile(parentDet->enableOverwriteMask()); + if ((thisDetector->timerValue[FRAME_NUMBER]*thisDetector->timerValue[CYCLES_NUMBER])>1) + setFrameIndex(0); + else + setFrameIndex(-1); + + setTimer(FRAME_PERIOD,thisDetector->timerValue[FRAME_PERIOD]); + setTimer(FRAME_NUMBER,thisDetector->timerValue[FRAME_NUMBER]); + setDynamicRange(thisDetector->dynamicRange); + //set scan tag if(thisDetector->myDetectorType != EIGER){ - setFileIndex(fileIO::getFileIndex()); - if ((setTimer(FRAME_NUMBER,-1)*setTimer(CYCLES_NUMBER,-1))>1) - setFrameIndex(0); - else - setFrameIndex(-1); - - setTimer(FRAME_PERIOD,thisDetector->timerValue[FRAME_PERIOD]); setUDPConnection(); } - - else{ - setTimer(FRAME_NUMBER,thisDetector->timerValue[FRAME_NUMBER]); - setDynamicRange(thisDetector->dynamicRange); - } - } return thisDetector->receiver_hostname; @@ -6448,6 +6453,35 @@ int slsDetector::enableWriteToFile(int enable){ +int slsDetector::overwriteFile(int enable){ + int fnum=F_ENABLE_OVERWRITE; + int ret = FAIL; + int retval=-1; + int arg = enable; + + + if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){ + if(enable>=0) + parentDet->enableOverwriteMask(enable); + } + + else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ +#ifdef VERBOSE + std::cout << "Sending enable file write to receiver " << arg << std::endl; +#endif + if (connectData() == OK) + ret=thisReceiver->sendInt(fnum,retval,arg); + if(ret!=FAIL) + parentDet->enableOverwriteMask(retval); + if(ret==FORCE_UPDATE) + updateReceiver(); + } + + return parentDet->enableOverwriteMask(); +} + + + int slsDetector::setFrameIndex(int index){ int fnum=F_SET_FRAME_INDEX; diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 4abfd391e..e707d7825 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -1549,6 +1549,13 @@ class slsDetector : public slsDetectorUtils, public energyConversion { */ int enableWriteToFile(int enable=-1); + /** + Sets/Gets file overwrite enable + @param enable 1 or 0 to set/reset file overwrite enable + /returns file overwrite enable + */ + int overwriteFile(int enable=-1); + /** * set frame index to 0 or -1 diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index 3e4393720..e3f2b42f5 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -208,6 +208,9 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) { descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdEnablefwrite; i++; + descrToFuncMap[i].m_pFuncName="overwrite"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdOverwrite; + i++; descrToFuncMap[i].m_pFuncName="currentfname"; //OK descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdFileName; @@ -1565,15 +1568,15 @@ string slsDetectorCommand::helpFileName(int narg, char *args[], int action){ } -//enable file write + string slsDetectorCommand::cmdEnablefwrite(int narg, char *args[], int action){ int i; char ans[100]; if (action==HELP_ACTION) { - return helpFileName(narg, args, action); - } + return helpEnablefwrite(narg, args, action); + } if (action==PUT_ACTION) { if (sscanf(args[1],"%d",&i)) myDet->enableWriteToFile(i); @@ -1597,6 +1600,40 @@ string slsDetectorCommand::helpEnablefwrite(int narg, char *args[], int action){ return os.str(); } + +string slsDetectorCommand::cmdOverwrite(int narg, char *args[], int action){ + + int i; + char ans[100]; + + if (action==HELP_ACTION) { + return helpOverwrite(narg, args, action); + } + if (action==PUT_ACTION) { + if (sscanf(args[1],"%d",&i)) + myDet->overwriteFile(i); + else + return string("could not decode overwrite"); + + + } + sprintf(ans,"%d",myDet->overwriteFile()); + return string(ans); +} + + + +string slsDetectorCommand::helpOverwrite(int narg, char *args[], int action){ + ostringstream os; + if (action==GET_ACTION || action==HELP_ACTION) + os << string("When Enabled overwrites files\n"); + if (action==PUT_ACTION || action==HELP_ACTION) + os << string(" i \t should be 1 or 0 or -1\n"); + return os.str(); +} + + + string slsDetectorCommand::cmdFileIndex(int narg, char *args[], int action){ char ans[100]; int i; @@ -3304,7 +3341,7 @@ string slsDetectorCommand::helpDAC(int narg, char *args[], int action) { ostringstream os; if (action==PUT_ACTION || action==HELP_ACTION) { - os << "vthreshold dacu\t sets the detector threshold in dac units (0-1024). The energy is approx 800-15*keV" << std::endl; + os << "vthreshold dacu\t sets the detector threshold in dac units (0-1024) or mV. The energy is approx 800-15*keV" << std::endl; os << std::endl; os << "vcalibration " << "dacu\t sets the calibration pulse amplitude in dac units (0-1024)." << std::endl; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.h b/slsDetectorSoftware/slsDetector/slsDetectorCommand.h index 54d994350..f6a791eab 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.h @@ -82,6 +82,7 @@ class slsDetectorCommand : public virtual slsDetectorDefs { static string helpCounter(int narg, char *args[], int action); static string helpADC(int narg, char *args[], int action); static string helpEnablefwrite(int narg, char *args[], int action); + static string helpOverwrite(int narg, char *args[], int action); static string helpReceiver(int narg, char *args[], int action); @@ -152,6 +153,7 @@ class slsDetectorCommand : public virtual slsDetectorDefs { string cmdCounter(int narg, char *args[], int action); string cmdADC(int narg, char *args[], int action); string cmdEnablefwrite(int narg, char *args[], int action); + string cmdOverwrite(int narg, char *args[], int action); string cmdReceiver(int narg, char *args[], int action); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h index ea8afd5b0..49b176cf3 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h @@ -643,6 +643,14 @@ virtual int* readFrameFromReceiver(char* fName, int &fIndex)=0; */ virtual int exitReceiver()=0; +/** + Sets/Gets file overwrite enable + @param enable 1 or 0 to set/reset file overwrite enable + /returns file overwrite enable +*/ +virtual int overwriteFile(int enable=-1)=0; + + /** Sets/Gets receiver file write enable @param enable 1 or 0 to set/reset file write enable @@ -650,7 +658,6 @@ virtual int exitReceiver()=0; */ virtual int enableWriteToFile(int enable=-1)=0; - /** Starts acquisition, calibrates pedestal and writes to fpga /returns number of frames */ diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h index 7de4eb7b7..1e70fbd5d 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h @@ -103,6 +103,7 @@ class postProcessing : public angularConversion, public fileIO, public badChanne int enableWriteToFileMask(int i=-1) {if (i>0) ((*correctionMask)|=(1<>WRITE_FILE) ;}; + int enableOverwriteMask(int i=-1) {if (i>0) ((*correctionMask)|=(1<>OVERWRITE_FILE) ;}; int setAngularCorrectionMask(int i=-1){if (i==0) (*correctionMask)&=~(1<< ANGULAR_CONVERSION); if (i>0) (*correctionMask)|=(1<< ANGULAR_CONVERSION); return (((*correctionMask)&(1<< ANGULAR_CONVERSION))>>ANGULAR_CONVERSION);}; diff --git a/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp b/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp index c30915292..f10245223 100644 --- a/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp +++ b/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp @@ -36,12 +36,14 @@ struct EigerReceiverScanConfiguration { int scanTag; int numberOfFrames; bool doFileWrite; + bool doFileOverWrite; EigerReceiverScanConfiguration(): dynamicRange(-1), scanTag(-1), numberOfFrames(-1), - doFileWrite(false) {}; + doFileWrite(false), + doFileOverWrite(false){}; }; class EigerReceiverImplementation: public EigerReceiver { @@ -163,6 +165,11 @@ public: return(scan_config.doFileWrite); } + int getEnableOverwrite() const { + DEBUG("getEnableOverwrite() returns " << scan_config.doFileOverWrite); + return(scan_config.doFileOverWrite); + } + slsDetectorDefs::runStatus getStatus() const { DEBUG("getStatus(): return " <setEnableOverwrite(i); + else + overwrite=i; + } + if(myDetectorType == EIGER) + return receiver->getEnableOverwrite(); + else + return overwrite; + +} @@ -373,9 +388,17 @@ int32_t slsReceiverFunctionList::setNumberOfFrames(int32_t fnum){ } int32_t slsReceiverFunctionList::setScanTag(int32_t stag){ - if(stag >= 0) - receiver->setScanTag(stag); - return receiver->getScanTag(); + if(stag >= 0){ + if(myDetectorType == EIGER) + receiver->setScanTag(stag); + else + scanTag = stag; + } + + if(myDetectorType == EIGER) + return receiver->getScanTag(); + else + return scanTag; } int32_t slsReceiverFunctionList::setDynamicRange(int32_t dr){ @@ -437,7 +460,8 @@ int64_t slsReceiverFunctionList::setAcquisitionPeriod(int64_t index){ if(index >= 0){ if(index != acquisitionPeriod){ acquisitionPeriod = index; - setupFifoStructure(); + if(myDetectorType != EIGER) + setupFifoStructure(); } } return acquisitionPeriod; @@ -982,7 +1006,12 @@ int slsReceiverFunctionList::createNewFile(){ sfilefd = NULL; } //open file - if (NULL == (sfilefd = fopen((const char *) (savefilename), "w"))){ + if(!overwrite){ + if (NULL == (sfilefd = fopen((const char *) (savefilename), "wx"))){ + cout << "Error: Could not create new file " << savefilename << endl; + return FAIL; + } + }else if (NULL == (sfilefd = fopen((const char *) (savefilename), "w"))){ cout << "Error: Could not create file " << savefilename << endl; return FAIL; } diff --git a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h index 810d115b1..96826cf27 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h +++ b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.h @@ -141,8 +141,12 @@ public: */ int setEnableFileWrite(int i); - - + /** + * Enable/disable overwrite + * @param i enable + * Returns enable over write + */ + int enableOverwrite(int i); @@ -377,6 +381,9 @@ private: /** File write enable */ int enableFileWrite; + /** File over write enable */ + int overwrite; + /** Complete File name */ char savefilename[MAX_STR_LENGTH]; @@ -389,6 +396,9 @@ private: /** File Index */ int fileIndex; + /** scan tag */ + int scanTag; + /** if frame index required in file name */ int frameIndexNeeded; diff --git a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp index 3400c22c5..730e88906 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp +++ b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.cpp @@ -321,6 +321,9 @@ int slsReceiverFuncs::function_table(){ flist[F_ENABLE_COMPRESSION] = &slsReceiverFuncs::enable_compression; flist[F_SET_DETECTOR_HOSTNAME] = &slsReceiverFuncs::set_detector_hostname; flist[F_SET_DYNAMIC_RANGE] = &slsReceiverFuncs::set_dynamic_range; + flist[F_ENABLE_OVERWRITE] = &slsReceiverFuncs::enable_overwrite; + + //General Functions flist[F_LOCK_SERVER] = &slsReceiverFuncs::lock_receiver; @@ -1657,6 +1660,61 @@ int slsReceiverFuncs::set_dynamic_range() { +int slsReceiverFuncs::enable_overwrite() { + ret=OK; + int retval=-1; + int index; + strcpy(mess,"Could not enable/disable overwrite\n"); + + + // receive arguments + if(socket->ReceiveDataOnly(&index,sizeof(index)) < 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){ + sprintf(mess,"Receiver locked by %s\n", socket->lastClientIP); + ret=FAIL; + } + else + retval=slsReceiverList->enableOverwrite(index); + } +#ifdef VERBOSE + if(ret!=FAIL) + cout << "overwrite:" << retval << endl; + else + cout << mess << endl; +#endif +#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; +} + + + + + + + + + + diff --git a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h index 9b52dfbf4..5f68e5054 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h +++ b/slsDetectorSoftware/slsReceiver/slsReceiver_funcs.h @@ -163,6 +163,9 @@ public: /** set dynamic range */ int set_dynamic_range(); + /** enable overwrite */ + int enable_overwrite(); + //General Functions /** Locks Receiver */