From f8a14414e20f685e3a853d590af9f98d73eb3fc6 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sun, 19 Dec 2021 23:25:52 +0100 Subject: [PATCH] Moved driving mode into own task --- main/CMakeLists.txt | 2 ++ main/displays/statusdisplay.cpp | 6 ++++-- main/globals.cpp | 2 -- main/globals.h | 7 ------- main/main.cpp | 27 +++------------------------ main/modes.cpp | 24 ++++++++++++++++++++++++ main/modes.h | 4 ++++ main/taskmanager.cpp | 9 +++++++++ main/taskmanager.h | 2 ++ 9 files changed, 48 insertions(+), 35 deletions(-) create mode 100644 main/modes.cpp create mode 100644 main/modes.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index d4e1834..e05a1f5 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -173,6 +173,7 @@ set(headers ledstripdefines.h macros_bobbycar.h modeinterface.h + modes.h modes/defaultmode.h modes/gametrakmode.h modes/ignoreinputmode.h @@ -391,6 +392,7 @@ set(sources macros_bobbycar.cpp main.cpp modeinterface.cpp + modes.cpp modes/defaultmode.cpp modes/gametrakmode.cpp modes/ignoreinputmode.cpp diff --git a/main/displays/statusdisplay.cpp b/main/displays/statusdisplay.cpp index 1301a58..e06148f 100644 --- a/main/displays/statusdisplay.cpp +++ b/main/displays/statusdisplay.cpp @@ -4,6 +4,7 @@ #include #include #include +#include // local includes #include "displays/menus/mainmenu.h" @@ -15,6 +16,7 @@ #include "drivingstatistics.h" #include "udpcloud.h" #include "modes/defaultmode.h" +#include "taskmanager.h" using namespace std::chrono_literals; using namespace espgui; @@ -162,8 +164,8 @@ clearIp: m_labelLimit1.redraw(fmt::format("{}A", controllers.front.command.left.iDcMax)); - tft.setTextColor(performance.last < 35 ? TFT_ORANGE : TFT_WHITE, TFT_BLACK); - m_labelPerformance.redraw(std::to_string(performance.last)); + tft.setTextColor(drivingModeTask.callCount() < 35 ? TFT_ORANGE : TFT_WHITE, TFT_BLACK); + m_labelPerformance.redraw(std::to_string(drivingModeTask.callCount())); tft.setTextColor(TFT_WHITE, TFT_BLACK); { diff --git a/main/globals.cpp b/main/globals.cpp index ef85c42..e11e925 100644 --- a/main/globals.cpp +++ b/main/globals.cpp @@ -40,8 +40,6 @@ std::array ledstrip_custom_colors; Controllers controllers; -Performance performance; - #ifdef FEATURE_BLUETOOTH BluetoothSerial bluetoothSerial; #endif diff --git a/main/globals.h b/main/globals.h index cb93b34..12758ef 100644 --- a/main/globals.h +++ b/main/globals.h @@ -96,13 +96,6 @@ extern Controllers controllers; struct FrontControllerGetter { static Controller &get() { return controllers.front; }}; struct BackControllerGetter { static Controller &get() { return controllers.back; }}; -struct Performance { - espchrono::millis_clock::time_point lastTime; - int current{}; - int last{}; -}; -extern Performance performance; - #ifdef FEATURE_BLUETOOTH extern BluetoothSerial bluetoothSerial; #endif diff --git a/main/main.cpp b/main/main.cpp index 18b788e..849f7ee 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -39,7 +39,7 @@ using namespace std::chrono_literals; #include "taskmanager.h" namespace { -std::optional lastModeUpdate; +espchrono::millis_clock::time_point lastStatsPush; std::optional lastStatsUpdate; std::optional lastDisplayUpdate; std::optional lastDisplayRedraw; @@ -123,25 +123,6 @@ extern "C" void app_main() schedulerTask.loop(); } - if (!lastModeUpdate || now - *lastModeUpdate >= 1000ms/settings.boardcomputerHardware.timersSettings.modeUpdateRate) - { - if (lastMode != currentMode) - { - if (lastMode) - lastMode->stop(); - lastMode = currentMode; - if (currentMode) - currentMode->start(); - } - - if (currentMode) - currentMode->update(); - - lastModeUpdate = now; - - performance.current++; - } - if (!lastStatsUpdate || now - *lastStatsUpdate >= 1000ms/settings.boardcomputerHardware.timersSettings.statsUpdateRate) { updateAccumulators(); @@ -163,13 +144,11 @@ extern "C" void app_main() lastDisplayRedraw = now; } - if (now - performance.lastTime >= 1000ms) + if (now - lastStatsPush >= 1s) { sched_pushStats(false); - performance.last = performance.current; - performance.current = 0; - performance.lastTime = now; + lastStatsPush = now; } #ifdef FEATURE_DNS_NS diff --git a/main/modes.cpp b/main/modes.cpp new file mode 100644 index 0000000..7e46328 --- /dev/null +++ b/main/modes.cpp @@ -0,0 +1,24 @@ +#include "modes.h" + +// local includes +#include "globals.h" + +void initDrivingMode() +{ + +} + +void updateDrivingMode() +{ + if (lastMode != currentMode) + { + if (lastMode) + lastMode->stop(); + lastMode = currentMode; + if (currentMode) + currentMode->start(); + } + + if (currentMode) + currentMode->update(); +} diff --git a/main/modes.h b/main/modes.h new file mode 100644 index 0000000..e48dd07 --- /dev/null +++ b/main/modes.h @@ -0,0 +1,4 @@ +#pragma once + +void initDrivingMode(); +void updateDrivingMode(); diff --git a/main/taskmanager.cpp b/main/taskmanager.cpp index 05fed62..fabbe83 100644 --- a/main/taskmanager.cpp +++ b/main/taskmanager.cpp @@ -72,6 +72,7 @@ #ifdef FEATURE_UDPCLOUD #include "udpcloud.h" #endif +#include "modes.h" using namespace std::chrono_literals; @@ -141,11 +142,19 @@ espcpputils::SchedulerTask schedulerTasksArr[] { #ifdef FEATURE_UDPCLOUD espcpputils::SchedulerTask { "udpcloud", udpCloudInit, udpCloudUpdate, 50ms }, #endif + espcpputils::SchedulerTask { "drivingmode", initDrivingMode, updateDrivingMode, 20ms }, }; } // namespace cpputils::ArrayView schedulerTasks{std::begin(schedulerTasksArr), std::end(schedulerTasksArr)}; +const espcpputils::SchedulerTask &drivingModeTask = []() -> const espcpputils::SchedulerTask & { + auto iter = std::find_if(std::begin(schedulerTasksArr), std::end(schedulerTasksArr), [](const espcpputils::SchedulerTask &task){ + return std::string_view{task.name()} == "drivingmode"; + }); + return *iter; +}(); + void sched_pushStats(bool printTasks) { if (printTasks) diff --git a/main/taskmanager.h b/main/taskmanager.h index 6f428e4..b83c937 100644 --- a/main/taskmanager.h +++ b/main/taskmanager.h @@ -8,4 +8,6 @@ namespace espcpputils { class SchedulerTask; } extern cpputils::ArrayView schedulerTasks; +extern const espcpputils::SchedulerTask &drivingModeTask; + void sched_pushStats(bool printTasks);