diff --git a/main/main.cpp b/main/main.cpp index 8682c81..c8ca1a1 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -18,6 +18,7 @@ constexpr const char * const TAG = "BOBBY"; #include using namespace std::chrono_literals; #include +#include // local includes #include "bobbycar-common.h" @@ -81,9 +82,9 @@ using namespace std::chrono_literals; #endif #include "drivingstatistics.h" #include "newsettings.h" +#include "taskmanager.h" namespace { -std::optional lastWifiUpdate; std::optional lastPotiRead; std::optional lastModeUpdate; std::optional lastStatsUpdate; @@ -151,8 +152,12 @@ extern "C" void app_main() else ESP_LOGE("MAIN", "get_default_mac_addr() failed: %.*s", result.error().size(), result.error().data()); - bootLabel.redraw("wifi"); - wifi_begin(); + + for (const auto &task : schedulerTasks) + { + bootLabel.redraw(task.name()); + task.setup(); + } #ifdef FEATURE_DPAD bootLabel.redraw("dpad"); @@ -296,11 +301,10 @@ extern "C" void app_main() { const auto now = espchrono::millis_clock::now(); - if (!lastWifiUpdate || now - *lastWifiUpdate >= 100ms) + for (auto &schedulerTask : schedulerTasks) { - wifi_update(); + schedulerTask.loop(); - lastWifiUpdate = now; } InputDispatcher::update(); diff --git a/main/taskmanager.cpp b/main/taskmanager.cpp index e69de29..838ac8c 100644 --- a/main/taskmanager.cpp +++ b/main/taskmanager.cpp @@ -0,0 +1,38 @@ +#include "taskmanager.h" + +// system includes +#include +#include + +// esp-idf includes +#include + +// 3rdparty lib includes +#include + +// local includes +#include "wifi_bobbycar.h" + +using namespace std::chrono_literals; + +namespace { +constexpr const char * const TAG = "TASKS"; + +espcpputils::SchedulerTask schedulerTasksArr[] { + espcpputils::SchedulerTask { "wifi", wifi_begin, wifi_update, 100ms }, +}; +} // namespace + +cpputils::ArrayView schedulerTasks{std::begin(schedulerTasksArr), std::end(schedulerTasksArr)}; + +void sched_pushStats(bool printTasks) +{ + if (printTasks) + ESP_LOGI(TAG, "begin listing tasks..."); + + for (auto &schedulerTask : schedulerTasks) + schedulerTask.pushStats(printTasks); + + if (printTasks) + ESP_LOGI(TAG, "end listing tasks"); +} diff --git a/main/taskmanager.h b/main/taskmanager.h index e69de29..6f428e4 100644 --- a/main/taskmanager.h +++ b/main/taskmanager.h @@ -0,0 +1,11 @@ +#pragma once + +// 3rdparty lib includes +#include + +// forward declares +namespace espcpputils { class SchedulerTask; } + +extern cpputils::ArrayView schedulerTasks; + +void sched_pushStats(bool printTasks);