89 lines
2.4 KiB
C
89 lines
2.4 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "esp_log.h"
|
|
#include "esp_check.h"
|
|
#include "bsp_board.h"
|
|
#include "nvs_flash.h"
|
|
#include "nvs.h"
|
|
#include "settings.h"
|
|
|
|
static const char *TAG = "settings";
|
|
|
|
#define NAME_SPACE "sys_param"
|
|
#define KEY "param"
|
|
|
|
static sys_param_t g_sys_param = {0};
|
|
|
|
static const sys_param_t g_default_sys_param = {
|
|
.need_hint = 1,
|
|
.sr_lang = SR_LANG_EN,
|
|
.volume = 70, // default volume is 70%
|
|
};
|
|
|
|
static esp_err_t settings_check(sys_param_t *param)
|
|
{
|
|
esp_err_t ret;
|
|
ESP_GOTO_ON_FALSE(param->sr_lang < SR_LANG_MAX, ESP_ERR_INVALID_ARG, reset, TAG, "language incorrect");
|
|
ESP_GOTO_ON_FALSE(param->volume <= 100, ESP_ERR_INVALID_ARG, reset, TAG, "volume incorrect");
|
|
return ret;
|
|
reset:
|
|
ESP_LOGW(TAG, "Set to default");
|
|
memcpy(&g_sys_param, &g_default_sys_param, sizeof(sys_param_t));
|
|
return ret;
|
|
}
|
|
|
|
esp_err_t settings_read_parameter_from_nvs(void)
|
|
{
|
|
nvs_handle_t my_handle = 0;
|
|
esp_err_t ret = nvs_open(NAME_SPACE, NVS_READONLY, &my_handle);
|
|
if (ESP_ERR_NVS_NOT_FOUND == ret) {
|
|
ESP_LOGW(TAG, "Not found, Set to default");
|
|
memcpy(&g_sys_param, &g_default_sys_param, sizeof(sys_param_t));
|
|
settings_write_parameter_to_nvs();
|
|
return ESP_OK;
|
|
}
|
|
|
|
ESP_GOTO_ON_FALSE(ESP_OK == ret, ret, err, TAG, "nvs open failed (0x%x)", ret);
|
|
|
|
size_t len = sizeof(sys_param_t);
|
|
ret = nvs_get_blob(my_handle, KEY, &g_sys_param, &len);
|
|
ESP_GOTO_ON_FALSE(ESP_OK == ret, ret, err, TAG, "can't read param");
|
|
nvs_close(my_handle);
|
|
|
|
settings_check(&g_sys_param);
|
|
return ret;
|
|
err:
|
|
if (my_handle) {
|
|
nvs_close(my_handle);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
esp_err_t settings_write_parameter_to_nvs(void)
|
|
{
|
|
ESP_LOGI(TAG, "Saving settings");
|
|
settings_check(&g_sys_param);
|
|
nvs_handle_t my_handle = {0};
|
|
esp_err_t err = nvs_open(NAME_SPACE, NVS_READWRITE, &my_handle);
|
|
if (err != ESP_OK) {
|
|
ESP_LOGI(TAG, "Error (%s) opening NVS handle!\n", esp_err_to_name(err));
|
|
} else {
|
|
err = nvs_set_blob(my_handle, KEY, &g_sys_param, sizeof(sys_param_t));
|
|
err |= nvs_commit(my_handle);
|
|
nvs_close(my_handle);
|
|
}
|
|
return ESP_OK == err ? ESP_OK : ESP_FAIL;
|
|
}
|
|
|
|
sys_param_t *settings_get_parameter(void)
|
|
{
|
|
return &g_sys_param;
|
|
}
|