diff --git a/firmware/application/apps/tpms_app.cpp b/firmware/application/apps/tpms_app.cpp index 82cdbd3f0..7858d7a21 100644 --- a/firmware/application/apps/tpms_app.cpp +++ b/firmware/application/apps/tpms_app.cpp @@ -34,6 +34,8 @@ namespace tpms { namespace format { +static bool use_kpa = true; + std::string type(Reading::Type type) { return to_string_dec_uint(toUType(type), 2); } @@ -43,7 +45,11 @@ std::string id(TransponderID id) { } std::string pressure(Pressure pressure) { - return to_string_dec_int(pressure.kilopascal(), 3); + if(use_kpa){ + return to_string_dec_int(pressure.kilopascal(), 3); + } + return to_string_dec_int(pressure.psi(), 3); + } std::string temperature(Temperature temperature) { @@ -142,7 +148,7 @@ TPMSAppView::TPMSAppView(NavigationView&) { &field_rf_amp, &field_lna, &field_vga, - &recent_entries_view, + &options_type, }); radio::enable({ @@ -160,6 +166,17 @@ TPMSAppView::TPMSAppView(NavigationView&) { }; options_band.set_by_value(target_frequency()); + options_type.on_change = [this](size_t, int32_t i) { + if (i == 0){ + tpms::format::use_kpa = true; + } else if (i == 1){ + tpms::format::use_kpa = false; + } + update_type(); + }; + + options_type.set_selected_index(0, true); + logger = std::make_unique(); if( logger ) { logger->append(u"tpms.txt"); @@ -176,9 +193,24 @@ void TPMSAppView::focus() { options_band.focus(); } +void TPMSAppView::update_type() { + if (tpms::format::use_kpa){ + remove_child(&recent_entries_view_psi); + add_child(&recent_entries_view_kpa); + recent_entries_view_kpa.set_parent_rect(view_normal_rect); + } else { + remove_child(&recent_entries_view_kpa); + add_child(&recent_entries_view_psi); + recent_entries_view_psi.set_parent_rect(view_normal_rect); + } +} + void TPMSAppView::set_parent_rect(const Rect new_parent_rect) { View::set_parent_rect(new_parent_rect); - recent_entries_view.set_parent_rect({ 0, header_height, new_parent_rect.width(), new_parent_rect.height() - header_height }); + + view_normal_rect = { 0, header_height, new_parent_rect.width(), new_parent_rect.height() - header_height }; + + update_type(); } void TPMSAppView::on_packet(const tpms::Packet& packet) { @@ -191,13 +223,23 @@ void TPMSAppView::on_packet(const tpms::Packet& packet) { const auto reading = reading_opt.value(); auto& entry = ::on_packet(recent, TPMSRecentEntry::Key { reading.type(), reading.id() }); entry.update(reading); - recent_entries_view.set_dirty(); + + if(tpms::format::use_kpa){ + recent_entries_view_kpa.set_dirty(); + } else { + recent_entries_view_psi.set_dirty(); + } } } void TPMSAppView::on_show_list() { - recent_entries_view.hidden(false); - recent_entries_view.focus(); + if(tpms::format::use_kpa){ + recent_entries_view_kpa.hidden(false); + recent_entries_view_kpa.focus(); + } else { + recent_entries_view_psi.hidden(false); + recent_entries_view_psi.focus(); + } } void TPMSAppView::on_band_changed(const uint32_t new_band_frequency) { diff --git a/firmware/application/apps/tpms_app.hpp b/firmware/application/apps/tpms_app.hpp index ee17c6eb2..648c5b495 100644 --- a/firmware/application/apps/tpms_app.hpp +++ b/firmware/application/apps/tpms_app.hpp @@ -121,6 +121,8 @@ private: static constexpr ui::Dim header_height = 1 * 16; + ui::Rect view_normal_rect { }; + RSSI rssi { { 21 * 8, 0, 6 * 8, 4 }, }; @@ -138,6 +140,15 @@ private: } }; + OptionsField options_type { + { 5 * 8, 0 * 16 }, + 3, + { + { "kPa", 0 }, + { "PSI", 1 } + } + }; + RFAmpField field_rf_amp { { 13 * 8, 0 * 16 } }; @@ -153,7 +164,7 @@ private: TPMSRecentEntries recent { }; std::unique_ptr logger { }; - const RecentEntriesColumns columns { { + const RecentEntriesColumns columns_kpa { { { "Tp", 2 }, { "ID", 8 }, { "kPa", 3 }, @@ -161,12 +172,23 @@ private: { "Cnt", 3 }, { "Fl", 2 }, } }; - TPMSRecentEntriesView recent_entries_view { columns, recent }; + TPMSRecentEntriesView recent_entries_view_kpa { columns_kpa, recent }; + + const RecentEntriesColumns columns_psi { { + { "Tp", 2 }, + { "ID", 8 }, + { "PSI", 3 }, + { "C", 3 }, + { "Cnt", 3 }, + { "Fl", 2 }, + } }; + TPMSRecentEntriesView recent_entries_view_psi { columns_psi, recent }; uint32_t target_frequency_ = initial_target_frequency; void on_packet(const tpms::Packet& packet); void on_show_list(); + void update_type(); void on_band_changed(const uint32_t new_band_frequency);