ESP32S2_Cal_Demo/main/lib/ltc2941_battery.c

32 lines
984 B
C

#include "ltc2941_battery.h"
#define LTC2941_REG_STATUS 0x00
#define LTC2941_REG_CONTROL 0x01
#define LTC2941_REG_CHARGE_MSB 0x02
#define LTC2941_REG_CHARGE_LSB 0x03
ltc2941_ret_t ltc2941_init(ltc2941_t *bat) {
uint8_t control_reg =
((bat->config.alert_mode & 0x03U) << 0x01U) |
((bat->config.prescaler & 0x07U) << 0x03U) |
((bat->config.alert_level & 0x03U) << 0x06U);
bat->cb.write_register_cb(bat->user_data, LTC2941_REG_CONTROL, control_reg);
return LTC2941_OK;
}
ltc2941_ret_t ltc2941_read_status(ltc2941_t *bat, uint8_t *status) {
return bat->cb.read_register_cb(bat->user_data, LTC2941_REG_STATUS, status);
}
ltc2941_ret_t ltc2941_read_charge(ltc2941_t *bat, uint16_t *charge) {
uint8_t reg = 0x00;
bat->cb.read_register_cb(bat->user_data, LTC2941_REG_CHARGE_MSB, &reg);
*charge = reg << 0x08U;
bat->cb.read_register_cb(bat->user_data, LTC2941_REG_CHARGE_LSB, &reg);
*charge |= reg;
return LTC2941_OK;
}