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/TimingEndpointControllerConf.hpp
"
12
#include "
timinglibs/dal/TimingEndpointControllerBase.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, 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
43
void
44
TimingEndpointControllerBase::do_configure
(
const
CommandData_t& data)
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
58
void
59
TimingEndpointControllerBase::send_configure_hardware_commands
(
const
CommandData_t& data)
60
{
61
do_io_reset(data);
62
std::this_thread::sleep_for(std::chrono::microseconds(7000000));
63
do_endpoint_enable
(data);
64
}
65
66
timingcmd::TimingHwCmd
67
TimingEndpointControllerBase::construct_endpoint_hw_cmd
(
const
std::string& cmd_id, uint endpoint_id)
68
{
69
timingcmd::TimingHwCmd
hw_cmd;
70
timingcmd::TimingEndpointCmdPayload
cmd_payload;
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
80
void
81
TimingEndpointControllerBase::do_endpoint_enable
(
const
CommandData_t& data)
82
{
83
timingcmd::TimingHwCmd
hw_cmd =
84
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 =
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
104
void
105
TimingEndpointControllerBase::do_endpoint_reset
(
const
CommandData_t& data)
106
{
107
timingcmd::TimingHwCmd
hw_cmd =
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
130
void
131
TimingEndpointControllerBase::process_device_info
(nlohmann::json info)
132
{
133
++m_device_infos_received_count;
134
135
timing::timingfirmwareinfo::TimingDeviceInfo
device_info;
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:
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:44
dunedaq::timinglibs::TimingEndpointControllerBase::construct_endpoint_hw_cmd
timingcmd::TimingHwCmd construct_endpoint_hw_cmd(const std::string &cmd_id, uint endpoint_id)
Definition
TimingEndpointControllerBase.cpp:67
dunedaq::timinglibs::TimingEndpointControllerBase::process_device_info
void process_device_info(nlohmann::json info) override
Definition
TimingEndpointControllerBase.cpp:131
dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_reset
virtual void do_endpoint_reset(const CommandData_t &data)
Definition
TimingEndpointControllerBase.cpp:105
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:54
dunedaq::timinglibs::TimingEndpointControllerBase::send_configure_hardware_commands
void send_configure_hardware_commands(const CommandData_t &data) override
Definition
TimingEndpointControllerBase.cpp:59
dunedaq::timinglibs::TimingEndpointControllerBase::do_endpoint_enable
virtual void do_endpoint_enable(const CommandData_t &data)
Definition
TimingEndpointControllerBase.cpp:81
dunedaq::timinglibs::TimingEndpointControllerBase::m_endpoint_state
std::atomic< uint > m_endpoint_state
Definition
TimingEndpointControllerBase.hpp:69
dunedaq::timinglibs::dal::TimingEndpointControllerConf
Definition
TimingEndpointControllerConf.hpp:28
TimingIssues.hpp
TimingEndpointControllerConf.hpp
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::timinglibs::timingcmd::from_json
void from_json(const data_t &j, EndpointLocation &obj)
Definition
Nljs.hpp:26
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
Including Qt Headers.
Definition
module.cpp:16
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:94
dunedaq::timinglibs::timingcmd::TimingEndpointCmdPayload::endpoint_id
UintData endpoint_id
Definition
Structs.hpp:97
dunedaq::timinglibs::timingcmd::TimingEndpointConfigureCmdPayload
Definition
Structs.hpp:102
dunedaq::timinglibs::timingcmd::TimingEndpointConfigureCmdPayload::address
UintData address
Definition
Structs.hpp:108
dunedaq::timinglibs::timingcmd::TimingHwCmd
Definition
Structs.hpp:125
dunedaq::timinglibs::timingcmd::TimingHwCmd::device
String device
Definition
Structs.hpp:131
dunedaq::timinglibs::timingcmd::TimingHwCmd::id
TimingHwCmdId id
Definition
Structs.hpp:128
dunedaq::timinglibs::timingcmd::TimingHwCmd::payload
TimingHwCmdPayload payload
Definition
Structs.hpp:134
Nljs.hpp
Structs.hpp
Nljs.hpp
Structs.hpp
Generated on
for DUNE-DAQ by
1.17.0