DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
timing
src
EchoMonitorNode.cpp
Go to the documentation of this file.
1
8
9
#include "
timing/EchoMonitorNode.hpp
"
10
11
#include "
timing/TimingIssues.hpp
"
12
#include "
timing/toolbox.hpp
"
13
#include "
logging/Logging.hpp
"
14
15
#include <string>
16
#include <chrono>
17
18
namespace
dunedaq
{
19
namespace
timing
{
20
21
UHAL_REGISTER_DERIVED_NODE(
EchoMonitorNode
)
22
23
//-----------------------------------------------------------------------------
24
EchoMonitorNode
::
EchoMonitorNode
(const
uhal
::Node& node)
25
:
TimingNode
(node)
26
{}
27
//-----------------------------------------------------------------------------
28
29
//-----------------------------------------------------------------------------
30
EchoMonitorNode::~EchoMonitorNode
() {}
31
//-----------------------------------------------------------------------------
32
33
//-----------------------------------------------------------------------------
34
std::string
35
EchoMonitorNode::get_status
(
bool
print_out)
const
36
{
37
std::stringstream status;
38
auto
subnodes =
read_sub_nodes
(getNode(
"csr.stat"
));
39
status <<
format_reg_table
(subnodes,
"Echo mon state"
);
40
if
(print_out)
41
TLOG
() << status.str();
42
return
status.str();
43
}
44
//-----------------------------------------------------------------------------
45
46
//-----------------------------------------------------------------------------
47
uint64_t
// NOLINT(build/unsigned)
48
EchoMonitorNode::send_echo_and_measure_delay
(int64_t timeout)
const
49
{
50
51
getNode(
"csr.ctrl.go"
).write(0x1);
52
getClient().dispatch();
53
54
auto
start = std::chrono::high_resolution_clock::now();
55
56
uhal::ValWord<uint32_t> done;
// NOLINT(build/unsigned)
57
uhal::ValWord<uint32_t> delta_t;
58
59
while
(
true
) {
60
61
done = getNode(
"csr.stat.rx_done"
).read();
62
delta_t = getNode(
"csr.stat.deltat"
).read();
63
getClient().dispatch();
64
65
TLOG_DEBUG
(6) <<
"rx done: "
<< done.value() <<
", delta_t: "
<< delta_t.value();
66
67
if
(done.value())
68
{
69
if
(delta_t.value() == 0xffff)
70
{
71
throw
EchoReplyTimeout(
ERS_HERE
);
72
}
73
else
74
{
75
break
;
76
}
77
}
78
79
auto
now
= std::chrono::high_resolution_clock::now();
80
auto
ms_since_start = std::chrono::duration_cast<std::chrono::milliseconds>(
now
- start);
81
82
if
(ms_since_start.count() > timeout)
83
throw
EchoFlagTimeout(
ERS_HERE
, timeout);
84
85
std::this_thread::sleep_for(std::chrono::microseconds(10));
86
}
87
88
TLOG_DEBUG
(4) <<
"delta t: "
<<
format_reg_value
(delta_t.value(), 10);
89
90
return
delta_t.value();
91
}
92
//-----------------------------------------------------------------------------
93
94
}
// namespace timing
95
}
// namespace dunedaq
EchoMonitorNode.hpp
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
dunedaq::timing::EchoMonitorNode
Class for master global node.
Definition
EchoMonitorNode.hpp:30
dunedaq::timing::EchoMonitorNode::~EchoMonitorNode
virtual ~EchoMonitorNode()
Definition
EchoMonitorNode.cpp:30
dunedaq::timing::EchoMonitorNode::send_echo_and_measure_delay
virtual uint64_t send_echo_and_measure_delay(int64_t timeout=500) const
Send echo and measure the round-trip time between master and endpoint.
Definition
EchoMonitorNode.cpp:48
dunedaq::timing::EchoMonitorNode::EchoMonitorNode
EchoMonitorNode(const uhal::Node &node)
Definition
EchoMonitorNode.cpp:24
dunedaq::timing::EchoMonitorNode::get_status
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition
EchoMonitorNode.cpp:35
dunedaq::timing::TimingNode::TimingNode
TimingNode(const uhal::Node &node)
Definition
TimingNode.cpp:18
dunedaq::timing::TimingNode::read_sub_nodes
std::map< std::string, uhal::ValWord< uint32_t > > read_sub_nodes(const uhal::Node &node, bool dispatch=true) const
Read subnodes.
Definition
TimingNode.cpp:29
TimingIssues.hpp
now
static int64_t now()
Definition
kafka_opmon_consumer.cxx:44
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::timing
< Message parameters
Definition
BoreasDesign.hpp:29
dunedaq::timing::format_reg_table
std::string format_reg_table(T data, std::string title, std::vector< std::string > headers)
Format reg-value table.
Definition
toolbox.hxx:166
dunedaq::timing::format_reg_value
std::string format_reg_value(T reg_value, uint32_t base)
Definition
toolbox.hxx:117
dunedaq
Including Qt Headers.
Definition
module.cpp:16
uhal
Definition
ProtocolAxi4Lite.hpp:63
toolbox.hpp
Generated on
for DUNE-DAQ by
1.17.0