From 6bc2cbeda9498dd004eb2f27d167e791597c97c4 Mon Sep 17 00:00:00 2001 From: Arjan Onwezen Date: Sun, 16 May 2021 11:41:09 +0200 Subject: [PATCH 1/2] ISO datetime for Clock, FileManager, Frequency manager Added option to show/hide clock (with/without date) --- firmware/application/apps/ui_freqman.hpp | 8 ++-- firmware/application/apps/ui_settings.cpp | 17 +++++++- firmware/application/apps/ui_settings.hpp | 31 +++++++++++---- firmware/application/string_format.cpp | 14 +++---- firmware/application/ui_navigation.cpp | 16 ++++++-- firmware/application/ui_navigation.hpp | 6 ++- .../common/portapack_persistent_memory.cpp | 18 ++++++++- .../common/portapack_persistent_memory.hpp | 4 ++ firmware/common/ui_widget.cpp | 39 ++++++++++++------- firmware/common/ui_widget.hpp | 2 + 10 files changed, 114 insertions(+), 41 deletions(-) diff --git a/firmware/application/apps/ui_freqman.hpp b/firmware/application/apps/ui_freqman.hpp index 4611080b..51e93e79 100644 --- a/firmware/application/apps/ui_freqman.hpp +++ b/firmware/application/apps/ui_freqman.hpp @@ -103,19 +103,19 @@ private: }; Labels labels { - { { 2 * 8, 14 * 8 }, "Save as:", Color::white() } + { { 1 * 8, 12 * 8 }, "Save as:", Color::white() } }; Button button_save_name { - { 2 * 8, 17 * 8, 14 * 8, 48 }, + { 1 * 8, 17 * 8, 12 * 8, 48 }, "Name (set)" }; Button button_save_timestamp { - { 2 * 8, 25 * 8, 14 * 8, 48 }, + { 1 * 8, 25 * 8, 12 * 8, 48 }, "Timestamp:" }; LiveDateTime live_timestamp { - { 17 * 8, 27 * 8, 11 * 8, 16 } + { 14 * 8, 27 * 8, 16 * 8, 16 } }; }; diff --git a/firmware/application/apps/ui_settings.cpp b/firmware/application/apps/ui_settings.cpp index 7525b8dd..fbda02b7 100644 --- a/firmware/application/apps/ui_settings.cpp +++ b/firmware/application/apps/ui_settings.cpp @@ -285,15 +285,17 @@ SetUIView::SetUIView(NavigationView& nav) { &checkbox_bloff, &options_bloff, &checkbox_showsplash, + &checkbox_showclock, + &options_clockformat, &button_ok }); checkbox_speaker.set_value(persistent_memory::config_speaker()); checkbox_showsplash.set_value(persistent_memory::config_splash()); + checkbox_showclock.set_value(!persistent_memory::hide_clock()); //checkbox_login.set_value(persistent_memory::config_login()); uint32_t backlight_timer = persistent_memory::config_backlight_timer(); - if (backlight_timer) { checkbox_bloff.set_value(true); options_bloff.set_by_value(backlight_timer); @@ -301,6 +303,12 @@ SetUIView::SetUIView(NavigationView& nav) { options_bloff.set_selected_index(0); } + if (persistent_memory::clock_with_date()) { + options_clockformat.set_selected_index(1); + } else { + options_clockformat.set_selected_index(0); + } + checkbox_speaker.on_select = [this](Checkbox&, bool v) { if (v) audio::output::speaker_mute(); //Just mute audio if speaker is disabled @@ -316,7 +324,14 @@ SetUIView::SetUIView(NavigationView& nav) { else persistent_memory::set_config_backlight_timer(0); + if (checkbox_showclock.value()){ + if (options_clockformat.selected_index() == 1) + persistent_memory::set_clock_with_date(true); + else + persistent_memory::set_clock_with_date(false); + } persistent_memory::set_config_splash(checkbox_showsplash.value()); + persistent_memory::set_clock_hidden(!checkbox_showclock.value()); //persistent_memory::set_config_login(checkbox_login.value()); nav.pop(); }; diff --git a/firmware/application/apps/ui_settings.hpp b/firmware/application/apps/ui_settings.hpp index c66ccd2b..30acd820 100644 --- a/firmware/application/apps/ui_settings.hpp +++ b/firmware/application/apps/ui_settings.hpp @@ -51,8 +51,8 @@ public: private: Labels labels { - { { 6 * 8, 7 * 16 }, "YYYY/MM/DD HH:MM:SS", Color::grey() }, - { { 10 * 8, 9 * 16 }, "/ / : :", Color::light_grey() } + { { 6 * 8, 7 * 16 }, "YYYY-MM-DD HH:MM:SS", Color::grey() }, + { { 10 * 8, 9 * 16 }, "- - : :", Color::light_grey() } }; NumberField field_year { @@ -226,19 +226,19 @@ private: };*/ Checkbox checkbox_speaker { - { 3 * 8, 2 * 16 }, + { 3 * 8, 4 * 16 }, 20, "Hide H1 Speaker option" }; + Checkbox checkbox_bloff { - { 3 * 8, 5 * 16 }, + { 3 * 8, 6 * 16 }, 20, "Backlight off after:" }; - OptionsField options_bloff { - { 52, 6 * 16 + 8 }, - 10, + { 52, 7 * 16 + 8 }, + 20, { { "5 seconds", 5 }, { "15 seconds", 15 }, @@ -252,10 +252,25 @@ private: Checkbox checkbox_showsplash { { 3 * 8, 9 * 16 }, - 11, + 20, "Show splash" }; + Checkbox checkbox_showclock { + { 3 * 8, 11 * 16 }, + 20, + "Show clock with:" + }; + + OptionsField options_clockformat { + { 52, 12 * 16 + 8 }, + 20, + { + { "time only", 0 }, + { "time and date", 1 } + } + }; + Button button_ok { { 2 * 8, 16 * 16, 12 * 8, 32 }, "Save" diff --git a/firmware/application/string_format.cpp b/firmware/application/string_format.cpp index 442034e4..1aa365e6 100644 --- a/firmware/application/string_format.cpp +++ b/firmware/application/string_format.cpp @@ -165,8 +165,8 @@ std::string to_string_datetime(const rtc::RTC& value, const TimeFormat format) { std::string string { "" }; if (format == YMDHMS) { - string += to_string_dec_uint(value.year(), 4) + "/" + - to_string_dec_uint(value.month(), 2, '0') + "/" + + string += to_string_dec_uint(value.year(), 4) + "-" + + to_string_dec_uint(value.month(), 2, '0') + "-" + to_string_dec_uint(value.day(), 2, '0') + " "; } @@ -189,11 +189,11 @@ std::string to_string_timestamp(const rtc::RTC& value) { } std::string to_string_FAT_timestamp(const FATTimestamp& timestamp) { - return to_string_dec_uint((timestamp.FAT_date >> 9) + 1980) + "/" + - to_string_dec_uint((timestamp.FAT_date >> 5) & 0xF, 2) + "/" + - to_string_dec_uint((timestamp.FAT_date & 0x1F), 2) + " " + - to_string_dec_uint((timestamp.FAT_time >> 11), 2) + ":" + - to_string_dec_uint((timestamp.FAT_time >> 5) & 0x3F, 2); + return to_string_dec_uint((timestamp.FAT_date >> 9) + 1980) + "-" + + to_string_dec_uint((timestamp.FAT_date >> 5) & 0xF, 2, '0') + "-" + + to_string_dec_uint((timestamp.FAT_date & 0x1F), 2, '0') + " " + + to_string_dec_uint((timestamp.FAT_time >> 11), 2, '0') + ":" + + to_string_dec_uint((timestamp.FAT_time >> 5) & 0x3F, 2, '0'); } std::string unit_auto_scale(double n, const uint32_t base_nano, uint32_t precision) { diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index c44e7b6e..e5f7f573 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -68,7 +68,7 @@ #include "ui_view_wav.hpp" #include "ui_whipcalc.hpp" -#include "acars_app.hpp" +//#include "acars_app.hpp" #include "ais_app.hpp" #include "analog_audio_app.hpp" #include "analog_tv_app.hpp" @@ -350,13 +350,21 @@ InformationView::InformationView( }); version.set_style(&style_infobar); + + ltime.set_hide_clock(portapack::persistent_memory::hide_clock()); ltime.set_style(&style_infobar); ltime.set_seconds_enabled(true); - ltime.set_date_enabled(false); - + ltime.set_date_enabled(portapack::persistent_memory::clock_with_date()); set_dirty(); } +void InformationView::refresh() { + ltime.set_hide_clock(portapack::persistent_memory::hide_clock()); + ltime.set_seconds_enabled(true); + ltime.set_date_enabled(portapack::persistent_memory::clock_with_date()); + +} + /* Navigation ************************************************************/ bool NavigationView::is_top() const { @@ -387,6 +395,7 @@ void NavigationView::pop() { update_view(); } + } void NavigationView::pop_modal() { @@ -606,6 +615,7 @@ SystemView::SystemView( } else{ add_child(&info_view); + info_view.refresh(); } this->status_view.set_back_enabled(!this->navigation_view.is_top()); diff --git a/firmware/application/ui_navigation.hpp b/firmware/application/ui_navigation.hpp index f7b7f45e..86ea96fb 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -212,7 +212,7 @@ private: class InformationView : public View { public: InformationView(NavigationView& nav); - + void refresh(); private: static constexpr auto version_string = "v1.4.0"; NavigationView& nav_; @@ -228,8 +228,10 @@ private: }; LiveDateTime ltime { - {174, 0, 8 * 8, 16} + {86, 0, 19 * 8, 16} }; + + }; class BMPView : public View { diff --git a/firmware/common/portapack_persistent_memory.cpp b/firmware/common/portapack_persistent_memory.cpp index 21f40c31..2bee6470 100644 --- a/firmware/common/portapack_persistent_memory.cpp +++ b/firmware/common/portapack_persistent_memory.cpp @@ -224,9 +224,17 @@ void set_playdead_sequence(const uint32_t new_value) { // ui_config is an uint32_t var storing information bitwise // bits 0,1,2 store the backlight timer -// bits 31, 30,29,28,27 stores the different single bit configs depicted below +// bits 31, 30,29,28,27, 26, 25 stores the different single bit configs depicted below // bits on position 4 to 19 (16 bits) store the clkout frequency +bool hide_clock() { // clock hidden from main menu + return data->ui_config & (1 << 25); +} + +bool clock_with_date() { // show clock with date, if not hidden + return data->ui_config & (1 << 26); +} + bool clkout_enabled() { return data->ui_config & (1 << 27); } @@ -251,6 +259,14 @@ uint32_t config_backlight_timer() { return timer_seconds[data->ui_config & 7]; //first three bits, 8 possible values } +void set_clock_hidden(bool v) { + data->ui_config = (data->ui_config & ~(1 << 25)) | (v << 25); +} + +void set_clock_with_date(bool v) { + data->ui_config = (data->ui_config & ~(1 << 26)) | (v << 26); +} + void set_clkout_enabled(bool v) { data->ui_config = (data->ui_config & ~(1 << 27)) | (v << 27); } diff --git a/firmware/common/portapack_persistent_memory.hpp b/firmware/common/portapack_persistent_memory.hpp index df0d7d0d..11643bab 100644 --- a/firmware/common/portapack_persistent_memory.hpp +++ b/firmware/common/portapack_persistent_memory.hpp @@ -75,11 +75,15 @@ bool stealth_mode(); void set_stealth_mode(const bool v); bool config_splash(); +bool hide_clock(); +bool clock_with_date(); bool config_login(); bool config_speaker(); uint32_t config_backlight_timer(); void set_config_splash(bool v); +void set_clock_hidden(bool v); +void set_clock_with_date(bool v); void set_config_login(bool v); void set_config_speaker(bool v); void set_config_backlight_timer(uint32_t i); diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index 85ad91f1..79cd7cd4 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -410,23 +410,29 @@ void Labels::paint(Painter& painter) { void LiveDateTime::on_tick_second() { rtcGetTime(&RTCD1, &datetime); text = ""; - - if(date_enabled){ - text = to_string_dec_uint(datetime.month(), 2, '0') + "/" + to_string_dec_uint(datetime.day(), 2, '0') + " "; - } - - text = text + to_string_dec_uint(datetime.hour(), 2, '0') + ":" + to_string_dec_uint(datetime.minute(), 2, '0'); + if(!hide_clock) { + if(date_enabled){ + text = to_string_dec_uint(datetime.year(), 4, '0') + "-" + + to_string_dec_uint(datetime.month(), 2, '0') + "-" + + to_string_dec_uint(datetime.day(), 2, '0') + " "; + } + else{ + text = " "; + } + + text = text + to_string_dec_uint(datetime.hour(), 2, '0') + ":" + to_string_dec_uint(datetime.minute(), 2, '0'); - if(seconds_enabled){ - text += ":"; + if(seconds_enabled){ + text += ":"; - if(init_delay==0) - text += to_string_dec_uint(datetime.second(), 2, '0'); - else - { - // Placeholder while the seconds are not updated - text += "XX"; - init_delay--; + if(init_delay==0) + text += to_string_dec_uint(datetime.second(), 2, '0'); + else + { + // Placeholder while the seconds are not updated + text += "XX"; + init_delay--; + } } } set_dirty(); @@ -459,6 +465,9 @@ void LiveDateTime::paint(Painter& painter) { text ); } +void LiveDateTime::set_hide_clock(bool new_value){ + this->hide_clock = new_value; +} void LiveDateTime::set_date_enabled(bool new_value){ this->date_enabled = new_value; diff --git a/firmware/common/ui_widget.hpp b/firmware/common/ui_widget.hpp index 71cd8f91..18ff7309 100644 --- a/firmware/common/ui_widget.hpp +++ b/firmware/common/ui_widget.hpp @@ -244,6 +244,7 @@ public: void paint(Painter& painter) override; + void set_hide_clock(bool new_value); void set_seconds_enabled(bool new_value); void set_date_enabled(bool new_value); @@ -255,6 +256,7 @@ private: void on_tick_second(); uint16_t init_delay = 4; + bool hide_clock = false; bool date_enabled = true; bool seconds_enabled = false; From 226c0c2d8097ed04770c52dc09665232c3ea74c1 Mon Sep 17 00:00:00 2001 From: Arjan Onwezen Date: Sun, 6 Jun 2021 00:22:55 +0200 Subject: [PATCH 2/2] fix for freq manager save file --- firmware/application/apps/ui_freqman.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/firmware/application/apps/ui_freqman.cpp b/firmware/application/apps/ui_freqman.cpp index eb728bcf..2fe3fdc2 100644 --- a/firmware/application/apps/ui_freqman.cpp +++ b/firmware/application/apps/ui_freqman.cpp @@ -48,6 +48,9 @@ FreqManBaseView::FreqManBaseView( } else error_ = ERROR_NOFILES; + // initialize + change_category(last_category_id); + // Default function on_change_category = [this](int32_t category_id) { change_category(category_id);