DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
timing
src
KerberosDesign.cpp
Go to the documentation of this file.
1
#include "
timing/KerberosDesign.hpp
"
2
3
#include <sstream>
4
#include <string>
5
6
namespace
dunedaq::timing
{
7
8
UHAL_REGISTER_DERIVED_NODE(
KerberosDesign
)
9
10
//-----------------------------------------------------------------------------
11
KerberosDesign
::
KerberosDesign
(const
uhal
::Node& node)
12
:
TopDesignInterface
(node)
13
,
MasterDesignInterface
(node)
14
,
MuxDesignInterface
(node)
15
,
MasterDesign
(node)
16
,
EndpointDesignInterface
(node)
17
,
CDRMuxDesignInterface
(node)
18
,
TimingSourceMuxDesignInterface
(node)
19
{}
20
//-----------------------------------------------------------------------------
21
22
//-----------------------------------------------------------------------------
23
KerberosDesign::~KerberosDesign
()
24
{}
25
//-----------------------------------------------------------------------------
26
27
//-----------------------------------------------------------------------------
28
std::string
29
KerberosDesign::get_status
(
bool
print_out)
const
30
{
31
std::stringstream status;
32
status <<
get_io_node_plain
()->
get_pll_status
();
33
status <<
MasterDesign::get_master_node_plain
()->
get_status
();
34
// TODO fanout specific status
35
if
(print_out)
36
TLOG
() << status.str();
37
return
status.str();
38
}
39
//-----------------------------------------------------------------------------
40
41
//-----------------------------------------------------------------------------
42
void
43
KerberosDesign::configure
(
ClockSource
clock_source,
TimestampSource
ts_source)
const
44
{
45
if
(clock_source ==
kFreeRun
)
46
{
47
TopDesign::configure
(clock_source);
// kerberos normally takes clock from upstream SFP
48
this->
sync_timestamp
(ts_source);
49
}
50
else
51
{
52
switch_timing_source
(clock_source);
53
54
for
(uint i=0; i <
get_number_of_endpoint_nodes
(); ++i)
55
{
56
try
57
{
58
get_endpoint_node_plain
(i)->
reset
(0x10+i);
59
std::this_thread::sleep_for(std::chrono::milliseconds(1500));
60
get_endpoint_node_plain
(i)->
get_status
(
true
);
61
62
if
(!
get_endpoint_node_plain
(i)->endpoint_ready())
63
{
64
if
(i==clock_source)
65
{
66
ers::error
(EndpointNotReady(
ERS_HERE
,
"MIB endpoint "
+std::to_string(i)+
" not ready!"
,
get_endpoint_node_plain
(i)->read_endpoint_state()));
67
}
68
else
69
{
70
ers::warning
(EndpointNotReady(
ERS_HERE
,
"MIB endpoint "
+std::to_string(i)+
" not ready!"
,
get_endpoint_node_plain
(i)->read_endpoint_state()));
71
}
72
}
73
}
74
catch
(
const
std::exception& e)
75
{
76
if
(i==clock_source)
77
{
78
ers::error
(EndpointNotReady(
ERS_HERE
,
"MIB endpoint "
+std::to_string(i)+
" has no clock!"
,
get_endpoint_node_plain
(i)->read_endpoint_state(),e));
79
}
80
else
81
{
82
ers::warning
(EndpointNotReady(
ERS_HERE
,
"MIB endpoint "
+std::to_string(i)+
" has no clock!"
,
get_endpoint_node_plain
(i)->read_endpoint_state(), e));
83
}
84
}
85
}
86
87
this->
sync_timestamp
(ts_source);
88
}
89
}
90
//-----------------------------------------------------------------------------
91
92
//-----------------------------------------------------------------------------
93
void
94
KerberosDesign::switch_timing_source
(
ClockSource
clock_source)
const
95
{
96
// Hard reset
97
TopDesign::configure
(clock_source);
//TODO add option not to reprogram pll config
98
99
switch_timing_source_mux
(clock_source);
100
}
101
//-----------------------------------------------------------------------------
102
103
//-----------------------------------------------------------------------------
104
//void
105
//KerberosDesign::get_info(opmonlib::InfoCollector& ci, int level) const
106
//{
107
// opmonlib::InfoCollector master_collector;
108
// this->get_master_node_plain()->get_info(master_collector, level);
109
// ci.add("master", master_collector);
110
111
// opmonlib::InfoCollector hardware_collector;
112
// this->get_io_node_plain()->get_info(hardware_collector, level);
113
// ci.add("io", hardware_collector);
114
115
// opmonlib::InfoCollector endpoint_collector;
116
// get_endpoint_node_plain(0)->get_info(endpoint_collector, level);
117
// ci.add("endpoint", endpoint_collector);
118
// }
119
//-----------------------------------------------------------------------------
120
121
}
KerberosDesign.hpp
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
dunedaq::timing::CDRMuxDesignInterface::CDRMuxDesignInterface
CDRMuxDesignInterface(const uhal::Node &node)
Definition
CDRMuxDesignInterface.hpp:38
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::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::KerberosDesign
Class for timing fanout designs.
Definition
KerberosDesign.hpp:38
dunedaq::timing::KerberosDesign::KerberosDesign
KerberosDesign(const uhal::Node &node)
Definition
KerberosDesign.cpp:11
dunedaq::timing::KerberosDesign::get_status
std::string get_status(bool print_out=false) const override
Get status string, optionally print.
Definition
KerberosDesign.cpp:29
dunedaq::timing::KerberosDesign::configure
void configure(ClockSource clock_source, TimestampSource ts_source) const override
Prepare the timing fanout for data taking.
Definition
KerberosDesign.cpp:43
dunedaq::timing::KerberosDesign::~KerberosDesign
virtual ~KerberosDesign()
Definition
KerberosDesign.cpp:23
dunedaq::timing::KerberosDesign::switch_timing_source
void switch_timing_source(ClockSource clock_source) const override
Switch timing source.
Definition
KerberosDesign.cpp:94
dunedaq::timing::MasterDesignInterface
Base class for timing master designs.
Definition
MasterDesignInterface.hpp:35
dunedaq::timing::MasterDesign::get_master_node_plain
const MasterNodeInterface * get_master_node_plain() const override
Get master node pointer.
Definition
MasterDesign.hpp:95
dunedaq::timing::MasterDesign::sync_timestamp
void sync_timestamp(TimestampSource source) const override
Sync timestamp to current machine value.
Definition
MasterDesign.cpp:58
dunedaq::timing::MasterDesign::MasterDesign
MasterDesign(const uhal::Node &node)
Definition
MasterDesign.cpp:11
dunedaq::timing::MuxDesignInterface
Base class for timing endpoint design nodes.
Definition
MuxDesignInterface.hpp:34
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::TimingSourceMuxDesignInterface::switch_timing_source_mux
virtual void switch_timing_source_mux(uint8_t mux_channel) const
Switch timing source mux.
Definition
TimingSourceMuxDesignInterface.hpp:58
dunedaq::timing::TimingSourceMuxDesignInterface::TimingSourceMuxDesignInterface
TimingSourceMuxDesignInterface(const uhal::Node &node)
Definition
TimingSourceMuxDesignInterface.hpp:37
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_io_node_plain
const IONode * get_io_node_plain() const override
Get io node pointer.
Definition
TopDesign.hpp:48
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::timing
< Message parameters
Definition
BoreasDesign.hpp:29
dunedaq::timing::ClockSource
ClockSource
Definition
definitions.hpp:115
dunedaq::timing::kFreeRun
@ kFreeRun
Definition
definitions.hpp:120
dunedaq::timing::TimestampSource
TimestampSource
Definition
definitions.hpp:124
ers::warning
void warning(const Issue &issue)
Definition
ers.hpp:126
ers::error
void error(const Issue &issue)
Definition
ers.hpp:92
uhal
Definition
ProtocolAxi4Lite.hpp:63
Generated on
for DUNE-DAQ by
1.17.0