LNSC-2420-Firmware/src/charge_control.h

50 lines
935 B
C

#ifndef CHARGE_CONTROL_H
#define CHARGE_CONTROL_H
#include <stdint.h>
#include <stdbool.h>
// forward declarations
struct MeasurementResult;
enum ChargeState
{
CHARGE_WAIT_CHARGEPUMP,
CHARGE_INITIAL,
CHARGE_INITIAL_HOLD,
CHARGE_TRANSITION,
CHARGE_FLOAT,
CHARGE_SLEEP,
CHARGE_HIGH_INTERNAL_TEMPERATURE,
CHARGE_LOW_EXTERNAL_TEMPERATURE,
CHARGE_NUM_STATES
};
enum DischargeState
{
DISCHARGE_WAIT_CHARGEPUMP,
DISCHARGE_OK,
DISCHARGE_VOLTAGE_LOW,
DISCHARGE_OVERCURRENT,
DISCHARGE_OVERCURRENT_DELAY,
DISCHARGE_NUM_STATES
};
// Error flags
#define LOAD_OVERCURRENT (1 << 0)
#define CHARGE_PUMP_ERROR (1 << 1)
#define OVER_TEMPERATURE (1 << 2)
void charge_control_init(void);
void charge_control_update(uint64_t uptime_ms, struct MeasurementResult *meas);
bool charge_control_is_charge_blocked(void);
bool charge_control_is_discharge_blocked(void);
bool charge_control_is_idle(void);
#endif // CHARGE_CONTROL_H