DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
TimingEndpointControllerBase.cpp
Go to the documentation of this file.
1
13
17
20
21#include "appfwk/cmd/Nljs.hpp"
22#include "ers/Issue.hpp"
23#include "logging/Logging.hpp"
24
25#include <chrono>
26#include <cstdlib>
27#include <string>
28#include <thread>
29#include <vector>
30
31namespace dunedaq {
32namespace timinglibs {
33
34TimingEndpointControllerBase::TimingEndpointControllerBase(const std::string& name, uint number_hw_commands)
35 : dunedaq::timinglibs::TimingController(name, number_hw_commands) // 2nd arg: how many hw commands can this module send?
36{
37 // timing endpoint hardware commands
38 register_command("endpoint_enable", &TimingEndpointControllerBase::do_endpoint_enable);
39 register_command("endpoint_disable", &TimingEndpointControllerBase::do_endpoint_disable);
40 register_command("endpoint_reset", &TimingEndpointControllerBase::do_endpoint_reset);
41}
42
43void
45{
46 auto mdal = m_params->cast<dal::TimingEndpointControllerConf>();
47
48 TimingController::do_configure(data); // configure hw command connection
49
50 // endpoint per device in config for now...
51 m_managed_endpoint_id = {mdal->get_endpoint_id()};
52
53 configure_hardware_or_recover_state<TimingEndpointNotReady>(data, "Timing endpoint", m_endpoint_state);
54
55 TLOG() << get_name() << " conf done for endpoint, device: " << m_timing_device;
56}
57
58void
60{
61 do_io_reset(data);
62 std::this_thread::sleep_for(std::chrono::microseconds(7000000));
64}
65
67TimingEndpointControllerBase::construct_endpoint_hw_cmd( const std::string& cmd_id, uint endpoint_id)
68{
71 // where to check endpoint id validity
72 cmd_payload.endpoint_id = endpoint_id;
73 timingcmd::to_json(hw_cmd.payload, cmd_payload);
74
75 hw_cmd.id = cmd_id;
76 hw_cmd.device = m_timing_device;
77 return hw_cmd;
78}
79
80void
82{
84 construct_hw_cmd( "endpoint_enable", data);
85
86 // print out some debug info
88 timingcmd::from_json(data, cmd_payload);
89
90 TLOG_DEBUG(0) << "ept enable hw cmd; a: " << cmd_payload.address;
91 send_hw_cmd(std::move(hw_cmd));
92 ++(m_sent_hw_command_counters.at(2).atomic);
93}
94
95void
97{
99 construct_hw_cmd( "endpoint_disable", data);
100 send_hw_cmd(std::move(hw_cmd));
101 ++(m_sent_hw_command_counters.at(3).atomic);
102}
103
104void
106{
108 construct_hw_cmd( "endpoint_reset", data);
109
110 send_hw_cmd(std::move(hw_cmd));
111 ++(m_sent_hw_command_counters.at(4).atomic);
112}
113
114//void
115//TimingEndpointControllerBase::get_info(opmonlib::InfoCollector& ci, int /*level*/)
116//{
117
118 // send counters internal to the module
119// timingendpointcontrollerinfo::Info module_info;
120// module_info.sent_endpoint_io_reset_cmds = m_sent_hw_command_counters.at(0).atomic.load();
121// module_info.sent_endpoint_print_status_cmds = m_sent_hw_command_counters.at(1).atomic.load();
122
123// module_info.sent_endpoint_enable_cmds = m_sent_hw_command_counters.at(2).atomic.load();
124// module_info.sent_endpoint_disable_cmds = m_sent_hw_command_counters.at(3).atomic.load();
125// module_info.sent_endpoint_reset_cmds = m_sent_hw_command_counters.at(4).atomic.load();
126// module_info.sent_endpoint_print_timestamp_cmds = m_sent_hw_command_counters.at(5).atomic.load();
127// ci.add(module_info);
128//}
129
130void
132{
133 ++m_device_infos_received_count;
134
136 from_json(info, device_info);
137
138 auto ept_info = device_info.endpoint_info;
139
140 m_endpoint_state = ept_info.state;
141 bool ready = ept_info.ready;
142
143 TLOG_DEBUG(3) << "state: 0x" << std::hex << m_endpoint_state << ", ready: " << ready << std::dec << ", infos received: " << m_device_infos_received_count;
144
145 if (m_endpoint_state == 0x8 && ready)
146 {
147 if (!m_device_ready)
148 {
149 m_device_ready = true;
150 TLOG_DEBUG(2) << "Timing endpoint became ready";
151 }
152 }
153 else
154 {
155 if (m_device_ready)
156 {
157 m_device_ready = false;
158 TLOG_DEBUG(2) << "Timing endpoint no longer ready";
159 }
160 }
161}
162} // namespace timinglibs
163} // namespace dunedaq
164
165// Local Variables:
166// c-basic-offset: 2
167// End:
virtual void do_endpoint_disable(const nlohmann::json &data)
timingcmd::TimingHwCmd construct_endpoint_hw_cmd(const std::string &cmd_id, uint endpoint_id)
void send_configure_hardware_commands(const nlohmann::json &data) override
TimingEndpointControllerBase(const std::string &name, uint number_hw_commands)
TimingEndpointControllerBase Constructor.
virtual void do_endpoint_enable(const nlohmann::json &data)
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
#define TLOG(...)
Definition macro.hpp:22
void from_json(const data_t &j, EndpointLocation &obj)
Definition Nljs.hpp:26
void to_json(data_t &j, const EndpointLocation &obj)
Definition Nljs.hpp:20
Including Qt Headers.
timingendpointinfo::TimingEndpointInfo endpoint_info
Definition Structs.hpp:117