DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
timing
src
IRIGTimestampNode.cpp
Go to the documentation of this file.
1
8
9
#include "
timing/IRIGTimestampNode.hpp
"
10
11
#include "
timing/toolbox.hpp
"
12
#include "
logging/Logging.hpp
"
13
14
#include <string>
15
16
namespace
dunedaq
{
17
namespace
timing
{
18
19
UHAL_REGISTER_DERIVED_NODE(
IRIGTimestampNode
)
20
21
//-----------------------------------------------------------------------------
22
IRIGTimestampNode
::
IRIGTimestampNode
(const
uhal
::Node& node)
23
:
TimingNode
(node)
24
{}
25
//-----------------------------------------------------------------------------
26
27
//-----------------------------------------------------------------------------
28
IRIGTimestampNode::~IRIGTimestampNode
() {}
29
//-----------------------------------------------------------------------------
30
31
//-----------------------------------------------------------------------------
32
std::string
33
IRIGTimestampNode::get_status
(
bool
print_out)
const
34
{
35
std::stringstream status;
36
status <<
"Timestamp: 0x"
<< std::hex <<
read_timestamp
() << std::endl;
37
38
auto
ctrl_subnodes =
read_sub_nodes
(getNode(
"csr.ctrl"
));
39
status <<
format_reg_table
(ctrl_subnodes,
"IRIG ts ctrl"
);
40
41
auto
stat_subnodes =
read_sub_nodes
(getNode(
"csr.stat"
));
42
status <<
format_reg_table
(stat_subnodes,
"IRIG ts state"
);
43
44
auto
date_subnodes =
read_sub_nodes
(getNode(
"csr.irig_date"
));
45
status <<
format_reg_table
(date_subnodes,
"IRIG date"
);
46
47
auto
time_subnodes =
read_sub_nodes
(getNode(
"csr.irig_time"
));
48
status <<
format_reg_table
(time_subnodes,
"IRIG time"
);
49
50
auto
sbs_subnodes =
read_sub_nodes
(getNode(
"csr.irig_sbs"
));
51
status <<
format_reg_table
(sbs_subnodes,
"IRIG SBS"
);
52
53
status <<
"PPS counter: 0x"
<< std::hex <<
read_pps_counter
() << std::endl;
54
55
status <<
"Seconds since epoch: 0x"
<< std::hex <<
read_seconds_since_epoch
() << std::endl;
56
57
if
(print_out)
58
TLOG
() << status.str();
59
return
status.str();
60
}
61
//-----------------------------------------------------------------------------
62
63
//-----------------------------------------------------------------------------
64
uhal::ValVector<uint32_t>
// NOLINT(build/unsigned)
65
IRIGTimestampNode::read_raw_timestamp
(
bool
dispatch)
const
66
{
67
auto
timestamp = getNode(
"tstamp"
).readBlock(2);
68
if
(dispatch)
69
getClient().dispatch();
70
return
timestamp;
71
}
72
//-----------------------------------------------------------------------------
73
74
//-----------------------------------------------------------------------------
75
uint64_t
// NOLINT(build/unsigned)
76
IRIGTimestampNode::read_timestamp
()
const
77
{
78
return
tstamp2int
(
read_raw_timestamp
());
79
}
80
//-----------------------------------------------------------------------------
81
82
//-----------------------------------------------------------------------------
83
void
84
IRIGTimestampNode::set_ts_timebase
(
TimestampTimebase
timebase)
const
// NOLINT(build/unsigned)
85
{
86
getNode(
"csr.ctrl.ts_timebase"
).write(timebase);
87
getClient().dispatch();
88
}
89
//-----------------------------------------------------------------------------
90
91
//-----------------------------------------------------------------------------
92
void
93
IRIGTimestampNode::set_ts_epoch
(
TimestampEpoch
epoch)
const
// NOLINT(build/unsigned)
94
{
95
getNode(
"csr.ctrl.ts_epoch"
).write(epoch);
96
getClient().dispatch();
97
}
98
//-----------------------------------------------------------------------------
99
100
//-----------------------------------------------------------------------------
101
void
102
IRIGTimestampNode::set_ts_epoch_value
(uint64_t epoch_to_2000_seconds_tai, uint8_t epoch_to_2000_leap_seconds)
const
// NOLINT(build/unsigned)
103
{
104
uint32_t epoch_l = epoch_to_2000_seconds_tai;
105
uint32_t epoch_h = epoch_to_2000_seconds_tai >> 32;
106
getNode(
"csr.seconds_from_sw_epoch_l"
).write(epoch_l);
107
getNode(
"csr.seconds_from_sw_epoch_h"
).write(epoch_h);
108
getNode(
"csr.offsets.leap_seconds_from_sw_epoch"
).write(epoch_to_2000_leap_seconds);
109
getClient().dispatch();
110
}
111
//-----------------------------------------------------------------------------
112
113
//-----------------------------------------------------------------------------
114
uint32_t
// NOLINT(build/unsigned)
115
IRIGTimestampNode::read_pps_counter
()
const
116
{
117
auto
counter = getNode(
"pps_ctr"
).read();
118
getClient().dispatch();
119
return
counter.value();
120
}
121
//-----------------------------------------------------------------------------
122
123
//-----------------------------------------------------------------------------
124
uint64_t
// NOLINT(build/unsigned)
125
IRIGTimestampNode::read_seconds_since_epoch
()
const
126
{
127
auto
seconds_since_epoch = getNode(
"seconds_since_epoch"
).readBlock(2);
128
getClient().dispatch();
129
return
tstamp2int
(seconds_since_epoch);
130
}
131
//-----------------------------------------------------------------------------
132
133
//-----------------------------------------------------------------------------
134
void
135
IRIGTimestampNode::set_ts_seconds_offset
(int8_t seconds_offset)
const
// NOLINT(build/signed)
136
{
137
// cast to uint8_t to avoid erroneous auto conversion
138
getNode(
"csr.offsets.seconds_offset"
).write((uint8_t)seconds_offset);
139
getClient().dispatch();
140
}
141
//-----------------------------------------------------------------------------
142
143
//-----------------------------------------------------------------------------
144
void
145
IRIGTimestampNode::set_ts_ticks_offset
(int16_t ticks_offset)
const
// NOLINT(build/signed)
146
{
147
// cast to uint16_t to avoid erroneous auto conversion
148
getNode(
"csr.offsets.ticks_offset"
).write((uint16_t)ticks_offset);
// NOLINT(build/unsigned)
149
getClient().dispatch();
150
}
151
//-----------------------------------------------------------------------------
152
153
}
// namespace timing
154
}
// namespace dunedaq
IRIGTimestampNode.hpp
dunedaq::timing::IRIGTimestampNode
Class for timestamp generator node.
Definition
IRIGTimestampNode.hpp:34
dunedaq::timing::IRIGTimestampNode::get_status
std::string get_status(bool print_out=false) const override
Print the status of the timing node.
Definition
IRIGTimestampNode.cpp:33
dunedaq::timing::IRIGTimestampNode::read_timestamp
uint64_t read_timestamp() const
Read the current timestamp words.
Definition
IRIGTimestampNode.cpp:76
dunedaq::timing::IRIGTimestampNode::set_ts_ticks_offset
void set_ts_ticks_offset(int16_t ticks_offset) const
Set ticks offset.
Definition
IRIGTimestampNode.cpp:145
dunedaq::timing::IRIGTimestampNode::~IRIGTimestampNode
virtual ~IRIGTimestampNode()
Definition
IRIGTimestampNode.cpp:28
dunedaq::timing::IRIGTimestampNode::set_ts_epoch_value
void set_ts_epoch_value(uint64_t epoch_to_2000_seconds_tai, uint8_t epoch_to_2000_leap_seconds) const
Set custom epoch value.
Definition
IRIGTimestampNode.cpp:102
dunedaq::timing::IRIGTimestampNode::IRIGTimestampNode
IRIGTimestampNode(const uhal::Node &node)
Definition
IRIGTimestampNode.cpp:22
dunedaq::timing::IRIGTimestampNode::set_ts_seconds_offset
void set_ts_seconds_offset(int8_t seconds_offset) const
Set seconds offset.
Definition
IRIGTimestampNode.cpp:135
dunedaq::timing::IRIGTimestampNode::set_ts_timebase
void set_ts_timebase(TimestampTimebase ts_timebase) const
Set custom epoch date.
Definition
IRIGTimestampNode.cpp:84
dunedaq::timing::IRIGTimestampNode::read_seconds_since_epoch
uint64_t read_seconds_since_epoch() const
Read the current seconds since epoch words.
Definition
IRIGTimestampNode.cpp:125
dunedaq::timing::IRIGTimestampNode::set_ts_epoch
void set_ts_epoch(TimestampEpoch ts_epoch) const
Set epoch: UNIX/custom.
Definition
IRIGTimestampNode.cpp:93
dunedaq::timing::IRIGTimestampNode::read_raw_timestamp
uhal::ValVector< uint32_t > read_raw_timestamp(bool dispatch=true) const
Read the current timestamp words.
Definition
IRIGTimestampNode.cpp:65
dunedaq::timing::IRIGTimestampNode::read_pps_counter
uint32_t read_pps_counter() const
Read the current pps ctr word.
Definition
IRIGTimestampNode.cpp:115
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
Logging.hpp
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::tstamp2int
uint64_t tstamp2int(uhal::ValVector< uint32_t > raw_timestamp)
Definition
toolbox.cpp:175
dunedaq::timing::TimestampTimebase
TimestampTimebase
Definition
definitions.hpp:137
dunedaq::timing::TimestampEpoch
TimestampEpoch
Definition
definitions.hpp:131
dunedaq
Including Qt Headers.
Definition
module.cpp:16
uhal
Definition
ProtocolAxi4Lite.hpp:63
toolbox.hpp
Generated on
for DUNE-DAQ by
1.17.0