From c00a0ecbed359520c660fe3d27c4357cf5bbe1e1 Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Sun, 7 Sep 2025 08:50:33 +0200 Subject: [PATCH] Prepared page tracker --- lib/obp60task/PageTracker.cpp | 121 ++++++++++++++++++++++++++++++++ lib/obp60task/config.json | 10 +++ lib/obp60task/config_obp40.json | 10 +++ lib/obp60task/obp60task.cpp | 2 + 4 files changed, 143 insertions(+) create mode 100644 lib/obp60task/PageTracker.cpp diff --git a/lib/obp60task/PageTracker.cpp b/lib/obp60task/PageTracker.cpp new file mode 100644 index 0000000..03eb82a --- /dev/null +++ b/lib/obp60task/PageTracker.cpp @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3 + +#include "Pagedata.h" +#include "OBP60Extensions.h" + +/* + Tracker + - standalone with SD card backend + - standalone with server backend + - Regatta Hero integration +*/ + +class PageTracker : public Page +{ +private: + + char mode = 'N'; // (N)ormal, (C)onfig + + void displayModeNormal(PageData &pageData) { + + // TBD Boatvalues: ... + + logger->logDebug(GwLog::DEBUG,"Drawing at PageTracker"); + + // Title + epd->setTextColor(commonData->fgcolor); + epd->setFont(&Ubuntu_Bold12pt8b); + epd->setCursor(8, 48); + epd->print("Tracker"); + + } + + void displayModeConfig() { + + epd->setTextColor(commonData->fgcolor); + epd->setFont(&Ubuntu_Bold12pt8b); + epd->setCursor(8, 48); + epd->print("Tracker configuration"); + + epd->setFont(&Ubuntu_Bold8pt8b); + // TODO + + } + +public: + PageTracker(CommonData &common) : Page(common) + { + logger->logDebug(GwLog::LOG, "Instantiate PageTracker"); + } + + void setupKeys(){ + Page::setupKeys(); + commonData->keydata[0].label = "START"; + commonData->keydata[1].label = "STOP"; + } + + int handleKey(int key){ + if (key == 1) { // Switch between normal and config mode + if (mode == 'N') { + mode = 'C'; + } else { + mode = 'N'; + } + return 0; + } + if (key == 11) { + commonData->keylock = !commonData->keylock; + return 0; + } + return key; + } + + void displayNew(PageData &pageData) { +#ifdef BOARD_OBP60S3 + // Clear optical warning + if (flashLED == "Limit Violation") { + setBlinkingLED(false); + setFlashLED(false); + } +#endif + }; + + int displayPage(PageData &pageData){ + + // Logging boat values + logger->logDebug(GwLog::LOG, "Drawing at PageTracker; Mode=%c", mode); + + // Set display in partial refresh mode + epd->setPartialWindow(0, 0, epd->width(), epd->height()); + + if (mode == 'N') { + displayModeNormal(pageData); + } else if (mode == 'C') { + displayModeConfig(); + } + + return PAGE_UPDATE; + }; +}; + +static Page *createPage(CommonData &common){ + return new PageTracker(common); +} + +/** + * with the code below we make this page known to the PageTask + * we give it a type (name) that can be selected in the config + * we define which function is to be called + * and we provide the number of user parameters we expect + * this will be number of BoatValue pointers in pageData.values + */ +PageDescription registerPageTracker( + "Tracker", // Page name + createPage, // Action + 0, // Number of bus values depends on selection in Web configuration + {"LAT", "LON"}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h) + true // Show display header on/off +); + +#endif diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index d4140ce..f02eb0f 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -1368,6 +1368,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -1679,6 +1680,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -1981,6 +1983,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -2274,6 +2277,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -2558,6 +2562,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -2833,6 +2838,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -3099,6 +3105,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -3356,6 +3363,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -3604,6 +3612,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -3843,6 +3852,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", diff --git a/lib/obp60task/config_obp40.json b/lib/obp60task/config_obp40.json index 9ad5e51..6554839 100644 --- a/lib/obp60task/config_obp40.json +++ b/lib/obp60task/config_obp40.json @@ -1391,6 +1391,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -1722,6 +1723,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -2044,6 +2046,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -2357,6 +2360,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -2661,6 +2665,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -2956,6 +2961,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -3242,6 +3248,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -3519,6 +3526,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -3787,6 +3795,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", @@ -4046,6 +4055,7 @@ "SkyView", "Solar", "ThreeValues", + "Tracker", "TwoValues", "Voltage", "WhitePage", diff --git a/lib/obp60task/obp60task.cpp b/lib/obp60task/obp60task.cpp index af31edb..74a8965 100644 --- a/lib/obp60task/obp60task.cpp +++ b/lib/obp60task/obp60task.cpp @@ -259,6 +259,8 @@ void registerAllPages(GwLog *logger, PageList &list){ list.add(®isterPageAIS); extern PageDescription registerPageBarograph; list.add(®isterPageBarograph); + extern PageDescription registerPageTracker; + list.add(®isterPageTracker); logger->logDebug(GwLog::LOG,"Memory after registering pages: stack=%d, heap=%d", uxTaskGetStackHighWaterMark(NULL), ESP.getFreeHeap()); }