logger: prepare for replay: add replayed file to the log, use _replayed as file name suffix

This commit is contained in:
Beat Küng
2016-05-24 15:07:11 +02:00
committed by Lorenz Meier
parent 069dd01cb0
commit 034772056a
2 changed files with 34 additions and 3 deletions
+26 -3
View File
@@ -81,6 +81,9 @@ static Logger *logger_ptr = nullptr;
static int logger_task = -1;
static pthread_t writer_thread;
char *Logger::_replay_file_name = nullptr;
int logger_main(int argc, char *argv[])
{
// logger currently assumes little endian
@@ -735,14 +738,21 @@ int Logger::get_log_file_name(char *file_name, size_t file_name_size)
time_ok = get_log_time(&tt, false);
}
const char *replay_suffix = "";
if (_replay_file_name) {
replay_suffix = "_replayed";
}
if (time_ok) {
if (create_log_dir(&tt)) {
return -1;
}
char log_file_name[64] = "";
strftime(log_file_name, sizeof(log_file_name), "%H_%M_%S.ulg", &tt);
snprintf(file_name, file_name_size, "%s/%s", _log_dir, log_file_name);
strftime(log_file_name, sizeof(log_file_name), "%H_%M_%S", &tt);
snprintf(file_name, file_name_size, "%s/%s%s.ulg", _log_dir, log_file_name, replay_suffix);
} else {
if (create_log_dir(nullptr)) {
@@ -754,7 +764,7 @@ int Logger::get_log_file_name(char *file_name, size_t file_name_size)
/* look for the next file that does not exist */
while (file_number <= MAX_NO_LOGFILE) {
/* format log file path: e.g. /fs/microsd/sess001/log001.ulg */
snprintf(file_name, file_name_size, "%s/log%03u.ulg", _log_dir, file_number);
snprintf(file_name, file_name_size, "%s/log%03u%s.ulg", _log_dir, file_number, replay_suffix);
if (!file_exist(file_name)) {
break;
@@ -773,6 +783,15 @@ int Logger::get_log_file_name(char *file_name, size_t file_name_size)
return 0;
}
void Logger::setReplayFile(const char *file_name)
{
if (_replay_file_name) {
free(_replay_file_name);
}
_replay_file_name = strdup(file_name);
}
bool Logger::get_log_time(struct tm *tt, bool boot_time)
{
int vehicle_gps_position_sub = orb_subscribe(ORB_ID(vehicle_gps_position));
@@ -997,6 +1016,10 @@ void Logger::write_version()
param_get(_log_utc_offset, &utc_offset);
write_info("time_ref_utc", utc_offset * 60);
}
if (_replay_file_name) {
write_info("replay", _replay_file_name);
}
}
void Logger::write_parameters()
+8
View File
@@ -80,6 +80,13 @@ public:
~Logger();
/**
* Tell the logger that we're in replay mode. This must be called
* before starting the logger.
* @param file_name file name of the used log replay file. Will be copied.
*/
static void setReplayFile(const char *file_name);
/**
* Add a topic to be logged. This must be called before start_log()
* (because it does not write an ADD_LOGGED_MSG message).
@@ -211,6 +218,7 @@ private:
orb_advert_t _mavlink_log_pub = nullptr;
uint16_t _next_topic_id; ///< id of next subscribed topic
static char *_replay_file_name;
};
} //namespace logger