From 645e9988c8a8934099968a33dea962c3b00ad5f9 Mon Sep 17 00:00:00 2001 From: Sassa NF Date: Tue, 1 Oct 2024 19:32:46 +0100 Subject: [PATCH] Test stability: uptime clock --- lib/charts/UptimeClock.cpp | 28 ++++++++++++++++++++++++++++ lib/charts/charts.h | 10 ++++++++++ src/main.cpp | 10 ++++++++++ 3 files changed, 48 insertions(+) create mode 100644 lib/charts/UptimeClock.cpp diff --git a/lib/charts/UptimeClock.cpp b/lib/charts/UptimeClock.cpp new file mode 100644 index 0000000..f7e229e --- /dev/null +++ b/lib/charts/UptimeClock.cpp @@ -0,0 +1,28 @@ +#include "charts.h" + +void UptimeClock::draw(uint64_t t) +{ + t1 = t; + draw(); +} + +void UptimeClock::draw() +{ + uint64_t uptime = t1 - t0; + int mils = uptime % 1000; + int seconds = (uptime / 1000) % 60; + int minutes = (uptime / 60000) % 60; + int hours = uptime / 3600000; + String s = String(hours) + (minutes < 10 ? ":0" : ":") + String(minutes) + + (seconds < 10 ? ":0" : ":") + String(seconds) + + (mils < 10 ? ".00" + : mils < 100 ? ".0" + : ".") + + String(mils); + int w = display.getStringWidth(s); + display.setColor(BLACK); + display.fillRect((display.width() - w) / 2, display.height() / 2 - 3, w, 7); + display.setColor(WHITE); + display.setTextAlignment(TEXT_ALIGN_CENTER_BOTH); + display.drawString(display.width() / 2, display.height() / 2, s); +} diff --git a/lib/charts/charts.h b/lib/charts/charts.h index c2c7dfb..53b4f31 100644 --- a/lib/charts/charts.h +++ b/lib/charts/charts.h @@ -153,4 +153,14 @@ struct WaterfallChart : Chart int x2pos(float x); }; +struct UptimeClock : Chart +{ + uint64_t t0; + uint64_t t1; + UptimeClock(OLEDDisplay &d, uint64_t t0) : Chart(d, 0, 0, 0, 0), t0(t0), t1(t0) {}; + + void draw(uint64_t t); + virtual void draw() override; +}; + #endif diff --git a/src/main.cpp b/src/main.cpp index d04b6ec..b26b32d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -371,6 +371,8 @@ DecoratedBarChart *bar; WaterfallChart *waterChart; StackedChart stacked(display, 0, 0, 0, 0); +UptimeClock *uptime; + void init_radio() { // initialize SX1262 FSK modem at the initial frequency @@ -684,6 +686,10 @@ void setup(void) stacked.setHeight(c, stacked.height - WATERFALL_START); stacked.setHeight(b, stacked.height); + +#ifdef UPTIME_CLOCK + uptime = new UptimeClock(display, millis()); +#endif } // Formula to translate 33 bin to approximate RSSI value @@ -1271,6 +1277,10 @@ void loop(void) stacked.draw(); // Render display data here + +#ifdef UPTIME_CLOCK + uptime->draw(millis()); +#endif display.display(); #ifdef OSD_ENABLED // Sometimes OSD prints entire screen with the digits.