39 lines
983 B
C++
39 lines
983 B
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;
|
|
JFConversion *conversion;
|
|
std::vector<ModuleInfo> module_info;
|
|
public:
|
|
ProcessJFPacket(ThreadSafeFIFO<Completion> &c, ThreadSafeFIFO<ProcessWorkRequest> &wr, uint32_t nmodules,
|
|
JFConversion *conversion = nullptr);
|
|
~ProcessJFPacket();
|
|
bool ProcessPacket(jf_payload *datagram, uint32_t src_ip);
|
|
};
|
|
|
|
|
|
#endif //JUNGFRAUJOCH_PROCESSJFPACKET_H
|