Skip to content

File syn_power.h

File List > src > syntropic > system > syn_power.h

Go to the documentation of this file

#ifndef SYN_POWER_H
#define SYN_POWER_H

#include "../common/syn_defs.h"
#include "../drivers/syn_adc.h"
#include "../dsp/syn_signal.h"
#include "../system/syn_errlog.h"
#include "../util/syn_hysteresis.h"

#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/* ── Callback type ──────────────────────────────────────────────────────── */

struct SYN_Power;

typedef void (*SYN_PowerCallback)(struct SYN_Power *pwr, void *ctx);

/* ── Configuration ──────────────────────────────────────────────────────── */

typedef struct {
    SYN_ADC *adc;                  
    int32_t brownout_mv;           
    int32_t restore_mv;            
    SYN_PowerCallback on_brownout; 
    SYN_PowerCallback on_restore;  
    void *ctx;                     
} SYN_Power_Config;

/* ── Power monitor instance ─────────────────────────────────────────────── */

typedef struct SYN_Power {
    SYN_ADC *adc;                  
    SYN_Hysteresis hyst;           
    int32_t voltage_mv;            
    bool brownout;                 
    SYN_PowerCallback on_brownout; 
    SYN_PowerCallback on_restore;  
    void *ctx;                     
    SYN_Signal *stats;             
    SYN_ErrLog *errlog;            
} SYN_Power;

/* ── Error codes ────────────────────────────────────────────────────────── */

#define SYN_POWER_ERR_BROWNOUT 0x0400

/* ── API ────────────────────────────────────────────────────────────────── */

void syn_power_init(SYN_Power *pwr, const SYN_Power_Config *cfg);

void syn_power_update(SYN_Power *pwr);

static inline int32_t syn_power_voltage_mv(const SYN_Power *pwr)
{
    return pwr->voltage_mv;
}

static inline bool syn_power_is_brownout(const SYN_Power *pwr)
{
    return pwr->brownout;
}

void syn_power_set_stats(SYN_Power *pwr, SYN_Signal *stats);

void syn_power_set_errlog(SYN_Power *pwr, SYN_ErrLog *errlog);

#ifdef __cplusplus
}
#endif

#endif /* SYN_POWER_H */