mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-01 02:55:07 +08:00
logger: add more version info & uuid
in particular: - SW release version (in addition to the git hash) - OS version (tag + git hash if exists) - mcu version & revision & UUID - toolchain version The uuid can be disabled via parameter, it's enabled by default.
This commit is contained in:
@@ -58,6 +58,7 @@
|
|||||||
#include <systemlib/mavlink_log.h>
|
#include <systemlib/mavlink_log.h>
|
||||||
#include <replay/definitions.hpp>
|
#include <replay/definitions.hpp>
|
||||||
#include <version/version.h>
|
#include <version/version.h>
|
||||||
|
#include <systemlib/mcu_version.h>
|
||||||
|
|
||||||
#ifdef __PX4_DARWIN
|
#ifdef __PX4_DARWIN
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@@ -1319,7 +1320,20 @@ void Logger::write_info(const char *name, const char *value)
|
|||||||
|
|
||||||
_writer.unlock();
|
_writer.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::write_info(const char *name, int32_t value)
|
void Logger::write_info(const char *name, int32_t value)
|
||||||
|
{
|
||||||
|
write_info_template<int32_t>(name, value, "int32_t");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logger::write_info(const char *name, uint32_t value)
|
||||||
|
{
|
||||||
|
write_info_template<uint32_t>(name, value, "uint32_t");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void Logger::write_info_template(const char *name, T value, const char *type_str)
|
||||||
{
|
{
|
||||||
_writer.lock();
|
_writer.lock();
|
||||||
ulog_message_info_header_s msg;
|
ulog_message_info_header_s msg;
|
||||||
@@ -1327,12 +1341,12 @@ void Logger::write_info(const char *name, int32_t value)
|
|||||||
msg.msg_type = static_cast<uint8_t>(ULogMessageType::INFO);
|
msg.msg_type = static_cast<uint8_t>(ULogMessageType::INFO);
|
||||||
|
|
||||||
/* construct format key (type and name) */
|
/* construct format key (type and name) */
|
||||||
msg.key_len = snprintf(msg.key, sizeof(msg.key), "int32_t %s", name);
|
msg.key_len = snprintf(msg.key, sizeof(msg.key), "%s %s", type_str, name);
|
||||||
size_t msg_size = sizeof(msg) - sizeof(msg.key) + msg.key_len;
|
size_t msg_size = sizeof(msg) - sizeof(msg.key) + msg.key_len;
|
||||||
|
|
||||||
/* copy string value directly to buffer */
|
/* copy string value directly to buffer */
|
||||||
memcpy(&buffer[msg_size], &value, sizeof(int32_t));
|
memcpy(&buffer[msg_size], &value, sizeof(T));
|
||||||
msg_size += sizeof(int32_t);
|
msg_size += sizeof(T);
|
||||||
|
|
||||||
msg.msg_size = msg_size - ULOG_MSG_HEADER_LEN;
|
msg.msg_size = msg_size - ULOG_MSG_HEADER_LEN;
|
||||||
|
|
||||||
@@ -1362,8 +1376,45 @@ void Logger::write_header()
|
|||||||
void Logger::write_version()
|
void Logger::write_version()
|
||||||
{
|
{
|
||||||
write_info("ver_sw", px4_firmware_version_string());
|
write_info("ver_sw", px4_firmware_version_string());
|
||||||
|
write_info("ver_sw_release", px4_firmware_version());
|
||||||
write_info("ver_hw", px4_board_name());
|
write_info("ver_hw", px4_board_name());
|
||||||
write_info("sys_name", "PX4");
|
write_info("sys_name", "PX4");
|
||||||
|
write_info("sys_os_name", px4_os_name());
|
||||||
|
const char *os_version = px4_os_version_string();
|
||||||
|
|
||||||
|
if (os_version) {
|
||||||
|
write_info("sys_os_ver", os_version);
|
||||||
|
}
|
||||||
|
|
||||||
|
write_info("sys_os_ver_release", px4_os_version());
|
||||||
|
write_info("sys_toolchain", px4_toolchain_name());
|
||||||
|
write_info("sys_toolchain_ver", px4_toolchain_version());
|
||||||
|
|
||||||
|
char rev;
|
||||||
|
char *revstr;
|
||||||
|
|
||||||
|
if (mcu_version(&rev, &revstr) >= 0) {
|
||||||
|
char mcu_ver[64];
|
||||||
|
snprintf(mcu_ver, sizeof(mcu_ver), "%s, rev. %c", revstr, rev);
|
||||||
|
write_info("sys_mcu", mcu_ver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* write the UUID if enabled */
|
||||||
|
param_t write_uuid_param = param_find("SDLOG_UUID");
|
||||||
|
|
||||||
|
if (write_uuid_param != PARAM_INVALID) {
|
||||||
|
uint32_t write_uuid;
|
||||||
|
param_get(write_uuid_param, &write_uuid);
|
||||||
|
|
||||||
|
if (write_uuid == 1) {
|
||||||
|
uint32_t uuid[3];
|
||||||
|
mcu_unique_id(uuid);
|
||||||
|
char uuid_string[sizeof(uint32_t) * 3 * 2 + 1];
|
||||||
|
snprintf(uuid_string, sizeof(uuid_string), "%08x%08x%08x", uuid[0], uuid[1], uuid[2]);
|
||||||
|
write_info("sys_uuid", uuid_string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t utc_offset = 0;
|
int32_t utc_offset = 0;
|
||||||
|
|
||||||
if (_log_utc_offset != PARAM_INVALID) {
|
if (_log_utc_offset != PARAM_INVALID) {
|
||||||
|
|||||||
@@ -181,6 +181,11 @@ private:
|
|||||||
|
|
||||||
void write_info(const char *name, const char *value);
|
void write_info(const char *name, const char *value);
|
||||||
void write_info(const char *name, int32_t value);
|
void write_info(const char *name, int32_t value);
|
||||||
|
void write_info(const char *name, uint32_t value);
|
||||||
|
|
||||||
|
/** generic common template method for write_info variants */
|
||||||
|
template<typename T>
|
||||||
|
void write_info_template(const char *name, T value, const char *type_str);
|
||||||
|
|
||||||
void write_parameters();
|
void write_parameters();
|
||||||
|
|
||||||
|
|||||||
@@ -67,3 +67,13 @@ PARAM_DEFINE_INT32(SDLOG_UTC_OFFSET, 0);
|
|||||||
* @group SD Logging
|
* @group SD Logging
|
||||||
*/
|
*/
|
||||||
PARAM_DEFINE_INT32(SDLOG_MODE, 0);
|
PARAM_DEFINE_INT32(SDLOG_MODE, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log UUID
|
||||||
|
*
|
||||||
|
* If set, add an ID to the log, which uniquely identifies the vehicle
|
||||||
|
*
|
||||||
|
* @boolean
|
||||||
|
* @group SD Logging
|
||||||
|
*/
|
||||||
|
PARAM_DEFINE_INT32(SDLOG_UUID, 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user