1use crate::rtc::Rtc;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum SquareWaveFreq {
8 Hz1,
10 Hz1024,
12 Hz4096,
14 Hz8192,
16 Hz32768,
18 Custom(u32),
20}
21
22impl SquareWaveFreq {
23 pub fn to_hz(&self) -> u32 {
25 match self {
26 Self::Hz1 => 1,
27 Self::Hz1024 => 1024,
28 Self::Hz4096 => 4096,
29 Self::Hz8192 => 8192,
30 Self::Hz32768 => 32768,
31 Self::Custom(freq) => *freq,
32 }
33 }
34
35 pub fn from_hz(hz: u32) -> Self {
37 match hz {
38 1 => Self::Hz1,
39 1024 => Self::Hz1024,
40 4096 => Self::Hz4096,
41 8192 => Self::Hz8192,
42 32768 => Self::Hz32768,
43 other => Self::Custom(other),
44 }
45 }
46}
47
48pub trait SquareWave: Rtc {
50 fn start_square_wave(&mut self, freq: SquareWaveFreq) -> Result<(), Self::Error>;
52
53 fn enable_square_wave(&mut self) -> Result<(), Self::Error>;
55
56 fn disable_square_wave(&mut self) -> Result<(), Self::Error>;
58
59 fn set_square_wave_frequency(&mut self, freq: SquareWaveFreq) -> Result<(), Self::Error>;
61}