diff --git a/sf-writer/src/ImageAssembler.cpp b/sf-writer/src/ImageAssembler.cpp index 32515ac..3329c01 100644 --- a/sf-writer/src/ImageAssembler.cpp +++ b/sf-writer/src/ImageAssembler.cpp @@ -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; iframe[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) diff --git a/sf-writer/src/ImageAssembler.hpp b/sf-writer/src/ImageAssembler.hpp index a34cb59..10f7fdf 100644 --- a/sf-writer/src/ImageAssembler.hpp +++ b/sf-writer/src/ImageAssembler.hpp @@ -1,6 +1,8 @@ #ifndef SF_DAQ_BUFFER_IMAGEASSEMBLER_HPP #define SF_DAQ_BUFFER_IMAGEASSEMBLER_HPP +#include + #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);