#![no_std]
extern crate embedded_hal as hal;
pub mod registers;
use hal::blocking::i2c;
use registers::*;
#[derive(Debug)]
pub struct MP2667<I2C> {
i2c: I2C,
}
impl<I2C, E> MP2667<I2C>
where
I2C: i2c::Write<Error = E> + i2c::WriteRead<Error = E>,
{
pub fn new(i2c: I2C) -> Self {
MP2667 { i2c }
}
pub fn release(self) -> I2C {
self.i2c
}
pub fn get_input_source(&mut self) -> Result<InputSourceControl, E> {
InputSourceControl::read(&mut self.i2c)
}
pub fn set_input_source(&mut self, ctrl: InputSourceControl) -> Result<(), E> {
ctrl.write(&mut self.i2c)
}
pub fn get_power_on_config(&mut self) -> Result<PowerOnConfiguration, E> {
PowerOnConfiguration::read(&mut self.i2c)
}
pub fn set_power_on_config(&mut self, cfg: PowerOnConfiguration) -> Result<(), E> {
cfg.write(&mut self.i2c)
}
pub fn get_charge_current_control(&mut self) -> Result<ChargeCurrentControl, E> {
ChargeCurrentControl::read(&mut self.i2c)
}
pub fn set_charge_current_control(&mut self, cfg: ChargeCurrentControl) -> Result<(), E> {
cfg.write(&mut self.i2c)
}
pub fn get_discharge_and_termination_current(
&mut self,
) -> Result<DischargeAndTerminationCurrent, E> {
DischargeAndTerminationCurrent::read(&mut self.i2c)
}
pub fn set_discharge_and_termination_current(
&mut self,
cfg: DischargeAndTerminationCurrent,
) -> Result<(), E> {
cfg.write(&mut self.i2c)
}
pub fn get_charge_voltage_control(&mut self) -> Result<ChargeVoltageControl, E> {
ChargeVoltageControl::read(&mut self.i2c)
}
pub fn set_charge_voltage_control(&mut self, cfg: ChargeVoltageControl) -> Result<(), E> {
cfg.write(&mut self.i2c)
}
pub fn get_charge_termination_and_timer_control(
&mut self,
) -> Result<ChargeTerminationAndTimerControl, E> {
ChargeTerminationAndTimerControl::read(&mut self.i2c)
}
pub fn set_charge_termination_and_timer_control(
&mut self,
cfg: ChargeTerminationAndTimerControl,
) -> Result<(), E> {
cfg.write(&mut self.i2c)
}
pub fn get_miscellaneous_operation_control(
&mut self,
) -> Result<MiscellaneousOperationControl, E> {
MiscellaneousOperationControl::read(&mut self.i2c)
}
pub fn set_miscellaneous_operation_control(
&mut self,
cfg: MiscellaneousOperationControl,
) -> Result<(), E> {
cfg.write(&mut self.i2c)
}
pub fn get_status(&mut self) -> Result<SystemStatus, E> {
SystemStatus::read(&mut self.i2c)
}
pub fn get_faults(&mut self) -> Result<FaultFlags, E> {
FaultFlags::read(&mut self.i2c)
}
}