DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
timing
include
timing
TopDesign.hpp
Go to the documentation of this file.
1
11
12
#ifndef TIMING_INCLUDE_TIMING_TOPDESIGN_HPP_
13
#define TIMING_INCLUDE_TIMING_TOPDESIGN_HPP_
14
15
// PDT Headers
16
#include "
TimingIssues.hpp
"
17
#include "
timing/TopDesignInterface.hpp
"
18
19
#include "
timing/timingfirmwareinfo/Structs.hpp
"
20
#include "
timing/timingfirmwareinfo/Nljs.hpp
"
21
22
// uHal Headers
23
#include "uhal/DerivedNode.hpp"
24
25
#include <nlohmann/json.hpp>
26
27
// C++ Headers
28
#include <chrono>
29
#include <sstream>
30
#include <string>
31
32
namespace
dunedaq
{
33
namespace
timing
{
34
38
class
TopDesign
:
virtual
public
TopDesignInterface
39
{
40
public
:
41
explicit
TopDesign
(
const
uhal::Node& node)
42
:
TopDesignInterface
(node) {}
43
virtual
~TopDesign
() {}
44
48
const
IONode
*
get_io_node_plain
()
const override
49
{
50
return
dynamic_cast<
const
IONode
*
>
(&uhal::Node::getNode(
"io"
));
51
}
52
56
void
soft_reset_io
()
const override
57
{
58
get_io_node_plain
()->
soft_reset
();
59
}
60
64
void
reset_io
(
const
std::string& clock_config_file)
const override
65
{
66
get_io_node_plain
()->
reset
(clock_config_file);
67
}
68
72
void
reset_io
(
const
ClockSource
& clock_source)
const override
73
{
74
get_io_node_plain
()->
reset
(clock_source);
75
}
76
81
void
configure
(
ClockSource
clock_source)
const override
82
{
83
// Hard resets
84
this->
reset_io
(clock_source);
85
86
auto
start = std::chrono::high_resolution_clock::now();
87
88
// Wait for clocks to be happy
89
while
(
true
)
90
{
91
if
(
get_io_node_plain
()->clocks_ok())
92
{
93
TLOG
() <<
"Clocks ready!"
;
94
break
;
95
}
96
97
auto
now
= std::chrono::high_resolution_clock::now();
98
auto
ms_since_start = std::chrono::duration_cast<std::chrono::milliseconds>(
now
- start);
99
100
if
(ms_since_start.count() > 500)
101
throw
ClocksNotReady(
ERS_HERE
,
"IO"
);
102
103
std::this_thread::sleep_for(std::chrono::microseconds(10));
104
}
105
}
106
110
std::string
get_hardware_info
(
bool
print_out =
false
)
const override
111
{
112
auto
info =
get_io_node_plain
()->
get_hardware_info
();
113
if
(print_out)
114
TLOG
() << info;
115
return
info;
116
}
117
121
void
get_info
(
timingfirmwareinfo::TimingDeviceInfo
& mon_data)
const override
122
{
123
get_io_node_plain
()->
get_info
(mon_data.
pll_info
);
124
}
125
};
126
127
}
// namespace timing
128
}
// namespace dunedaq
129
130
#endif
// TIMING_INCLUDE_TIMING_TOPDESIGN_HPP_
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
TopDesignInterface.hpp
dunedaq::timing::IONode
Base class for timing IO nodes.
Definition
IONode.hpp:44
dunedaq::timing::IONode::reset
virtual void reset(const std::string &clock_config_file) const =0
Reset timing node.
dunedaq::timing::IONode::get_hardware_info
virtual std::string get_hardware_info(bool print_out=false) const
Print hardware information.
Definition
IONode.cpp:118
dunedaq::timing::IONode::soft_reset
virtual void soft_reset() const
Reset timing node.
Definition
IONode.cpp:306
dunedaq::timing::IONode::get_info
virtual void get_info(timinghardwareinfo::TimingPLLMonitorData &mon_data) const
Definition
IONode.hpp:201
dunedaq::timing::TopDesignInterface::TopDesignInterface
TopDesignInterface(const uhal::Node &node)
Definition
TopDesignInterface.hpp:42
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::~TopDesign
virtual ~TopDesign()
Definition
TopDesign.hpp:43
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::soft_reset_io
void soft_reset_io() const override
Reset timing node.
Definition
TopDesign.hpp:56
dunedaq::timing::TopDesign::reset_io
void reset_io(const ClockSource &clock_source) const override
Reset timing node.
Definition
TopDesign.hpp:72
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::get_hardware_info
std::string get_hardware_info(bool print_out=false) const override
Print hardware information.
Definition
TopDesign.hpp:110
dunedaq::timing::TopDesign::reset_io
void reset_io(const std::string &clock_config_file) const override
Reset timing node.
Definition
TopDesign.hpp:64
dunedaq::timing::TopDesign::TopDesign
TopDesign(const uhal::Node &node)
Definition
TopDesign.hpp:41
TimingIssues.hpp
now
static int64_t now()
Definition
kafka_opmon_consumer.cxx:44
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::timing
< Message parameters
Definition
BoreasDesign.hpp:29
dunedaq::timing::ClockSource
ClockSource
Definition
definitions.hpp:115
dunedaq
Including Qt Headers.
Definition
module.cpp:16
dunedaq::timing::timingfirmwareinfo::TimingDeviceInfo
Definition
Structs.hpp:105
dunedaq::timing::timingfirmwareinfo::TimingDeviceInfo::pll_info
timinghardwareinfo::TimingPLLMonitorData pll_info
Definition
Structs.hpp:111
Nljs.hpp
Structs.hpp
Generated on
for DUNE-DAQ by
1.17.0