From 8b862ff445404d12c1a12bd8e4cdee0d79c37b69 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Tue, 21 Apr 2020 11:48:50 +0200 Subject: [PATCH] Implement basic logic for reader --- sf-writer/BufferMultiReader.cpp | 64 +++++++++++++++++++++++++++++++++ sf-writer/BufferMultiReader.hpp | 3 +- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 sf-writer/BufferMultiReader.cpp diff --git a/sf-writer/BufferMultiReader.cpp b/sf-writer/BufferMultiReader.cpp new file mode 100644 index 0000000..4425528 --- /dev/null +++ b/sf-writer/BufferMultiReader.cpp @@ -0,0 +1,64 @@ +#include +#include "BufferMultiReader.hpp" + +using namespace std; + +BufferMultiReader::BufferMultiReader( + const std::string& device_name, + const std::string& root_folder) : + device_name_(device_name), + root_folder_(root_folder), + is_running_(true) +{ + frame_buffer_ = new uint16_t[32*512*1024]; + frame_metadata_buffer_ = new UdpFrameMetadata[32]; + + for (uint8_t i_reader=0; i_reader < 32; i_reader++) { + receiving_threads_.emplace_back( + &BufferMultiReader::read_thread, this, i_reader); + } +} + +BufferMultiReader::~BufferMultiReader() +{ + is_running_ = false; + + this_thread::sleep_for(chrono::milliseconds(100)); + + for (auto& recv_thread:receiving_threads_) { + if (recv_thread.joinable()) { + recv_thread.join(); + } + } + + delete[] frame_buffer_; + delete[] frame_metadata_buffer_; +} + +char* BufferMultiReader::get_buffer() +{ + return (char*) frame_buffer_; +} + + +UdpFrameMetadata BufferMultiReader::load_frame_to_buffer( + const uint64_t pulse_id) +{ + memset(frame_buffer_, 0, 2*32*512*1024); + memset(frame_metadata_buffer_, 0, 32*sizeof(UdpFrameMetadata)); + + pulse_id_ = pulse_id; + n_modules_left_ = 32; + + while (n_modules_left_ > 0) { + this_thread::sleep_for(chrono::milliseconds(5)); + } + + UdpFrameMetadata metadata = frame_metadata_buffer_[0]; + return metadata; +} + +void BufferMultiReader::read_thread(uint8_t module_number) +{ + +} diff --git a/sf-writer/BufferMultiReader.hpp b/sf-writer/BufferMultiReader.hpp index ea0e2de..60bc91d 100644 --- a/sf-writer/BufferMultiReader.hpp +++ b/sf-writer/BufferMultiReader.hpp @@ -10,8 +10,9 @@ class BufferMultiReader const std::string root_folder_; std::atomic_bool is_running_; uint16_t* frame_buffer_; + UdpFrameMetadata* frame_metadata_buffer_; - std::atomic_int n_modules_left_; + std::atomic_uint n_modules_left_; std::atomic_uint64_t pulse_id_; std::vector receiving_threads_;