FPGAAcquisitionDevice: add option to customize execution flags

This commit is contained in:
2023-10-25 22:21:12 +02:00
parent 4e60bb2f9e
commit 7df76a5c76
10 changed files with 14 additions and 13 deletions

View File

@@ -46,7 +46,7 @@ void AcquisitionDevice::PrepareAction(const DiffractionExperiment &experiment) {
counters.Reset(experiment, data_stream);
}
void AcquisitionDevice::StartAction(const DiffractionExperiment &experiment) {
void AcquisitionDevice::StartAction(const DiffractionExperiment &experiment, uint32_t optional_flags) {
Cancel();
if (experiment.GetModulesNum(data_stream) > max_modules)
@@ -66,7 +66,7 @@ void AcquisitionDevice::StartAction(const DiffractionExperiment &experiment) {
// Ensure internal WR queue is empty
work_request_queue.Clear();
Start(experiment);
Start(experiment, optional_flags);
for (uint32_t i = 0; i < buffer_device.size(); i++)
SendWorkRequest(i);

View File

@@ -53,7 +53,7 @@ class AcquisitionDevice {
int64_t expected_frames;
virtual void Start(const DiffractionExperiment& experiment) = 0;
virtual void Start(const DiffractionExperiment& experiment, uint32_t flags) = 0;
virtual void Finalize() {}; // do clean-up after action is done
virtual void StartSendingWorkRequests() {};
void SendWorkRequest(uint32_t handle);
@@ -81,7 +81,7 @@ public:
virtual ~AcquisitionDevice() { UnmapBuffers(); };
void StartAction(const DiffractionExperiment &experiment);
void StartAction(const DiffractionExperiment &experiment, uint32_t optional_flags = 0);
void PrepareAction(const DiffractionExperiment &experiment);
void WaitForActionComplete();

View File

@@ -188,14 +188,15 @@ void FPGAAcquisitionDevice::FillActionRegister(const DiffractionExperiment& x, D
job.mode |= MODE_CONV;
}
void FPGAAcquisitionDevice::Start(const DiffractionExperiment &experiment) {
void FPGAAcquisitionDevice::Start(const DiffractionExperiment &experiment, uint32_t flag) {
if (!HW_IsIdle())
throw(JFJochException(JFJochExceptionCategory::AcquisitionDeviceError,
"Hardware action running prior to start of data acquisition"));
DataCollectionConfig cfg_in{}, cfg_out{};
FillActionRegister(experiment, cfg_in);
cfg_in.mode |= flag;
HW_WriteActionRegister(&cfg_in);
HW_ReadActionRegister(&cfg_out);

View File

@@ -33,7 +33,7 @@ class FPGAAcquisitionDevice : public AcquisitionDevice {
virtual bool HW_SendWorkRequest(uint32_t handle) = 0;
virtual void HW_SetSpotFinderParameters(const SpotFinderParameters &params) = 0;
void StartSendingWorkRequests() override;
void Start(const DiffractionExperiment &experiment) override;
void Start(const DiffractionExperiment &experiment, uint32_t flag) override;
protected:
std::vector<uint16_t> internal_pkt_gen_frame;
explicit FPGAAcquisitionDevice(uint16_t data_stream);

View File

@@ -50,7 +50,7 @@ void LinuxSocketDevice::MeasureThread(int fd) {
close(fd);
}
void LinuxSocketDevice::Start(const DiffractionExperiment& experiment) {
void LinuxSocketDevice::Start(const DiffractionExperiment& experiment, uint32_t optional_flags) {
if (experiment.GetConversionOnFPGA())
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Conversion on CPU flag has to be enabled for Raw Ethernet device");

View File

@@ -18,7 +18,7 @@ class LinuxSocketDevice : public AcquisitionDevice {
volatile bool cancel = false;
void Start(const DiffractionExperiment& experiment) override;
void Start(const DiffractionExperiment& experiment, uint32_t optional_flags) override;
void Finalize() override;
void MeasureThread(int fd);

View File

@@ -72,7 +72,7 @@ void MlxRawEthDevice::MeasureThread() {
});
}
void MlxRawEthDevice::Start(const DiffractionExperiment& experiment) {
void MlxRawEthDevice::Start(const DiffractionExperiment& experiment, uint32_t optional_flags) {
if (experiment.GetConversionOnFPGA())
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Conversion on CPU flag has to be enabled for Raw Ethernet device");

View File

@@ -34,7 +34,7 @@ class MlxRawEthDevice : public AcquisitionDevice {
ProcessJFPacket &process);
void MeasureThread();
void Start(const DiffractionExperiment& experiment) override;
void Start(const DiffractionExperiment& experiment, uint32_t optional_flags) override;
void Finalize() override;
public:
MlxRawEthDevice(uint16_t dev_id, uint16_t data_stream, size_t in_frame_buffer_size_modules,

View File

@@ -5,7 +5,7 @@
#include <bitset>
#include "../jungfrau/JFConversionFloatingPoint.h"
void MockAcquisitionDevice::Start(const DiffractionExperiment& experiment) {
void MockAcquisitionDevice::Start(const DiffractionExperiment& experiment, uint32_t optional_flags) {
idle = false;
cancel = false;
completed_descriptors = 0;

View File

@@ -19,7 +19,7 @@ class MockAcquisitionDevice : public AcquisitionDevice {
ThreadSafeFIFO<Completion> mock_completions;
void SendCompletion(uint32_t handle, uint16_t module_number, uint64_t frame_number);
void Start(const DiffractionExperiment& experiment) override;
void Start(const DiffractionExperiment& experiment, uint32_t optional_flags) override;
void MeasureThread();
void InternalPacketGeneratorThread(uint32_t nmodules, uint32_t nframes);
public: