From 23fb0b3862aa80d7e1ba5553cc931f3767d30aa3 Mon Sep 17 00:00:00 2001 From: DrZlo13 Date: Fri, 3 Dec 2021 10:33:06 +1000 Subject: [PATCH] CLI: factory reset --- main/cli-commands.c | 15 ++++++++++++++- main/nvs.c | 32 +++++++++++++++++++++++++++----- main/nvs.h | 9 +++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/main/cli-commands.c b/main/cli-commands.c index 14114ab..b0ed6c1 100644 --- a/main/cli-commands.c +++ b/main/cli-commands.c @@ -1,14 +1,16 @@ #include #include #include "cli.h" +#include "nvs.h" +#include "helpers.h" #include "cli-args.h" #include "cli-commands.h" -#include "helpers.h" void cli_help(Cli* cli, mstring_t* args); void cli_gpio_set(Cli* cli, mstring_t* args); void cli_gpio_get(Cli* cli, mstring_t* args); void cli_device_info(Cli* cli, mstring_t* args); +void cli_factory_reset(Cli* cli, mstring_t* args); void cli_wifi_scan(Cli* cli, mstring_t* args); const CliItem cli_items[] = { @@ -40,6 +42,10 @@ const CliItem cli_items[] = { .name = "device_info", .callback = cli_device_info, }, + { + .name = "factory_reset", + .callback = cli_factory_reset, + }, }; size_t cli_items_count = COUNT_OF(cli_items); @@ -52,4 +58,11 @@ void cli_help(Cli* cli, mstring_t* args) { cli_write_eol(cli); } } +} + +void cli_factory_reset(Cli* cli, mstring_t* args) { + cli_write_str(cli, "Erasing NVS"); + cli_write_eol(cli); + nvs_erase(); + cli_write_str(cli, "OK"); } \ No newline at end of file diff --git a/main/nvs.c b/main/nvs.c index 8381a0c..0fde9c0 100644 --- a/main/nvs.c +++ b/main/nvs.c @@ -6,17 +6,39 @@ #define NVS_STORE "nvs_storage" void nvs_init(void) { - ESP_LOGI(TAG, "init"); - esp_err_t ret = nvs_flash_init(); + ESP_LOGI(TAG, "init " NVS_DEFAULT_PART_NAME); + esp_err_t ret = nvs_flash_init_partition(NVS_DEFAULT_PART_NAME); if(ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { - ESP_LOGI(TAG, "erasing"); - ESP_ERROR_CHECK(nvs_flash_erase()); - ret = nvs_flash_init(); + ESP_LOGI(TAG, "erasing " NVS_DEFAULT_PART_NAME); + ESP_ERROR_CHECK(nvs_flash_erase_partition(NVS_DEFAULT_PART_NAME)); + ret = nvs_flash_init_partition(NVS_DEFAULT_PART_NAME); } ESP_ERROR_CHECK(ret); + + ESP_LOGI(TAG, "init " NVS_STORE); + ret = nvs_flash_init_partition(NVS_STORE); + if(ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { + ESP_LOGI(TAG, "erasing " NVS_STORE); + ESP_ERROR_CHECK(nvs_flash_erase_partition(NVS_STORE)); + ret = nvs_flash_init_partition(NVS_STORE); + } + ESP_ERROR_CHECK(ret); + ESP_LOGI(TAG, "init done"); } +void nvs_erase(void) { + ESP_LOGI(TAG, "erasing " NVS_DEFAULT_PART_NAME); + ESP_ERROR_CHECK(nvs_flash_erase()); + ESP_ERROR_CHECK(nvs_flash_init()); + + ESP_LOGI(TAG, "erasing " NVS_STORE); + ESP_ERROR_CHECK(nvs_flash_erase_partition(NVS_STORE)); + ESP_ERROR_CHECK(nvs_flash_init_partition(NVS_STORE)); + + ESP_LOGI(TAG, "erasing done"); +} + esp_err_t nvs_save_string(const char* key, const mstring_t* value) { nvs_handle_t nvs_handle; esp_err_t err; diff --git a/main/nvs.h b/main/nvs.h index 01b2984..c9272a8 100644 --- a/main/nvs.h +++ b/main/nvs.h @@ -1,7 +1,16 @@ +/** + * @file nvs.h + * @author Sergey Gavrilov (who.just.the.doctor@gmail.com) + * @version 1.0 + * @date 2021-12-03 + * + * NVS management + */ #pragma once #include #include void nvs_init(void); +void nvs_erase(void); esp_err_t nvs_save_string(const char* key, const mstring_t* value); esp_err_t nvs_load_string(const char* key, mstring_t* value); \ No newline at end of file