mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-04-22 02:34:36 +02:00
Kind of working
This commit is contained in:
@@ -44,8 +44,8 @@ struct BufferBinaryFormat {
|
||||
struct ImageBinaryFormat {
|
||||
ImageMetadata meta;
|
||||
char* data = nullptr;
|
||||
size_t size;
|
||||
ImageBinaryFormat(size_t H, size_t W, size_t D): size(H*W*D) { data = (char*) malloc(H*W*D); };
|
||||
const size_t size;
|
||||
ImageBinaryFormat(size_t H, size_t W, size_t D): size(H*W*D) { data = (char*) calloc(8*H*W*D, sizeof(int)); };
|
||||
~ImageBinaryFormat(){ free(data); std::cout << "ImageBinaryFormat destructor called!" << std::endl; }
|
||||
};
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
**/
|
||||
class FrameCache{
|
||||
public:
|
||||
FrameCache(uint64_t _C, uint64_t _MX, uint64_t _MY, std::function<void(ImageBinaryFormat&)> callback):
|
||||
m_CAP(_C), m_MX(_MX), m_MY(_MY), m_M(_MX*_MY), m_PX(1024*_MX), m_PY(512*_MY),
|
||||
m_buffer(_C, ImageBinaryFormat(512*_MY, 1024*_MX, sizeof(uint16_t))),
|
||||
FrameCache(uint64_t _C, uint64_t N_MOD, std::function<void(ImageBinaryFormat&)> callback):
|
||||
m_CAP(_C), m_M(N_MOD),
|
||||
m_buffer(_C, ImageBinaryFormat(512*9, 1024, sizeof(uint16_t))),
|
||||
f_send(callback), m_vlock(_C), m_valid(_C), m_fill(_C) {
|
||||
};
|
||||
|
||||
@@ -56,14 +56,17 @@ public:
|
||||
|
||||
std::cout << " fill/cpy" << std::endl;
|
||||
m_fill[idx]++;
|
||||
char* ptr_dest = m_buffer[idx].data + moduleIDX * m_blocksize;
|
||||
std::cout << " target:" << (void*)ptr_dest << "\tsize: " << m_blocksize << std::endl;
|
||||
//char* ptr_dest = m_buffer[idx].data + moduleIDX * m_blocksize;
|
||||
char* ptr_dest = m_buffer[idx].data;
|
||||
// std::cout << " Root: " << (void*)m_buffer[idx].data << " ( " << m_buffer[idx].size << " )" << "\ttarget:" << (void*)ptr_dest << "\tsize: " << m_blocksize << std::endl;
|
||||
std::cout << "Module: " << moduleIDX << std::endl;
|
||||
|
||||
m_buffer[idx].meta.pulse_id = ref_frame.meta.pulse_id;
|
||||
m_buffer[idx].meta.frame_index = ref_frame.meta.frame_index;
|
||||
m_buffer[idx].meta.daq_rec = ref_frame.meta.daq_rec;
|
||||
std::cout << "NI " << std::endl;
|
||||
std::memcpy((void*)ptr_dest, (void*)&ref_frame.data, m_blocksize);
|
||||
//std::memcpy((void*)ptr_dest, (void*)&ref_frame.data, m_blocksize);
|
||||
std::memcpy((void*)&ptr_dest[moduleIDX * m_blocksize], (void*)&ref_frame.data, m_blocksize);
|
||||
|
||||
std::cout << " Fill ctr: " << m_fill[idx] << std::endl;
|
||||
|
||||
@@ -99,10 +102,6 @@ public:
|
||||
|
||||
private:
|
||||
const uint64_t m_CAP;
|
||||
const uint64_t m_PX;
|
||||
const uint64_t m_PY;
|
||||
const uint64_t m_MX;
|
||||
const uint64_t m_MY;
|
||||
const uint64_t m_M;
|
||||
const uint64_t m_blocksize = 1024*512*sizeof(uint16_t);
|
||||
std::function<void(ImageBinaryFormat&)> f_send;
|
||||
|
||||
@@ -82,7 +82,7 @@ uint64_t JfjFrameWorker::get_frame(BufferBinaryFormat& buffer){
|
||||
//std::cout << "New packages" << std::endl;
|
||||
m_buffer.fill_from(m_udp_receiver);
|
||||
if (m_buffer.is_empty()) { continue; }
|
||||
std::cout << "\tGot " << m_buffer.size() << std::endl;
|
||||
// std::cout << "\tGot " << m_buffer.size() << std::endl;
|
||||
|
||||
// ... and process them
|
||||
auto pulse_id = process_packets(buffer);
|
||||
|
||||
@@ -15,20 +15,22 @@ void dummy_sender(ImageBinaryFormat& image){
|
||||
|
||||
int main (int argc, char *argv[]) {
|
||||
std::cout << "Creating frame cache..." << std::endl;
|
||||
FrameCache cache(32, 1, 3, &dummy_sender);
|
||||
FrameCache cache(32, 3, &dummy_sender);
|
||||
|
||||
std::function<void(uint64_t, uint64_t, BufferBinaryFormat&)> push_cb =
|
||||
std::bind(&FrameCache::emplace, &cache, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
|
||||
|
||||
std::cout << "Creating workers..." << std::endl;
|
||||
JfjFrameWorker W0(5005, 0, push_cb);
|
||||
//JfjFrameWorker W1(5006, 1, push_cb);
|
||||
JfjFrameWorker W0(5005, 1, push_cb);
|
||||
//JfjFrameWorker W1(5005, 0, push_cb);
|
||||
// JfjFrameWorker W2(5007, 2, push_cb);
|
||||
|
||||
std::thread T0(&JfjFrameWorker::run, &W0);
|
||||
//std::thread T1(&JfjFrameWorker::run, &W1);
|
||||
|
||||
|
||||
T0.join();
|
||||
//T1.join();
|
||||
std::cout << "Exiting program..." << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user