#ifndef CHARGE_CONTROL_H #define CHARGE_CONTROL_H #include #include // 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