From b0cffcd57018f2bec3fa1251f8c9afaa1a490f7b Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 30 Apr 2019 12:13:28 +0200 Subject: [PATCH] master file option, adcdisable changed to adcenable --- .../include/multiSlsDetector.h | 28 +++++++- slsDetectorSoftware/include/slsDetector.h | 26 ++++++- slsDetectorSoftware/src/multiSlsDetector.cpp | 16 +++++ slsDetectorSoftware/src/slsDetector.cpp | 21 ++++++ .../src/slsDetectorCommand.cpp | 67 ++++++++++++------- slsReceiverSoftware/include/BinaryFile.h | 3 +- slsReceiverSoftware/include/DataProcessor.h | 6 +- slsReceiverSoftware/include/File.h | 3 +- slsReceiverSoftware/include/HDF5File.h | 3 +- .../include/slsReceiverImplementation.h | 14 ++++ .../include/slsReceiverTCPIPInterface.h | 3 + slsReceiverSoftware/src/BinaryFile.cpp | 4 +- slsReceiverSoftware/src/DataProcessor.cpp | 5 +- slsReceiverSoftware/src/HDF5File.cpp | 4 +- .../src/slsReceiverImplementation.cpp | 16 ++++- .../src/slsReceiverTCPIPInterface.cpp | 34 ++++++++++ slsSupportLib/include/sls_detector_funcs.h | 2 + 17 files changed, 216 insertions(+), 39 deletions(-) diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index f59f6e1d7..812c61829 100755 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -1735,12 +1735,32 @@ class multiSlsDetector : public virtual slsDetectorDefs { /** * Sets/Gets receiver file write enable - * @param enable 1 or 0 to set/reset file write enable + * @param value 1 or 0 to set/reset file write enable * @param detPos -1 for all detectors in list or specific detector position * @returns file write enable */ int setFileWrite(bool value, int detPos = -1); + + /** + * Gets file write enable + * @returns file write enable + */ int getFileWrite(int detPos = -1) const; + + /** + * Sets/Gets receiver master file write enable + * @param value 1 or 0 to set/reset master file write enable + * @param detPos -1 for all detectors in list or specific detector position + * @returns master file write enable + */ + int setMasterFileWrite(bool value, int detPos = -1); + + /** + * Gets master file write enable + * @param detPos -1 for all detectors in list or specific detector position + * @returns master file write enable + */ + int getMasterFileWrite(int detPos = -1) const; /** * Sets/Gets file overwrite enable @@ -1749,6 +1769,12 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @returns file overwrite enable */ int setFileOverWrite(bool enable, int detPos = -1); + + /** + * Gets file over write enable + * @param detPos -1 for all detectors in list or specific detector position + * @returns file over write enable + */ int getFileOverWrite(int detPos = -1) const; /** diff --git a/slsDetectorSoftware/include/slsDetector.h b/slsDetectorSoftware/include/slsDetector.h index 22891c413..c3b92c3bc 100755 --- a/slsDetectorSoftware/include/slsDetector.h +++ b/slsDetectorSoftware/include/slsDetector.h @@ -16,7 +16,7 @@ class multiSlsDetector; class ServerInterface; class MySocketTCP; -#define SLS_SHMVERSION 0x190426 +#define SLS_SHMVERSION 0x190430 #define NCHIPSMAX 10 #define NCHANSMAX 65536 #define NDACSMAX 16 @@ -237,10 +237,13 @@ struct sharedSlsDetector { /** frames per file */ int rxFramesPerFile; - /** filewriteenable */ + /** file write enable */ bool rxFileWrite; - /** overwriteenable */ + /** master file write enable */ + bool rxMasterFileWrite; + + /** overwrite enable */ bool rxFileOverWrite; }; @@ -1637,8 +1640,25 @@ class slsDetector : public virtual slsDetectorDefs{ */ bool setFileWrite(bool value); + /** + * Gets file write enable + * @returns file write enable + */ bool getFileWrite() const; + /** + * Sets/Gets receiver master file write enable + * @param value 1 or 0 to set/reset master file write enable + * @returns master file write enable + */ + bool setMasterFileWrite(bool value); + + /** + * Gets master file write enable + * @returns master file write enable + */ + bool getMasterFileWrite() const; + /** * Sets file overwrite in the receiver * @param enable true or false to set/reset file overwrite enable diff --git a/slsDetectorSoftware/src/multiSlsDetector.cpp b/slsDetectorSoftware/src/multiSlsDetector.cpp index 1d012056d..c1d5696e1 100755 --- a/slsDetectorSoftware/src/multiSlsDetector.cpp +++ b/slsDetectorSoftware/src/multiSlsDetector.cpp @@ -3500,6 +3500,22 @@ int multiSlsDetector::getFileWrite(int detPos) const{ return sls::minusOneIfDifferent(r); } +int multiSlsDetector::setMasterFileWrite(bool value, int detPos) { + if (detPos >= 0) { + return detectors[detPos]->setMasterFileWrite(value); + } + auto r = parallelCall(&slsDetector::setMasterFileWrite, value); + return sls::minusOneIfDifferent(r); +} + +int multiSlsDetector::getMasterFileWrite(int detPos) const{ + if (detPos >= 0) { + return detectors[detPos]->getMasterFileWrite(); + } + auto r = parallelCall(&slsDetector::getMasterFileWrite); + return sls::minusOneIfDifferent(r); +} + int multiSlsDetector::setFileOverWrite(bool enable, int detPos) { if (detPos >= 0) { return detectors[detPos]->setFileOverWrite(enable); diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index 39d13836c..1a72084b6 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -390,6 +390,7 @@ void slsDetector::initializeDetectorStructure(detectorType type) { break; } shm()->rxFileWrite = true; + shm()->rxMasterFileWrite = true; shm()->rxFileOverWrite = true; // get the detector parameters based on type @@ -1873,6 +1874,7 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) { << "\nr_discardpolicy:" << shm()->rxFrameDiscardMode << "\nr_padding:" << shm()->rxFramePadding << "\nwrite enable:" << shm()->rxFileWrite + << "\nmaster write enable:" << shm()->rxMasterFileWrite << "\noverwrite enable:" << shm()->rxFileOverWrite << "\nframe index needed:" << ((shm()->timerValue[FRAME_NUMBER] * @@ -1912,6 +1914,7 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) { setReceiverFramesDiscardPolicy(shm()->rxFrameDiscardMode); setPartialFramesPadding(shm()->rxFramePadding); setFileWrite(shm()->rxFileWrite); + setMasterFileWrite(shm()->rxMasterFileWrite); setFileOverWrite(shm()->rxFileOverWrite); setTimer(FRAME_PERIOD, shm()->timerValue[FRAME_PERIOD]); setTimer(FRAME_NUMBER, shm()->timerValue[FRAME_NUMBER]); @@ -3236,6 +3239,10 @@ int slsDetector::updateCachedReceiverVariables() const { n += receiver.receiveData(&i32, sizeof(i32)); shm()->rxFileWrite = static_cast(i32); + // master file write enable + n += receiver.receiveData(&i32, sizeof(i32)); + shm()->rxMasterFileWrite = static_cast(i32); + // file overwrite enable n += receiver.receiveData(&i32, sizeof(i32)); shm()->rxFileOverWrite = static_cast(i32); @@ -3508,6 +3515,20 @@ bool slsDetector::setFileWrite(bool value) { bool slsDetector::getFileWrite() const { return shm()->rxFileWrite; } +bool slsDetector::setMasterFileWrite(bool value) { + int arg = static_cast(value); + int retval = -1; + FILE_LOG(logDEBUG1) << "Sending enable master file write to receiver: " << arg; + if (shm()->rxOnlineFlag == ONLINE_FLAG) { + sendToReceiver(F_ENABLE_RECEIVER_MASTER_FILE_WRITE, arg, retval); + FILE_LOG(logDEBUG1) << "Receiver master file write enable: " << retval; + shm()->rxMasterFileWrite = static_cast(retval); + } + return getMasterFileWrite(); +} + +bool slsDetector::getMasterFileWrite() const { return shm()->rxMasterFileWrite; } + bool slsDetector::setFileOverWrite(bool value) { int arg = static_cast(value); int retval = -1; diff --git a/slsDetectorSoftware/src/slsDetectorCommand.cpp b/slsDetectorSoftware/src/slsDetectorCommand.cpp index dd32ef323..8b0016b6d 100755 --- a/slsDetectorSoftware/src/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/src/slsDetectorCommand.cpp @@ -1541,12 +1541,19 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) { ++i; /*! \page output - - fileformat sets/gets the file format for data in receiver. Options: [binary, hdf5]. \c Returns \c (string) + - fileformat [i] sets/gets the file format for data in receiver. Options: [binary, hdf5]. \c Returns \c (string) */ descrToFuncMap[i].m_pFuncName = "fileformat"; descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdFileName; ++i; + /*! \page output + - masterfile [i] sets/gets the master file write enable in receiver. \c Returns \c (int) + */ + descrToFuncMap[i].m_pFuncName = "masterfile"; + descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdEnablefwrite; + ++i; + /* communication configuration */ /*! \page network Network @@ -1921,9 +1928,9 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) { ++i; /*! \page prototype - - adcdisable [mask] Sets/gets ADC disable mask (8 digits hex format) + - adcenable [mask] Sets/gets ADC enable mask (8 digits hex format) */ - descrToFuncMap[i].m_pFuncName = "adcdisable"; + descrToFuncMap[i].m_pFuncName = "adcenable"; descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdPattern; ++i; @@ -2599,22 +2606,41 @@ std::string slsDetectorCommand::cmdEnablefwrite(int narg, char *args[], int acti if (action == HELP_ACTION) { return helpEnablefwrite(action); } - if (action == PUT_ACTION) { - if (sscanf(args[1], "%d", &i)) - myDet->setFileWrite(i, detPos); - else - return std::string("could not decode enable file write"); + if (cmd == "enablefwrite") { + if (action == PUT_ACTION) { + if (sscanf(args[1], "%d", &i)) + myDet->setFileWrite(i, detPos); + else + return std::string("could not decode enable file write"); + } + sprintf(ans, "%d", myDet->getFileWrite(detPos)); + return std::string(ans); } - sprintf(ans, "%d", myDet->getFileWrite(detPos)); - return std::string(ans); + + else if (cmd == "masterfile") { + if (action == PUT_ACTION) { + if (sscanf(args[1], "%d", &i)) + myDet->setMasterFileWrite(i, detPos); + else + return std::string("could not decode master file enable"); + } + sprintf(ans, "%d", myDet->getMasterFileWrite(detPos)); + return std::string(ans); + } + + else return std::string("unknown command " + cmd); } std::string slsDetectorCommand::helpEnablefwrite(int action) { std::ostringstream os; - if (action == GET_ACTION || action == HELP_ACTION) + if (action == GET_ACTION || action == HELP_ACTION) { os << std::string("enablefwrite \t When Enabled writes the data into the file\n"); - if (action == PUT_ACTION || action == HELP_ACTION) - os << std::string("enablefwrite i \t should be 1 or 0 or -1\n"); + os << std::string("masterfile \t When Enabled writes the master file\n"); + } + if (action == PUT_ACTION || action == HELP_ACTION) { + os << std::string("enablefwrite i \t should be 1 or 0\n"); + os << std::string("masterfile i \t sets the master file write enable. should be 1 or 0\n"); + } return os.str(); } @@ -5172,7 +5198,7 @@ std::string slsDetectorCommand::helpPattern(int action) { os << "patmask m \t sets the 64 bit mask (hex) applied to every pattern. Only the bits from patsetbit are selected to mask for the corresponding bit value from m mask" << std::endl; os << "patsetbit m \t selects bits (hex) of the 64 bits that the patmask will be applied to every pattern. Only the bits from m mask are selected to mask for the corresponding bit value from patmask." << std::endl; os << "adcinvert mask\t sets the adcinversion mask (hex)" << std::endl; - os << "adcdisable mask\t sets the adcdisable mask (hex)" << std::endl; + os << "adcenable mask\t sets the adcenable mask (hex)" << std::endl; } if (action == GET_ACTION || action == HELP_ACTION) { os << "pattern \t cannot get" << std::endl; @@ -5196,7 +5222,7 @@ std::string slsDetectorCommand::helpPattern(int action) { os << "patsetbit \t gets 64 bit mask (hex) of the selected bits that the patmask will be applied to every pattern. " << std::endl; os << "adcinvert \t returns the adcinversion mask " << std::endl; - os << "adcdisable \t returns the adcdisable mask " << std::endl; + os << "adcenable \t returns the adcenable mask " << std::endl; } return os.str(); } @@ -5552,24 +5578,19 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i } os << std::hex << myDet->readRegister(123, detPos) << std::dec ; //0x7b - } else if (cmd == "adcdisable") { + } else if (cmd == "adcenable") { if (action == PUT_ACTION) { uint32_t adcEnableMask = 0; if (sscanf(args[1], "%x", &adcEnableMask)) ; else - return std::string("Could not scan adcdisable reg ") + std::string(args[1]); + return std::string("Could not scan adcenable reg ") + std::string(args[1]); - // get enable mask from enable mask - adcEnableMask ^= BIT32_MASK; myDet->setADCEnableMask(adcEnableMask, detPos); } - uint32_t retval = myDet->getADCEnableMask(detPos); - // get disable mask - retval ^= BIT32_MASK; - os << std::hex << retval << std::dec; + os << std::hex << myDet->getADCEnableMask(detPos) << std::dec; } else diff --git a/slsReceiverSoftware/include/BinaryFile.h b/slsReceiverSoftware/include/BinaryFile.h index 8d9324df7..1a5f5ab28 100755 --- a/slsReceiverSoftware/include/BinaryFile.h +++ b/slsReceiverSoftware/include/BinaryFile.h @@ -58,6 +58,7 @@ class BinaryFile : private virtual slsDetectorDefs, public File, public BinaryFi /** * Create master file + * @param mfwenable master file write enable * @param en ten giga enable * @param size image size * @param nx number of pixels in x direction @@ -68,7 +69,7 @@ class BinaryFile : private virtual slsDetectorDefs, public File, public BinaryFi * @param ap acquisition period * @returns OK or FAIL */ - int CreateMasterFile(bool en, uint32_t size, + int CreateMasterFile(bool mfwenable, bool en, uint32_t size, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, uint64_t ap); diff --git a/slsReceiverSoftware/include/DataProcessor.h b/slsReceiverSoftware/include/DataProcessor.h index fd8a62b0a..d36b66712 100755 --- a/slsReceiverSoftware/include/DataProcessor.h +++ b/slsReceiverSoftware/include/DataProcessor.h @@ -29,6 +29,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { * @param f address of Fifo pointer * @param ftype pointer to file format type * @param fwenable file writer enable + * @apram mfwenable pointer to master file write enable * @param dsEnable pointer to data stream enable * @param gpEnable pointer to gap pixels enable * @param dr pointer to dynamic range @@ -40,7 +41,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { * @param sm pointer to silent mode */ DataProcessor(int ind, detectorType dtype, Fifo* f, fileFormat* ftype, - bool fwenable, bool* dsEnable, bool* gpEnable, uint32_t* dr, + bool fwenable, bool* mfwenable, bool* dsEnable, bool* gpEnable, uint32_t* dr, uint32_t* freq, uint32_t* timer, bool* fp, bool* act, bool* depaden, bool* sm); @@ -325,6 +326,9 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { /** File Write Enable */ bool fileWriteEnable; + /** Master File Write Enable */ + bool* masterFileWriteEnable; + /** Gap Pixels Enable */ bool* gapPixelsEnable; diff --git a/slsReceiverSoftware/include/File.h b/slsReceiverSoftware/include/File.h index 750c2296e..00ca02feb 100755 --- a/slsReceiverSoftware/include/File.h +++ b/slsReceiverSoftware/include/File.h @@ -121,6 +121,7 @@ class File : private virtual slsDetectorDefs { /** * Create master file + * @param mfwenable master file write enable * @param en ten giga enable * @param size image size * @param nx number of pixels in x direction @@ -131,7 +132,7 @@ class File : private virtual slsDetectorDefs { * @param ap acquisition period * @returns OK or FAIL */ - virtual int CreateMasterFile(bool en, uint32_t size, + virtual int CreateMasterFile(bool mfwenable, bool en, uint32_t size, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, uint64_t ap) { FILE_LOG(logERROR) << "This is a generic function CreateMasterFile that " diff --git a/slsReceiverSoftware/include/HDF5File.h b/slsReceiverSoftware/include/HDF5File.h index 81390c542..3d0b95c16 100755 --- a/slsReceiverSoftware/include/HDF5File.h +++ b/slsReceiverSoftware/include/HDF5File.h @@ -93,6 +93,7 @@ class HDF5File : private virtual slsDetectorDefs, public File, public HDF5FileSt /** * Create master file + * @param mfwenable master file write enable * @param en ten giga enable * @param size image size * @param nx number of pixels in x direction @@ -103,7 +104,7 @@ class HDF5File : private virtual slsDetectorDefs, public File, public HDF5FileSt * @param ap acquisition period * @returns OK or FAIL */ - int CreateMasterFile(bool en, uint32_t size, + int CreateMasterFile(bool mfwenable, bool en, uint32_t size, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, uint64_t ap); diff --git a/slsReceiverSoftware/include/slsReceiverImplementation.h b/slsReceiverSoftware/include/slsReceiverImplementation.h index 8b4c012b1..2e821fc69 100755 --- a/slsReceiverSoftware/include/slsReceiverImplementation.h +++ b/slsReceiverSoftware/include/slsReceiverImplementation.h @@ -128,6 +128,12 @@ class slsReceiverImplementation: private virtual slsDetectorDefs { */ bool getFileWriteEnable() const; + /** + * Get Master File Write Enable + * @return true if Master file write enabled, else false + */ + bool getMasterFileWriteEnable() const; + /** * Get File Over Write Enable * @return true if file over write enabled, else false @@ -426,6 +432,12 @@ class slsReceiverImplementation: private virtual slsDetectorDefs { */ void setFileWriteEnable(const bool b); + /** + * Set Master File Write Enable + * @param b true for Master file write enable, else false + */ + void setMasterFileWriteEnable(const bool b); + /** * Set File Overwrite Enable * @param b true for file overwrite enable, else false @@ -862,6 +874,8 @@ private: uint32_t framesPerFile; /** File Write enable */ bool fileWriteEnable; + /** MasterFile Write enable */ + bool masterFileWriteEnable; /** Overwrite enable */ bool overwriteEnable; diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index f7e425d02..113899d25 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -204,6 +204,9 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { /** Enable File Write*/ int enable_file_write(); + /** Enable Master File Write */ + int enable_master_file_write(); + /** enable compression */ int enable_compression(); diff --git a/slsReceiverSoftware/src/BinaryFile.cpp b/slsReceiverSoftware/src/BinaryFile.cpp index 038253c69..2ad806e86 100755 --- a/slsReceiverSoftware/src/BinaryFile.cpp +++ b/slsReceiverSoftware/src/BinaryFile.cpp @@ -113,14 +113,14 @@ int BinaryFile::WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_ } -int BinaryFile::CreateMasterFile(bool en, uint32_t size, +int BinaryFile::CreateMasterFile(bool mfwenable, bool en, uint32_t size, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, uint64_t ap) { //beginning of every acquisition numFramesInFile = 0; numActualPacketsInFile = 0; - if (master && (*detIndex==0)) { + if (mfwenable && master && (*detIndex==0)) { masterFileName = BinaryFileStatic::CreateMasterFileName(filePath, fileNamePrefix, *fileIndex); if(!(*silentMode)) { diff --git a/slsReceiverSoftware/src/DataProcessor.cpp b/slsReceiverSoftware/src/DataProcessor.cpp index a39865bd6..42ab238e7 100755 --- a/slsReceiverSoftware/src/DataProcessor.cpp +++ b/slsReceiverSoftware/src/DataProcessor.cpp @@ -24,7 +24,7 @@ const std::string DataProcessor::TypeName = "DataProcessor"; DataProcessor::DataProcessor(int ind, detectorType dtype, Fifo* f, - fileFormat* ftype, bool fwenable, + fileFormat* ftype, bool fwenable, bool* mfwenable, bool* dsEnable, bool* gpEnable, uint32_t* dr, uint32_t* freq, uint32_t* timer, bool* fp, bool* act, bool* depaden, bool* sm) : @@ -38,6 +38,7 @@ DataProcessor::DataProcessor(int ind, detectorType dtype, Fifo* f, dataStreamEnable(dsEnable), fileFormatType(ftype), fileWriteEnable(fwenable), + masterFileWriteEnable(mfwenable), gapPixelsEnable(gpEnable), dynamicRange(dr), streamingFrequency(freq), @@ -247,7 +248,7 @@ int DataProcessor::CreateNewFile(bool en, uint64_t nf, uint64_t at, uint64_t st, if (file == nullptr) return FAIL; file->CloseAllFiles(); - if (file->CreateMasterFile(en, generalData->imageSize, + if (file->CreateMasterFile(*masterFileWriteEnable, en, generalData->imageSize, generalData->nPixelsX, generalData->nPixelsY, at, st, sp, ap) == FAIL) return FAIL; diff --git a/slsReceiverSoftware/src/HDF5File.cpp b/slsReceiverSoftware/src/HDF5File.cpp index f494f48ea..ec16271c8 100755 --- a/slsReceiverSoftware/src/HDF5File.cpp +++ b/slsReceiverSoftware/src/HDF5File.cpp @@ -238,7 +238,7 @@ int HDF5File::WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_t } -int HDF5File::CreateMasterFile(bool en, uint32_t size, +int HDF5File::CreateMasterFile(bool mfwenable, bool en, uint32_t size, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, uint64_t ap) { @@ -247,7 +247,7 @@ int HDF5File::CreateMasterFile(bool en, uint32_t size, numActualPacketsInFile = 0; extNumImages = *numImages; - if (master && (*detIndex==0)) { + if (mfwenable && master && (*detIndex==0)) { virtualfd = 0; masterFileName = HDF5FileStatic::CreateMasterFileName(filePath, fileNamePrefix, *fileIndex); diff --git a/slsReceiverSoftware/src/slsReceiverImplementation.cpp b/slsReceiverSoftware/src/slsReceiverImplementation.cpp index efd67777c..e18057995 100755 --- a/slsReceiverSoftware/src/slsReceiverImplementation.cpp +++ b/slsReceiverSoftware/src/slsReceiverImplementation.cpp @@ -96,6 +96,7 @@ void slsReceiverImplementation::InitializeMembers() { fileIndex = 0; framesPerFile = 0; fileWriteEnable = true; + masterFileWriteEnable = true; overwriteEnable = true; //***acquisition parameters*** @@ -202,6 +203,11 @@ bool slsReceiverImplementation::getFileWriteEnable() const{ return fileWriteEnable; } +bool slsReceiverImplementation::getMasterFileWriteEnable() const{ + FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called"; + return masterFileWriteEnable; +} + bool slsReceiverImplementation::getOverwriteEnable() const{ FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called"; return overwriteEnable; @@ -600,6 +606,12 @@ void slsReceiverImplementation::setFileWriteEnable(const bool b) { FILE_LOG(logINFO) << "File Write Enable: " << stringEnable(fileWriteEnable); } +void slsReceiverImplementation::setMasterFileWriteEnable(const bool b) { + masterFileWriteEnable = b; + + FILE_LOG(logINFO) << "Master File Write Enable: " << stringEnable(masterFileWriteEnable); +} + void slsReceiverImplementation::setOverwriteEnable(const bool b) { FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called"; @@ -676,7 +688,7 @@ int slsReceiverImplementation::setNumberofUDPInterfaces(const int n) { listener[i]->SetGeneralData(generalData); dataProcessor.push_back(sls::make_unique(i, myDetectorType, fifo_ptr, &fileFormatType, - fileWriteEnable, &dataStreamEnable, &gapPixelsEnable, + fileWriteEnable, &masterFileWriteEnable, &dataStreamEnable, &gapPixelsEnable, &dynamicRange, &streamingFrequency, &streamingTimerInMs, &framePadding, &activated, &deactivatedPaddingEnable, &silentMode)); dataProcessor[i]->SetGeneralData(generalData); @@ -1096,7 +1108,7 @@ int slsReceiverImplementation::setDetectorType(const detectorType d) { &udpSocketBufferSize, &actualUDPSocketBufferSize, &framesPerFile, &frameDiscardMode, &activated, &deactivatedPaddingEnable, &silentMode)); dataProcessor.push_back(sls::make_unique(i, myDetectorType, fifo_ptr, &fileFormatType, - fileWriteEnable, &dataStreamEnable, &gapPixelsEnable, + fileWriteEnable, &masterFileWriteEnable, &dataStreamEnable, &gapPixelsEnable, &dynamicRange, &streamingFrequency, &streamingTimerInMs, &framePadding, &activated, &deactivatedPaddingEnable, &silentMode)); } diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index a7c9c2059..b27d638d5 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -202,6 +202,7 @@ int slsReceiverTCPIPInterface::function_table(){ flist[F_GET_RECEIVER_FRAMES_CAUGHT] = &slsReceiverTCPIPInterface::get_frames_caught; flist[F_RESET_RECEIVER_FRAMES_CAUGHT] = &slsReceiverTCPIPInterface::reset_frames_caught; flist[F_ENABLE_RECEIVER_FILE_WRITE] = &slsReceiverTCPIPInterface::enable_file_write; + flist[F_ENABLE_RECEIVER_MASTER_FILE_WRITE] = &slsReceiverTCPIPInterface::enable_master_file_write; flist[F_ENABLE_RECEIVER_OVERWRITE] = &slsReceiverTCPIPInterface::enable_overwrite; flist[F_ENABLE_RECEIVER_TEN_GIGA] = &slsReceiverTCPIPInterface::enable_tengiga; flist[F_SET_RECEIVER_FIFO_DEPTH] = &slsReceiverTCPIPInterface::set_fifo_depth; @@ -506,6 +507,10 @@ int slsReceiverTCPIPInterface::send_update() { i32=(int)receiver->getFileWriteEnable(); n += mySock->SendDataOnly(&i32, sizeof(i32)); + // master file write enable + i32=(int)receiver->getMasterFileWriteEnable(); + n += mySock->SendDataOnly(&i32, sizeof(i32)); + // file overwrite enable i32=(int)receiver->getOverwriteEnable(); n += mySock->SendDataOnly(&i32, sizeof(i32)); @@ -1275,6 +1280,35 @@ int slsReceiverTCPIPInterface::enable_file_write(){ +int slsReceiverTCPIPInterface::enable_master_file_write(){ + ret = OK; + memset(mess, 0, sizeof(mess)); + int enable = -1; + int retval = -1; + + // get args, return if socket crashed, ret is fail if receiver is not null + if (interface->Server_ReceiveArg(ret, mess, &enable, sizeof(enable), true, receiver) == FAIL) + return FAIL; + + // base object not null + if (ret == OK) { + // set + if (enable >= 0) { + // verify if receiver is unlocked and idle + if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + FILE_LOG(logDEBUG1) << "Setting Master File write enable:" << enable; + receiver->setMasterFileWriteEnable(enable); + } + } + // get + retval = receiver->getMasterFileWriteEnable(); + validate(enable, retval, std::string("set master file write enable"), DEC); + FILE_LOG(logDEBUG1) << "master file write enable:" << retval; + } + return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); +} + + int slsReceiverTCPIPInterface::enable_overwrite() { ret = OK; memset(mess, 0, sizeof(mess)); diff --git a/slsSupportLib/include/sls_detector_funcs.h b/slsSupportLib/include/sls_detector_funcs.h index b5820c268..95f7340c0 100755 --- a/slsSupportLib/include/sls_detector_funcs.h +++ b/slsSupportLib/include/sls_detector_funcs.h @@ -110,6 +110,7 @@ enum detFuncs{ F_GET_RECEIVER_FRAMES_CAUGHT, /**< gets the number of frames caught by receiver */ F_RESET_RECEIVER_FRAMES_CAUGHT, /**< resets the frames caught by receiver */ F_ENABLE_RECEIVER_FILE_WRITE, /**< sets the receiver file write */ + F_ENABLE_RECEIVER_MASTER_FILE_WRITE, /**< sets the receiver master file write */ F_ENABLE_RECEIVER_OVERWRITE, /**< set overwrite flag in receiver */ F_ENABLE_RECEIVER_TEN_GIGA, /**< enable 10Gbe in receiver */ F_SET_RECEIVER_FIFO_DEPTH, /**< set receiver fifo depth */ @@ -243,6 +244,7 @@ static const char* getFunctionNameFromEnum(enum detFuncs func) { case F_GET_RECEIVER_FRAMES_CAUGHT: return "F_GET_RECEIVER_FRAMES_CAUGHT"; case F_RESET_RECEIVER_FRAMES_CAUGHT: return "F_RESET_RECEIVER_FRAMES_CAUGHT"; case F_ENABLE_RECEIVER_FILE_WRITE: return "F_ENABLE_RECEIVER_FILE_WRITE"; + case F_ENABLE_RECEIVER_MASTER_FILE_WRITE: return "F_ENABLE_RECEIVER_MASTER_FILE_WRITE"; case F_ENABLE_RECEIVER_OVERWRITE: return "F_ENABLE_RECEIVER_OVERWRITE"; case F_ENABLE_RECEIVER_TEN_GIGA: return "F_ENABLE_RECEIVER_TEN_GIGA"; case F_SET_RECEIVER_FIFO_DEPTH: return "F_SET_RECEIVER_FIFO_DEPTH";