Files
Jungfraujoch/receiver/host/ProcessJFPacket.h

42 lines
1.1 KiB
C++

// 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 <shared_mutex>
struct ProcessWorkRequest {
uint16_t *ptr;
uint32_t handle;
};
struct ModuleInfo {
uint16_t *ptr;
Completion c;
};
class ProcessJFPacket {
std::shared_mutex m;
ThreadSafeFIFO<Completion> &c_fifo;
ThreadSafeFIFO<ProcessWorkRequest> &wr_fifo;
std::vector<JFConversion *> conversion;
std::vector<ModuleInfo> module_info;
bool do_conversion = false;
std::atomic<uint64_t> counter = 0;
public:
ProcessJFPacket(ThreadSafeFIFO<Completion> &c, ThreadSafeFIFO<ProcessWorkRequest> &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