Tentative buffer implementation

This commit is contained in:
2020-05-27 15:26:30 +02:00
parent 774aeaa709
commit 7005746292
2 changed files with 28 additions and 2 deletions
+25 -2
View File
@@ -10,6 +10,11 @@ ImageAssembler::ImageAssembler(const size_t n_modules) :
{
image_buffer_ = new char[IA_N_SLOTS * image_buffer_slot_n_bytes_];
metadata_buffer_ = new ImageMetadataBlock[IA_N_SLOTS];
buffer_status_ = new atomic_int[IA_N_SLOTS];
for (size_t i=0; i<IA_N_SLOTS; i++) {
buffer_status_[i] = 0;
}
}
ImageAssembler::~ImageAssembler()
@@ -28,6 +33,14 @@ void ImageAssembler::process(
const int i_module,
const BufferBinaryBlock* block_buffer)
{
// TODO: Temp workaround. Make proper initialization.
if (i_module == 0) {
metadata_buffer_[slot_id].block_first_pulse_id =
block_buffer->frame[0].metadata.pulse_id;
metadata_buffer_[slot_id].block_last_pulse_id =
block_buffer->frame[BUFFER_BLOCK_SIZE-1].metadata.pulse_id;
}
size_t slot_offset = slot_id * image_buffer_slot_n_bytes_;
size_t module_image_offset = i_module * MODULE_N_BYTES;
@@ -39,7 +52,17 @@ void ImageAssembler::process(
&(block_buffer->frame[i_pulse].data[0]),
MODULE_N_BYTES);
// TODO: Temp workaround. We need to synchronize this access.
if (i_module == 0) {
metadata_buffer_[slot_id].pulse_id[i_pulse] =
block_buffer->frame[i_pulse].metadata.pulse_id;
metadata_buffer_[slot_id].frame_index[i_pulse] =
block_buffer->frame[i_pulse].metadata.frame_index;
metadata_buffer_[slot_id].daq_rec[i_pulse] =
block_buffer->frame[i_pulse].metadata.daq_rec;
// metadata_buffer_[slot_id].is_good_image[i_pulse] =
// block_buffer->frame[i_pulse].is_good_image.pulse_id;
}
}
}
@@ -50,7 +73,7 @@ int ImageAssembler::get_full_slot()
void ImageAssembler::free_slot(const int slot_id)
{
buffer_status_[slot_id] = n_modules_;
}
ImageMetadataBlock* ImageAssembler::get_metadata_buffer(const int slot_id)
+3
View File
@@ -1,6 +1,8 @@
#ifndef SF_DAQ_BUFFER_IMAGEASSEMBLER_HPP
#define SF_DAQ_BUFFER_IMAGEASSEMBLER_HPP
#include <atomic>
#include "formats.hpp"
const size_t IA_N_SLOTS = 2;
@@ -11,6 +13,7 @@ class ImageAssembler {
char* image_buffer_;
ImageMetadataBlock* metadata_buffer_;
std::atomic_int* buffer_status_;
public:
ImageAssembler(const size_t n_modules);