DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
TimingHardwareManagerBase.hpp
Go to the documentation of this file.
1
12#ifndef TIMINGLIBS_SRC_TIMINGHARDWAREMANAGER_HPP_
13#define TIMINGLIBS_SRC_TIMINGHARDWAREMANAGER_HPP_
14
15#include "InfoGatherer.hpp"
21
22#include "appfwk/DAQModule.hpp"
23#include "ers/Issue.hpp"
25#include "logging/Logging.hpp"
26
29
30#include "timing/TimingNode.hpp"
35
36#include "uhal/ConnectionManager.hpp"
38
39#include <map>
40#include <memory>
41#include <regex>
42#include <string>
43#include <vector>
44
45namespace dunedaq {
46namespace timinglibs {
47
52class TimingHardwareManagerBase : public dunedaq::appfwk::DAQModule, public timinglibs::TimingHardwareInterface
53{
54public:
59 explicit TimingHardwareManagerBase(const std::string& name);
60
63 delete;
67
68 void init(std::shared_ptr<appfwk::ConfigurationManager> mcfg) override;
69 virtual void conf(const nlohmann::json& data);
70
71protected:
72 // Commands
73 // virtual void do_configure(const nlohmann::json&);
74 // virtual void do_start(const nlohmann::json&);
75 // virtual void do_stop(const nlohmann::json&);
76 virtual void do_scrap(const nlohmann::json&);
77
78
79 virtual void process_hardware_command(timingcmd::TimingHwCmd& timing_hw_cmd);
80
81 // Configuration
84 std::shared_ptr<source_t> m_hw_command_receiver;
85
86 // hardware polling intervals [us]
87 // TODO change to duration::milliseconds
90
91 // uhal members
92 std::map<std::string, std::unique_ptr<uhal::HwInterface>> m_hw_device_map;
94
95 // managed timing devices
97 std::map<uint, std::string> m_monitored_device_names_fanout;
100
105
106 // retrieve top level/design object for a timing device
107 template<class TIMING_DEV>
108 TIMING_DEV get_timing_device(const std::string& device_name);
109 const timing::TimingNode* get_timing_device_plain(const std::string& device_name);
110
111 // timing hw cmds stuff
113
114 template<typename Child>
115 void register_timing_hw_command(const std::string& hw_cmd_id, void (Child::*f)(const timingcmd::TimingHwCmd&));
116
117 // timing common commands
118 void io_reset(const timingcmd::TimingHwCmd& hw_cmd);
119 void print_status(const timingcmd::TimingHwCmd& hw_cmd);
120
121 // timing master commands
122 void set_timestamp(const timingcmd::TimingHwCmd& hw_cmd);
123 void set_endpoint_delay(const timingcmd::TimingHwCmd& hw_cmd);
124 void send_fl_cmd(const timingcmd::TimingHwCmd& hw_cmd);
126
127 // timing partition commands
128 virtual void partition_configure(const timingcmd::TimingHwCmd& hw_cmd) = 0;
129
130 // timing endpoint commands
131 void endpoint_enable(const timingcmd::TimingHwCmd& hw_cmd);
132 void endpoint_disable(const timingcmd::TimingHwCmd& hw_cmd);
133 void endpoint_reset(const timingcmd::TimingHwCmd& hw_cmd);
134
135 // hsi
136 void hsi_reset(const timingcmd::TimingHwCmd& hw_cmd);
137 void hsi_configure(const timingcmd::TimingHwCmd& hw_cmd);
138 void hsi_start(const timingcmd::TimingHwCmd& hw_cmd);
139 void hsi_stop(const timingcmd::TimingHwCmd& hw_cmd);
140 void hsi_print_status(const timingcmd::TimingHwCmd& hw_cmd);
141
142 // opmon stuff
143 std::atomic<uint64_t> m_received_hw_commands_counter; // NOLINT(build/unsigned)
144 std::atomic<uint64_t> m_accepted_hw_commands_counter; // NOLINT(build/unsigned)
145 std::atomic<uint64_t> m_rejected_hw_commands_counter; // NOLINT(build/unsigned)
146 std::atomic<uint64_t> m_failed_hw_commands_counter; // NOLINT(build/unsigned)
147
148 // monitoring
149 std::map<std::string, std::unique_ptr<InfoGatherer>> m_info_gatherers;
150
151 void register_info_gatherer(uint gather_interval, const std::string& device_name, int op_mon_level);
152 void gather_monitor_data(InfoGatherer& gatherer);
153
154 virtual void start_hw_mon_gathering(const std::string& device_name = "");
155 virtual void stop_hw_mon_gathering(const std::string& device_name = "");
156 virtual std::vector<std::string> check_hw_mon_gatherer_is_running(const std::string& device_name);
157
159 std::map<std::string, std::unique_ptr<std::thread>> m_command_threads;
161 virtual void perform_endpoint_scan(const timingcmd::TimingHwCmd& hw_cmd);
162 virtual void clean_endpoint_scan_threads();
163 std::unique_ptr<dunedaq::utilities::ReusableThread> m_endpoint_scan_threads_clean_up_thread;
167};
168
169} // namespace timinglibs
170} // namespace dunedaq
171
173
174#endif // TIMINGLIBS_SRC_TIMINGHARDWAREMANAGER_HPP_
175
176// Local Variables:
177// c-basic-offset: 2
178// End:
Base class for timing nodes.
TimingHardwareInterface sets up IPBus UHAL interface.
TimingHardwareManagerBase creates vectors of ints and writes them to the configured output queues.
const timing::TimingNode * get_timing_device_plain(const std::string &device_name)
void hsi_stop(const timingcmd::TimingHwCmd &hw_cmd)
void io_reset(const timingcmd::TimingHwCmd &hw_cmd)
void print_status(const timingcmd::TimingHwCmd &hw_cmd)
void register_info_gatherer(uint gather_interval, const std::string &device_name, int op_mon_level)
TIMING_DEV get_timing_device(const std::string &device_name)
std::map< std::string, std::unique_ptr< uhal::HwInterface > > m_hw_device_map
virtual void perform_endpoint_scan(const timingcmd::TimingHwCmd &hw_cmd)
void endpoint_reset(const timingcmd::TimingHwCmd &hw_cmd)
void init(std::shared_ptr< appfwk::ConfigurationManager > mcfg) override
TimingHardwareManagerBase(const TimingHardwareManagerBase &)=delete
TimingHardwareManagerBase is not copy-constructible.
void hsi_reset(const timingcmd::TimingHwCmd &hw_cmd)
void set_endpoint_delay(const timingcmd::TimingHwCmd &hw_cmd)
virtual void process_hardware_command(timingcmd::TimingHwCmd &timing_hw_cmd)
std::unique_ptr< dunedaq::utilities::ReusableThread > m_endpoint_scan_threads_clean_up_thread
void hsi_configure(const timingcmd::TimingHwCmd &hw_cmd)
virtual void partition_configure(const timingcmd::TimingHwCmd &hw_cmd)=0
void set_timestamp(const timingcmd::TimingHwCmd &hw_cmd)
TimingHardwareManagerBase(TimingHardwareManagerBase &&)=delete
TimingHardwareManagerBase is not move-constructible.
virtual void start_hw_mon_gathering(const std::string &device_name="")
virtual void stop_hw_mon_gathering(const std::string &device_name="")
void hsi_print_status(const timingcmd::TimingHwCmd &hw_cmd)
void send_fl_cmd(const timingcmd::TimingHwCmd &hw_cmd)
void hsi_start(const timingcmd::TimingHwCmd &hw_cmd)
TimingHardwareManagerBase & operator=(TimingHardwareManagerBase &&)=delete
TimingHardwareManagerBase is not move-assignable.
std::map< std::string, std::unique_ptr< std::thread > > m_command_threads
void register_timing_hw_command(const std::string &hw_cmd_id, void(Child::*f)(const timingcmd::TimingHwCmd &))
std::map< timingcmd::TimingHwCmdId, std::function< void(const timingcmd::TimingHwCmd &)> > m_timing_hw_cmd_map_
void endpoint_enable(const timingcmd::TimingHwCmd &hw_cmd)
TimingHardwareManagerBase(const std::string &name)
TimingHardwareManagerBase Constructor.
void endpoint_disable(const timingcmd::TimingHwCmd &hw_cmd)
const timinglibs::dal::TimingHardwareManagerConf * m_params
virtual std::vector< std::string > check_hw_mon_gatherer_is_running(const std::string &device_name)
TimingHardwareManagerBase & operator=(const TimingHardwareManagerBase &)=delete
TimingHardwareManagerBase is not copy-assignable.
virtual void conf(const nlohmann::json &data)
void master_endpoint_scan(const timingcmd::TimingHwCmd &hw_cmd)
std::map< std::string, std::unique_ptr< InfoGatherer > > m_info_gatherers
Including Qt Headers.