DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
utilities
include
utilities
TimestampEstimatorTimeSync.hpp
Go to the documentation of this file.
1
11
12
#ifndef UTILITIES_INCLUDE_UTILITIES_TIMESTAMPESTIMATORTIMESYNC_HPP_
13
#define UTILITIES_INCLUDE_UTILITIES_TIMESTAMPESTIMATORTIMESYNC_HPP_
14
15
#include "
utilities/Issues.hpp
"
16
#include "
utilities/TimestampEstimatorBase.hpp
"
17
18
#include <atomic>
19
#include <memory>
20
#include <mutex>
21
22
namespace
dunedaq::utilities
{
23
24
enum
25
{
26
TLVL_TIME_SYNC_PROPERTIES
= 17,
27
TLVL_TIME_SYNC_NOTES
= 18,
28
TLVL_TIME_SYNC_NEW_ESTIMATE
= 19,
29
};
30
36
class
TimestampEstimatorTimeSync
:
public
TimestampEstimatorBase
37
{
38
public
:
39
TimestampEstimatorTimeSync
(uint32_t run_number, uint64_t clock_frequency_hz);
// NOLINT(build/unsigned)
40
41
explicit
TimestampEstimatorTimeSync
(uint64_t clock_frequency_hz);
// NOLINT(build/unsigned)
42
43
virtual
~TimestampEstimatorTimeSync
();
44
45
uint64_t
get_timestamp_estimate
()
const override
;
// NOLINT(build/unsigned)
46
47
std::chrono::microseconds
get_wait_estimate
(uint64_t ts)
const override
;
// NOLINT(build/unsigned)
48
49
void
add_timestamp_datapoint
(uint64_t daq_time, uint64_t system_time);
// NOLINT(build/unsigned)
50
51
template
<
class
T>
52
void
timesync_callback
(
const
T& tsync);
53
54
uint64_t
get_received_timesync_count
()
const
{
return
m_received_timesync_count
.load(); }
// NOLINT(build/unsigned)
55
56
private
:
57
struct
TimeSyncPoint
58
{
59
uint64_t
daq_time
{
s_invalid_ts
};
// NOLINT(build/unsigned)
60
std::chrono::time_point<std::chrono::steady_clock>
system_time
;
61
};
62
63
std::atomic<TimeSyncPoint>
m_current_timestamp_estimate
;
64
65
uint64_t
m_clock_frequency_hz
;
// NOLINT(build/unsigned)
66
uint64_t
m_most_recent_daq_time
{
s_invalid_ts
};
// NOLINT(build/unsigned)
67
uint64_t
m_most_recent_system_time
;
// NOLINT(build/unsigned)
68
std::mutex
m_datapoint_mutex
;
69
uint32_t
m_run_number
{ 0 };
// NOLINT(build/unsigned)
70
std::atomic<uint64_t>
m_received_timesync_count
;
// NOLINT(build/unsigned)
71
};
72
73
}
// namespace dunedaq::utilities
74
75
#include "
detail/TimestampEstimatorTimeSync.hxx
"
76
77
#endif
// UTILITIES_INCLUDE_UTILITIES_TIMESTAMPESTIMATORTIMESYNC_HPP_
TimestampEstimatorBase.hpp
TimestampEstimatorTimeSync.hxx
dunedaq::utilities::TimestampEstimatorBase
TimestampEstimatorBase is the base class for timestamp-based logic in test systems where the current ...
Definition
TimestampEstimatorBase.hpp:26
dunedaq::utilities::TimestampEstimatorBase::s_invalid_ts
static constexpr uint64_t s_invalid_ts
Definition
TimestampEstimatorBase.hpp:28
dunedaq::utilities::TimestampEstimatorTimeSync::timesync_callback
void timesync_callback(const T &tsync)
Definition
TimestampEstimatorTimeSync.hxx:7
dunedaq::utilities::TimestampEstimatorTimeSync::m_most_recent_daq_time
uint64_t m_most_recent_daq_time
Definition
TimestampEstimatorTimeSync.hpp:66
dunedaq::utilities::TimestampEstimatorTimeSync::add_timestamp_datapoint
void add_timestamp_datapoint(uint64_t daq_time, uint64_t system_time)
Definition
TimestampEstimatorTimeSync.cpp:76
dunedaq::utilities::TimestampEstimatorTimeSync::m_clock_frequency_hz
uint64_t m_clock_frequency_hz
Definition
TimestampEstimatorTimeSync.hpp:65
dunedaq::utilities::TimestampEstimatorTimeSync::get_timestamp_estimate
uint64_t get_timestamp_estimate() const override
Returns the current timestamp estimate or a special value if no valid timestamp is available.
Definition
TimestampEstimatorTimeSync.cpp:46
dunedaq::utilities::TimestampEstimatorTimeSync::get_wait_estimate
std::chrono::microseconds get_wait_estimate(uint64_t ts) const override
Definition
TimestampEstimatorTimeSync.cpp:65
dunedaq::utilities::TimestampEstimatorTimeSync::m_received_timesync_count
std::atomic< uint64_t > m_received_timesync_count
Definition
TimestampEstimatorTimeSync.hpp:70
dunedaq::utilities::TimestampEstimatorTimeSync::get_received_timesync_count
uint64_t get_received_timesync_count() const
Definition
TimestampEstimatorTimeSync.hpp:54
dunedaq::utilities::TimestampEstimatorTimeSync::m_datapoint_mutex
std::mutex m_datapoint_mutex
Definition
TimestampEstimatorTimeSync.hpp:68
dunedaq::utilities::TimestampEstimatorTimeSync::~TimestampEstimatorTimeSync
virtual ~TimestampEstimatorTimeSync()
Definition
TimestampEstimatorTimeSync.cpp:38
dunedaq::utilities::TimestampEstimatorTimeSync::m_current_timestamp_estimate
std::atomic< TimeSyncPoint > m_current_timestamp_estimate
Definition
TimestampEstimatorTimeSync.hpp:63
dunedaq::utilities::TimestampEstimatorTimeSync::TimestampEstimatorTimeSync
TimestampEstimatorTimeSync(uint32_t run_number, uint64_t clock_frequency_hz)
Definition
TimestampEstimatorTimeSync.cpp:21
dunedaq::utilities::TimestampEstimatorTimeSync::m_most_recent_system_time
uint64_t m_most_recent_system_time
Definition
TimestampEstimatorTimeSync.hpp:67
dunedaq::utilities::TimestampEstimatorTimeSync::m_run_number
uint32_t m_run_number
Definition
TimestampEstimatorTimeSync.hpp:69
dunedaq::utilities
Definition
TimestampEstimatorTimeSync.hxx:3
dunedaq::utilities::TLVL_TIME_SYNC_PROPERTIES
@ TLVL_TIME_SYNC_PROPERTIES
Definition
TimestampEstimatorTimeSync.hpp:26
dunedaq::utilities::TLVL_TIME_SYNC_NOTES
@ TLVL_TIME_SYNC_NOTES
Definition
TimestampEstimatorTimeSync.hpp:27
dunedaq::utilities::TLVL_TIME_SYNC_NEW_ESTIMATE
@ TLVL_TIME_SYNC_NEW_ESTIMATE
Definition
TimestampEstimatorTimeSync.hpp:28
dunedaq::utilities::TimestampEstimatorTimeSync::TimeSyncPoint
Definition
TimestampEstimatorTimeSync.hpp:58
dunedaq::utilities::TimestampEstimatorTimeSync::TimeSyncPoint::daq_time
uint64_t daq_time
Definition
TimestampEstimatorTimeSync.hpp:59
dunedaq::utilities::TimestampEstimatorTimeSync::TimeSyncPoint::system_time
std::chrono::time_point< std::chrono::steady_clock > system_time
Definition
TimestampEstimatorTimeSync.hpp:60
Issues.hpp
Generated on
for DUNE-DAQ by
1.17.0