FPGAAcquisitionDevice: add option to customize execution flags
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class FPGAAcquisitionDevice : public AcquisitionDevice {
|
||||
virtual bool HW_SendWorkRequest(uint32_t handle) = 0;
|
||||
virtual void HW_SetSpotFinderParameters(const SpotFinderParameters ¶ms) = 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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user