REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
run.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
4
5#pragma once
6
7#include <ArduinoJson.h>
8#include <queue>
9#include <string>
10
11#include "daq/base.h"
12#include "mode/mode.h"
13
14namespace run {
15
16enum class RunState { NEW, ERROR, DONE, QUEUED, TAKE_OFF, IC, OP, OP_END, TMP_HALT, _COUNT __attribute__((unused))
17};
18
19constexpr const char* RunStateNames[static_cast<unsigned int>(RunState::_COUNT)] = {
20 "NEW", "ERROR", "DONE", "QUEUED", "TAKE_OFF", "IC", "OP", "OP_END", "TMP_HALT"
21};
22
24public:
25 unsigned long long t;
28};
29
34class RunConfig {
35public:
36 uint64_t ic_time = 100'000;
37 uint64_t op_time = 500'000'000;
38 bool halt_on_overload = false;
39 bool streaming = false;
40 bool repetitive = false;
42 bool calibrate = false;
43
44 static RunConfig from_json(JsonObjectConst &json);
45};
46
47class Run {
48public:
49 const std::string id;
53
54protected:
55 std::queue<RunStateChange, std::array<RunStateChange, 7>> history;
56
57public:
58 Run(std::string id, const RunConfig &config, const daq::DAQConfig &daq_config);
59 Run(std::string id, const RunConfig &config);
60 static Run from_json(JsonObjectConst &json);
61
62 RunStateChange to(RunState new_state, unsigned int t = 0);
63
64};
65
67public:
68 virtual void handle(run::RunStateChange change, const run::Run &run) = 0;
69};
70
72public:
73 volatile bool first_data = false;
74 volatile bool last_data = false;
75 virtual void init() {};
76 virtual void handle(volatile uint32_t *data, size_t outer_count, size_t inner_count, const run::Run &run) = 0;
77 virtual void stream(volatile uint32_t *buffer, run::Run &run) = 0;
78 virtual void prepare(Run& run) = 0;
79};
80
81} // namespace run
Data acquisition configuration.
Definition base.h:29
The RunConfig data structure defines the properties for a run.
Definition run.h:34
bool repetitive
"Rep-Mode": Start run after it has finished.
Definition run.h:40
uint64_t op_time
Requested Operations time in Nanoseconds.
Definition run.h:37
uint64_t ic_time
Requested Initial Conditions time in Nanoseconds.
Definition run.h:36
static RunConfig from_json(JsonObjectConst &json)
Definition run.cpp:10
bool write_run_state_changes
Whether client is interested in run state change messages.
Definition run.h:41
bool halt_on_overload
Whether to halt the computation on an overload condition.
Definition run.h:38
bool calibrate
Whether to calibrate before the run starts.
Definition run.h:42
bool streaming
Request either streaming RunManager (FlexIO/DMA) or traditional inexact non-streaming run.
Definition run.h:39
virtual void init()
Definition run.h:75
virtual void handle(volatile uint32_t *data, size_t outer_count, size_t inner_count, const run::Run &run)=0
volatile bool first_data
Definition run.h:73
virtual void prepare(Run &run)=0
virtual void stream(volatile uint32_t *buffer, run::Run &run)=0
volatile bool last_data
Definition run.h:74
virtual void handle(run::RunStateChange change, const run::Run &run)=0
unsigned long long t
Definition run.h:25
RunState old
Definition run.h:26
RunState new_
Definition run.h:27
Definition run.h:47
std::queue< RunStateChange, std::array< RunStateChange, 7 > > history
Definition run.h:55
Run(std::string id, const RunConfig &config, const daq::DAQConfig &daq_config)
Definition run.cpp:62
RunConfig config
(User-provided) timing requests
Definition run.h:50
const std::string id
(User-provided) Supposed to be a UUID which allows to identify Out-of-band messages
Definition run.h:49
static Run from_json(JsonObjectConst &json)
Definition run.cpp:66
daq::DAQConfig daq_config
(User-provided) Data Aquisition request
Definition run.h:52
RunStateChange to(RunState new_state, unsigned int t=0)
Definition run.cpp:78
RunState state
(System-steered)
Definition run.h:51
uint32_t
Definition flasher.cpp:195
Definition run.h:14
RunState
Definition run.h:16
constexpr const char * RunStateNames[static_cast< unsigned int >(RunState::_COUNT)]
Definition run.h:19