1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use super::{PCF8563, hal, Error, Register, BitFlags, Control};
use hal::blocking::i2c::{Write, WriteRead};
#[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: Write<Error = E> + WriteRead<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)
}
}