@@ -97,7 +97,6 @@ else ()
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
ImGui
|
||||
insa
|
||||
ruth
|
||||
SDL3::SDL3
|
||||
SDL3_image::SDL3_image
|
||||
SDL3_ttf::SDL3_ttf
|
||||
|
@@ -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 ()
|
@@ -1,10 +0,0 @@
|
||||
if (DEFINED ENV{IDF_PATH})
|
||||
idf_component_register(SRCS
|
||||
bob.c
|
||||
INCLUDE_DIRS "include"
|
||||
PRIV_REQUIRES
|
||||
bt
|
||||
ruth
|
||||
)
|
||||
return()
|
||||
endif ()
|
@@ -1,8 +0,0 @@
|
||||
#include "bob.h"
|
||||
|
||||
#include "persistence.h"
|
||||
|
||||
void bob_init(void)
|
||||
{
|
||||
persistence_init("system_control");
|
||||
}
|
@@ -1,10 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
void bob_init(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
@@ -1,5 +1,5 @@
|
||||
if (DEFINED ENV{IDF_PATH})
|
||||
idf_component_register(SRCS
|
||||
# Definiere die Quelldateien in einer Variable
|
||||
set(SOURCE_FILES
|
||||
src/common/InactivityTracker.cpp
|
||||
src/common/Menu.cpp
|
||||
src/common/ScrollBar.cpp
|
||||
@@ -11,9 +11,13 @@ if (DEFINED ENV{IDF_PATH})
|
||||
src/ui/ScreenSaver.cpp
|
||||
src/ui/SettingsMenu.cpp
|
||||
src/ui/SplashScreen.cpp
|
||||
)
|
||||
|
||||
if (DEFINED ENV{IDF_PATH})
|
||||
idf_component_register(SRCS
|
||||
${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
|
||||
)
|
@@ -16,7 +16,6 @@
|
||||
#include <memory>
|
||||
|
||||
// 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<void(ButtonType button)> onButtonClicked;
|
||||
|
||||
persistence_t *persistence;
|
||||
} menu_options_t;
|
@@ -12,6 +12,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @class InactivityTracker
|
||||
|
@@ -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> 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;
|
||||
}
|
||||
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
@@ -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)
|
@@ -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);
|
||||
}
|
@@ -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
|
@@ -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()
|
||||
{
|
||||
}
|
@@ -5,9 +5,7 @@ idf_component_register(SRCS
|
||||
"hal/u8g2_esp32_hal.c"
|
||||
INCLUDE_DIRS "."
|
||||
PRIV_REQUIRES
|
||||
bob
|
||||
insa
|
||||
ruth
|
||||
u8g2
|
||||
driver
|
||||
esp_timer
|
||||
|
@@ -99,7 +99,6 @@ static void init_ui(void)
|
||||
.pushScreen = [](const std::shared_ptr<Widget> &screen) { pushScreen(screen); },
|
||||
.popScreen = []() { popScreen(); },
|
||||
.onButtonClicked = nullptr,
|
||||
.persistence = nullptr,
|
||||
};
|
||||
m_widget = std::make_shared<SplashScreen>(&options);
|
||||
m_inactivityTracker = std::make_unique<InactivityTracker>(60000, []() {
|
||||
|
@@ -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
|
||||
|
@@ -3,7 +3,6 @@
|
||||
#include <hal/u8g2_hal_sdl.h>
|
||||
#include <u8g2.h>
|
||||
|
||||
#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<Widget> &screen) {
|
||||
@@ -85,7 +82,6 @@ Device::Device(void *appstate) : UIWidget(appstate)
|
||||
.popScreen = [this]() {
|
||||
this->PopScreen();
|
||||
},
|
||||
.persistence = &m_persistence,
|
||||
};
|
||||
m_widget = std::make_shared<SplashScreen>(&options);
|
||||
m_inactivityTracker = std::make_unique<InactivityTracker>(60000, []() {
|
||||
|
@@ -5,7 +5,6 @@
|
||||
#include <vector>
|
||||
|
||||
#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<std::shared_ptr<UIWidget>> m_children{};
|
||||
std::shared_ptr<Widget> m_widget;
|
||||
std::vector<std::shared_ptr<Widget>> m_history;
|
||||
persistence_t m_persistence{};
|
||||
};
|
Reference in New Issue
Block a user