use super::{I2c, BitFlags, Control, Error, Register, PCF8563};
#[allow(non_camel_case_types)]
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[repr(u8)]
pub enum ClkoutFreq {
Clkout_32768Hz = 0b0000_0000,
Clkout_1024Hz = 0b0000_0001,
Clkout_32Hz = 0b0000_0010,
Clkout_1Hz = 0b0000_0011,
}
impl ClkoutFreq {
pub fn bits(self) -> u8 {
self as u8
}
}
impl<I2C, E> PCF8563<I2C>
where
I2C: I2c<Error = E>,
{
pub fn set_clkout_frequency(&mut self, frequency: ClkoutFreq) -> Result<(), Error<E>> {
let data = self.read_register(Register::CLKOUT_CTRL)?; let data = data & 0b1000_0000; let data = data | frequency.bits(); self.write_register(Register::CLKOUT_CTRL, data)
}
pub fn control_clkout(&mut self, status: Control) -> Result<(), Error<E>> {
match status {
Control::On => self.set_register_bit_flag(Register::CLKOUT_CTRL, BitFlags::FE),
Control::Off => self.clear_register_bit_flag(Register::CLKOUT_CTRL, BitFlags::FE),
}
}
pub fn is_clkout_enabled(&mut self) -> Result<bool, Error<E>> {
self.is_register_bit_flag_high(Register::CLKOUT_CTRL, BitFlags::FE)
}
}