#ifndef GPS_TIME_ANCHOR_H_INCLUDED #define GPS_TIME_ANCHOR_H_INCLUDED #include #include #define GPS_TIME_WEEK_SECONDS 604800.0 #define GPS_TIME_HALF_WEEK_SECONDS 302400.0 /* Resolve the week of a newly received HOW against the previous HOW anchor. * The HOW contains seconds-of-week; the signed half-week rule makes the * Saturday/Sunday rollover explicit without depending on a NAV timer. */ int gps_time_resolve_how_week(bool previous_valid, int previous_week, double previous_tow_sec, int fallback_week, double how_tow_sec); /* Convert a receiver-sample timestamp to GPS time from a HOW/sample anchor. * raw counters are modulo 2^32. max_age_sec must keep the signed difference * unambiguous (and also rejects a stale HOW anchor). */ bool gps_time_from_sample_anchor(int anchor_week, double anchor_tow_sec, uint32_t anchor_raw_sample, double anchor_corrected_sample, uint32_t event_raw_sample, double event_corrected_sample, double samples_per_second, double max_age_sec, int* event_week_out, double* event_tow_sec_out, double* elapsed_sec_out); #endif