From 031ff1952b7664c0c281e30e6cf85aad9397b07f Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Sun, 12 Oct 2025 22:54:13 +0200 Subject: [PATCH] get rid of powerhelper --- .../components/backend-esp/CMakeLists.txt | 1 - .../cardboy/backend/esp/power_helper.hpp | 30 ---------- .../include/cardboy/backend/esp_backend.hpp | 2 - .../components/backend-esp/src/bat_mon.cpp | 4 +- .../components/backend-esp/src/buttons.cpp | 3 - .../backend-esp/src/esp_backend.cpp | 13 +---- .../backend-esp/src/power_helper.cpp | 58 ------------------- Firmware/sdk/apps/tetris/src/tetris_app.cpp | 6 -- .../include/cardboy/sdk/services.hpp | 9 --- .../cardboy/backend/desktop_backend.hpp | 10 ---- .../backends/desktop/src/desktop_backend.cpp | 1 - .../include/cardboy/sdk/app_framework.hpp | 1 - Firmware/sdk/core/src/status_bar.cpp | 6 -- 13 files changed, 2 insertions(+), 142 deletions(-) delete mode 100644 Firmware/components/backend-esp/include/cardboy/backend/esp/power_helper.hpp delete mode 100644 Firmware/components/backend-esp/src/power_helper.cpp diff --git a/Firmware/components/backend-esp/CMakeLists.txt b/Firmware/components/backend-esp/CMakeLists.txt index a297a08..f0be2fc 100644 --- a/Firmware/components/backend-esp/CMakeLists.txt +++ b/Firmware/components/backend-esp/CMakeLists.txt @@ -8,7 +8,6 @@ idf_component_register( "src/display.cpp" "src/fs_helper.cpp" "src/i2c_global.cpp" - "src/power_helper.cpp" "src/shutdowner.cpp" "src/spi_global.cpp" INCLUDE_DIRS diff --git a/Firmware/components/backend-esp/include/cardboy/backend/esp/power_helper.hpp b/Firmware/components/backend-esp/include/cardboy/backend/esp/power_helper.hpp deleted file mode 100644 index 8fe8a06..0000000 --- a/Firmware/components/backend-esp/include/cardboy/backend/esp/power_helper.hpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// Created by Stepan Usatiuk on 03.03.2025. -// - -#ifndef POWER_HELPER_HPP -#define POWER_HELPER_HPP - -#include "freertos/FreeRTOS.h" -#include "freertos/event_groups.h" - -class PowerHelper { -public: - static PowerHelper& get(); - - bool is_slow() const; - void set_slow(bool slow); - BaseType_t reset_slow_isr(BaseType_t* xHigherPriorityTaskWoken); - void delay(int slow_ms, int normal_ms); - - void install_isr(); - -private: - PowerHelper(); - - bool _slow = false; - EventGroupHandle_t _event_group; -}; - - -#endif // POWER_HELPER_HPP diff --git a/Firmware/components/backend-esp/include/cardboy/backend/esp_backend.hpp b/Firmware/components/backend-esp/include/cardboy/backend/esp_backend.hpp index 1f90c30..a12707b 100644 --- a/Firmware/components/backend-esp/include/cardboy/backend/esp_backend.hpp +++ b/Firmware/components/backend-esp/include/cardboy/backend/esp_backend.hpp @@ -59,7 +59,6 @@ private: class StorageService; class RandomService; class HighResClockService; - class PowerService; class FilesystemService; class LoopHooksService; @@ -68,7 +67,6 @@ private: std::unique_ptr storageService; std::unique_ptr randomService; std::unique_ptr highResClockService; - std::unique_ptr powerService; std::unique_ptr filesystemService; std::unique_ptr eventBus; std::unique_ptr loopHooksService; diff --git a/Firmware/components/backend-esp/src/bat_mon.cpp b/Firmware/components/backend-esp/src/bat_mon.cpp index 669354f..e1ab57c 100644 --- a/Firmware/components/backend-esp/src/bat_mon.cpp +++ b/Firmware/components/backend-esp/src/bat_mon.cpp @@ -4,8 +4,6 @@ #include "cardboy/backend/esp/bat_mon.hpp" -#include "cardboy/backend/esp/power_helper.hpp" - #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -105,7 +103,7 @@ void BatMon::pooler() { _charge = capToMah(ReadRegister(0x05)); _current = regToCurrent(ReadRegister(0x0B)); _voltage = regToVoltage(ReadRegister(0x09)); - PowerHelper::get().delay(10000, 1000); + vTaskDelay(pdMS_TO_TICKS(10000)); if (_voltage < 3.0f) { Shutdowner::get().shutdown(); } diff --git a/Firmware/components/backend-esp/src/buttons.cpp b/Firmware/components/backend-esp/src/buttons.cpp index c952097..be956a7 100644 --- a/Firmware/components/backend-esp/src/buttons.cpp +++ b/Firmware/components/backend-esp/src/buttons.cpp @@ -7,7 +7,6 @@ #include #include #include -#include "cardboy/backend/esp/power_helper.hpp" #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -38,12 +37,10 @@ static void wakeup(void* arg) { ESP_ERROR_CHECK(gpio_wakeup_enable(EXP_INT, GPIO_INTR_HIGH_LEVEL)); is_on_low = false; - BaseType_t xResult = pdFAIL; BaseType_t xHigherPriorityTaskWoken = pdFALSE; xTaskNotifyFromISR(Buttons::get()._pooler_task, 0, eNoAction, &xHigherPriorityTaskWoken); - PowerHelper::get().reset_slow_isr(&xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } else { ESP_ERROR_CHECK(gpio_set_intr_type(EXP_INT, GPIO_INTR_LOW_LEVEL)); diff --git a/Firmware/components/backend-esp/src/esp_backend.cpp b/Firmware/components/backend-esp/src/esp_backend.cpp index 2281ddd..75bd27b 100644 --- a/Firmware/components/backend-esp/src/esp_backend.cpp +++ b/Firmware/components/backend-esp/src/esp_backend.cpp @@ -7,7 +7,6 @@ #include "cardboy/backend/esp/display.hpp" #include "cardboy/backend/esp/fs_helper.hpp" #include "cardboy/backend/esp/i2c_global.hpp" -#include "cardboy/backend/esp/power_helper.hpp" #include "cardboy/backend/esp/shutdowner.hpp" #include "cardboy/backend/esp/spi_global.hpp" @@ -112,12 +111,6 @@ public: [[nodiscard]] std::uint64_t micros() override { return static_cast(esp_timer_get_time()); } }; -class EspRuntime::PowerService final : public cardboy::sdk::IPowerManager { -public: - void setSlowMode(bool enable) override { PowerHelper::get().set_slow(enable); } - [[nodiscard]] bool isSlowMode() const override { return PowerHelper::get().is_slow(); } -}; - class EspRuntime::FilesystemService final : public cardboy::sdk::IFilesystem { public: bool mount() override { return FsHelper::get().mount() == ESP_OK; } @@ -141,7 +134,6 @@ EspRuntime::EspRuntime() : framebuffer(), input(), clock() { storageService = std::make_unique(); randomService = std::make_unique(); highResClockService = std::make_unique(); - powerService = std::make_unique(); filesystemService = std::make_unique(); eventBus = std::make_unique(); loopHooksService = std::make_unique(); @@ -151,7 +143,6 @@ EspRuntime::EspRuntime() : framebuffer(), input(), clock() { services.storage = storageService.get(); services.random = randomService.get(); services.highResClock = highResClockService.get(); - services.powerManager = powerService.get(); services.filesystem = filesystemService.get(); services.eventBus = eventBus.get(); services.loopHooks = loopHooksService.get(); @@ -171,7 +162,6 @@ void EspRuntime::initializeHardware() { ensureNvsInit(); - PowerHelper::get(); Shutdowner::get(); Buttons::get(); @@ -181,7 +171,6 @@ void EspRuntime::initializeHardware() { } Shutdowner::get().install_isr(); - PowerHelper::get().install_isr(); Buttons::get().install_isr(); I2cGlobal::get(); @@ -235,7 +224,7 @@ std::uint32_t EspClock::millis_impl() { void EspClock::sleep_ms_impl(std::uint32_t ms) { if (ms == 0) return; - PowerHelper::get().delay(static_cast(ms), static_cast(ms)); + vTaskDelay(pdMS_TO_TICKS(ms)); } } // namespace cardboy::backend::esp diff --git a/Firmware/components/backend-esp/src/power_helper.cpp b/Firmware/components/backend-esp/src/power_helper.cpp deleted file mode 100644 index 106d4c3..0000000 --- a/Firmware/components/backend-esp/src/power_helper.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// -// Created by Stepan Usatiuk on 03.03.2025. -// - -#include "cardboy/backend/esp/power_helper.hpp" - -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" - -PowerHelper& PowerHelper::get() { - static PowerHelper powerHelper; - return powerHelper; -} -bool PowerHelper::is_slow() const { return _slow; } -void PowerHelper::set_slow(bool slow) { - _slow = slow; - if (_slow) { - xEventGroupClearBits(_event_group, 1); - } else { - xEventGroupSetBits(_event_group, 1); - } -} - -BaseType_t PowerHelper::reset_slow_isr(BaseType_t* xHigherPriorityTaskWoken) { - _slow = false; - return xEventGroupSetBitsFromISR(_event_group, 1, xHigherPriorityTaskWoken); -} - -static void wakeup(void* arg) { - BaseType_t xHigherPriorityTaskWoken, xResult; - - xHigherPriorityTaskWoken = pdFALSE; - xResult = static_cast(arg)->reset_slow_isr(&xHigherPriorityTaskWoken); - if (xResult != pdFAIL) { - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); - }; -} - -PowerHelper::PowerHelper() : _event_group(xEventGroupCreate()) { set_slow(false); } - -void PowerHelper::delay(int slow_ms, int normal_ms) { - if (is_slow()) { - auto cur_ticks = xTaskGetTickCount(); - TickType_t to_wait = slow_ms / portTICK_PERIOD_MS; - TickType_t to_wait_normal = normal_ms / portTICK_PERIOD_MS; - auto expected_ticks = cur_ticks + to_wait_normal; - xEventGroupWaitBits(_event_group, 1, pdFALSE, pdTRUE, to_wait); - auto realTicks = xTaskGetTickCount(); - if (realTicks < expected_ticks) { - vTaskDelay(expected_ticks - realTicks); - } - } else { - vTaskDelay(normal_ms / portTICK_PERIOD_MS); - } -} -void PowerHelper::install_isr() { - // gpio_isr_handler_add(EXP_INT, wakeup, this); -} diff --git a/Firmware/sdk/apps/tetris/src/tetris_app.cpp b/Firmware/sdk/apps/tetris/src/tetris_app.cpp index a9ec9c6..4522a5b 100644 --- a/Firmware/sdk/apps/tetris/src/tetris_app.cpp +++ b/Firmware/sdk/apps/tetris/src/tetris_app.cpp @@ -185,8 +185,6 @@ private: state.paused = false; dirty = true; scheduleDropTimer(); - if (auto* power = context.powerManager()) - power->setSlowMode(false); } void handleButtons(const AppButtonEvent& evt) { @@ -204,8 +202,6 @@ private: reset(); } else { state.paused = !state.paused; - if (auto* power = context.powerManager()) - power->setSlowMode(state.paused); } dirty = true; } @@ -387,8 +383,6 @@ private: cancelDropTimer(); if (auto* buzzer = context.buzzer()) buzzer->beepGameOver(); - if (auto* power = context.powerManager()) - power->setSlowMode(true); } else { if (auto* buzzer = context.buzzer()) buzzer->beepLock(); diff --git a/Firmware/sdk/backend_interface/include/cardboy/sdk/services.hpp b/Firmware/sdk/backend_interface/include/cardboy/sdk/services.hpp index 4333f62..aeb45a9 100644 --- a/Firmware/sdk/backend_interface/include/cardboy/sdk/services.hpp +++ b/Firmware/sdk/backend_interface/include/cardboy/sdk/services.hpp @@ -60,14 +60,6 @@ public: [[nodiscard]] virtual std::uint64_t micros() = 0; }; -class IPowerManager { -public: - virtual ~IPowerManager() = default; - - virtual void setSlowMode(bool enable) = 0; - [[nodiscard]] virtual bool isSlowMode() const = 0; -}; - class IFilesystem { public: virtual ~IFilesystem() = default; @@ -83,7 +75,6 @@ struct Services { IStorage* storage = nullptr; IRandom* random = nullptr; IHighResClock* highResClock = nullptr; - IPowerManager* powerManager = nullptr; IFilesystem* filesystem = nullptr; IEventBus* eventBus = nullptr; ILoopHooks* loopHooks = nullptr; diff --git a/Firmware/sdk/backends/desktop/include/cardboy/backend/desktop_backend.hpp b/Firmware/sdk/backends/desktop/include/cardboy/backend/desktop_backend.hpp index cb36180..1c2075d 100644 --- a/Firmware/sdk/backends/desktop/include/cardboy/backend/desktop_backend.hpp +++ b/Firmware/sdk/backends/desktop/include/cardboy/backend/desktop_backend.hpp @@ -73,15 +73,6 @@ private: const std::chrono::steady_clock::time_point start; }; -class DesktopPowerManager final : public cardboy::sdk::IPowerManager { -public: - void setSlowMode(bool enable) override { slowMode = enable; } - [[nodiscard]] bool isSlowMode() const override { return slowMode; } - -private: - bool slowMode = false; -}; - class DesktopFilesystem final : public cardboy::sdk::IFilesystem { public: DesktopFilesystem(); @@ -194,7 +185,6 @@ private: DesktopStorage storageService; DesktopRandom randomService; DesktopHighResClock highResService; - DesktopPowerManager powerService; DesktopFilesystem filesystemService; DesktopEventBus eventBusService; cardboy::sdk::Services services{}; diff --git a/Firmware/sdk/backends/desktop/src/desktop_backend.cpp b/Firmware/sdk/backends/desktop/src/desktop_backend.cpp index 5fe1ab7..c14b601 100644 --- a/Firmware/sdk/backends/desktop/src/desktop_backend.cpp +++ b/Firmware/sdk/backends/desktop/src/desktop_backend.cpp @@ -241,7 +241,6 @@ DesktopRuntime::DesktopRuntime() : services.storage = &storageService; services.random = &randomService; services.highResClock = &highResService; - services.powerManager = &powerService; services.filesystem = &filesystemService; services.eventBus = &eventBusService; services.loopHooks = nullptr; diff --git a/Firmware/sdk/core/include/cardboy/sdk/app_framework.hpp b/Firmware/sdk/core/include/cardboy/sdk/app_framework.hpp index 3b8d5cc..e244f89 100644 --- a/Firmware/sdk/core/include/cardboy/sdk/app_framework.hpp +++ b/Firmware/sdk/core/include/cardboy/sdk/app_framework.hpp @@ -61,7 +61,6 @@ struct AppContext { [[nodiscard]] IStorage* storage() const { return services ? services->storage : nullptr; } [[nodiscard]] IRandom* random() const { return services ? services->random : nullptr; } [[nodiscard]] IHighResClock* highResClock() const { return services ? services->highResClock : nullptr; } - [[nodiscard]] IPowerManager* powerManager() const { return services ? services->powerManager : nullptr; } [[nodiscard]] IFilesystem* filesystem() const { return services ? services->filesystem : nullptr; } [[nodiscard]] IEventBus* eventBus() const { return services ? services->eventBus : nullptr; } [[nodiscard]] ILoopHooks* loopHooks() const { return services ? services->loopHooks : nullptr; } diff --git a/Firmware/sdk/core/src/status_bar.cpp b/Firmware/sdk/core/src/status_bar.cpp index b83974a..07b07aa 100644 --- a/Firmware/sdk/core/src/status_bar.cpp +++ b/Firmware/sdk/core/src/status_bar.cpp @@ -63,12 +63,6 @@ std::string StatusBar::prepareRightText() const { right.assign(buf); } - if (services_->powerManager && services_->powerManager->isSlowMode()) { - if (!right.empty()) - right.append(" "); - right.append("SLOW"); - } - if (services_->buzzer && services_->buzzer->isMuted()) { if (!right.empty()) right.append(" ");