From 1d5e58b9489a7eefa8b954597141ca6e97757519 Mon Sep 17 00:00:00 2001 From: Jacob Dahl <37091262+dakejahl@users.noreply.github.com> Date: Mon, 12 May 2025 16:11:16 -0800 Subject: [PATCH] mavlink: set system clock from SYSTEM_TIME (#24807) * mavlink: set system clock from SYSTEM_TIME message if behind by more than 60 seconds --- src/modules/mavlink/mavlink_timesync.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/modules/mavlink/mavlink_timesync.cpp b/src/modules/mavlink/mavlink_timesync.cpp index 410dd84512..c9df0a4126 100644 --- a/src/modules/mavlink/mavlink_timesync.cpp +++ b/src/modules/mavlink/mavlink_timesync.cpp @@ -86,11 +86,14 @@ MavlinkTimesync::handle_message(const mavlink_message_t *msg) timespec tv = {}; px4_clock_gettime(CLOCK_REALTIME, &tv); - // date -d @1234567890: Sat Feb 14 02:31:30 MSK 2009 - bool onb_unix_valid = (unsigned long long)tv.tv_sec > PX4_EPOCH_SECS; - bool ofb_unix_valid = time.time_unix_usec > PX4_EPOCH_SECS * 1000000ULL; + // Set the system time if we are lagging behind by more than a minute + time_t seconds_behind = 60; + time_t local_time = tv.tv_sec; + time_t remote_time = time.time_unix_usec / 1000000; + bool update = (remote_time > PX4_EPOCH_SECS) && (remote_time > local_time + seconds_behind); - if (!onb_unix_valid && ofb_unix_valid) { + if (update) { + PX4_INFO("Setting system clock from SYSTEM_TIME sent by %d/%d", msg->sysid, msg->compid); tv.tv_sec = time.time_unix_usec / 1000000ULL; tv.tv_nsec = (time.time_unix_usec % 1000000ULL) * 1000ULL;