Synch time from GPX on first valid GPS time received

This commit is contained in:
Oliver Seiler 2020-09-28 09:49:41 +13:00
parent 19710bae4b
commit 1c40572c9b
2 changed files with 20 additions and 2 deletions

View File

@ -21,6 +21,9 @@ static uint16_t nmea_txDelay_ms =
static uint16_t nmea_txDelay_ms = 0; static uint16_t nmea_txDelay_ms = 0;
#endif #endif
// did the last packet contain a valid time?
bool hasValidTime = false;
// initialize and configure GPS // initialize and configure GPS
int gps_init(void) { int gps_init(void) {
@ -159,6 +162,18 @@ void gps_loop(void *pvParameters) {
delay(2); // 2ms delay according L76 datasheet delay(2); // 2ms delay according L76 datasheet
} }
#endif #endif
#if !TIME_SYNC_LORASERVER && !TIME_SYNC_LORAWAN
if (!hasValidTime) {
if (gpstime.isUpdated() && gpstime.isValid()) {
hasValidTime = true;
if (timeSource == _unsynced) {
calibrateTime();
}
}
}
#endif
} // if } // if
// show NMEA data in verbose mode, useful for debugging GPS, bu tvery noisy // show NMEA data in verbose mode, useful for debugging GPS, bu tvery noisy

View File

@ -26,7 +26,8 @@ Ticker timesyncer;
void timeSync() { xTaskNotify(irqHandlerTask, TIMESYNC_IRQ, eSetBits); } void timeSync() { xTaskNotify(irqHandlerTask, TIMESYNC_IRQ, eSetBits); }
void calibrateTime(void) { void calibrateTime(void) {
ESP_LOGD(TAG, "[%0.3f] calibrateTime, timeSource == %d", millis() / 1000.0,
timeSource);
time_t t = 0; time_t t = 0;
uint16_t t_msec = 0; uint16_t t_msec = 0;
@ -49,7 +50,9 @@ void calibrateTime(void) {
// no RTC -> fallback to GPS time // no RTC -> fallback to GPS time
#if (HAS_GPS) #if (HAS_GPS)
t = get_gpstime(&t_msec); t = get_gpstime(&t_msec);
if (t) {
timeSource = _gps; timeSource = _gps;
}
#endif #endif
setMyTime((uint32_t)t, t_msec, timeSource); // set time setMyTime((uint32_t)t, t_msec, timeSource); // set time