use super::{I2c, BitFlags, Control, Error, Register, TimerFreq, PCF8563};
impl<I2C, E> PCF8563<I2C>
where
I2C: I2c<Error = E>,
{
pub fn control_ext_clk_test_mode(&mut self, flag: Control) -> Result<(), Error<E>> {
match flag {
Control::On => self.set_register_bit_flag(Register::CTRL_STATUS_1, BitFlags::TEST1),
Control::Off => self.clear_register_bit_flag(Register::CTRL_STATUS_1, BitFlags::TEST1),
}
}
pub fn is_ext_clk_mode_enabled(&mut self) -> Result<bool, Error<E>> {
self.is_register_bit_flag_high(Register::CTRL_STATUS_1, BitFlags::TEST1)
}
pub fn control_clock(&mut self, flag: Control) -> Result<(), Error<E>> {
match flag {
Control::On => self.clear_register_bit_flag(Register::CTRL_STATUS_1, BitFlags::STOP),
Control::Off => self.set_register_bit_flag(Register::CTRL_STATUS_1, BitFlags::STOP),
}
}
pub fn is_clock_running(&mut self) -> Result<bool, Error<E>> {
let flag = self.is_register_bit_flag_high(Register::CTRL_STATUS_1, BitFlags::STOP)?;
let flag = flag ^ true;
Ok(flag)
}
pub fn control_power_on_reset_override(&mut self, flag: Control) -> Result<(), Error<E>> {
match flag {
Control::On => self.set_register_bit_flag(Register::CTRL_STATUS_1, BitFlags::TESTC),
Control::Off => self.clear_register_bit_flag(Register::CTRL_STATUS_1, BitFlags::TESTC),
}
}
pub fn is_power_on_reset_override_enabled(&mut self) -> Result<bool, Error<E>> {
self.is_register_bit_flag_high(Register::CTRL_STATUS_1, BitFlags::TESTC)
}
pub fn get_voltage_low_flag(&mut self) -> Result<bool, Error<E>> {
self.is_register_bit_flag_high(Register::VL_SECONDS, BitFlags::VL)
}
pub fn clear_voltage_low_flag(&mut self) -> Result<(), Error<E>> {
self.clear_register_bit_flag(Register::VL_SECONDS, BitFlags::VL)
}
pub fn rtc_init(&mut self) -> Result<(), Error<E>> {
self.write_register(Register::CTRL_STATUS_1, 0)?; self.write_register(Register::CTRL_STATUS_2, 0)?;
self.clear_voltage_low_flag()?; self.disable_all_alarms()?; self.set_timer_frequency(TimerFreq::Timer_1_60Hz)?; Ok(())
}
}