64 lines
1.8 KiB
C++
64 lines
1.8 KiB
C++
#include "nvs.h"
|
|
#include "esp_log.h"
|
|
#include "bottom_half.h"
|
|
#include "char_lcd.h"
|
|
|
|
static const char* TAG = "nvs";
|
|
|
|
static const char* HWDATA_NAMESPACE = "hwdata";
|
|
static HWData hw_data;
|
|
|
|
bool init_nvs() {
|
|
ESP_LOGI(TAG, "Initializing NVS...");
|
|
esp_err_t ret = nvs_flash_init();
|
|
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
|
|
// NVS partition was truncated, erase and retry
|
|
ESP_LOGE(TAG, "Failed to init nvs flash: %s.", esp_err_to_name(ret));
|
|
lcd_print(1, 0, "NVS: ");
|
|
lcd_print(1, 4, esp_err_to_name(ret));
|
|
lcd_print(2, 0, "Press Yellow to skip");
|
|
lcd_print(3, 0, "Press Red to erase");
|
|
|
|
ButtonKey button;
|
|
while (!( get_button_pressed(&button) && (button == ButtonKey::button_red || button == ButtonKey::button_yellow) )) vTaskDelay(pdMS_TO_TICKS(10));
|
|
|
|
lcd_clear();
|
|
|
|
if (button == ButtonKey::button_yellow) {
|
|
return false;
|
|
}
|
|
if (button == ButtonKey::button_red) {
|
|
ESP_ERROR_CHECK(nvs_flash_erase());
|
|
ret = nvs_flash_init();
|
|
}
|
|
}
|
|
ESP_ERROR_CHECK(ret);
|
|
|
|
nvs_handle_t hw_handle;
|
|
ret = nvs_open(HWDATA_NAMESPACE, NVS_READONLY, &hw_handle);
|
|
if (ret == ESP_ERR_NVS_NOT_FOUND) {
|
|
ESP_LOGW(TAG, "Partition \"%s\" has not been initialized. Loading defaults.", HWDATA_NAMESPACE);
|
|
hw_data = HWData();
|
|
} else {
|
|
ESP_ERROR_CHECK(ret);
|
|
hw_data = HWData::load(hw_handle);
|
|
nvs_close(hw_handle);
|
|
}
|
|
|
|
ESP_LOGI(TAG, "NVS initialized!");
|
|
|
|
return true;
|
|
}
|
|
|
|
HWData& get_hw_data() {
|
|
return hw_data;
|
|
}
|
|
|
|
void save_hw_data(bool force) {
|
|
nvs_handle_t hw_handle;
|
|
ESP_ERROR_CHECK(nvs_open(HWDATA_NAMESPACE, NVS_READWRITE, &hw_handle));
|
|
hw_data.save(hw_handle);
|
|
nvs_close(hw_handle);
|
|
}
|
|
|