42 lines
1.3 KiB
C
42 lines
1.3 KiB
C
#include "ltc2941.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, ®);
|
|
*charge = reg << 0x08U;
|
|
|
|
bat->cb.read_register_cb(bat->user_data, LTC2941_REG_CHARGE_LSB, ®);
|
|
*charge |= reg;
|
|
|
|
return LTC2941_OK;
|
|
}
|
|
|
|
ltc2941_ret_t ltc2941_write_charge(ltc2941_t *bat, uint16_t charge) {
|
|
uint8_t reg = (charge >> 0x08U); // MSB
|
|
bat->cb.write_register_cb(bat->user_data, LTC2941_REG_CHARGE_MSB, reg);
|
|
|
|
reg = (charge & 0xFFU); // LSB
|
|
bat->cb.write_register_cb(bat->user_data, LTC2941_REG_CHARGE_LSB, reg);
|
|
|
|
return LTC2941_OK;
|
|
} |