master file option, adcdisable changed to adcenable

This commit is contained in:
2019-04-30 12:13:28 +02:00
parent 56d1994b8c
commit b0cffcd570
17 changed files with 216 additions and 39 deletions

View File

@ -1735,12 +1735,32 @@ class multiSlsDetector : public virtual slsDetectorDefs {
/** /**
* Sets/Gets receiver file write enable * 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 * @param detPos -1 for all detectors in list or specific detector position
* @returns file write enable * @returns file write enable
*/ */
int setFileWrite(bool value, int detPos = -1); int setFileWrite(bool value, int detPos = -1);
/**
* Gets file write enable
* @returns file write enable
*/
int getFileWrite(int detPos = -1) const; 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 * Sets/Gets file overwrite enable
@ -1749,6 +1769,12 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @returns file overwrite enable * @returns file overwrite enable
*/ */
int setFileOverWrite(bool enable, int detPos = -1); 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; int getFileOverWrite(int detPos = -1) const;
/** /**

View File

@ -16,7 +16,7 @@ class multiSlsDetector;
class ServerInterface; class ServerInterface;
class MySocketTCP; class MySocketTCP;
#define SLS_SHMVERSION 0x190426 #define SLS_SHMVERSION 0x190430
#define NCHIPSMAX 10 #define NCHIPSMAX 10
#define NCHANSMAX 65536 #define NCHANSMAX 65536
#define NDACSMAX 16 #define NDACSMAX 16
@ -237,10 +237,13 @@ struct sharedSlsDetector {
/** frames per file */ /** frames per file */
int rxFramesPerFile; int rxFramesPerFile;
/** filewriteenable */ /** file write enable */
bool rxFileWrite; bool rxFileWrite;
/** overwriteenable */ /** master file write enable */
bool rxMasterFileWrite;
/** overwrite enable */
bool rxFileOverWrite; bool rxFileOverWrite;
}; };
@ -1637,8 +1640,25 @@ class slsDetector : public virtual slsDetectorDefs{
*/ */
bool setFileWrite(bool value); bool setFileWrite(bool value);
/**
* Gets file write enable
* @returns file write enable
*/
bool getFileWrite() const; 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 * Sets file overwrite in the receiver
* @param enable true or false to set/reset file overwrite enable * @param enable true or false to set/reset file overwrite enable

View File

@ -3500,6 +3500,22 @@ int multiSlsDetector::getFileWrite(int detPos) const{
return sls::minusOneIfDifferent(r); 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) { int multiSlsDetector::setFileOverWrite(bool enable, int detPos) {
if (detPos >= 0) { if (detPos >= 0) {
return detectors[detPos]->setFileOverWrite(enable); return detectors[detPos]->setFileOverWrite(enable);

View File

@ -390,6 +390,7 @@ void slsDetector::initializeDetectorStructure(detectorType type) {
break; break;
} }
shm()->rxFileWrite = true; shm()->rxFileWrite = true;
shm()->rxMasterFileWrite = true;
shm()->rxFileOverWrite = true; shm()->rxFileOverWrite = true;
// get the detector parameters based on type // get the detector parameters based on type
@ -1873,6 +1874,7 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
<< "\nr_discardpolicy:" << shm()->rxFrameDiscardMode << "\nr_discardpolicy:" << shm()->rxFrameDiscardMode
<< "\nr_padding:" << shm()->rxFramePadding << "\nr_padding:" << shm()->rxFramePadding
<< "\nwrite enable:" << shm()->rxFileWrite << "\nwrite enable:" << shm()->rxFileWrite
<< "\nmaster write enable:" << shm()->rxMasterFileWrite
<< "\noverwrite enable:" << shm()->rxFileOverWrite << "\noverwrite enable:" << shm()->rxFileOverWrite
<< "\nframe index needed:" << "\nframe index needed:"
<< ((shm()->timerValue[FRAME_NUMBER] * << ((shm()->timerValue[FRAME_NUMBER] *
@ -1912,6 +1914,7 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
setReceiverFramesDiscardPolicy(shm()->rxFrameDiscardMode); setReceiverFramesDiscardPolicy(shm()->rxFrameDiscardMode);
setPartialFramesPadding(shm()->rxFramePadding); setPartialFramesPadding(shm()->rxFramePadding);
setFileWrite(shm()->rxFileWrite); setFileWrite(shm()->rxFileWrite);
setMasterFileWrite(shm()->rxMasterFileWrite);
setFileOverWrite(shm()->rxFileOverWrite); setFileOverWrite(shm()->rxFileOverWrite);
setTimer(FRAME_PERIOD, shm()->timerValue[FRAME_PERIOD]); setTimer(FRAME_PERIOD, shm()->timerValue[FRAME_PERIOD]);
setTimer(FRAME_NUMBER, shm()->timerValue[FRAME_NUMBER]); setTimer(FRAME_NUMBER, shm()->timerValue[FRAME_NUMBER]);
@ -3236,6 +3239,10 @@ int slsDetector::updateCachedReceiverVariables() const {
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
shm()->rxFileWrite = static_cast<bool>(i32); shm()->rxFileWrite = static_cast<bool>(i32);
// master file write enable
n += receiver.receiveData(&i32, sizeof(i32));
shm()->rxMasterFileWrite = static_cast<bool>(i32);
// file overwrite enable // file overwrite enable
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
shm()->rxFileOverWrite = static_cast<bool>(i32); shm()->rxFileOverWrite = static_cast<bool>(i32);
@ -3508,6 +3515,20 @@ bool slsDetector::setFileWrite(bool value) {
bool slsDetector::getFileWrite() const { return shm()->rxFileWrite; } bool slsDetector::getFileWrite() const { return shm()->rxFileWrite; }
bool slsDetector::setMasterFileWrite(bool value) {
int arg = static_cast<int>(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<bool>(retval);
}
return getMasterFileWrite();
}
bool slsDetector::getMasterFileWrite() const { return shm()->rxMasterFileWrite; }
bool slsDetector::setFileOverWrite(bool value) { bool slsDetector::setFileOverWrite(bool value) {
int arg = static_cast<int>(value); int arg = static_cast<int>(value);
int retval = -1; int retval = -1;

View File

@ -1541,12 +1541,19 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) {
++i; ++i;
/*! \page output /*! \page output
- <b>fileformat</b> sets/gets the file format for data in receiver. Options: [binary, hdf5]. \c Returns \c (string) - <b>fileformat [i]</b> sets/gets the file format for data in receiver. Options: [binary, hdf5]. \c Returns \c (string)
*/ */
descrToFuncMap[i].m_pFuncName = "fileformat"; descrToFuncMap[i].m_pFuncName = "fileformat";
descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdFileName; descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdFileName;
++i; ++i;
/*! \page output
- <b>masterfile [i]</b> 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 */ /* communication configuration */
/*! \page network Network /*! \page network Network
@ -1921,9 +1928,9 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) {
++i; ++i;
/*! \page prototype /*! \page prototype
- <b>adcdisable [mask]</b> Sets/gets ADC disable mask (8 digits hex format) - <b>adcenable [mask]</b> 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; descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdPattern;
++i; ++i;
@ -2599,22 +2606,41 @@ std::string slsDetectorCommand::cmdEnablefwrite(int narg, char *args[], int acti
if (action == HELP_ACTION) { if (action == HELP_ACTION) {
return helpEnablefwrite(action); return helpEnablefwrite(action);
} }
if (action == PUT_ACTION) { if (cmd == "enablefwrite") {
if (sscanf(args[1], "%d", &i)) if (action == PUT_ACTION) {
myDet->setFileWrite(i, detPos); if (sscanf(args[1], "%d", &i))
else myDet->setFileWrite(i, detPos);
return std::string("could not decode enable file write"); 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::string slsDetectorCommand::helpEnablefwrite(int action) {
std::ostringstream os; 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"); os << std::string("enablefwrite \t When Enabled writes the data into the file\n");
if (action == PUT_ACTION || action == HELP_ACTION) os << std::string("masterfile \t When Enabled writes the master file\n");
os << std::string("enablefwrite i \t should be 1 or 0 or -1\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(); 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 << "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 << "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 << "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) { if (action == GET_ACTION || action == HELP_ACTION) {
os << "pattern \t cannot get" << std::endl; 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 << "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 << "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(); 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 os << std::hex << myDet->readRegister(123, detPos) << std::dec ; //0x7b
} else if (cmd == "adcdisable") { } else if (cmd == "adcenable") {
if (action == PUT_ACTION) { if (action == PUT_ACTION) {
uint32_t adcEnableMask = 0; uint32_t adcEnableMask = 0;
if (sscanf(args[1], "%x", &adcEnableMask)) if (sscanf(args[1], "%x", &adcEnableMask))
; ;
else 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); myDet->setADCEnableMask(adcEnableMask, detPos);
} }
uint32_t retval = myDet->getADCEnableMask(detPos); os << std::hex << myDet->getADCEnableMask(detPos) << std::dec;
// get disable mask
retval ^= BIT32_MASK;
os << std::hex << retval << std::dec;
} }
else else

View File

@ -58,6 +58,7 @@ class BinaryFile : private virtual slsDetectorDefs, public File, public BinaryFi
/** /**
* Create master file * Create master file
* @param mfwenable master file write enable
* @param en ten giga enable * @param en ten giga enable
* @param size image size * @param size image size
* @param nx number of pixels in x direction * @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 * @param ap acquisition period
* @returns OK or FAIL * @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, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp,
uint64_t ap); uint64_t ap);

View File

@ -29,6 +29,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
* @param f address of Fifo pointer * @param f address of Fifo pointer
* @param ftype pointer to file format type * @param ftype pointer to file format type
* @param fwenable file writer enable * @param fwenable file writer enable
* @apram mfwenable pointer to master file write enable
* @param dsEnable pointer to data stream enable * @param dsEnable pointer to data stream enable
* @param gpEnable pointer to gap pixels enable * @param gpEnable pointer to gap pixels enable
* @param dr pointer to dynamic range * @param dr pointer to dynamic range
@ -40,7 +41,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
* @param sm pointer to silent mode * @param sm pointer to silent mode
*/ */
DataProcessor(int ind, detectorType dtype, Fifo* f, fileFormat* ftype, 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, uint32_t* freq, uint32_t* timer,
bool* fp, bool* act, bool* depaden, bool* sm); bool* fp, bool* act, bool* depaden, bool* sm);
@ -325,6 +326,9 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
/** File Write Enable */ /** File Write Enable */
bool fileWriteEnable; bool fileWriteEnable;
/** Master File Write Enable */
bool* masterFileWriteEnable;
/** Gap Pixels Enable */ /** Gap Pixels Enable */
bool* gapPixelsEnable; bool* gapPixelsEnable;

View File

@ -121,6 +121,7 @@ class File : private virtual slsDetectorDefs {
/** /**
* Create master file * Create master file
* @param mfwenable master file write enable
* @param en ten giga enable * @param en ten giga enable
* @param size image size * @param size image size
* @param nx number of pixels in x direction * @param nx number of pixels in x direction
@ -131,7 +132,7 @@ class File : private virtual slsDetectorDefs {
* @param ap acquisition period * @param ap acquisition period
* @returns OK or FAIL * @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, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st,
uint64_t sp, uint64_t ap) { uint64_t sp, uint64_t ap) {
FILE_LOG(logERROR) << "This is a generic function CreateMasterFile that " FILE_LOG(logERROR) << "This is a generic function CreateMasterFile that "

View File

@ -93,6 +93,7 @@ class HDF5File : private virtual slsDetectorDefs, public File, public HDF5FileSt
/** /**
* Create master file * Create master file
* @param mfwenable master file write enable
* @param en ten giga enable * @param en ten giga enable
* @param size image size * @param size image size
* @param nx number of pixels in x direction * @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 * @param ap acquisition period
* @returns OK or FAIL * @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, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp,
uint64_t ap); uint64_t ap);

View File

@ -128,6 +128,12 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
*/ */
bool getFileWriteEnable() const; 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 * Get File Over Write Enable
* @return true if file over write enabled, else false * @return true if file over write enabled, else false
@ -426,6 +432,12 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
*/ */
void setFileWriteEnable(const bool b); 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 * Set File Overwrite Enable
* @param b true for file overwrite enable, else false * @param b true for file overwrite enable, else false
@ -862,6 +874,8 @@ private:
uint32_t framesPerFile; uint32_t framesPerFile;
/** File Write enable */ /** File Write enable */
bool fileWriteEnable; bool fileWriteEnable;
/** MasterFile Write enable */
bool masterFileWriteEnable;
/** Overwrite enable */ /** Overwrite enable */
bool overwriteEnable; bool overwriteEnable;

View File

@ -204,6 +204,9 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
/** Enable File Write*/ /** Enable File Write*/
int enable_file_write(); int enable_file_write();
/** Enable Master File Write */
int enable_master_file_write();
/** enable compression */ /** enable compression */
int enable_compression(); int enable_compression();

View File

@ -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, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp,
uint64_t ap) { uint64_t ap) {
//beginning of every acquisition //beginning of every acquisition
numFramesInFile = 0; numFramesInFile = 0;
numActualPacketsInFile = 0; numActualPacketsInFile = 0;
if (master && (*detIndex==0)) { if (mfwenable && master && (*detIndex==0)) {
masterFileName = BinaryFileStatic::CreateMasterFileName(filePath, masterFileName = BinaryFileStatic::CreateMasterFileName(filePath,
fileNamePrefix, *fileIndex); fileNamePrefix, *fileIndex);
if(!(*silentMode)) { if(!(*silentMode)) {

View File

@ -24,7 +24,7 @@ const std::string DataProcessor::TypeName = "DataProcessor";
DataProcessor::DataProcessor(int ind, detectorType dtype, Fifo* f, 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, bool* dsEnable, bool* gpEnable, uint32_t* dr,
uint32_t* freq, uint32_t* timer, uint32_t* freq, uint32_t* timer,
bool* fp, bool* act, bool* depaden, bool* sm) : bool* fp, bool* act, bool* depaden, bool* sm) :
@ -38,6 +38,7 @@ DataProcessor::DataProcessor(int ind, detectorType dtype, Fifo* f,
dataStreamEnable(dsEnable), dataStreamEnable(dsEnable),
fileFormatType(ftype), fileFormatType(ftype),
fileWriteEnable(fwenable), fileWriteEnable(fwenable),
masterFileWriteEnable(mfwenable),
gapPixelsEnable(gpEnable), gapPixelsEnable(gpEnable),
dynamicRange(dr), dynamicRange(dr),
streamingFrequency(freq), streamingFrequency(freq),
@ -247,7 +248,7 @@ int DataProcessor::CreateNewFile(bool en, uint64_t nf, uint64_t at, uint64_t st,
if (file == nullptr) if (file == nullptr)
return FAIL; return FAIL;
file->CloseAllFiles(); file->CloseAllFiles();
if (file->CreateMasterFile(en, generalData->imageSize, if (file->CreateMasterFile(*masterFileWriteEnable, en, generalData->imageSize,
generalData->nPixelsX, generalData->nPixelsY, generalData->nPixelsX, generalData->nPixelsY,
at, st, sp, ap) == FAIL) at, st, sp, ap) == FAIL)
return FAIL; return FAIL;

View File

@ -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, uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp,
uint64_t ap) { uint64_t ap) {
@ -247,7 +247,7 @@ int HDF5File::CreateMasterFile(bool en, uint32_t size,
numActualPacketsInFile = 0; numActualPacketsInFile = 0;
extNumImages = *numImages; extNumImages = *numImages;
if (master && (*detIndex==0)) { if (mfwenable && master && (*detIndex==0)) {
virtualfd = 0; virtualfd = 0;
masterFileName = HDF5FileStatic::CreateMasterFileName(filePath, masterFileName = HDF5FileStatic::CreateMasterFileName(filePath,
fileNamePrefix, *fileIndex); fileNamePrefix, *fileIndex);

View File

@ -96,6 +96,7 @@ void slsReceiverImplementation::InitializeMembers() {
fileIndex = 0; fileIndex = 0;
framesPerFile = 0; framesPerFile = 0;
fileWriteEnable = true; fileWriteEnable = true;
masterFileWriteEnable = true;
overwriteEnable = true; overwriteEnable = true;
//***acquisition parameters*** //***acquisition parameters***
@ -202,6 +203,11 @@ bool slsReceiverImplementation::getFileWriteEnable() const{
return fileWriteEnable; return fileWriteEnable;
} }
bool slsReceiverImplementation::getMasterFileWriteEnable() const{
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
return masterFileWriteEnable;
}
bool slsReceiverImplementation::getOverwriteEnable() const{ bool slsReceiverImplementation::getOverwriteEnable() const{
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called"; FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
return overwriteEnable; return overwriteEnable;
@ -600,6 +606,12 @@ void slsReceiverImplementation::setFileWriteEnable(const bool b) {
FILE_LOG(logINFO) << "File Write Enable: " << stringEnable(fileWriteEnable); 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) { void slsReceiverImplementation::setOverwriteEnable(const bool b) {
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called"; FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
@ -676,7 +688,7 @@ int slsReceiverImplementation::setNumberofUDPInterfaces(const int n) {
listener[i]->SetGeneralData(generalData); listener[i]->SetGeneralData(generalData);
dataProcessor.push_back(sls::make_unique<DataProcessor>(i, myDetectorType, fifo_ptr, &fileFormatType, dataProcessor.push_back(sls::make_unique<DataProcessor>(i, myDetectorType, fifo_ptr, &fileFormatType,
fileWriteEnable, &dataStreamEnable, &gapPixelsEnable, fileWriteEnable, &masterFileWriteEnable, &dataStreamEnable, &gapPixelsEnable,
&dynamicRange, &streamingFrequency, &streamingTimerInMs, &dynamicRange, &streamingFrequency, &streamingTimerInMs,
&framePadding, &activated, &deactivatedPaddingEnable, &silentMode)); &framePadding, &activated, &deactivatedPaddingEnable, &silentMode));
dataProcessor[i]->SetGeneralData(generalData); dataProcessor[i]->SetGeneralData(generalData);
@ -1096,7 +1108,7 @@ int slsReceiverImplementation::setDetectorType(const detectorType d) {
&udpSocketBufferSize, &actualUDPSocketBufferSize, &framesPerFile, &udpSocketBufferSize, &actualUDPSocketBufferSize, &framesPerFile,
&frameDiscardMode, &activated, &deactivatedPaddingEnable, &silentMode)); &frameDiscardMode, &activated, &deactivatedPaddingEnable, &silentMode));
dataProcessor.push_back(sls::make_unique<DataProcessor>(i, myDetectorType, fifo_ptr, &fileFormatType, dataProcessor.push_back(sls::make_unique<DataProcessor>(i, myDetectorType, fifo_ptr, &fileFormatType,
fileWriteEnable, &dataStreamEnable, &gapPixelsEnable, fileWriteEnable, &masterFileWriteEnable, &dataStreamEnable, &gapPixelsEnable,
&dynamicRange, &streamingFrequency, &streamingTimerInMs, &dynamicRange, &streamingFrequency, &streamingTimerInMs,
&framePadding, &activated, &deactivatedPaddingEnable, &silentMode)); &framePadding, &activated, &deactivatedPaddingEnable, &silentMode));
} }

View File

@ -202,6 +202,7 @@ int slsReceiverTCPIPInterface::function_table(){
flist[F_GET_RECEIVER_FRAMES_CAUGHT] = &slsReceiverTCPIPInterface::get_frames_caught; flist[F_GET_RECEIVER_FRAMES_CAUGHT] = &slsReceiverTCPIPInterface::get_frames_caught;
flist[F_RESET_RECEIVER_FRAMES_CAUGHT] = &slsReceiverTCPIPInterface::reset_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_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_OVERWRITE] = &slsReceiverTCPIPInterface::enable_overwrite;
flist[F_ENABLE_RECEIVER_TEN_GIGA] = &slsReceiverTCPIPInterface::enable_tengiga; flist[F_ENABLE_RECEIVER_TEN_GIGA] = &slsReceiverTCPIPInterface::enable_tengiga;
flist[F_SET_RECEIVER_FIFO_DEPTH] = &slsReceiverTCPIPInterface::set_fifo_depth; flist[F_SET_RECEIVER_FIFO_DEPTH] = &slsReceiverTCPIPInterface::set_fifo_depth;
@ -506,6 +507,10 @@ int slsReceiverTCPIPInterface::send_update() {
i32=(int)receiver->getFileWriteEnable(); i32=(int)receiver->getFileWriteEnable();
n += mySock->SendDataOnly(&i32, sizeof(i32)); n += mySock->SendDataOnly(&i32, sizeof(i32));
// master file write enable
i32=(int)receiver->getMasterFileWriteEnable();
n += mySock->SendDataOnly(&i32, sizeof(i32));
// file overwrite enable // file overwrite enable
i32=(int)receiver->getOverwriteEnable(); i32=(int)receiver->getOverwriteEnable();
n += mySock->SendDataOnly(&i32, sizeof(i32)); 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() { int slsReceiverTCPIPInterface::enable_overwrite() {
ret = OK; ret = OK;
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));

View File

@ -110,6 +110,7 @@ enum detFuncs{
F_GET_RECEIVER_FRAMES_CAUGHT, /**< gets the number of frames caught by receiver */ 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_RESET_RECEIVER_FRAMES_CAUGHT, /**< resets the frames caught by receiver */
F_ENABLE_RECEIVER_FILE_WRITE, /**< sets the receiver file write */ 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_OVERWRITE, /**< set overwrite flag in receiver */
F_ENABLE_RECEIVER_TEN_GIGA, /**< enable 10Gbe in receiver */ F_ENABLE_RECEIVER_TEN_GIGA, /**< enable 10Gbe in receiver */
F_SET_RECEIVER_FIFO_DEPTH, /**< set receiver fifo depth */ 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_GET_RECEIVER_FRAMES_CAUGHT: return "F_GET_RECEIVER_FRAMES_CAUGHT";
case F_RESET_RECEIVER_FRAMES_CAUGHT: return "F_RESET_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_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_OVERWRITE: return "F_ENABLE_RECEIVER_OVERWRITE";
case F_ENABLE_RECEIVER_TEN_GIGA: return "F_ENABLE_RECEIVER_TEN_GIGA"; case F_ENABLE_RECEIVER_TEN_GIGA: return "F_ENABLE_RECEIVER_TEN_GIGA";
case F_SET_RECEIVER_FIFO_DEPTH: return "F_SET_RECEIVER_FIFO_DEPTH"; case F_SET_RECEIVER_FIFO_DEPTH: return "F_SET_RECEIVER_FIFO_DEPTH";