mirror of
https://github.com/meshtastic/firmware.git
synced 2025-09-06 11:39:32 +00:00

* Fix GPS that hard code 2080 as the start time. Some GPS chips, such as the AG3335 in T1000e and L96 have a hardcoded time of 2080-01-05 when they start up. To fix that in a way that seems permanent, let's ignore times that are more than 40 years since the firmware was built. We should followup in late 2039 to see if any changes are needed. Reported-By: @b8b8 * Update src/gps/RTC.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Put FORTY_YEARS in header and use in both places. * Restore Ben's nicer log lines. --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
61 lines
1.8 KiB
C
61 lines
1.8 KiB
C
#pragma once
|
|
|
|
#include "configuration.h"
|
|
#include "sys/time.h"
|
|
#include <Arduino.h>
|
|
|
|
enum RTCQuality {
|
|
|
|
/// We haven't had our RTC set yet
|
|
RTCQualityNone = 0,
|
|
|
|
/// We got time from an onboard peripheral after boot.
|
|
RTCQualityDevice = 1,
|
|
|
|
/// Some other node gave us a time we can use
|
|
RTCQualityFromNet = 2,
|
|
|
|
/// Our time is based on NTP
|
|
RTCQualityNTP = 3,
|
|
|
|
/// Our time is based on our own GPS
|
|
RTCQualityGPS = 4
|
|
};
|
|
|
|
/// The RTC set result codes
|
|
/// Used to indicate the result of an attempt to set the RTC.
|
|
enum RTCSetResult {
|
|
RTCSetResultNotSet = 0, ///< RTC was set successfully
|
|
RTCSetResultSuccess = 1, ///< RTC was set successfully
|
|
RTCSetResultInvalidTime = 3, ///< The provided time was invalid (e.g., before the build epoch)
|
|
RTCSetResultError = 4 ///< An error occurred while setting the RTC
|
|
};
|
|
|
|
RTCQuality getRTCQuality();
|
|
|
|
extern uint32_t lastSetFromPhoneNtpOrGps;
|
|
|
|
/// If we haven't yet set our RTC this boot, set it from a GPS derived time
|
|
RTCSetResult perhapsSetRTC(RTCQuality q, const struct timeval *tv, bool forceUpdate = false);
|
|
RTCSetResult perhapsSetRTC(RTCQuality q, struct tm &t);
|
|
|
|
/// Return a string name for the quality
|
|
const char *RtcName(RTCQuality quality);
|
|
|
|
/// Return time since 1970 in secs. While quality is RTCQualityNone we will be returning time based at zero
|
|
uint32_t getTime(bool local = false);
|
|
|
|
/// Return time since 1970 in secs. If quality is RTCQualityNone return zero
|
|
uint32_t getValidTime(RTCQuality minQuality, bool local = false);
|
|
|
|
RTCSetResult readFromRTC();
|
|
|
|
time_t gm_mktime(struct tm *tm);
|
|
|
|
#define SEC_PER_DAY 86400
|
|
#define SEC_PER_HOUR 3600
|
|
#define SEC_PER_MIN 60
|
|
#ifdef BUILD_EPOCH
|
|
#define FORTY_YEARS (40UL * 365 * SEC_PER_DAY) // probably time to update your firmware
|
|
#endif
|