Implement native ESP-IDF radar firmware
This commit is contained in:
81
main/app_settings.c
Normal file
81
main/app_settings.c
Normal file
@@ -0,0 +1,81 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user