diff options
author | sjwilks <sjwilks@gmail.com> | 2014-10-17 11:06:50 +0200 |
---|---|---|
committer | sjwilks <sjwilks@gmail.com> | 2014-10-17 11:06:50 +0200 |
commit | 111a8745b3d9d4ab99e4e0d34a9b9ddd3cd1ecdb (patch) | |
tree | aadf93722ba152e7325f13caacc85a058928da98 /src | |
parent | 17a1c986c2fa7c49197d14c1b1ef0fc494d9e22f (diff) | |
parent | a1ea16f7947bedb258ebc198cde52e5976ed0fdd (diff) | |
download | px4-firmware-111a8745b3d9d4ab99e4e0d34a9b9ddd3cd1ecdb.tar.gz px4-firmware-111a8745b3d9d4ab99e4e0d34a9b9ddd3cd1ecdb.tar.bz2 px4-firmware-111a8745b3d9d4ab99e4e0d34a9b9ddd3cd1ecdb.zip |
Merge pull request #1392 from PX4/textlog
System feedback message logging
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/mavlink/mavlink_messages.cpp | 32 | ||||
-rw-r--r-- | src/modules/sdlog2/sdlog2.c | 3 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/modules/mavlink/mavlink_messages.cpp b/src/modules/mavlink/mavlink_messages.cpp index c182cfdb9..cccb698bf 100644 --- a/src/modules/mavlink/mavlink_messages.cpp +++ b/src/modules/mavlink/mavlink_messages.cpp @@ -341,11 +341,18 @@ private: /* do not allow top copying this class */ MavlinkStreamStatustext(MavlinkStreamStatustext &); MavlinkStreamStatustext& operator = (const MavlinkStreamStatustext &); + FILE *fp = nullptr; protected: explicit MavlinkStreamStatustext(Mavlink *mavlink) : MavlinkStream(mavlink) {} + ~MavlinkStreamStatustext() { + if (fp) { + fclose(fp); + } + } + void send(const hrt_abstime t) { if (!mavlink_logbuffer_is_empty(_mavlink->get_logbuffer())) { @@ -359,6 +366,31 @@ protected: strncpy(msg.text, logmsg.text, sizeof(msg.text)); _mavlink->send_message(MAVLINK_MSG_ID_STATUSTEXT, &msg); + + /* write log messages in first instance to disk */ + if (_mavlink->get_instance_id() == 0) { + if (fp) { + fputs(msg.text, fp); + fputs("\n", fp); + fsync(fileno(fp)); + } else { + /* string to hold the path to the log */ + char log_file_name[32] = ""; + char log_file_path[64] = ""; + + timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + /* use GPS time for log file naming, e.g. /fs/microsd/2014-01-19/19_37_52.bin */ + time_t gps_time_sec = ts.tv_sec + (ts.tv_nsec / 1e9); + struct tm t; + gmtime_r(&gps_time_sec, &t); + + // XXX we do not want to interfere here with the SD log app + strftime(log_file_name, sizeof(log_file_name), "msgs_%Y_%m_%d_%H_%M_%S.txt", &t); + snprintf(log_file_path, sizeof(log_file_path), "/fs/microsd/%s", log_file_name); + fp = fopen(log_file_path, "ab"); + } + } } } } diff --git a/src/modules/sdlog2/sdlog2.c b/src/modules/sdlog2/sdlog2.c index e13593077..1282bc0ea 100644 --- a/src/modules/sdlog2/sdlog2.c +++ b/src/modules/sdlog2/sdlog2.c @@ -628,6 +628,9 @@ void sdlog2_start_log() perf_print_all(perf_fd); close(perf_fd); + /* reset performance counters to get in-flight min and max values in post flight log */ + perf_reset_all(); + logging_enabled = true; } |