mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-04-23 07:02:41 +02:00
42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
#ifndef SF_DAQ_BUFFER_FRAMEUDPRECEIVER_HPP
|
|
#define SF_DAQ_BUFFER_FRAMEUDPRECEIVER_HPP
|
|
|
|
#include <netinet/in.h>
|
|
#include "PacketUdpReceiver.hpp"
|
|
#include "formats.hpp"
|
|
#include "buffer_config.hpp"
|
|
|
|
#ifdef USE_EIGER
|
|
#include "eiger.hpp"
|
|
#else
|
|
#include "jungfrau.hpp"
|
|
#endif
|
|
|
|
class FrameUdpReceiver {
|
|
PacketUdpReceiver udp_receiver_;
|
|
const int n_packets_per_frame_;
|
|
|
|
det_packet* const packet_buffer_;
|
|
iovec* const recv_buff_ptr_;
|
|
mmsghdr* const msgs_;
|
|
sockaddr_in* const sock_from_;
|
|
|
|
bool packet_buffer_loaded_ = false;
|
|
int packet_buffer_n_packets_ = 0;
|
|
int packet_buffer_offset_ = 0;
|
|
|
|
inline void init_frame(ModuleFrame& frame_metadata, const int i_packet);
|
|
inline void copy_packet_to_buffers(
|
|
ModuleFrame& metadata, char* frame_buffer, const int i_packet);
|
|
inline uint64_t process_packets(
|
|
const int n_packets, ModuleFrame& metadata, char* frame_buffer);
|
|
|
|
public:
|
|
FrameUdpReceiver(const uint16_t port, const int n_packets_per_frame);
|
|
virtual ~FrameUdpReceiver();
|
|
uint64_t get_frame_from_udp(ModuleFrame& meta, char* frame_buffer);
|
|
};
|
|
|
|
|
|
#endif //SF_DAQ_BUFFER_FRAMEUDPRECEIVER_HPP
|