Skip to content

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 */