#include "app_settings.h" #include "esp_log.h" #include "nvs.h" #include "nvs_flash.h" #define SETTINGS_NAMESPACE "radick" #define SETTINGS_KEY_BRIGHTNESS "brightness" #define SETTINGS_KEY_SOUND "sound" #define DEFAULT_BRIGHTNESS_PERCENT 78U #define DEFAULT_SOUND_ENABLED true static const char *TAG = "settings"; static nvs_handle_t s_nvs; static bool s_ready; static esp_err_t init_nvs_partition(void) { esp_err_t err = nvs_flash_init(); if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) { err = nvs_flash_erase(); if (err != ESP_OK) { return err; } err = nvs_flash_init(); } return err; } esp_err_t app_settings_init(app_settings_t *settings) { if (settings == NULL) { return ESP_ERR_INVALID_ARG; } settings->brightness_percent = DEFAULT_BRIGHTNESS_PERCENT; settings->sound_enabled = DEFAULT_SOUND_ENABLED; esp_err_t err = init_nvs_partition(); if (err != ESP_OK) { ESP_LOGW(TAG, "NVS unavailable: %s", esp_err_to_name(err)); return err; } err = nvs_open(SETTINGS_NAMESPACE, NVS_READWRITE, &s_nvs); if (err != ESP_OK) { return err; } s_ready = true; uint8_t value = 0; if (nvs_get_u8(s_nvs, SETTINGS_KEY_BRIGHTNESS, &value) == ESP_OK && value >= 10U && value <= 100U) { settings->brightness_percent = value; } if (nvs_get_u8(s_nvs, SETTINGS_KEY_SOUND, &value) == ESP_OK) { settings->sound_enabled = value != 0U; } return ESP_OK; } esp_err_t app_settings_set_brightness(uint8_t percent) { if (percent < 10U || percent > 100U) { return ESP_ERR_INVALID_ARG; } if (!s_ready) { return ESP_ERR_INVALID_STATE; } esp_err_t err = nvs_set_u8(s_nvs, SETTINGS_KEY_BRIGHTNESS, percent); return err == ESP_OK ? nvs_commit(s_nvs) : err; } esp_err_t app_settings_set_sound(bool enabled) { if (!s_ready) { return ESP_ERR_INVALID_STATE; } esp_err_t err = nvs_set_u8(s_nvs, SETTINGS_KEY_SOUND, enabled ? 1U : 0U); return err == ESP_OK ? nvs_commit(s_nvs) : err; }