From 00f40bf1713d377e80b4d3655c11bb264d282d72 Mon Sep 17 00:00:00 2001 From: Hoite Prins Date: Mon, 16 Feb 2026 14:55:12 +0100 Subject: [PATCH] feat: add BAR unit support to TPMS RX app (#2988) - Add bar() conversion method to Pressure class - Convert pressure units system from boolean to enum (kPa, PSI, BAR) - Add BAR option to pressure unit selector in UI - Update settings manager to persist pressure unit preference - Use ternary operators for compact pressure formatting --- .../application/external/tpmsrx/tpms_app.cpp | 9 ++++++--- .../application/external/tpmsrx/tpms_app.hpp | 17 ++++++++++++----- firmware/common/units.hpp | 4 ++++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/firmware/application/external/tpmsrx/tpms_app.cpp b/firmware/application/external/tpmsrx/tpms_app.cpp index ef31ca8fa..cb9516f50 100644 --- a/firmware/application/external/tpmsrx/tpms_app.cpp +++ b/firmware/application/external/tpmsrx/tpms_app.cpp @@ -47,7 +47,10 @@ std::string id(tpms::TransponderID id) { } std::string pressure(Pressure pressure) { - return to_string_dec_int(units_psi ? pressure.psi() : pressure.kilopascal(), 3); + return to_string_dec_int( + format::units_pressure == format::PressureUnit::PSI ? pressure.psi() : format::units_pressure == format::PressureUnit::BAR ? pressure.bar() + : pressure.kilopascal(), + 3); } std::string temperature(Temperature temperature) { @@ -122,10 +125,10 @@ TPMSAppView::TPMSAppView(NavigationView&) { options_band.set_by_value(receiver_model.target_frequency()); options_pressure.on_change = [this](size_t, int32_t i) { - format::units_psi = (bool)i; + format::units_pressure = static_cast(i); update_view(); }; - options_pressure.set_selected_index(format::units_psi, true); + options_pressure.set_selected_index(static_cast(format::units_pressure), true); options_temperature.on_change = [this](size_t, int32_t i) { format::units_fahr = (bool)i; diff --git a/firmware/application/external/tpmsrx/tpms_app.hpp b/firmware/application/external/tpmsrx/tpms_app.hpp index 432aa8123..5e2656d8b 100644 --- a/firmware/application/external/tpmsrx/tpms_app.hpp +++ b/firmware/application/external/tpmsrx/tpms_app.hpp @@ -42,7 +42,13 @@ namespace ui::external_app::tpmsrx { namespace format { -static bool units_psi{false}; +enum class PressureUnit : int { + kPa = 0, + PSI = 1, + BAR = 2, +}; + +static PressureUnit units_pressure{PressureUnit::kPa}; static bool units_fahr{false}; } /* namespace format */ @@ -117,7 +123,7 @@ class TPMSAppView : public View { "rx_tpms", app_settings::Mode::RX, { - {"units_psi"sv, &format::units_psi}, + {"units_pressure"sv, &format::units_pressure}, {"units_fahr"sv, &format::units_fahr}, }}; @@ -154,9 +160,10 @@ class TPMSAppView : public View { OptionsField options_pressure{ {6 * 8, UI_POS_Y(0)}, - 3, - {{"kPa", 0}, - {"PSI", 1}}}; + 4, + {{"kPa", static_cast(PressureUnit::kPa)}, + {"PSI", static_cast(PressureUnit::PSI)}, + {"BAR", static_cast(PressureUnit::BAR)}}}; OptionsField options_temperature{ {10 * 8, UI_POS_Y(0)}, diff --git a/firmware/common/units.hpp b/firmware/common/units.hpp index f15e985fd..f8b337e51 100644 --- a/firmware/common/units.hpp +++ b/firmware/common/units.hpp @@ -48,6 +48,10 @@ class Pressure { return kpa_ * 1000 / 6895; } + int bar() const { + return kpa_ / 100; + } + private: int16_t kpa_; };