// Copyright (2019-2022) Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-or-later #ifndef JUNGFRAUJOCH_PROCESSJFPACKET_H #define JUNGFRAUJOCH_PROCESSJFPACKET_H #include "../../common/ThreadSafeFIFO.h" #include "Completion.h" #include "../../jungfrau/JFConversion.h" #include "RawJFUDPPacket.h" #include struct ProcessWorkRequest { uint16_t *ptr; uint32_t handle; }; struct ModuleInfo { uint16_t *ptr; Completion c; }; class ProcessJFPacket { std::shared_mutex m; ThreadSafeFIFO &c_fifo; ThreadSafeFIFO &wr_fifo; std::vector conversion; std::vector module_info; bool do_conversion = false; std::atomic counter = 0; public: ProcessJFPacket(ThreadSafeFIFO &c, ThreadSafeFIFO &wr, uint32_t nmodules); ~ProcessJFPacket(); void RegisterConversion(uint32_t module_number, JFConversion* conv); void ProcessPacket(jf_payload *datagram, uint32_t src_ip); uint64_t GetCounter(); }; #endif //JUNGFRAUJOCH_PROCESSJFPACKET_H