File syn_settings.h¶
File List > src > syntropic > storage > syn_settings.h
Go to the documentation of this file
#ifndef SYN_SETTINGS_H
#define SYN_SETTINGS_H
#include "../common/syn_defs.h"
#include "../storage/syn_param.h"
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* ── Callback ──────────────────────────────────────────────────────────── */
typedef void (*SYN_SettingsChangeCallback)(void *data, void *ctx);
/* ── Settings instance ─────────────────────────────────────────────────── */
typedef struct {
SYN_ParamStore store;
void *data;
uint16_t data_size;
const void *defaults;
uint16_t checksum;
SYN_SettingsChangeCallback on_change;
void *on_change_ctx;
} SYN_Settings;
/* ── API ────────────────────────────────────────────────────────────────── */
SYN_Status syn_settings_init(SYN_Settings *s, uint32_t flash_base, uint8_t sector_count, void *data,
uint16_t data_size, const void *defaults);
SYN_Status syn_settings_save(SYN_Settings *s);
bool syn_settings_changed(const SYN_Settings *s);
static inline uint16_t syn_settings_checksum(const SYN_Settings *s)
{
return s->checksum;
}
SYN_Status syn_settings_reset(SYN_Settings *s);
void syn_settings_on_change(SYN_Settings *s, SYN_SettingsChangeCallback cb, void *ctx);
SYN_Status syn_settings_reload(SYN_Settings *s);
int syn_settings_export(const SYN_Settings *s, void *buf, size_t len);
SYN_Status syn_settings_import(SYN_Settings *s, const void *buf, size_t len, bool save);
SYN_Status syn_settings_export_vfs(const SYN_Settings *s, const char *filepath);
SYN_Status syn_settings_import_vfs(SYN_Settings *s, const char *filepath, bool save);
/* ── Dual-Bank Transactional Settings ───────────────────────────────────── */
typedef struct {
SYN_Settings bank_a;
SYN_Settings bank_b;
uint8_t active_bank;
uint32_t active_crc32;
} SYN_DualBankSettings;
SYN_Status syn_settings_dual_bank_init(SYN_DualBankSettings *db, uint32_t flash_base_a,
uint32_t flash_base_b, uint8_t sector_count, void *data,
uint16_t data_size, const void *defaults);
SYN_Status syn_settings_dual_bank_save(SYN_DualBankSettings *db);
#ifdef __cplusplus
}
#endif
#endif /* SYN_SETTINGS_H */