From f101a9665b0b94236065b417beea6082611f0502 Mon Sep 17 00:00:00 2001 From: Malte Langermann <54738901+gagarinlg@users.noreply.github.com> Date: Thu, 15 Dec 2022 01:28:05 +0100 Subject: [PATCH] fix(color): Don't trigger RTC write every second, update all fields (#2867) Also all fields should be updated, not just the seconds --- radio/src/gui/colorlcd/radio_setup.cpp | 32 ++++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_setup.cpp b/radio/src/gui/colorlcd/radio_setup.cpp index ba95e60da..8da4285b1 100644 --- a/radio/src/gui/colorlcd/radio_setup.cpp +++ b/radio/src/gui/colorlcd/radio_setup.cpp @@ -48,14 +48,32 @@ class DateTimeWindow : public FormGroup { { FormGroup::checkEvents(); - if (get_tmr10ms() - lastRefresh > 100) { - seconds->setValue(seconds->getValue()); + if (get_tmr10ms() - lastRefresh >= 10) { + struct gtm newTS; lastRefresh = get_tmr10ms(); + + gettime(&newTS); + if(newTS.tm_sec == lastSecond) + return; + + lastSecond = newTS.tm_sec; + year->update(); + month->update(); + day->update(); + hour->update(); + minutes->update(); + seconds->update(); } } protected: tmr10ms_t lastRefresh = 0; + int8_t lastSecond; + NumberEdit* year = nullptr; + NumberEdit* month = nullptr; + NumberEdit* day = nullptr; + NumberEdit* hour = nullptr; + NumberEdit* minutes = nullptr; NumberEdit* seconds = nullptr; void build() @@ -66,7 +84,7 @@ class DateTimeWindow : public FormGroup { auto line = newLine(&grid); // Date new StaticText(line, rect_t{}, STR_DATE, 0, COLOR_THEME_PRIMARY1); - auto year = new NumberEdit(line, rect_t{}, 2018, 2100, + year = new NumberEdit(line, rect_t{}, 2018, 2100, [=]() -> int32_t { struct gtm t; gettime(&t); @@ -79,7 +97,7 @@ class DateTimeWindow : public FormGroup { SET_LOAD_DATETIME(&t); }); lv_obj_set_style_grid_cell_x_align(year->getLvObj(), LV_GRID_ALIGN_STRETCH, 0); - auto month = new NumberEdit(line, rect_t{}, 1, 12, + month = new NumberEdit(line, rect_t{}, 1, 12, [=]() -> int32_t { struct gtm t; gettime(&t); @@ -102,7 +120,7 @@ class DateTimeWindow : public FormGroup { static const pm_uint8_t dmon[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; dlim += *(&dmon[t.tm_mon]);*/ int8_t dlim = 31; - auto day = new NumberEdit(line, rect_t{}, 1, dlim, + day = new NumberEdit(line, rect_t{}, 1, dlim, [=]() -> int32_t { struct gtm t; gettime(&t); @@ -122,7 +140,7 @@ class DateTimeWindow : public FormGroup { // Time new StaticText(line, rect_t{}, STR_TIME, 0, COLOR_THEME_PRIMARY1); - auto hour = new NumberEdit(line, rect_t{}, 0, 24, + hour = new NumberEdit(line, rect_t{}, 0, 24, [=]() -> int32_t { struct gtm t; gettime(&t); @@ -142,7 +160,7 @@ class DateTimeWindow : public FormGroup { }); lv_obj_set_style_grid_cell_x_align(hour->getLvObj(), LV_GRID_ALIGN_STRETCH, 0); - auto minutes = new NumberEdit(line, rect_t{}, 0, 59, + minutes = new NumberEdit(line, rect_t{}, 0, 59, [=]() -> int32_t { struct gtm t; gettime(&t);