HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
EspTypes_NVS.h
Go to the documentation of this file.
1
14#pragma once
15
16#include "BaseNvs.h" // For hf_nvs_err_t
17#include "EspTypes_Base.h"
18#include "HardwareTypes.h" // For basic hardware types
19#include "McuSelect.h" // Central MCU platform selection (includes all ESP-IDF)
20#include <cstring>
21
22//==============================================================================
23// ESP32 NVS TYPE MAPPINGS
24//==============================================================================
25
26// Direct ESP-IDF type usage - no unnecessary aliases
27// These types are used internally by EspNvs implementation
28
29//==============================================================================
30// ESP32 NVS CONSTANTS
31//==============================================================================
32
33static constexpr size_t HF_NVS_MAX_KEY_LENGTH = 15;
34static constexpr size_t HF_NVS_MAX_VALUE_SIZE = 4000;
35static constexpr size_t HF_NVS_MAX_NAMESPACE_LENGTH = 15;
36static constexpr size_t HF_NVS_MAX_NAMESPACES = 256;
37static constexpr size_t HF_NVS_FLASH_SECTOR_SIZE = 4096;
38static constexpr size_t HF_NVS_PAGE_SIZE = 4096;
39static constexpr size_t HF_NVS_ENTRY_SIZE = 32;
40
41// NVS operation timeouts
42static constexpr uint32_t HF_NVS_OPERATION_TIMEOUT_MS = 1000;
43static constexpr uint32_t HF_NVS_INIT_TIMEOUT_MS = 5000;
44static constexpr uint32_t HF_NVS_COMMIT_TIMEOUT_MS = 2000;
45
46//==============================================================================
47// ESP32 NVS ENUMS
48//==============================================================================
49
53enum class hf_nvs_type_t : uint8_t {
54 HF_NVS_TYPE_U8 = 0,
55 HF_NVS_TYPE_I8 = 1,
56 HF_NVS_TYPE_U16 = 2,
57 HF_NVS_TYPE_I16 = 3,
58 HF_NVS_TYPE_U32 = 4,
59 HF_NVS_TYPE_I32 = 5,
60 HF_NVS_TYPE_U64 = 6,
61 HF_NVS_TYPE_I64 = 7,
62 HF_NVS_TYPE_STR = 8,
64};
65
69enum class hf_nvs_open_mode_t : uint8_t {
70 HF_NVS_READONLY = 0,
72};
73
82
83//==============================================================================
84// ESP32 NVS CONFIGURATION STRUCTURES
85//==============================================================================
86
104
127
141
148 size_t size;
149 uint32_t crc;
150
152 key[0] = '\0';
153 }
154};
155
156//==============================================================================
157// ESP32 NVS VALIDATION MACROS
158//==============================================================================
159
160#define HF_NVS_IS_VALID_KEY_LENGTH(len) ((len) > 0 && (len) <= HF_NVS_MAX_KEY_LENGTH)
161#define HF_NVS_IS_VALID_VALUE_SIZE(size) ((size) <= HF_NVS_MAX_VALUE_SIZE)
162#define HF_NVS_IS_VALID_NAMESPACE_LENGTH(len) ((len) > 0 && (len) <= HF_NVS_MAX_NAMESPACE_LENGTH)
163
164//==============================================================================
165// ESP32 NVS UTILITY FUNCTIONS
166//==============================================================================
167
173inline constexpr bool IsValidNvsKey(const char* key) noexcept {
174 if (!key)
175 return false;
176 size_t len = strlen(key);
177 return HF_NVS_IS_VALID_KEY_LENGTH(len);
178}
179
185inline constexpr bool IsValidNvsNamespace(const char* namespace_name) noexcept {
186 if (!namespace_name)
187 return false;
188 size_t len = strlen(namespace_name);
190}
191
197inline constexpr bool IsValidNvsValueSize(size_t size) noexcept {
198 return HF_NVS_IS_VALID_VALUE_SIZE(size);
199}
200
206inline constexpr size_t GetMaxValueSizeForType(hf_nvs_type_t type) noexcept {
207 switch (type) {
210 return 1;
213 return 2;
216 return 4;
219 return 8;
223 default:
224 return 0;
225 }
226}
227
228//==============================================================================
229// END OF ESPNVS TYPES - MINIMAL AND ESSENTIAL ONLY
230//==============================================================================
Abstract base class for Non-Volatile Storage implementations in the HardFOC system.
ESP32 base type definitions for hardware abstraction.
static constexpr size_t HF_NVS_MAX_VALUE_SIZE
Definition EspTypes_NVS.h:34
#define HF_NVS_IS_VALID_NAMESPACE_LENGTH(len)
Definition EspTypes_NVS.h:162
static constexpr size_t HF_NVS_ENTRY_SIZE
Definition EspTypes_NVS.h:39
static constexpr uint32_t HF_NVS_COMMIT_TIMEOUT_MS
Commit operation timeout.
Definition EspTypes_NVS.h:44
static constexpr size_t HF_NVS_PAGE_SIZE
Definition EspTypes_NVS.h:38
constexpr bool IsValidNvsValueSize(size_t size) noexcept
Validate NVS value size for ESP32.
Definition EspTypes_NVS.h:197
static constexpr size_t HF_NVS_FLASH_SECTOR_SIZE
Definition EspTypes_NVS.h:37
constexpr bool IsValidNvsNamespace(const char *namespace_name) noexcept
Validate NVS namespace name for ESP32.
Definition EspTypes_NVS.h:185
static constexpr uint32_t HF_NVS_OPERATION_TIMEOUT_MS
Default operation timeout.
Definition EspTypes_NVS.h:42
hf_nvs_encryption_mode_t
ESP32 NVS encryption modes.
Definition EspTypes_NVS.h:77
@ HF_NVS_ENCRYPTION_NONE
No encryption.
@ HF_NVS_ENCRYPTION_XTS
XTS encryption.
@ HF_NVS_ENCRYPTION_HMAC
HMAC encryption.
#define HF_NVS_IS_VALID_KEY_LENGTH(len)
Definition EspTypes_NVS.h:160
static constexpr size_t HF_NVS_MAX_NAMESPACE_LENGTH
Definition EspTypes_NVS.h:35
hf_nvs_open_mode_t
ESP32 NVS open modes.
Definition EspTypes_NVS.h:69
@ HF_NVS_READONLY
Read-only mode.
@ HF_NVS_READWRITE
Read-write mode.
#define HF_NVS_IS_VALID_VALUE_SIZE(size)
Definition EspTypes_NVS.h:161
constexpr bool IsValidNvsKey(const char *key) noexcept
Validate NVS key name for ESP32.
Definition EspTypes_NVS.h:173
static constexpr size_t HF_NVS_MAX_KEY_LENGTH
Definition EspTypes_NVS.h:33
static constexpr uint32_t HF_NVS_INIT_TIMEOUT_MS
Initialization timeout.
Definition EspTypes_NVS.h:43
static constexpr size_t HF_NVS_MAX_NAMESPACES
Definition EspTypes_NVS.h:36
hf_nvs_type_t
ESP32 NVS data types.
Definition EspTypes_NVS.h:53
@ HF_NVS_TYPE_I64
64-bit signed integer
@ HF_NVS_TYPE_U32
32-bit unsigned integer
@ HF_NVS_TYPE_STR
String.
@ HF_NVS_TYPE_I32
32-bit signed integer
@ HF_NVS_TYPE_BLOB
Binary blob.
@ HF_NVS_TYPE_U64
64-bit unsigned integer
@ HF_NVS_TYPE_U8
8-bit unsigned integer
@ HF_NVS_TYPE_I8
8-bit signed integer
@ HF_NVS_TYPE_I16
16-bit signed integer
@ HF_NVS_TYPE_U16
16-bit unsigned integer
constexpr size_t GetMaxValueSizeForType(hf_nvs_type_t type) noexcept
Get maximum supported value size for given type.
Definition EspTypes_NVS.h:206
Platform-agnostic hardware type definitions for the HardFOC system.
Centralized MCU platform selection and configuration header.
ESP32 NVS capabilities information.
Definition EspTypes_NVS.h:108
bool supports_encryption
Encryption support.
Definition EspTypes_NVS.h:114
size_t max_namespaces
Maximum namespaces.
Definition EspTypes_NVS.h:109
size_t max_key_length
Maximum key length.
Definition EspTypes_NVS.h:111
bool supports_xts_encryption
XTS encryption support.
Definition EspTypes_NVS.h:116
bool supports_wear_leveling
Wear leveling support.
Definition EspTypes_NVS.h:118
size_t flash_sector_size
Flash sector size.
Definition EspTypes_NVS.h:113
hf_nvs_capabilities_t() noexcept
Definition EspTypes_NVS.h:120
bool supports_atomic_operations
Atomic operations support.
Definition EspTypes_NVS.h:117
size_t max_value_size
Maximum value size.
Definition EspTypes_NVS.h:112
size_t max_keys_per_namespace
Maximum keys per namespace.
Definition EspTypes_NVS.h:110
bool supports_hmac_encryption
HMAC encryption support.
Definition EspTypes_NVS.h:115
ESP32 NVS entry information.
Definition EspTypes_NVS.h:145
hf_nvs_type_t type
Entry type.
Definition EspTypes_NVS.h:147
size_t size
Entry size.
Definition EspTypes_NVS.h:148
hf_nvs_entry_info_t() noexcept
Definition EspTypes_NVS.h:151
char key[HF_NVS_MAX_KEY_LENGTH+1]
Entry key.
Definition EspTypes_NVS.h:146
uint32_t crc
Entry CRC.
Definition EspTypes_NVS.h:149
ESP32 NVS iterator configuration.
Definition EspTypes_NVS.h:131
size_t max_entries
Maximum entries to iterate.
Definition EspTypes_NVS.h:135
const char * namespace_name
Namespace name.
Definition EspTypes_NVS.h:132
hf_nvs_type_t type
Data type filter.
Definition EspTypes_NVS.h:133
const char * key_prefix
Key prefix filter.
Definition EspTypes_NVS.h:134
hf_nvs_iterator_config_t() noexcept
Definition EspTypes_NVS.h:137
ESP32 NVS partition configuration.
Definition EspTypes_NVS.h:90
const char * partition_label
Partition label.
Definition EspTypes_NVS.h:91
hf_nvs_encryption_mode_t encryption
Encryption mode.
Definition EspTypes_NVS.h:94
hf_nvs_open_mode_t open_mode
Open mode.
Definition EspTypes_NVS.h:93
bool auto_commit
Auto-commit flag.
Definition EspTypes_NVS.h:96
const char * namespace_name
Namespace name.
Definition EspTypes_NVS.h:92
size_t max_entries
Maximum entries.
Definition EspTypes_NVS.h:95
hf_nvs_partition_config_t() noexcept
Definition EspTypes_NVS.h:98