AP_Logger: fix timestamp on log files opened before GPS lock

This commit is contained in:
Andrew Tridgell 2019-07-11 12:16:29 +10:00
parent ffe0f338d3
commit 8e58cb993d
2 changed files with 23 additions and 0 deletions

View File

@ -883,6 +883,11 @@ uint16_t AP_Logger_File::start_new_log(void)
write_fd_semaphore.give();
return 0xFFFF;
}
// remember if we had utc time when we opened the file
uint64_t utc_usec;
_need_rtc_update = !AP::rtc().get_utc_usec(utc_usec);
EXPECT_DELAY_MS(3000);
#if HAL_OS_POSIX_IO
_write_fd = ::open(_write_filename, O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666);
@ -1058,7 +1063,24 @@ void AP_Logger_File::_io_timer(void)
::fsync(_write_fd);
last_io_operation = "";
#endif
#if CONFIG_HAL_BOARD == HAL_BOARD_CHIBIOS
// ChibiOS does not update mtime on writes, so if we opened
// without knowing the time we should update it later
if (_need_rtc_update) {
uint64_t utc_usec;
if (AP::rtc().get_utc_usec(utc_usec)) {
struct utimbuf t {};
t.modtime = utc_usec / (1000UL * 1000UL);
t.actime = t.modtime;
// we ignore return on utime() as there is nothing useful we can do
(void)utime(_write_filename, &t);
_need_rtc_update = false;
}
}
#endif
}
write_fd_semaphore.give();
hal.util->perf_end(_perf_write);
}

View File

@ -67,6 +67,7 @@ private:
int _write_fd;
char *_write_filename;
uint32_t _last_write_ms;
bool _need_rtc_update;
int _read_fd;
uint16_t _read_fd_log_num;