Files
2026-09-02 16:46:45 -05:00

58 lines
1.9 KiB
C++

#include "tools/cabana/utils/strings.h"
#include <algorithm>
#include <cmath>
#include <ctime>
#include <sstream>
#include "tools/cabana/dbc/dbc.h"
namespace utils {
std::string formatSeconds(double sec, bool include_milliseconds, bool absolute_time) {
char out[80] = {};
if (absolute_time) {
const auto ms_total = static_cast<int64_t>(std::llround(sec * 1000.0));
const std::time_t secs = static_cast<std::time_t>(ms_total / 1000);
int millis = static_cast<int>(ms_total % 1000);
if (millis < 0) millis = -millis;
std::tm tm{};
localtime_r(&secs, &tm);
char buf[64] = {};
std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm);
if (!include_milliseconds) return buf;
snprintf(out, sizeof(out), "%s.%03d", buf, millis);
return out;
}
const bool show_hours = sec > 60 * 60;
int total_ms = static_cast<int>(std::llround(std::max(0.0, sec) * 1000.0));
const int hours = total_ms / (3600 * 1000);
const int minutes = (total_ms / (60 * 1000)) % 60;
const int seconds = (total_ms / 1000) % 60;
const int millis = total_ms % 1000;
if (show_hours && include_milliseconds) {
snprintf(out, sizeof(out), "%02d:%02d:%02d.%03d", hours, minutes, seconds, millis);
} else if (show_hours) {
snprintf(out, sizeof(out), "%02d:%02d:%02d", hours, minutes, seconds);
} else if (include_milliseconds) {
snprintf(out, sizeof(out), "%02d:%02d.%03d", minutes, seconds, millis);
} else {
snprintf(out, sizeof(out), "%02d:%02d", minutes, seconds);
}
return out;
}
std::string signalToolTip(const cabana::Signal *sig) {
std::ostringstream s;
s << "\n " << sig->name << "<br /><span font-size:small\">\n"
<< " Start Bit: " << sig->start_bit << " Size: " << sig->size << "<br />\n"
<< " MSB: " << sig->msb << " LSB: " << sig->lsb << "<br />\n"
<< " Little Endian: " << (sig->is_little_endian ? "Y" : "N")
<< " Signed: " << (sig->is_signed ? "Y" : "N") << "</span>\n ";
return s.str();
}
}