Initial commit
This commit is contained in:
129
main/settings.c
Normal file
129
main/settings.c
Normal file
@@ -0,0 +1,129 @@
|
||||
#include "settings.h"
|
||||
|
||||
#include "esp_log.h"
|
||||
#include "nvs.h"
|
||||
#include "nvs_flash.h"
|
||||
|
||||
static const char *TAG = "settings";
|
||||
static const char *NVS_NAMESPACE = "tarot";
|
||||
|
||||
static tarot_settings_t s_settings;
|
||||
|
||||
void settings_set_defaults(tarot_settings_t *settings)
|
||||
{
|
||||
if (settings == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
settings->reversed_cards_enabled = true;
|
||||
settings->save_readings_enabled = false;
|
||||
settings->brightness = 80;
|
||||
settings->theme = TAROT_THEME_DARK;
|
||||
settings->selected_spread = TAROT_SPREAD_8_CARD;
|
||||
}
|
||||
|
||||
esp_err_t settings_init(void)
|
||||
{
|
||||
nvs_handle_t handle;
|
||||
esp_err_t err;
|
||||
uint8_t value = 0;
|
||||
|
||||
settings_set_defaults(&s_settings);
|
||||
|
||||
err = nvs_open(NVS_NAMESPACE, NVS_READONLY, &handle);
|
||||
if (err == ESP_ERR_NVS_NOT_FOUND) {
|
||||
ESP_LOGI(TAG, "No saved settings; using defaults");
|
||||
return settings_save(&s_settings);
|
||||
}
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "nvs_open failed: %s", esp_err_to_name(err));
|
||||
return err;
|
||||
}
|
||||
|
||||
if (nvs_get_u8(handle, "reversed", &value) == ESP_OK) {
|
||||
s_settings.reversed_cards_enabled = value != 0;
|
||||
}
|
||||
if (nvs_get_u8(handle, "save_read", &value) == ESP_OK) {
|
||||
s_settings.save_readings_enabled = value != 0;
|
||||
}
|
||||
if (nvs_get_u8(handle, "bright", &value) == ESP_OK) {
|
||||
s_settings.brightness = value <= 100 ? value : 100;
|
||||
}
|
||||
if (nvs_get_u8(handle, "theme", &value) == ESP_OK && value <= TAROT_THEME_MYSTIC) {
|
||||
s_settings.theme = (tarot_theme_t)value;
|
||||
}
|
||||
if (nvs_get_u8(handle, "spread", &value) == ESP_OK) {
|
||||
s_settings.selected_spread = value == TAROT_SPREAD_3_CARD ? TAROT_SPREAD_3_CARD : TAROT_SPREAD_8_CARD;
|
||||
}
|
||||
|
||||
nvs_close(handle);
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
tarot_settings_t settings_get(void)
|
||||
{
|
||||
return s_settings;
|
||||
}
|
||||
|
||||
esp_err_t settings_save(const tarot_settings_t *settings)
|
||||
{
|
||||
nvs_handle_t handle;
|
||||
esp_err_t err;
|
||||
|
||||
if (settings == NULL) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
err = nvs_open(NVS_NAMESPACE, NVS_READWRITE, &handle);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "nvs_open write failed: %s", esp_err_to_name(err));
|
||||
return err;
|
||||
}
|
||||
|
||||
err = nvs_set_u8(handle, "reversed", settings->reversed_cards_enabled ? 1 : 0);
|
||||
if (err != ESP_OK) {
|
||||
goto fail;
|
||||
}
|
||||
err = nvs_set_u8(handle, "save_read", settings->save_readings_enabled ? 1 : 0);
|
||||
if (err != ESP_OK) {
|
||||
goto fail;
|
||||
}
|
||||
err = nvs_set_u8(handle, "bright", settings->brightness);
|
||||
if (err != ESP_OK) {
|
||||
goto fail;
|
||||
}
|
||||
err = nvs_set_u8(handle, "theme", (uint8_t)settings->theme);
|
||||
if (err != ESP_OK) {
|
||||
goto fail;
|
||||
}
|
||||
err = nvs_set_u8(handle, "spread", (uint8_t)settings->selected_spread);
|
||||
if (err != ESP_OK) {
|
||||
goto fail;
|
||||
}
|
||||
err = nvs_commit(handle);
|
||||
if (err != ESP_OK) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
s_settings = *settings;
|
||||
nvs_close(handle);
|
||||
return ESP_OK;
|
||||
|
||||
fail:
|
||||
ESP_LOGE(TAG, "settings_save failed: %s", esp_err_to_name(err));
|
||||
nvs_close(handle);
|
||||
return err;
|
||||
}
|
||||
|
||||
const char *settings_theme_name(tarot_theme_t theme)
|
||||
{
|
||||
switch (theme) {
|
||||
case TAROT_THEME_LIGHT:
|
||||
return "Light";
|
||||
case TAROT_THEME_MYSTIC:
|
||||
return "Mystic";
|
||||
case TAROT_THEME_DARK:
|
||||
default:
|
||||
return "Dark";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user