diff --git a/.changesets/fix-sched-and-format.md b/.changesets/fix-sched-and-format.md new file mode 100644 index 000000000..720d413e2 --- /dev/null +++ b/.changesets/fix-sched-and-format.md @@ -0,0 +1,2 @@ +release: patch +summary: Unify get_global_tick behaviour and make format_numeric_value return if value was written in DiagnosticFormatter diff --git a/Src/HALAL/Services/Diagnostics/DiagnosticFormatter.cpp b/Src/HALAL/Services/Diagnostics/DiagnosticFormatter.cpp index 22652f480..3e0036b67 100644 --- a/Src/HALAL/Services/Diagnostics/DiagnosticFormatter.cpp +++ b/Src/HALAL/Services/Diagnostics/DiagnosticFormatter.cpp @@ -84,16 +84,18 @@ const char* rule_edge_label(Protections::RuleEdge edge) { std::unreachable(); } -void format_numeric_value( +/* returns if there was enough size to write the value */ +bool format_numeric_value( Protections::SampleEncoding encoding, Protections::NumericValue value, char* buffer, size_t buffer_size ) { if (buffer_size == 0) { - return; + return false; } + size_t bytes_written = 0; switch (encoding) { case Protections::SampleEncoding::BOOL: { const char* text = value.bool_value ? "true" : "false"; @@ -101,36 +103,32 @@ void format_numeric_value( const size_t length = std::min(text_length, buffer_size - 1); memcpy(buffer, text, length); buffer[length] = '\0'; + return length == text_length; } - return; case Protections::SampleEncoding::SIGNED: - if (snprintf(buffer, buffer_size, "%lld", static_cast(value.signed_value)) < 0) { - buffer[0] = '\0'; - } - return; + bytes_written = + snprintf(buffer, buffer_size, "%lld", static_cast(value.signed_value)); + break; case Protections::SampleEncoding::UNSIGNED: - if (snprintf( - buffer, - buffer_size, - "%llu", - static_cast(value.unsigned_value) - ) < 0) { - buffer[0] = '\0'; - } - return; + bytes_written = snprintf( + buffer, + buffer_size, + "%llu", + static_cast(value.unsigned_value) + ); + break; case Protections::SampleEncoding::FLOAT32: - if (snprintf(buffer, buffer_size, "%.6f", static_cast(value.float32_value)) < 0) { - buffer[0] = '\0'; - } - return; + bytes_written = + snprintf(buffer, buffer_size, "%.6f", static_cast(value.float32_value)); + break; case Protections::SampleEncoding::FLOAT64: - if (snprintf(buffer, buffer_size, "%.6f", value.float64_value) < 0) { - buffer[0] = '\0'; - } - return; + bytes_written = snprintf(buffer, buffer_size, "%.6f", value.float64_value); + break; + default: + std::unreachable(); } - std::unreachable(); + return bytes_written < buffer_size; } void append_timestamp_suffix(const Timestamp& timestamp, DiagnosticStringBuilder& builder) { diff --git a/Src/HALAL/Services/Time/Scheduler.cpp b/Src/HALAL/Services/Time/Scheduler.cpp index 1cc860eae..a01b1da53 100644 --- a/Src/HALAL/Services/Time/Scheduler.cpp +++ b/Src/HALAL/Services/Time/Scheduler.cpp @@ -103,13 +103,7 @@ void Scheduler::update() { uint64_t Scheduler::get_global_tick() { SchedLock(); uint64_t tick = global_tick_us_; -#ifdef SIM_ON - if (Scheduler_global_timer != nullptr) { - tick += Scheduler_global_timer->CNT; - } -#else tick += Scheduler_global_timer->CNT; -#endif SchedUnlock(); return tick; } diff --git a/Tests/diagnostics_test.cpp b/Tests/diagnostics_test.cpp index f5fad2ba1..f6b99dfa3 100644 --- a/Tests/diagnostics_test.cpp +++ b/Tests/diagnostics_test.cpp @@ -131,7 +131,7 @@ class DiagnosticsHubTest : public ::testing::Test { TestPanicReporter::reset(); fault_enter_calls = 0; Scheduler::global_tick_us_ = 0; - Scheduler_global_timer = nullptr; + Scheduler_global_timer = TIM2_BASE; FaultController::install_runtime(); FaultController::start();