37 TimingEndpointNotReady,
38 endpoint <<
" timing endpoint did not become ready in time. State 0x" << std::hex
40 ((std::string)endpoint)((uint)state)
47 std::atomic<T> atomic;
54 explicit MobileAtomic(T
const&
v)
58 explicit MobileAtomic(std::atomic<T>
const& a)
63 virtual ~MobileAtomic() =
default;
65 MobileAtomic(MobileAtomic
const& other)
66 : atomic(other.atomic.load())
70 MobileAtomic& operator=(MobileAtomic
const& other)
72 atomic.store(other.atomic.load());
76 MobileAtomic(MobileAtomic&&) =
default;
77 MobileAtomic& operator=(MobileAtomic&&) =
default;
80typedef MobileAtomic<uint64_t> AtomicUInt64;
86class TimingController :
public dunedaq::appfwk::DAQModule
93 explicit TimingController(
const std::string& name, uint number_hw_commands);
95 TimingController(
const TimingController&) =
delete;
96 TimingController& operator=(
const TimingController&) =
delete;
97 TimingController(TimingController&&) =
delete;
98 TimingController& operator=(TimingController&&) =
delete;
100 void init(std::shared_ptr<appfwk::ConfigurationManager> mcfg)
override;
104 virtual void do_configure(
const CommandData_t&);
105 virtual void do_start(
const CommandData_t&) {}
106 virtual void do_stop(
const CommandData_t&) {}
107 virtual void do_scrap(
const CommandData_t&);
109 template<
class T,
class... Vs>
110 void configure_hardware_or_recover_state(
const nlohmann::json& data,
111 std::string timing_entity_description,
115 std::string m_hw_command_out_connection;
116 std::chrono::milliseconds m_hw_cmd_out_timeout;
118 std::shared_ptr<sink_t> m_hw_command_sender;
119 std::string m_timing_device;
120 std::string m_timing_session_name;
122 std::shared_ptr<source_t> m_device_info_receiver;
124 virtual void send_hw_cmd(timingcmd::TimingHwCmd&& hw_cmd);
125 virtual void send_configure_hardware_commands(
const CommandData_t& data) = 0;
128 uint m_number_hw_commands;
129 std::vector<AtomicUInt64> m_sent_hw_command_counters;
132 virtual void process_device_info(nlohmann::json ) = 0;
133 std::chrono::milliseconds m_device_ready_timeout;
134 std::atomic<bool> m_device_ready;
135 std::atomic<uint> m_device_infos_received_count;
136 std::atomic<bool> m_hardware_state_recovery_enabled;
139 timingcmd::TimingHwCmd construct_hw_cmd(
const std::string& cmd_id);
140 timingcmd::TimingHwCmd construct_hw_cmd(
const std::string& cmd_id,
const nlohmann::json& payload);
141 virtual void do_io_reset(
const CommandData_t& data);
142 virtual void do_print_status(
const CommandData_t& data);
143 const dal::TimingControllerConf* m_params;