new upgrade

This commit is contained in:
2025-12-21 23:28:26 +00:00
parent 82fa194bd8
commit 023644a887
99 changed files with 7457 additions and 7079 deletions

View File

@@ -0,0 +1,8 @@
set(srcs
"src/storage_service.c"
)
idf_component_register(SRCS "${srcs}"
INCLUDE_DIRS "include"
REQUIRES nvs_flash)

View File

@@ -0,0 +1,92 @@
#pragma once
#include <stdint.h>
#include <stddef.h>
#include "esp_err.h"
#include "freertos/FreeRTOS.h"
#include "nvs.h" // para ESP_ERR_NVS_INVALID_LENGTH
#ifdef __cplusplus
extern "C"
{
#endif
/**
* NVS limita namespace e key a 15 chars (+ '\0')
*/
#define STORAGE_NS_MAX_LEN 16
#define STORAGE_KEY_MAX_LEN 16
#ifndef STORAGE_QUEUE_LEN
#define STORAGE_QUEUE_LEN 32
#endif
#ifndef STORAGE_MAX_PENDING
#define STORAGE_MAX_PENDING 48
#endif
#ifndef STORAGE_COMMIT_DEBOUNCE_MS
#define STORAGE_COMMIT_DEBOUNCE_MS 500
#endif
#ifndef STORAGE_MAX_VALUE_BYTES
#define STORAGE_MAX_VALUE_BYTES 96
#endif
/**
* Inicializa o serviço e cria a task interna.
*
* Requisitos:
* - nvs_flash_init() deve ter sido chamado antes.
*/
esp_err_t storage_service_init(void);
// -------------------- Async setters (não bloqueiam; commit é debounced) --------------------
esp_err_t storage_set_u8_async(const char *ns, const char *key, uint8_t v);
esp_err_t storage_set_u16_async(const char *ns, const char *key, uint16_t v);
esp_err_t storage_set_u32_async(const char *ns, const char *key, uint32_t v);
esp_err_t storage_set_str_async(const char *ns, const char *key, const char *str);
esp_err_t storage_set_blob_async(const char *ns, const char *key, const void *data, size_t len);
esp_err_t storage_erase_key_async(const char *ns, const char *key);
/** Força commit imediato (async). */
esp_err_t storage_flush_async(void);
// -------------------- Sync getters (bloqueiam até ler do NVS/pending) --------------------
esp_err_t storage_get_u8_sync(const char *ns, const char *key, uint8_t *out, TickType_t to);
esp_err_t storage_get_u16_sync(const char *ns, const char *key, uint16_t *out, TickType_t to);
esp_err_t storage_get_u32_sync(const char *ns, const char *key, uint32_t *out, TickType_t to);
esp_err_t storage_get_str_sync(const char *ns, const char *key, char *out, size_t out_sz, TickType_t to);
/**
* Blob sync (semântica semelhante a nvs_get_blob):
* - Se out == NULL: devolve ESP_OK e coloca em *inout_len o tamanho requerido
* - Se out != NULL e *inout_len < requerido: devolve ESP_ERR_NVS_INVALID_LENGTH e atualiza *inout_len com requerido
* - Se OK: copia e atualiza *inout_len com o tamanho real
*/
esp_err_t storage_get_blob_sync(const char *ns, const char *key, void *out, size_t *inout_len, TickType_t to);
/** Força commit imediato (sync). */
esp_err_t storage_flush_sync(TickType_t to);
// -------------------- (upgrade opcional) Sync setters --------------------
// Úteis no boot/migração quando queres garantia forte e/ou a fila async pode estar cheia.
esp_err_t storage_set_u8_sync(const char *ns, const char *key, uint8_t v, TickType_t to);
esp_err_t storage_set_u16_sync(const char *ns, const char *key, uint16_t v, TickType_t to);
esp_err_t storage_set_u32_sync(const char *ns, const char *key, uint32_t v, TickType_t to);
esp_err_t storage_set_str_sync(const char *ns, const char *key, const char *str, TickType_t to);
esp_err_t storage_set_blob_sync(const char *ns, const char *key, const void *data, size_t len, TickType_t to);
esp_err_t storage_erase_key_sync(const char *ns, const char *key, TickType_t to);
#ifdef __cplusplus
}
#endif

File diff suppressed because it is too large Load Diff