From 26723db8d898970e21e2a909a3fd1c3c2507457d Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Fri, 20 Jun 2025 21:21:06 +0200 Subject: [PATCH] code cleanup Signed-off-by: Peter Siegmund --- CMakeLists.txt | 1 - components/CMakeLists.txt | 1 - components/bob/CMakeLists.txt | 10 -- components/bob/bob.c | 8 -- components/bob/include/bob.h | 10 -- components/insa/CMakeLists.txt | 43 +++---- components/insa/include/MenuOptions.h | 3 - .../insa/include/common/InactivityTracker.h | 61 ++++----- components/insa/src/ui/LightMenu.cpp | 16 +-- components/insa/src/ui/LightSettingsMenu.cpp | 8 -- components/ruth/CMakeLists.txt | 20 --- components/ruth/espressif/persistence.c | 116 ------------------ components/ruth/include/persistence.h | 25 ---- components/ruth/persistence.c | 32 ----- main/CMakeLists.txt | 2 - main/app_task.cpp | 1 - main/main.cpp | 3 - src/ui/Device.cpp | 4 - src/ui/Device.h | 2 - 19 files changed, 50 insertions(+), 316 deletions(-) delete mode 100644 components/bob/CMakeLists.txt delete mode 100644 components/bob/bob.c delete mode 100644 components/bob/include/bob.h delete mode 100644 components/ruth/CMakeLists.txt delete mode 100644 components/ruth/espressif/persistence.c delete mode 100644 components/ruth/include/persistence.h delete mode 100644 components/ruth/persistence.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 54c119f..9ab38fe 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,7 +97,6 @@ else () target_link_libraries(${PROJECT_NAME} PRIVATE ImGui insa - ruth SDL3::SDL3 SDL3_image::SDL3_image SDL3_ttf::SDL3_ttf diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index f987b13..33c316d 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -3,7 +3,6 @@ if (NOT DEFINED ENV{IDF_PATH}) add_subdirectory(imgui) add_subdirectory(insa) - add_subdirectory(ruth) target_link_libraries(components INTERFACE ImGui) endif () \ No newline at end of file diff --git a/components/bob/CMakeLists.txt b/components/bob/CMakeLists.txt deleted file mode 100644 index 1636870..0000000 --- a/components/bob/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -if (DEFINED ENV{IDF_PATH}) - idf_component_register(SRCS - bob.c - INCLUDE_DIRS "include" - PRIV_REQUIRES - bt - ruth - ) - return() -endif () \ No newline at end of file diff --git a/components/bob/bob.c b/components/bob/bob.c deleted file mode 100644 index 73e3f5b..0000000 --- a/components/bob/bob.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "bob.h" - -#include "persistence.h" - -void bob_init(void) -{ - persistence_init("system_control"); -} diff --git a/components/bob/include/bob.h b/components/bob/include/bob.h deleted file mode 100644 index 0cdd97b..0000000 --- a/components/bob/include/bob.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" -{ -#endif - void bob_init(void); -#ifdef __cplusplus -} -#endif diff --git a/components/insa/CMakeLists.txt b/components/insa/CMakeLists.txt index e4c8fb9..e5a8995 100644 --- a/components/insa/CMakeLists.txt +++ b/components/insa/CMakeLists.txt @@ -1,19 +1,23 @@ +# Definiere die Quelldateien in einer Variable +set(SOURCE_FILES + src/common/InactivityTracker.cpp + src/common/Menu.cpp + src/common/ScrollBar.cpp + src/common/Widget.cpp + src/data/MenuItem.cpp + src/ui/LightMenu.cpp + src/ui/LightSettingsMenu.cpp + src/ui/MainMenu.cpp + src/ui/ScreenSaver.cpp + src/ui/SettingsMenu.cpp + src/ui/SplashScreen.cpp +) + if (DEFINED ENV{IDF_PATH}) idf_component_register(SRCS - src/common/InactivityTracker.cpp - src/common/Menu.cpp - src/common/ScrollBar.cpp - src/common/Widget.cpp - src/data/MenuItem.cpp - src/ui/LightMenu.cpp - src/ui/LightSettingsMenu.cpp - src/ui/MainMenu.cpp - src/ui/ScreenSaver.cpp - src/ui/SettingsMenu.cpp - src/ui/SplashScreen.cpp + ${SOURCE_FILES} INCLUDE_DIRS "include" PRIV_REQUIRES - ruth u8g2 ) return() @@ -23,17 +27,7 @@ cmake_minimum_required(VERSION 3.30) project(insa) add_library(${PROJECT_NAME} STATIC - src/common/InactivityTracker.cpp - src/common/Menu.cpp - src/common/ScrollBar.cpp - src/common/Widget.cpp - src/data/MenuItem.cpp - src/ui/LightMenu.cpp - src/ui/LightSettingsMenu.cpp - src/ui/MainMenu.cpp - src/ui/ScreenSaver.cpp - src/ui/SettingsMenu.cpp - src/ui/SplashScreen.cpp + ${SOURCE_FILES} ) include_directories(include) @@ -42,5 +36,4 @@ target_include_directories(${PROJECT_NAME} PUBLIC include) target_link_libraries(${PROJECT_NAME} PRIVATE u8g2 - ruth -) +) \ No newline at end of file diff --git a/components/insa/include/MenuOptions.h b/components/insa/include/MenuOptions.h index 6f074c0..49f2836 100644 --- a/components/insa/include/MenuOptions.h +++ b/components/insa/include/MenuOptions.h @@ -16,7 +16,6 @@ #include // Project-specific headers -#include "persistence.h" #include "common/Widget.h" #include "u8g2.h" @@ -124,6 +123,4 @@ typedef struct * @see Widget::onButtonClicked for widget-specific button handling */ std::function onButtonClicked; - - persistence_t *persistence; } menu_options_t; \ No newline at end of file diff --git a/components/insa/include/common/InactivityTracker.h b/components/insa/include/common/InactivityTracker.h index ec38697..f3b22ed 100644 --- a/components/insa/include/common/InactivityTracker.h +++ b/components/insa/include/common/InactivityTracker.h @@ -12,6 +12,7 @@ #pragma once #include +#include /** * @class InactivityTracker @@ -21,21 +22,21 @@ * configured timeout period. It is commonly used for implementing power * saving features, automatic screen savers, session timeouts, and other * time-based system behaviors. - * + * * The InactivityTracker operates by: * - Continuously tracking elapsed time since the last user activity * - Comparing elapsed time against a configurable timeout threshold * - Executing a callback function when the timeout is reached * - Providing methods to reset the timer when activity is detected * - Supporting enable/disable functionality for dynamic control - * + * * Key features include: * - Configurable timeout duration in milliseconds * - Custom callback function execution on timeout * - Activity reset capability for responsive user interaction * - Enable/disable control for conditional monitoring * - High-resolution timing support using 64-bit millisecond precision - * + * * Common use cases: * - Screen saver activation after idle periods * - Automatic screen dimming or shutdown @@ -43,14 +44,14 @@ * - Power management and battery conservation * - User interface state transitions * - Security lockout after inactivity - * + * * The class is designed to be lightweight and efficient, suitable for * real-time applications where precise timing and minimal overhead are important. - * + * * @note This class requires regular update calls to function properly. * @note The timeout callback is executed once per timeout period and will * not repeat until the tracker is reset and times out again. - * + * * @see Widget for integration with UI components * @see Menu for menu timeout implementations */ @@ -61,15 +62,15 @@ class InactivityTracker * @brief Constructs an InactivityTracker with specified timeout and callback * @param timeoutMs Timeout duration in milliseconds before triggering callback * @param onTimeout Callback function to execute when timeout is reached - * + * * @pre timeoutMs must be greater than 0 for meaningful timeout behavior * @pre onTimeout must be a valid callable function object * @post InactivityTracker is initialized, enabled, and ready for activity monitoring - * + * * @details The constructor initializes the inactivity tracker with the specified * timeout duration and callback function. The tracker starts in an enabled * state with zero elapsed time, ready to begin monitoring user activity. - * + * * The timeout callback function can perform any necessary actions when inactivity * is detected, such as: * - Activating screen savers or power saving modes @@ -77,11 +78,11 @@ class InactivityTracker * - Logging inactivity events * - Triggering security lockouts * - Initiating automatic save operations - * + * * @note The tracker begins monitoring immediately upon construction. * @note The callback function should be lightweight to avoid blocking * the main application thread during timeout processing. - * + * * Example usage: * @code * auto tracker = InactivityTracker(30000, []() { @@ -95,23 +96,23 @@ class InactivityTracker /** * @brief Updates the inactivity timer and checks for timeout conditions * @param dt Delta time in milliseconds since the last update call - * + * * @details This method must be called regularly (typically every frame) to * maintain accurate timing and timeout detection. It increments the * elapsed time counter and triggers the timeout callback when the * configured timeout duration is reached. - * + * * The update process: * - Adds the delta time to the elapsed time counter (if enabled) * - Compares elapsed time against the configured timeout threshold * - Executes the timeout callback if the threshold is exceeded * - Continues monitoring until reset or disabled - * + * * @note This method should be called consistently from the main application * loop to ensure accurate timing behavior. * @note The timeout callback is executed only once per timeout period. * @note If the tracker is disabled, elapsed time is not updated. - * + * * @see reset() to restart the inactivity timer * @see setEnabled() to control monitoring state */ @@ -119,27 +120,27 @@ class InactivityTracker /** * @brief Resets the inactivity timer to indicate recent user activity - * + * * @details This method should be called whenever user activity is detected * to restart the inactivity timeout period. It resets the elapsed * time counter to zero, effectively extending the timeout deadline * and preventing timeout callback execution until the full timeout * duration elapses again without further resets. - * + * * Common scenarios for calling reset(): * - Button presses or key events * - Mouse movement or touch input * - Menu navigation or selection actions * - Any user interface interaction * - System activity that should extend the timeout - * + * * @post Elapsed time is reset to zero, restarting the timeout period - * + * * @note This method can be called at any time, even when the tracker * is disabled, to prepare for future monitoring. * @note Frequent reset calls from active user interaction will prevent * timeout callback execution, which is the intended behavior. - * + * * Example usage: * @code * void onButtonPress() { @@ -153,29 +154,29 @@ class InactivityTracker /** * @brief Enables or disables inactivity monitoring * @param enabled True to enable monitoring, false to disable - * + * * @details This method controls whether the inactivity tracker actively * monitors for timeouts. When disabled, the elapsed time counter * is not updated during update() calls, effectively pausing the * timeout detection without losing the current elapsed time state. - * + * * Use cases for disabling: * - Temporary suspension during system operations * - Context-sensitive monitoring (disable in certain application states) * - Power management control (disable during low-power modes) * - User preference settings (allow users to disable timeouts) * - Development and debugging (disable for testing) - * + * * When re-enabled, monitoring resumes from the current elapsed time state, * allowing for seamless pause/resume functionality. - * + * * @post Monitoring state is updated according to the enabled parameter - * + * * @note Disabling the tracker does not reset the elapsed time counter. * @note The timeout callback will not be executed while disabled, even * if the timeout threshold would otherwise be exceeded. * @note Enabling/disabling can be done at any time during operation. - * + * * Example usage: * @code * tracker.setEnabled(false); // Pause monitoring during critical operation @@ -186,8 +187,8 @@ class InactivityTracker void setEnabled(bool enabled); private: - uint64_t m_timeoutMs; ///< Timeout duration in milliseconds before callback execution - uint64_t m_elapsedTime; ///< Current elapsed time since last reset in milliseconds - bool m_enabled; ///< Flag indicating whether monitoring is currently active - std::function m_onTimeout; ///< Callback function executed when timeout threshold is reached + uint64_t m_timeoutMs; ///< Timeout duration in milliseconds before callback execution + uint64_t m_elapsedTime; ///< Current elapsed time since last reset in milliseconds + bool m_enabled; ///< Flag indicating whether monitoring is currently active + std::function m_onTimeout; ///< Callback function executed when timeout threshold is reached }; \ No newline at end of file diff --git a/components/insa/src/ui/LightMenu.cpp b/components/insa/src/ui/LightMenu.cpp index 30a45e2..0d87848 100644 --- a/components/insa/src/ui/LightMenu.cpp +++ b/components/insa/src/ui/LightMenu.cpp @@ -30,7 +30,6 @@ LightMenu::LightMenu(menu_options_t *options) : Menu(options), m_options(options void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button) { - MenuItem item = menuItem; std::shared_ptr widget; // Handle different menu items based on their ID @@ -42,25 +41,12 @@ void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType butto { toggle(menuItem); } - if (m_options && m_options->persistence && m_options->persistence->save) - { - const auto value = getItem(item.getId()).getValue(); - m_options->persistence->save(VALUE_TYPE_STRING, "light_activated", value.c_str()); - } break; } case LightMenuItem::MODE: { // Switch between day/night modes using left/right buttons - item = switchValue(menuItem, button); - if (button == ButtonType::LEFT || button == ButtonType::RIGHT) - { - if (m_options && m_options->persistence && m_options->persistence->save) - { - const auto value = getItem(item.getId()).getIndex(); - m_options->persistence->save(VALUE_TYPE_INT32, "light_mode", &value); - } - } + switchValue(menuItem, button); break; } diff --git a/components/insa/src/ui/LightSettingsMenu.cpp b/components/insa/src/ui/LightSettingsMenu.cpp index be9e8d6..663a183 100644 --- a/components/insa/src/ui/LightSettingsMenu.cpp +++ b/components/insa/src/ui/LightSettingsMenu.cpp @@ -31,12 +31,4 @@ void LightSettingsMenu::onButtonPressed(const MenuItem &menuItem, const ButtonTy // Update the section list size based on the section counter value setItemSize(std::stoull(getItem(0).getValue())); - - // Persist the changed section values if persistence is available - if (m_options && m_options->persistence && m_options->persistence->save) - { - const auto key = "section_" + std::to_string(menuItem.getId()); - const auto value = getItem(menuItem.getId()).getValue(); - m_options->persistence->save(VALUE_TYPE_STRING, key.c_str(), value.c_str()); - } } \ No newline at end of file diff --git a/components/ruth/CMakeLists.txt b/components/ruth/CMakeLists.txt deleted file mode 100644 index ce88710..0000000 --- a/components/ruth/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -if (DEFINED ENV{IDF_PATH}) - idf_component_register(SRCS - espressif/persistence.c - INCLUDE_DIRS "include" - PRIV_REQUIRES - nvs_flash - ) - return() -endif () - -cmake_minimum_required(VERSION 3.30) -project(ruth) - -add_library(${PROJECT_NAME} STATIC - persistence.c -) - -include_directories(include) - -target_include_directories(${PROJECT_NAME} PUBLIC include) diff --git a/components/ruth/espressif/persistence.c b/components/ruth/espressif/persistence.c deleted file mode 100644 index 47e11f0..0000000 --- a/components/ruth/espressif/persistence.c +++ /dev/null @@ -1,116 +0,0 @@ -#include "persistence.h" - -#include "esp_err.h" -#include "esp_log.h" -#include "esp_mac.h" -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "nvs_flash.h" - -static const char *TAG = "persistence"; - -static nvs_handle_t persistence_handle; -static SemaphoreHandle_t persistence_mutex; - -void *persistence_init(const char *namespace_name) -{ - esp_err_t ret = nvs_flash_init(); - if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) - { - ESP_ERROR_CHECK(nvs_flash_erase()); - ret = nvs_flash_init(); - } - ESP_ERROR_CHECK(ret); - - ESP_ERROR_CHECK(nvs_open(namespace_name, NVS_READWRITE, &persistence_handle)); - - persistence_mutex = xSemaphoreCreateMutex(); - if (persistence_mutex == NULL) - { - ESP_LOGE(TAG, "Failed to create mutex"); - } - return &persistence_handle; -} - -void persistence_save(persistence_value_t value_type, const char *key, const void *value) -{ - if (persistence_mutex != NULL) - { - if (xSemaphoreTake(persistence_mutex, portMAX_DELAY) == pdTRUE) - { - esp_err_t err = ESP_ERR_INVALID_ARG; - - switch (value_type) - { - case VALUE_TYPE_STRING: - err = nvs_set_str(persistence_handle, key, (char *)value); - break; - - case VALUE_TYPE_INT32: - err = nvs_set_i32(persistence_handle, key, *(int32_t *)value); - break; - - default: - ESP_LOGE(TAG, "Unsupported value type"); - break; - } - - if (err == ESP_OK) - { - ESP_ERROR_CHECK(nvs_commit(persistence_handle)); - } - else - { - ESP_LOGE(TAG, "Error saving key %s: %s", key, esp_err_to_name(err)); - } - - xSemaphoreGive(persistence_mutex); - } - } -} - -void *persistence_load(persistence_value_t value_type, const char *key, void *out) -{ - if (persistence_mutex != NULL) - { - if (xSemaphoreTake(persistence_mutex, portMAX_DELAY) == pdTRUE) - { - esp_err_t err = ESP_ERR_INVALID_ARG; - - switch (value_type) - { - case VALUE_TYPE_STRING: - err = nvs_get_str(persistence_handle, key, (char *)out, NULL); - break; - - case VALUE_TYPE_INT32: - err = nvs_get_i32(persistence_handle, key, (int32_t *)out); - break; - - default: - ESP_LOGE(TAG, "Unsupported value type"); - break; - } - - if (err != ESP_OK) - { - ESP_LOGE(TAG, "Error loading key %s: %s", key, esp_err_to_name(err)); - } - - xSemaphoreGive(persistence_mutex); - } - } - - return out; -} - -void persistence_deinit() -{ - if (persistence_mutex != NULL) - { - vSemaphoreDelete(persistence_mutex); - persistence_mutex = NULL; - } - - nvs_close(persistence_handle); -} diff --git a/components/ruth/include/persistence.h b/components/ruth/include/persistence.h deleted file mode 100644 index ed5b714..0000000 --- a/components/ruth/include/persistence.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -typedef enum -{ - VALUE_TYPE_STRING, - VALUE_TYPE_INT32, -} persistence_value_t; - -typedef struct -{ - void *handle; - void (*save)(persistence_value_t value_type, const char *key, const void *value); -} persistence_t; - -#ifdef __cplusplus -extern "C" -{ -#endif -void *persistence_init(const char *namespace_name); -void persistence_save(persistence_value_t value_type, const char *key, const void *value); -void *persistence_load(persistence_value_t value_type, const char *key, void *out); -void persistence_deinit(); -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/components/ruth/persistence.c b/components/ruth/persistence.c deleted file mode 100644 index 9c6f2ab..0000000 --- a/components/ruth/persistence.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "persistence.h" -#include "stddef.h" -#include - -void *persistence_init(const char *namespace_name) -{ - return NULL; -} - -void persistence_save(const persistence_value_t value_type, const char *key, const void *value) -{ - printf("Key: %s - ", key); - switch (value_type) - { - case VALUE_TYPE_STRING: - printf("Value (s): %s\n", (char *)value); - break; - - case VALUE_TYPE_INT32: - printf("Value (i): %d\n", *(int32_t *)value); - break; - } -} - -void *persistence_load(persistence_value_t value_type, const char *key, void *out) -{ - return NULL; -} - -void persistence_deinit() -{ -} \ No newline at end of file diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 54c2a30..b962100 100755 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -5,9 +5,7 @@ idf_component_register(SRCS "hal/u8g2_esp32_hal.c" INCLUDE_DIRS "." PRIV_REQUIRES - bob insa - ruth u8g2 driver esp_timer diff --git a/main/app_task.cpp b/main/app_task.cpp index fca2b10..9730708 100644 --- a/main/app_task.cpp +++ b/main/app_task.cpp @@ -99,7 +99,6 @@ static void init_ui(void) .pushScreen = [](const std::shared_ptr &screen) { pushScreen(screen); }, .popScreen = []() { popScreen(); }, .onButtonClicked = nullptr, - .persistence = nullptr, }; m_widget = std::make_shared(&options); m_inactivityTracker = std::make_unique(60000, []() { diff --git a/main/main.cpp b/main/main.cpp index 6dcbb2b..5ffc5ac 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1,5 +1,4 @@ #include "app_task.h" -#include "bob.h" #include "freertos/FreeRTOS.h" #include "sdkconfig.h" @@ -9,8 +8,6 @@ extern "C" #endif void app_main(void) { - bob_init(); - xTaskCreatePinnedToCore(app_task, "main_loop", 4096, NULL, tskIDLE_PRIORITY + 1, NULL, portNUM_PROCESSORS - 1); } #ifdef __cplusplus diff --git a/src/ui/Device.cpp b/src/ui/Device.cpp index 8a11f07..4d33d6a 100644 --- a/src/ui/Device.cpp +++ b/src/ui/Device.cpp @@ -3,7 +3,6 @@ #include #include -#include "persistence.h" #include "MenuOptions.h" #include "common/InactivityTracker.h" #include "ui/ScreenSaver.h" @@ -72,8 +71,6 @@ Device::Device(void *appstate) : UIWidget(appstate) u8g2_Setup_sh1106_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sdl_hw_spi, u8x8_gpio_and_delay_sdl); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); - m_persistence.save = persistence_save; - options = { .u8g2 = &u8g2, .setScreen = [this](const std::shared_ptr &screen) { @@ -85,7 +82,6 @@ Device::Device(void *appstate) : UIWidget(appstate) .popScreen = [this]() { this->PopScreen(); }, - .persistence = &m_persistence, }; m_widget = std::make_shared(&options); m_inactivityTracker = std::make_unique(60000, []() { diff --git a/src/ui/Device.h b/src/ui/Device.h index 26dbd33..ff1ce63 100644 --- a/src/ui/Device.h +++ b/src/ui/Device.h @@ -5,7 +5,6 @@ #include #include "UIWidget.h" -#include "persistence.h" #include "common/Common.h" #include "common/Widget.h" #include "model/AppContext.h" @@ -47,5 +46,4 @@ private: std::vector> m_children{}; std::shared_ptr m_widget; std::vector> m_history; - persistence_t m_persistence{}; }; \ No newline at end of file