17#define TRACE_NAME "TimestampEstimatorTimeSync"
22 uint64_t clock_frequency_hz)
29 : m_current_timestamp_estimate(
TimeSyncPoint{ s_invalid_ts,
std::chrono::time_point<
std::chrono::steady_clock>() })
30 , m_clock_frequency_hz(clock_frequency_hz)
31 , m_most_recent_daq_time(s_invalid_ts)
32 , m_most_recent_system_time(0)
34 , m_received_timesync_count(0)
48 using namespace std::chrono;
57 auto delta_time_us = duration_cast<microseconds>(steady_clock::now() - estimate.
system_time).count();
64std::chrono::microseconds
67 auto now = get_timestamp_estimate();
69 return std::chrono::microseconds(0);
71 return std::chrono::microseconds(
static_cast<std::chrono::microseconds::rep
>(
72 static_cast<double>(diff) * 1000000. /
static_cast<double>(m_clock_frequency_hz)));
78 using namespace std::chrono;
84 auto diff =
static_cast<int64_t
>(estimate.
daq_time - daq_time);
86 <<
", system time = " << system_time <<
" when current timestamp estimate was "
87 << estimate.
daq_time <<
". diff=" << diff;
96 using namespace std::chrono;
99 static_cast<uint64_t
>(duration_cast<microseconds>(system_clock::now().time_since_epoch()).count());
100 auto steady_time_now = steady_clock::now();
118 <<
"Time diff between current system and latest TimeSync system time [us]: " << delta_time;
122 if (delta_time > 1'000'000)
131 <<
"Storing new timestamp estimate of " << new_timestamp <<
" ticks (..." << std::fixed
132 << std::setprecision(8)
138 <<
" sec), delta_time is " << delta_time <<
" usec, clock_freq is " <<
m_clock_frequency_hz <<
" Hz";
static constexpr uint64_t s_invalid_ts
TimestampEstimatorTimeSync is an implementation of TimestampEstimatorBase that uses TimeSync messages...
uint64_t m_most_recent_daq_time
void add_timestamp_datapoint(uint64_t daq_time, uint64_t system_time)
uint64_t m_clock_frequency_hz
uint64_t get_timestamp_estimate() const override
Returns the current timestamp estimate or a special value if no valid timestamp is available.
std::chrono::microseconds get_wait_estimate(uint64_t ts) const override
std::mutex m_datapoint_mutex
virtual ~TimestampEstimatorTimeSync()
std::atomic< TimeSyncPoint > m_current_timestamp_estimate
TimestampEstimatorTimeSync(uint32_t run_number, uint64_t clock_frequency_hz)
uint64_t m_most_recent_system_time
#define TLOG_DEBUG(lvl,...)
@ TLVL_TIME_SYNC_PROPERTIES
@ TLVL_TIME_SYNC_NEW_ESTIMATE
void warning(const Issue &issue)
std::chrono::time_point< std::chrono::steady_clock > system_time