This commit is contained in:
2021-06-30 16:50:05 +02:00
parent fca9982b72
commit 5ad3205fe8
5 changed files with 357 additions and 61 deletions

View File

@@ -12,21 +12,38 @@ void BinaryDataFile::CloseFile() {
fd_ = nullptr;
}
void BinaryDataFile::CreateDataFile(std::string filePath,
std::string fileNamePrefix,
uint64_t fileIndex, bool overWriteEnable,
bool silentMode, int detIndex,
int numUnitsPerDetector,
uint32_t udpPortNumber) {
void BinaryDataFile::CreateFirstBinaryDataFile(
std::string filePath, std::string fileNamePrefix, uint64_t fileIndex,
bool overWriteEnable, bool silentMode, int detIndex,
int numUnitsPerDetector, uint32_t udpPortNumber,
uint32_t maxFramesPerFile) {
subFileIndex_ = 0;
numFramesInFile_ = 0;
filePath_ = filePath;
fileNamePrefix_ = fileNamePrefix;
fileIndex_ = fileIndex;
overWriteEnable_ = overWriteEnable;
silentMode_ = silentMode;
detIndex_ = detIndex;
numUnitsPerDetector_ = numUnitsPerDetector;
udpPortNumber_ = udpPortNumber;
maxFramesPerFile_ = maxFramesPerFile;
CreateFile();
}
void BinaryDataFile::CreateFile() {
numFramesInFile_ = 0;
std::ostringstream os;
os << filePath << "/" << fileNamePrefix << "_d"
<< (detIndex * numUnitsPerDetector + index_) << "_f" << subFileIndex_
<< '_' << fileIndex << ".raw";
os << filePath_ << "/" << fileNamePrefix_ << "_d"
<< (detIndex_ * numUnitsPerDetector_ + index_) << "_f" << subFileIndex_
<< '_' << fileIndex_ << ".raw";
fileName_ = os.str();
if (!overWriteEnable) {
if (!overWriteEnable_) {
if (nullptr == (fd_ = fopen((const char *)fileName_.c_str(), "wx"))) {
fd_ = nullptr;
throw sls::RuntimeError("Could not create/overwrite file " +
@@ -39,8 +56,54 @@ void BinaryDataFile::CreateDataFile(std::string filePath,
// setting to no file buffering
setvbuf(fd_, nullptr, _IONBF, 0);
if (!(silentMode)) {
LOG(logINFO) << "[" << udpPortNumber
if (!silentMode_) {
LOG(logINFO) << "[" << udpPortNumber_
<< "]: Binary File created: " << fileName_;
}
}
void BinaryDataFile::WriteToFile(char *buffer, int buffersize,
uint64_t currentFrameNumber,
uint32_t numPacketsCaught) {
// check if maxframesperfile = 0 for infinite
if (maxFramesPerFile_ && (numFramesInFile_ >= maxFramesPerFile_)) {
CloseFile();
++subFileIndex_;
CreateFile();
}
numFramesInFile_++;
// write to file
int ret = 0;
// contiguous bitset
if (sizeof(sls_bitset) == sizeof(bitset_storage)) {
ret = fwrite(buffer, 1, buffersize, fd_);
}
// not contiguous bitset
else {
// write detector header
ret = fwrite(buffer, 1, sizeof(sls_detector_header), fd_);
// get contiguous representation of bit mask
bitset_storage storage;
memset(storage, 0, sizeof(bitset_storage));
sls_bitset bits = *(sls_bitset *)(buffer + sizeof(sls_detector_header));
for (int i = 0; i < MAX_NUM_PACKETS; ++i)
storage[i >> 3] |= (bits[i] << (i & 7));
// write bitmask
ret += fwrite((char *)storage, 1, sizeof(bitset_storage), fd_);
// write data
ret += fwrite(buffer + sizeof(sls_detector_header), 1,
buffersize - sizeof(sls_receiver_header), fd_);
}
// if write error
if (ret != buffersize) {
throw sls::RuntimeError(std::to_string(index_) +
" : Write to file failed for image number " +
std::to_string(currentFrameNumber));
}
}