37 TimingEndpointNotReady,
38 endpoint <<
" timing endpoint did not become ready in time. State 0x" << std::hex << state,
39 ((std::string)endpoint)((uint)state)
46 std::atomic<T> atomic;
52 explicit MobileAtomic(T
const& v)
55 explicit MobileAtomic(std::atomic<T>
const& a)
59 virtual ~MobileAtomic() =
default;
61 MobileAtomic(MobileAtomic
const& other)
62 : atomic(other.atomic.load())
65 MobileAtomic& operator=(MobileAtomic
const& other)
67 atomic.store(other.atomic.load());
71 MobileAtomic(MobileAtomic&&) =
default;
72 MobileAtomic& operator=(MobileAtomic&&) =
default;
75typedef MobileAtomic<uint64_t> AtomicUInt64;
81class TimingController :
public dunedaq::appfwk::DAQModule
88 explicit TimingController(
const std::string& name, uint number_hw_commands);
90 TimingController(
const TimingController&) =
delete;
91 TimingController& operator=(
const TimingController&) =
delete;
92 TimingController(TimingController&&) =
delete;
93 TimingController& operator=(TimingController&&) =
delete;
95 void init(std::shared_ptr<appfwk::ConfigurationManager> mcfg)
override;
99 virtual void do_configure(
const nlohmann::json&);
100 virtual void do_start(
const nlohmann::json&) {}
101 virtual void do_stop(
const nlohmann::json&) {}
102 virtual void do_scrap(
const nlohmann::json&);
104 template<
class T,
class... Vs>
105 void configure_hardware_or_recover_state(
const nlohmann::json& data, std::string timing_entity_description,
const Vs& ... args);
108 std::string m_hw_command_out_connection;
109 std::chrono::milliseconds m_hw_cmd_out_timeout;
111 std::shared_ptr<sink_t> m_hw_command_sender;
112 std::string m_timing_device;
113 std::string m_timing_session_name;
115 std::shared_ptr<source_t> m_device_info_receiver;
117 virtual void send_hw_cmd(timingcmd::TimingHwCmd&& hw_cmd);
118 virtual void send_configure_hardware_commands(
const nlohmann::json& data) = 0;
121 uint m_number_hw_commands;
122 std::vector<AtomicUInt64> m_sent_hw_command_counters;
125 virtual void process_device_info(nlohmann::json ) = 0;
126 std::chrono::milliseconds m_device_ready_timeout;
127 std::atomic<bool> m_device_ready;
128 std::atomic<uint> m_device_infos_received_count;
129 std::atomic<bool> m_hardware_state_recovery_enabled;
132 timingcmd::TimingHwCmd construct_hw_cmd(
const std::string& cmd_id);
133 timingcmd::TimingHwCmd construct_hw_cmd(
const std::string& cmd_id,
const nlohmann::json& payload);
134 virtual void do_io_reset(
const nlohmann::json& data);
135 virtual void do_print_status(
const nlohmann::json& data);
136 const dal::TimingControllerConf* m_params;