Files
Jungfraujoch/jungfrau/ProcessJFPacket.h

37 lines
988 B
C++

// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_PROCESSJFPACKET_H
#define JUNGFRAUJOCH_PROCESSJFPACKET_H
#include "../common/ThreadSafeFIFO.h"
#include "../common/DiffractionExperiment.h"
#include "../receiver/Completion.h"
#include "JFConversion.h"
#include "JFCalibration.h"
#include "jf_packet.h"
#include <shared_mutex>
struct ModuleInfo {
uint16_t *ptr;
Completion c;
};
class ProcessJFPacket {
std::atomic<uint32_t> completed_descriptors;
std::vector<std::mutex> m;
ThreadSafeFIFO<Completion> &c_fifo;
ThreadSafeFIFO<WorkRequest> &wr_fifo;
std::vector<ModuleInfo> module_info;
std::atomic<uint64_t> packet_counter = 0;
public:
ProcessJFPacket(ThreadSafeFIFO<Completion> &c, ThreadSafeFIFO<WorkRequest> &wr, uint32_t nmodules);
~ProcessJFPacket();
void ProcessPacket(jf_udp_payload *datagram);
uint64_t GetCounter();
uint32_t GetCompletedDescriptors() const;
};
#endif //JUNGFRAUJOCH_PROCESSJFPACKET_H