AcquisitionDevice: Set cancel data collection bit before starting new data collection

This commit is contained in:
2023-05-27 21:54:36 +02:00
parent 72cdb88c0c
commit effcd2d2b7
3 changed files with 13 additions and 5 deletions

View File

@@ -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"));

View File

@@ -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 {

View File

@@ -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;