1use crate::{Command, Error, Register, ADDR};
2use embedded_hal::i2c;
3
4impl_common!(Max17043);
5impl_common!(Max17044);
6
7macro_rules! impl_common_4x {
8 ($ic:ident) => {
9 impl<I2C, E> $ic<I2C>
10 where
11 I2C: i2c::I2c<Error = E>,
12 {
13 pub fn soc(&mut self) -> Result<f32, Error<E>> {
16 let soc = self.read_register(Register::SOC)?;
17 Ok(f32::from((soc & 0xFF00) >> 8) + f32::from(soc & 0xFF) / 256.0)
18 }
19
20 pub fn reset(&mut self) -> Result<(), Error<E>> {
22 self.write_register(Register::COMMAND, Command::POR_43_44)
23 }
24 }
25 };
26}
27impl_common_4x!(Max17043);
28impl_common_4x!(Max17044);
29
30impl<I2C, E> Max17043<I2C>
31where
32 I2C: i2c::I2c<Error = E>,
33{
34 pub fn voltage(&mut self) -> Result<f32, Error<E>> {
36 let vcell = self.read_register(Register::VCELL)?;
37 Ok(f32::from(vcell >> 4) / 800.0)
38 }
39}
40
41impl<I2C, E> Max17044<I2C>
42where
43 I2C: i2c::I2c<Error = E>,
44{
45 pub fn voltage(&mut self) -> Result<f32, Error<E>> {
47 let vcell = self.read_register(Register::VCELL)?;
48 Ok(f32::from(vcell >> 4) / 400.0)
49 }
50}