From effcd2d2b7432d4fd8c2bde917e4697cb7fa162e Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 27 May 2023 21:54:36 +0200 Subject: [PATCH] AcquisitionDevice: Set cancel data collection bit before starting new data collection --- receiver/host/AcquisitionDevice.cpp | 2 ++ receiver/host/MockAcquisitionDevice.cpp | 14 +++++++++----- receiver/host/MockAcquisitionDevice.h | 2 ++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/receiver/host/AcquisitionDevice.cpp b/receiver/host/AcquisitionDevice.cpp index 81fc129b..715eb275 100644 --- a/receiver/host/AcquisitionDevice.cpp +++ b/receiver/host/AcquisitionDevice.cpp @@ -80,6 +80,8 @@ void AcquisitionDevice::PrepareAction(const DiffractionExperiment &experiment) { } void AcquisitionDevice::StartAction(const DiffractionExperiment &experiment) { + HW_SetCancelDataCollectionBit(); + if (!HW_IsIdle()) throw(JFJochException(JFJochExceptionCategory::AcquisitionDeviceError, "Hardware action running prior to start of data acquisition")); diff --git a/receiver/host/MockAcquisitionDevice.cpp b/receiver/host/MockAcquisitionDevice.cpp index 1571aab9..f78421c1 100644 --- a/receiver/host/MockAcquisitionDevice.cpp +++ b/receiver/host/MockAcquisitionDevice.cpp @@ -13,12 +13,16 @@ void MockAcquisitionDevice::HW_WriteActionRegister(const ActionConfig *job) { memcpy(&cfg, job, sizeof(ActionConfig)); } -void MockAcquisitionDevice::HW_StartAction() {} +void MockAcquisitionDevice::HW_StartAction() { + idle = false; +} void MockAcquisitionDevice::HW_SetCancelDataCollectionBit() { - if (logger) - logger->Info("MockAcquisitionDevice cancelling " + std::to_string(data_stream)); - Terminate(); + if (!idle) { + if (logger) + logger->Info("MockAcquisitionDevice cancelling " + std::to_string(data_stream)); + Terminate(); + } } bool MockAcquisitionDevice::HW_IsIdle() const { @@ -65,7 +69,7 @@ void MockAcquisitionDevice::Terminate() { .type = Completion::Type::End, .frame_number = current_handle * 128 }); - work_completion_queue.Put(Completion{.type = Completion::Type::Start}); + idle = true; } uint64_t MockAcquisitionDevice::HW_GetMACAddress() const { diff --git a/receiver/host/MockAcquisitionDevice.h b/receiver/host/MockAcquisitionDevice.h index 0af04f15..d20b8dc1 100644 --- a/receiver/host/MockAcquisitionDevice.h +++ b/receiver/host/MockAcquisitionDevice.h @@ -12,6 +12,8 @@ class MockAcquisitionDevice : public AcquisitionDevice { uint32_t max_handle = 0; ActionConfig cfg; + bool idle = true; + void SendCompletion(uint32_t handle, uint16_t module_number, uint64_t frame_number); constexpr static const uint32_t frames_int_pkt_gen = 1; void HW_ReadActionRegister(ActionConfig *job) override;