DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
timinglibs
src
TimingEndpointControllerBase.cpp
Go to the documentation of this file.
1
9
10
#include "
timinglibs/TimingEndpointControllerBase.hpp
"
11
#include "
timinglibs/dal/TimingEndpointControllerBase.hpp
"
12
#include "
timinglibs/dal/TimingEndpointControllerConf.hpp
"
13
14
#include "
timinglibs/TimingIssues.hpp
"
15
#include "
timinglibs/timingcmd/Nljs.hpp
"
16
#include "
timinglibs/timingcmd/Structs.hpp
"
17
18
#include "
timing/timingfirmwareinfo/Nljs.hpp
"
19
#include "
timing/timingfirmwareinfo/Structs.hpp
"
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
31
namespace
dunedaq
{
32
namespace
timinglibs
{
33
34
TimingEndpointControllerBase::TimingEndpointControllerBase
(
const
std::string& name, uint number_hw_commands)
35
:
dunedaq
::
timinglibs
::TimingController(name,
36
number_hw_commands)
// 2nd arg: how many hw commands can this module send?
37
{
38
// timing endpoint hardware commands
39
register_command(
"endpoint_enable"
, &
TimingEndpointControllerBase::do_endpoint_enable
);
40
register_command(
"endpoint_disable"
, &
TimingEndpointControllerBase::do_endpoint_disable
);
41
register_command(
"endpoint_reset"
, &
TimingEndpointControllerBase::do_endpoint_reset
);
42
}
43
44
void
45
TimingEndpointControllerBase::do_configure
(
const
CommandData_t& data)
46
{
47
auto
mdal = m_params->cast<
dal::TimingEndpointControllerConf
>();
48
49
TimingController::do_configure(data);
// configure hw command connection
50
51
// endpoint per device in config for now...
52
m_managed_endpoint_id
= { mdal->get_endpoint_id() };
53
54
configure_hardware_or_recover_state<TimingEndpointNotReady>(data,
"Timing endpoint"
,
m_endpoint_state
);
55
56
TLOG
() << get_name() <<
" conf done for endpoint, device: "
<< m_timing_device;
57
}
58
59
void
60
TimingEndpointControllerBase::send_configure_hardware_commands
(
const
CommandData_t& data)
61
{
62
do_io_reset(data);
63
std::this_thread::sleep_for(std::chrono::microseconds(7000000));
64
do_endpoint_enable
(data);
65
}
66
67
timingcmd::TimingHwCmd
68
TimingEndpointControllerBase::construct_endpoint_hw_cmd
(
const
std::string& cmd_id, uint endpoint_id)
69
{
70
timingcmd::TimingHwCmd
hw_cmd;
71
timingcmd::TimingEndpointCmdPayload
cmd_payload;
72
// where to check endpoint id validity
73
cmd_payload.
endpoint_id
= endpoint_id;
74
timingcmd::to_json
(hw_cmd.
payload
, cmd_payload);
75
76
hw_cmd.
id
= cmd_id;
77
hw_cmd.
device
= m_timing_device;
78
return
hw_cmd;
79
}
80
81
void
82
TimingEndpointControllerBase::do_endpoint_enable
(
const
CommandData_t& data)
83
{
84
timingcmd::TimingHwCmd
hw_cmd = construct_hw_cmd(
"endpoint_enable"
, data);
85
86
// print out some debug info
87
timingcmd::TimingEndpointConfigureCmdPayload
cmd_payload;
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
95
void
96
TimingEndpointControllerBase::do_endpoint_disable
(
const
CommandData_t& data)
97
{
98
timingcmd::TimingHwCmd
hw_cmd = construct_hw_cmd(
"endpoint_disable"
, data);
99
send_hw_cmd(std::move(hw_cmd));
100
++(m_sent_hw_command_counters.at(3).atomic);
101
}
102
103
void
104
TimingEndpointControllerBase::do_endpoint_reset
(
const
CommandData_t& data)
105
{
106
timingcmd::TimingHwCmd
hw_cmd = construct_hw_cmd(
"endpoint_reset"
, data);
107
108
send_hw_cmd(std::move(hw_cmd));
109
++(m_sent_hw_command_counters.at(4).atomic);
110
}
111
112
// void
113
// TimingEndpointControllerBase::get_info(opmonlib::InfoCollector& ci, int /*level*/)
114
//{
115
116
// send counters internal to the module
117
// timingendpointcontrollerinfo::Info module_info;
118
// module_info.sent_endpoint_io_reset_cmds = m_sent_hw_command_counters.at(0).atomic.load();
119
// module_info.sent_endpoint_print_status_cmds = m_sent_hw_command_counters.at(1).atomic.load();
120
121
// module_info.sent_endpoint_enable_cmds = m_sent_hw_command_counters.at(2).atomic.load();
122
// module_info.sent_endpoint_disable_cmds = m_sent_hw_command_counters.at(3).atomic.load();
123
// module_info.sent_endpoint_reset_cmds = m_sent_hw_command_counters.at(4).atomic.load();
124
// module_info.sent_endpoint_print_timestamp_cmds = m_sent_hw_command_counters.at(5).atomic.load();
125
// ci.add(module_info);
126
//}
127
128
void
129
TimingEndpointControllerBase::process_device_info
(nlohmann::json info)
130
{
131
++m_device_infos_received_count;
132
133
timing::timingfirmwareinfo::TimingDeviceInfo
device_info;
134
from_json(info, device_info);
135
136
auto
ept_info = device_info.
endpoint_info
;
137
138
m_endpoint_state
= ept_info.state;
139
bool
ready = ept_info.ready;
140
141
TLOG_DEBUG
(3) <<
"state: 0x"
<< std::hex <<
m_endpoint_state
<<
", ready: "
<< ready << std::dec
142
<<
", infos received: "
<< m_device_infos_received_count;
143
144
if
(
m_endpoint_state
== 0x8 && ready) {
145
if
(!m_device_ready) {
146
m_device_ready =
true
;
147
TLOG_DEBUG
(2) <<
"Timing endpoint became ready"
;
148
}
149
}
else
{
150
if
(m_device_ready) {
151
m_device_ready =
false
;
152
TLOG_DEBUG
(2) <<
"Timing endpoint no longer ready"
;
153
}
154
}
155
}
156
}
// namespace timinglibs
157
}
// namespace dunedaq
158
159
// Local Variables:
160
// c-basic-offset: 2
161
// End:
Issue.hpp
Nljs.hpp
TimingEndpointControllerBase.hpp
dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_disable
virtual void do_endpoint_disable(const CommandData_t &data)
Definition
TimingEndpointControllerBase.cpp:96
dunedaq::timinglibs::TimingEndpointControllerBase::do_configure
void do_configure(const CommandData_t &data) override
Definition
TimingEndpointControllerBase.cpp:45
dunedaq::timinglibs::TimingEndpointControllerBase::construct_endpoint_hw_cmd
timingcmd::TimingHwCmd construct_endpoint_hw_cmd(const std::string &cmd_id, uint endpoint_id)
Definition
TimingEndpointControllerBase.cpp:68
dunedaq::timinglibs::TimingEndpointControllerBase::process_device_info
void process_device_info(nlohmann::json info) override
Definition
TimingEndpointControllerBase.cpp:129
dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_reset
virtual void do_endpoint_reset(const CommandData_t &data)
Definition
TimingEndpointControllerBase.cpp:104
dunedaq::timinglibs::TimingEndpointControllerBase::TimingEndpointControllerBase
TimingEndpointControllerBase(const std::string &name, uint number_hw_commands)
TimingEndpointControllerBase Constructor.
Definition
TimingEndpointControllerBase.cpp:34
dunedaq::timinglibs::TimingEndpointControllerBase::m_managed_endpoint_id
uint m_managed_endpoint_id
Definition
TimingEndpointControllerBase.hpp:55
dunedaq::timinglibs::TimingEndpointControllerBase::send_configure_hardware_commands
void send_configure_hardware_commands(const CommandData_t &data) override
Definition
TimingEndpointControllerBase.cpp:60
dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_enable
virtual void do_endpoint_enable(const CommandData_t &data)
Definition
TimingEndpointControllerBase.cpp:82
dunedaq::timinglibs::TimingEndpointControllerBase::m_endpoint_state
std::atomic< uint > m_endpoint_state
Definition
TimingEndpointControllerBase.hpp:70
dunedaq::timinglibs::dal::TimingEndpointControllerConf
Definition
TimingEndpointControllerConf.hpp:28
TimingIssues.hpp
TimingEndpointControllerConf.hpp
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:116
TLOG
#define TLOG(...)
Definition
macro.hpp:21
dunedaq::timinglibs::timingcmd::from_json
void from_json(const data_t &j, EndpointLocation &obj)
Definition
Nljs.hpp:28
dunedaq::timinglibs::timingcmd::to_json
void to_json(data_t &j, const EndpointLocation &obj)
Definition
Nljs.hpp:20
dunedaq::timinglibs
Definition
TimingController.hxx:1
dunedaq
The DUNE-DAQ namespace.
Definition
cib_utilities.cpp:5
TimingEndpointControllerBase.hpp
dunedaq::timing::timingfirmwareinfo::TimingDeviceInfo
Definition
Structs.hpp:105
dunedaq::timing::timingfirmwareinfo::TimingDeviceInfo::endpoint_info
timingendpointinfo::TimingEndpointInfo endpoint_info
Definition
Structs.hpp:117
dunedaq::timinglibs::timingcmd::TimingEndpointCmdPayload
Definition
Structs.hpp:91
dunedaq::timinglibs::timingcmd::TimingEndpointCmdPayload::endpoint_id
UintData endpoint_id
Definition
Structs.hpp:94
dunedaq::timinglibs::timingcmd::TimingEndpointConfigureCmdPayload
Definition
Structs.hpp:99
dunedaq::timinglibs::timingcmd::TimingEndpointConfigureCmdPayload::address
UintData address
Definition
Structs.hpp:105
dunedaq::timinglibs::timingcmd::TimingHwCmd
Definition
Structs.hpp:122
dunedaq::timinglibs::timingcmd::TimingHwCmd::device
String device
Definition
Structs.hpp:128
dunedaq::timinglibs::timingcmd::TimingHwCmd::id
TimingHwCmdId id
Definition
Structs.hpp:125
dunedaq::timinglibs::timingcmd::TimingHwCmd::payload
TimingHwCmdPayload payload
Definition
Structs.hpp:131
Nljs.hpp
Structs.hpp
Nljs.hpp
Structs.hpp
Generated on
for DUNE-DAQ by
1.18.0