2021-06-07 22:45:17 +02:00
|
|
|
#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,
|
2021-07-10 16:29:48 +02:00
|
|
|
CHARGE_INITIAL_HOLD,
|
2021-06-07 22:45:17 +02:00
|
|
|
CHARGE_TRANSITION,
|
|
|
|
CHARGE_FLOAT,
|
|
|
|
CHARGE_SLEEP,
|
2022-10-15 21:44:27 +02:00
|
|
|
CHARGE_HIGH_INTERNAL_TEMPERATURE,
|
|
|
|
CHARGE_LOW_EXTERNAL_TEMPERATURE,
|
|
|
|
|
|
|
|
CHARGE_NUM_STATES
|
2021-06-07 22:45:17 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
enum DischargeState
|
|
|
|
{
|
|
|
|
DISCHARGE_WAIT_CHARGEPUMP,
|
|
|
|
DISCHARGE_OK,
|
|
|
|
DISCHARGE_VOLTAGE_LOW,
|
2022-10-15 21:44:27 +02:00
|
|
|
DISCHARGE_OVERCURRENT,
|
2023-06-18 16:18:13 +02:00
|
|
|
DISCHARGE_OVERCURRENT_DELAY,
|
2022-10-15 21:44:27 +02:00
|
|
|
|
|
|
|
DISCHARGE_NUM_STATES
|
2021-06-07 22:45:17 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
2021-06-11 23:56:12 +02:00
|
|
|
bool charge_control_is_idle(void);
|
|
|
|
|
2021-06-07 22:45:17 +02:00
|
|
|
#endif // CHARGE_CONTROL_H
|