DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
timing
src
EndpointDesign.cpp
Go to the documentation of this file.
1
8
9
#include "
timing/EndpointDesign.hpp
"
10
11
#include <sstream>
12
#include <string>
13
14
namespace
dunedaq::timing
{
15
16
UHAL_REGISTER_DERIVED_NODE(
EndpointDesign
)
17
18
//-----------------------------------------------------------------------------
19
EndpointDesign
::
EndpointDesign
(const
uhal
::Node& node)
20
:
TopDesignInterface
(node)
21
,
TopDesign
(node)
22
,
EndpointDesignInterface
(node)
23
24
{}
25
//-----------------------------------------------------------------------------
26
27
//-----------------------------------------------------------------------------
28
EndpointDesign::~EndpointDesign
()
29
{}
30
//-----------------------------------------------------------------------------
31
32
//-----------------------------------------------------------------------------
33
std::string
34
EndpointDesign::get_status
(
bool
print_out)
const
35
{
36
std::stringstream status;
37
status <<
TopDesign::get_io_node_plain
()->
get_pll_status
();
38
size_t
number_of_endpoint_nodes =
EndpointDesign::get_number_of_endpoint_nodes
();
39
for
(
size_t
i = 0; i < number_of_endpoint_nodes; ++i) {
40
status <<
"Endpoint node "
<< i <<
" status"
<< std::endl;
41
status <<
get_endpoint_node_plain
(i)->
get_status
();
42
}
43
if
(print_out)
44
TLOG
() << status.str();
45
return
status.str();
46
}
47
//-----------------------------------------------------------------------------
48
49
//-----------------------------------------------------------------------------
50
void
51
EndpointDesign::configure
(
ClockSource
clock_source)
const
52
{
53
TopDesign::configure
(clock_source);
54
55
for
(uint i=0; i <
get_number_of_endpoint_nodes
(); ++i)
56
{
57
get_endpoint_node_plain
(i)->
reset
(0x30+i);
58
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
59
get_endpoint_node_plain
(i)->
get_status
(
true
);
60
if
(!
get_endpoint_node_plain
(i)->endpoint_ready())
61
{
62
ers::error
(EndpointNotReady(
ERS_HERE
,
"Endpoint "
+std::to_string(i)+
" not ready!"
,
get_endpoint_node_plain
(i)->read_endpoint_state()));
63
}
64
}
65
}
66
//-----------------------------------------------------------------------------
67
68
//-----------------------------------------------------------------------------
69
uint32_t
// NOLINT(build/unsigned)
70
EndpointDesign::read_firmware_version
()
const
71
{
72
return
0;
//TODO
73
//return get_endpoint_node_plain(0)->read_version();
74
}
75
//-----------------------------------------------------------------------------
76
77
//-----------------------------------------------------------------------------
78
void
79
EndpointDesign::validate_firmware_version
()
const
80
{
81
// TODO
82
// auto firmware_version = read_firmware_version();
83
//
84
// int major_firmware_version = (firmware_version >> 16) & 0xff;
85
// int minor_firmware_version = (firmware_version >> 8) & 0xff;
86
// int patch_firmware_version = (firmware_version >> 0) & 0xff;
87
//
88
// if (major_firmware_version != g_required_major_endpoint_firmware_version)
89
// ers::error(IncompatibleMajorEndpointFirmwareVersion(ERS_HERE, major_firmware_version, g_required_major_endpoint_firmware_version));
90
// if (minor_firmware_version != g_required_minor_endpoint_firmware_version)
91
// ers::warning(IncompatibleMinorEndpointFirmwareVersion(ERS_HERE, minor_firmware_version, g_required_minor_endpoint_firmware_version));
92
// if (patch_firmware_version != g_required_patch_endpoint_firmware_version)
93
// ers::warning(IncompatiblePatchEndpointFirmwareVersion(ERS_HERE, patch_firmware_version, g_required_patch_endpoint_firmware_version));
94
}
95
//-----------------------------------------------------------------------------
96
97
void
98
EndpointDesign::get_info
(
timingfirmwareinfo::TimingDeviceInfo
& mon_data)
const
99
{
100
TopDesign::get_info
(mon_data);
101
EndpointDesignInterface::get_info
(0, mon_data.
endpoint_info
);
102
}
103
}
// namespace dunedaq::timing
EndpointDesign.hpp
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
dunedaq::timing::EndpointDesignInterface::get_info
virtual void get_info(uint32_t ept_id, timingendpointinfo::TimingEndpointInfo &mon_data) const
Give info to collector.
Definition
EndpointDesignInterface.hpp:70
dunedaq::timing::EndpointDesignInterface::get_endpoint_node_plain
virtual const EndpointNodeInterface * get_endpoint_node_plain(uint32_t ept_id) const
Return the timing endpoint node.
Definition
EndpointDesignInterface.hpp:50
dunedaq::timing::EndpointDesignInterface::get_number_of_endpoint_nodes
virtual uint32_t get_number_of_endpoint_nodes() const
Return the timing endpoint node.
Definition
EndpointDesignInterface.hpp:61
dunedaq::timing::EndpointDesignInterface::EndpointDesignInterface
EndpointDesignInterface(const uhal::Node &node)
Definition
EndpointDesignInterface.hpp:41
dunedaq::timing::EndpointDesign
Base class for timing endpoint design nodes.
Definition
EndpointDesign.hpp:36
dunedaq::timing::EndpointDesign::read_firmware_version
uint32_t read_firmware_version() const override
Read endpoint firmware version.
Definition
EndpointDesign.cpp:70
dunedaq::timing::EndpointDesign::configure
void configure(ClockSource clock_source) const override
Prepare the timing endpoint for data taking.
Definition
EndpointDesign.cpp:51
dunedaq::timing::EndpointDesign::~EndpointDesign
virtual ~EndpointDesign()
Definition
EndpointDesign.cpp:28
dunedaq::timing::EndpointDesign::get_info
void get_info(timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
Give info to collector.
Definition
EndpointDesign.cpp:98
dunedaq::timing::EndpointDesign::get_status
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition
EndpointDesign.cpp:34
dunedaq::timing::EndpointDesign::validate_firmware_version
void validate_firmware_version() const override
Validate endpoint firmware version.
Definition
EndpointDesign.cpp:79
dunedaq::timing::EndpointDesign::EndpointDesign
EndpointDesign(const uhal::Node &node)
Definition
EndpointDesign.cpp:19
dunedaq::timing::EndpointNodeInterface::reset
virtual void reset(uint32_t address=0, uint32_t partition=0) const =0
Reset the endpoint.
dunedaq::timing::IONode::get_pll_status
virtual std::string get_pll_status(bool print_out=false) const
Print status of on-board PLL.
Definition
IONode.cpp:289
dunedaq::timing::TimingNode::get_status
virtual std::string get_status(bool print_out=false) const =0
Get the status string of the timing node. Optionally print it.
dunedaq::timing::TopDesignInterface
Base class for timing top design nodes.
Definition
TopDesignInterface.hpp:40
dunedaq::timing::TopDesign::configure
void configure(ClockSource clock_source) const override
Prepare the timing device for data taking.
Definition
TopDesign.hpp:81
dunedaq::timing::TopDesign::get_info
void get_info(timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
Give info to collector.
Definition
TopDesign.hpp:121
dunedaq::timing::TopDesign::get_io_node_plain
const IONode * get_io_node_plain() const override
Get io node pointer.
Definition
TopDesign.hpp:48
dunedaq::timing::TopDesign::TopDesign
TopDesign(const uhal::Node &node)
Definition
TopDesign.hpp:41
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::timing
< Message parameters
Definition
BoreasDesign.hpp:29
dunedaq::timing::ClockSource
ClockSource
Definition
definitions.hpp:115
ers::error
void error(const Issue &issue)
Definition
ers.hpp:92
uhal
Definition
ProtocolAxi4Lite.hpp:63
dunedaq::timing::timingfirmwareinfo::TimingDeviceInfo
Definition
Structs.hpp:105
dunedaq::timing::timingfirmwareinfo::TimingDeviceInfo::endpoint_info
timingendpointinfo::TimingEndpointInfo endpoint_info
Definition
Structs.hpp:117
Generated on
for DUNE-DAQ by
1.17.0