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)
49 using namespace std::chrono;
58 auto delta_time_us = duration_cast<microseconds>(steady_clock::now() - estimate.
system_time).count();
65std::chrono::microseconds
68 auto now = get_timestamp_estimate();
70 return std::chrono::microseconds(0);
72 return std::chrono::microseconds(
static_cast<std::chrono::microseconds::rep
>(
73 static_cast<double>(diff) * 1000000. /
static_cast<double>(m_clock_frequency_hz)));
79 using namespace std::chrono;
85 auto diff =
static_cast<int64_t
>(estimate.
daq_time - daq_time);
87 <<
", system time = " << system_time <<
" when current timestamp estimate was "
88 << estimate.
daq_time <<
". diff=" << diff;
97 using namespace std::chrono;
100 static_cast<uint64_t
>(duration_cast<microseconds>(system_clock::now().time_since_epoch()).count());
101 auto steady_time_now = steady_clock::now();
119 <<
"Time diff between current system and latest TimeSync system time [us]: " << delta_time;
123 if (delta_time > 1'000'000)
132 <<
"Storing new timestamp estimate of " << new_timestamp <<
" ticks (..." << std::fixed
133 << std::setprecision(8)
139 <<
" 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
uint32_t m_current_process_id
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
PDS Frame with unphysical timestamp detected with ts
void warning(const Issue &issue)
std::chrono::time_point< std::chrono::steady_clock > system_time