From 08f83660d067a721d685670ab6c78b4e0b6466fa Mon Sep 17 00:00:00 2001 From: Diego Barrios Romero Date: Mon, 29 Oct 2018 18:24:20 +0100 Subject: [PATCH] Add functions to enable/disable the 32kHz output --- src/ds323x/configuration.rs | 22 ++++++++++++++++++++++ src/lib.rs | 1 + tests/common/mod.rs | 1 + tests/configuration.rs | 2 ++ 4 files changed, 26 insertions(+) diff --git a/src/ds323x/configuration.rs b/src/ds323x/configuration.rs index 8d53048..d337726 100644 --- a/src/ds323x/configuration.rs +++ b/src/ds323x/configuration.rs @@ -29,4 +29,26 @@ where } Ok(()) } + + /// Enable the 32kHz output. + /// + /// (Does not alter the device register if already enabled). + pub fn enable_32khz_output(&mut self) -> Result<(), Error> { + let control = self.iface.read_register(Register::STATUS)?; + if (control & BitFlags::EN32KHZ) == 0 { + self.iface.write_register(Register::STATUS, control | BitFlags::EN32KHZ)?; + } + Ok(()) + } + + /// Disable the 32kHz output. + /// + /// (Does not alter the device register if already disabled). + pub fn disable_32khz_output(&mut self) -> Result<(), Error> { + let control = self.iface.read_register(Register::STATUS)?; + if (control & BitFlags::EN32KHZ) != 0 { + self.iface.write_register(Register::STATUS, control & !BitFlags::EN32KHZ)?; + } + Ok(()) + } } diff --git a/src/lib.rs b/src/lib.rs index 70e186a..24d4cc3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -296,6 +296,7 @@ impl BitFlags { const CENTURY : u8 = 0b1000_0000; const EOSC : u8 = 0b1000_0000; const BUSY : u8 = 0b0000_0100; + const EN32KHZ : u8 = 0b0000_1000; const OSC_STOP : u8 = 0b1000_0000; } diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 3efd4da..b06f2ea 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -26,6 +26,7 @@ pub struct BitFlags; impl BitFlags { pub const EOSC : u8 = 0b1000_0000; pub const BUSY : u8 = 0b0000_0100; + pub const EN32KHZ : u8 = 0b0000_1000; pub const OSC_STOP : u8 = 0b1000_0000; } diff --git a/tests/configuration.rs b/tests/configuration.rs index afc59e2..35da152 100644 --- a/tests/configuration.rs +++ b/tests/configuration.rs @@ -39,5 +39,7 @@ macro_rules! change_if_necessary_test { change_if_necessary_test!(enable, enable, CONTROL, 0xFF & !BF::EOSC, 0xFF); change_if_necessary_test!(disable, disable, CONTROL, 0xFF, 0xFF & !BF::EOSC); +change_if_necessary_test!(en_32khz_out, enable_32khz_output, STATUS, 0xFF, 0xFF & !BF::EN32KHZ); +change_if_necessary_test!(dis_32khz_out, disable_32khz_output, STATUS, 0xFF & !BF::EN32KHZ, 0xFF); change_if_necessary_test!(clr_stop, clear_has_been_stopped_flag, STATUS, 0xFF & !BF::OSC_STOP, 0xFF);