DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::timing::EchoMonitorNode Class Reference

Class for master global node. More...

#include <EchoMonitorNode.hpp>

Inheritance diagram for dunedaq::timing::EchoMonitorNode:
[legend]
Collaboration diagram for dunedaq::timing::EchoMonitorNode:
[legend]

Public Member Functions

 EchoMonitorNode (const uhal::Node &node)
 
virtual ~EchoMonitorNode ()
 
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.
 
std::string get_status (bool print_out=false) const override
 Get status string, optionally print.
 
- Public Member Functions inherited from dunedaq::timing::TimingNode
 TimingNode (const uhal::Node &node)
 
virtual ~TimingNode ()
 
std::map< std::string, uhal::ValWord< uint32_t > > read_sub_nodes (const uhal::Node &node, bool dispatch=true) const
 Read subnodes.
 
void reset_sub_nodes (const uhal::Node &node, uint32_t aValue=0x0, bool dispatch=true) const
 Reset subnodes.
 

Detailed Description

Class for master global node.

Definition at line 29 of file EchoMonitorNode.hpp.

Constructor & Destructor Documentation

◆ EchoMonitorNode()

dunedaq::timing::EchoMonitorNode::EchoMonitorNode ( const uhal::Node & node)
explicit

Definition at line 24 of file EchoMonitorNode.cpp.

25 : TimingNode(node)
26{}
TimingNode(const uhal::Node &node)

◆ ~EchoMonitorNode()

dunedaq::timing::EchoMonitorNode::~EchoMonitorNode ( )
virtual

Definition at line 30 of file EchoMonitorNode.cpp.

30{}

Member Function Documentation

◆ get_status()

std::string dunedaq::timing::EchoMonitorNode::get_status ( bool print_out = false) const
overridevirtual

Get status string, optionally print.

Implements dunedaq::timing::TimingNode.

Definition at line 35 of file EchoMonitorNode.cpp.

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}
std::map< std::string, uhal::ValWord< uint32_t > > read_sub_nodes(const uhal::Node &node, bool dispatch=true) const
Read subnodes.
#define TLOG(...)
Definition macro.hpp:22
std::string format_reg_table(T data, std::string title, std::vector< std::string > headers)
Format reg-value table.
Definition toolbox.hxx:166

◆ send_echo_and_measure_delay()

uint64_t dunedaq::timing::EchoMonitorNode::send_echo_and_measure_delay ( int64_t timeout = 500) const
virtual

Send echo and measure the round-trip time between master and endpoint.

Returns
{ description_of_the_return_value }

Definition at line 48 of file EchoMonitorNode.cpp.

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}
#define ERS_HERE
static int64_t now()
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
std::string format_reg_value(T reg_value, uint32_t base)
Definition toolbox.hxx:117

The documentation for this class was generated from the following files: