code cleanup

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2025-06-20 21:21:06 +02:00
parent 54080bfd9d
commit 26723db8d8
19 changed files with 50 additions and 316 deletions

View File

@@ -97,7 +97,6 @@ else ()
target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE
ImGui ImGui
insa insa
ruth
SDL3::SDL3 SDL3::SDL3
SDL3_image::SDL3_image SDL3_image::SDL3_image
SDL3_ttf::SDL3_ttf SDL3_ttf::SDL3_ttf

View File

@@ -3,7 +3,6 @@ if (NOT DEFINED ENV{IDF_PATH})
add_subdirectory(imgui) add_subdirectory(imgui)
add_subdirectory(insa) add_subdirectory(insa)
add_subdirectory(ruth)
target_link_libraries(components INTERFACE ImGui) target_link_libraries(components INTERFACE ImGui)
endif () endif ()

View File

@@ -1,10 +0,0 @@
if (DEFINED ENV{IDF_PATH})
idf_component_register(SRCS
bob.c
INCLUDE_DIRS "include"
PRIV_REQUIRES
bt
ruth
)
return()
endif ()

View File

@@ -1,8 +0,0 @@
#include "bob.h"
#include "persistence.h"
void bob_init(void)
{
persistence_init("system_control");
}

View File

@@ -1,10 +0,0 @@
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
void bob_init(void);
#ifdef __cplusplus
}
#endif

View File

@@ -1,5 +1,5 @@
if (DEFINED ENV{IDF_PATH}) # Definiere die Quelldateien in einer Variable
idf_component_register(SRCS set(SOURCE_FILES
src/common/InactivityTracker.cpp src/common/InactivityTracker.cpp
src/common/Menu.cpp src/common/Menu.cpp
src/common/ScrollBar.cpp src/common/ScrollBar.cpp
@@ -11,9 +11,13 @@ if (DEFINED ENV{IDF_PATH})
src/ui/ScreenSaver.cpp src/ui/ScreenSaver.cpp
src/ui/SettingsMenu.cpp src/ui/SettingsMenu.cpp
src/ui/SplashScreen.cpp src/ui/SplashScreen.cpp
)
if (DEFINED ENV{IDF_PATH})
idf_component_register(SRCS
${SOURCE_FILES}
INCLUDE_DIRS "include" INCLUDE_DIRS "include"
PRIV_REQUIRES PRIV_REQUIRES
ruth
u8g2 u8g2
) )
return() return()
@@ -23,17 +27,7 @@ cmake_minimum_required(VERSION 3.30)
project(insa) project(insa)
add_library(${PROJECT_NAME} STATIC add_library(${PROJECT_NAME} STATIC
src/common/InactivityTracker.cpp ${SOURCE_FILES}
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
) )
include_directories(include) include_directories(include)
@@ -42,5 +36,4 @@ target_include_directories(${PROJECT_NAME} PUBLIC include)
target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE
u8g2 u8g2
ruth
) )

View File

@@ -16,7 +16,6 @@
#include <memory> #include <memory>
// Project-specific headers // Project-specific headers
#include "persistence.h"
#include "common/Widget.h" #include "common/Widget.h"
#include "u8g2.h" #include "u8g2.h"
@@ -124,6 +123,4 @@ typedef struct
* @see Widget::onButtonClicked for widget-specific button handling * @see Widget::onButtonClicked for widget-specific button handling
*/ */
std::function<void(ButtonType button)> onButtonClicked; std::function<void(ButtonType button)> onButtonClicked;
persistence_t *persistence;
} menu_options_t; } menu_options_t;

View File

@@ -12,6 +12,7 @@
#pragma once #pragma once
#include <functional> #include <functional>
#include <stdint.h>
/** /**
* @class InactivityTracker * @class InactivityTracker

View File

@@ -30,7 +30,6 @@ LightMenu::LightMenu(menu_options_t *options) : Menu(options), m_options(options
void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button) void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType button)
{ {
MenuItem item = menuItem;
std::shared_ptr<Widget> widget; std::shared_ptr<Widget> widget;
// Handle different menu items based on their ID // Handle different menu items based on their ID
@@ -42,25 +41,12 @@ void LightMenu::onButtonPressed(const MenuItem &menuItem, const ButtonType butto
{ {
toggle(menuItem); 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; break;
} }
case LightMenuItem::MODE: { case LightMenuItem::MODE: {
// Switch between day/night modes using left/right buttons // Switch between day/night modes using left/right buttons
item = switchValue(menuItem, button); 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);
}
}
break; break;
} }

View File

@@ -31,12 +31,4 @@ void LightSettingsMenu::onButtonPressed(const MenuItem &menuItem, const ButtonTy
// Update the section list size based on the section counter value // Update the section list size based on the section counter value
setItemSize(std::stoull(getItem(0).getValue())); 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());
}
} }

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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

View File

@@ -1,32 +0,0 @@
#include "persistence.h"
#include "stddef.h"
#include <stdio.h>
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()
{
}

View File

@@ -5,9 +5,7 @@ idf_component_register(SRCS
"hal/u8g2_esp32_hal.c" "hal/u8g2_esp32_hal.c"
INCLUDE_DIRS "." INCLUDE_DIRS "."
PRIV_REQUIRES PRIV_REQUIRES
bob
insa insa
ruth
u8g2 u8g2
driver driver
esp_timer esp_timer

View File

@@ -99,7 +99,6 @@ static void init_ui(void)
.pushScreen = [](const std::shared_ptr<Widget> &screen) { pushScreen(screen); }, .pushScreen = [](const std::shared_ptr<Widget> &screen) { pushScreen(screen); },
.popScreen = []() { popScreen(); }, .popScreen = []() { popScreen(); },
.onButtonClicked = nullptr, .onButtonClicked = nullptr,
.persistence = nullptr,
}; };
m_widget = std::make_shared<SplashScreen>(&options); m_widget = std::make_shared<SplashScreen>(&options);
m_inactivityTracker = std::make_unique<InactivityTracker>(60000, []() { m_inactivityTracker = std::make_unique<InactivityTracker>(60000, []() {

View File

@@ -1,5 +1,4 @@
#include "app_task.h" #include "app_task.h"
#include "bob.h"
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
#include "sdkconfig.h" #include "sdkconfig.h"
@@ -9,8 +8,6 @@ extern "C"
#endif #endif
void app_main(void) void app_main(void)
{ {
bob_init();
xTaskCreatePinnedToCore(app_task, "main_loop", 4096, NULL, tskIDLE_PRIORITY + 1, NULL, portNUM_PROCESSORS - 1); xTaskCreatePinnedToCore(app_task, "main_loop", 4096, NULL, tskIDLE_PRIORITY + 1, NULL, portNUM_PROCESSORS - 1);
} }
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -3,7 +3,6 @@
#include <hal/u8g2_hal_sdl.h> #include <hal/u8g2_hal_sdl.h>
#include <u8g2.h> #include <u8g2.h>
#include "persistence.h"
#include "MenuOptions.h" #include "MenuOptions.h"
#include "common/InactivityTracker.h" #include "common/InactivityTracker.h"
#include "ui/ScreenSaver.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); u8g2_Setup_sh1106_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sdl_hw_spi, u8x8_gpio_and_delay_sdl);
u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2));
m_persistence.save = persistence_save;
options = { options = {
.u8g2 = &u8g2, .u8g2 = &u8g2,
.setScreen = [this](const std::shared_ptr<Widget> &screen) { .setScreen = [this](const std::shared_ptr<Widget> &screen) {
@@ -85,7 +82,6 @@ Device::Device(void *appstate) : UIWidget(appstate)
.popScreen = [this]() { .popScreen = [this]() {
this->PopScreen(); this->PopScreen();
}, },
.persistence = &m_persistence,
}; };
m_widget = std::make_shared<SplashScreen>(&options); m_widget = std::make_shared<SplashScreen>(&options);
m_inactivityTracker = std::make_unique<InactivityTracker>(60000, []() { m_inactivityTracker = std::make_unique<InactivityTracker>(60000, []() {

View File

@@ -5,7 +5,6 @@
#include <vector> #include <vector>
#include "UIWidget.h" #include "UIWidget.h"
#include "persistence.h"
#include "common/Common.h" #include "common/Common.h"
#include "common/Widget.h" #include "common/Widget.h"
#include "model/AppContext.h" #include "model/AppContext.h"
@@ -47,5 +46,4 @@ private:
std::vector<std::shared_ptr<UIWidget>> m_children{}; std::vector<std::shared_ptr<UIWidget>> m_children{};
std::shared_ptr<Widget> m_widget; std::shared_ptr<Widget> m_widget;
std::vector<std::shared_ptr<Widget>> m_history; std::vector<std::shared_ptr<Widget>> m_history;
persistence_t m_persistence{};
}; };