AcquisitionDevice: Completion queue is handled by particular implementation of the device
This commit is contained in:
@@ -118,22 +118,20 @@ void AcquisitionDevice::StartAction(const DiffractionExperiment &experiment) {
|
||||
throw JFJochException(JFJochExceptionCategory::AcquisitionDeviceError,
|
||||
"Mismatch between expected and actual values of configuration registers (#modules)");
|
||||
|
||||
// Ensure internal queues are empty
|
||||
// Ensure internal WR queue is empty
|
||||
work_request_queue.Clear();
|
||||
work_completion_queue.Clear();
|
||||
|
||||
HW_StartAction();
|
||||
|
||||
send_work_request_future = std::async(std::launch::async, &AcquisitionDevice::SendWorkRequestThread, this);
|
||||
read_work_completion_future = std::async(std::launch::async, &AcquisitionDevice::ReadWorkCompletionThread, this);
|
||||
|
||||
for (uint32_t i = 0; i < buffer_device.size(); i++)
|
||||
SendWorkRequest(i);
|
||||
|
||||
auto c = work_completion_queue.GetBlocking();
|
||||
if (c.type != Completion::Type::Start)
|
||||
throw JFJochException(JFJochExceptionCategory::AcquisitionDeviceError, "Mismatch in completion queue");
|
||||
|
||||
for (uint32_t i = 0; i < buffer_device.size(); i++)
|
||||
SendWorkRequest(i);
|
||||
|
||||
start_time = std::chrono::system_clock::now();
|
||||
}
|
||||
|
||||
@@ -162,14 +160,6 @@ const std::vector<uint16_t> &AcquisitionDevice::GetInternalGeneratorFrame() cons
|
||||
return internal_pkt_gen_frame;
|
||||
}
|
||||
|
||||
void AcquisitionDevice::ReadWorkCompletionThread() {
|
||||
Completion c;
|
||||
do {
|
||||
c = ReadCompletion();
|
||||
work_completion_queue.PutBlocking(c);
|
||||
} while (c.type != Completion::Type::End);
|
||||
}
|
||||
|
||||
void AcquisitionDevice::WaitForActionComplete() {
|
||||
auto c = work_completion_queue.GetBlocking();
|
||||
|
||||
@@ -193,7 +183,7 @@ void AcquisitionDevice::WaitForActionComplete() {
|
||||
c = work_completion_queue.GetBlocking();
|
||||
}
|
||||
bytes_received = c.frame_number * 8192LU;
|
||||
read_work_completion_future.get();
|
||||
|
||||
counters.SetAcquisitionFinished();
|
||||
|
||||
end_time = std::chrono::system_clock::now();
|
||||
|
||||
Reference in New Issue
Block a user