#include "common/constants.h" #include "io/nvs_handler.h" #include "nvs_flash.h" NVSStorageHandler::~NVSStorageHandler() { if (this->nvsHandle != 0) { nvs_close(this->nvsHandle); this->nvsHandle = 0; } } void NVSStorageHandler::init(const EventGroupHandle_t& system_event_group) { esp_err_t err = nvs_flash_init(); if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) { nvs_flash_erase(); err = nvs_flash_init(); } ESP_ERROR_CHECK(err); err = nvs_open("storage", NVS_READWRITE, &this->nvsHandle); if (err != ESP_OK) { printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err)); } else { xEventGroupSetBits(system_event_group, STORAGE_READY_BIT); printf("NVS Storage initialized.\n"); } } void NVSStorageHandler::put(const char*& key, const char*& value) { if (this->nvsHandle == 0) { printf("NVS handle is not initialized.\n"); return; } esp_err_t err = nvs_set_str(this->nvsHandle, key, value); if (err != ESP_OK) { printf("Error (%s) setting key-value pair in NVS!\n", esp_err_to_name(err)); } else { nvs_commit(this->nvsHandle); printf("Key-value pair (%s, %s) stored in NVS.\n", key, value); } } char* NVSStorageHandler::get(const char*& key) const { if (this->nvsHandle == 0) { printf("NVS handle is not initialized.\n"); return nullptr; } size_t required_size = 0; esp_err_t err = nvs_get_str(this->nvsHandle, key, nullptr, &required_size); if (err == ESP_ERR_NVS_NOT_FOUND) { printf("Key %s not found in NVS.\n", key); return nullptr; } else if (err != ESP_OK) { printf("Error (%s) getting size for key %s from NVS!\n", esp_err_to_name(err), key); return nullptr; } char* value = (char*)malloc(required_size); err = nvs_get_str(this->nvsHandle, key, value, &required_size); if (err != ESP_OK) { printf("Error (%s) getting value for key %s from NVS!\n", esp_err_to_name(err), key); free(value); return nullptr; } return value; } void NVSStorageHandler::remove(const char*& key) { if (this->nvsHandle == 0) { printf("NVS handle is not initialized.\n"); return; } esp_err_t err = nvs_erase_key(this->nvsHandle, key); if (err != ESP_OK) { printf("Error (%s) deleting key %s from NVS!\n", esp_err_to_name(err), key); } else { nvs_commit(this->nvsHandle); printf("Key %s deleted from NVS.\n", key); } }