From c41526b7ec4740eef019814658609ae7fb9190dd Mon Sep 17 00:00:00 2001 From: Diego Barrios Romero Date: Mon, 29 Oct 2018 18:25:16 +0100 Subject: [PATCH] Add function to force a temperature conversion and time compensation --- src/ds323x/configuration.rs | 11 +++++++++++ src/lib.rs | 1 + tests/common/mod.rs | 1 + tests/configuration.rs | 1 + 4 files changed, 14 insertions(+) diff --git a/src/ds323x/configuration.rs b/src/ds323x/configuration.rs index d337726..e60e6e1 100644 --- a/src/ds323x/configuration.rs +++ b/src/ds323x/configuration.rs @@ -30,6 +30,17 @@ where Ok(()) } + /// Force a temperature conversion and time compensation with TXCO algorithm. + /// + /// The *busy* status should be checked before doing this. See [`is_busy()`](#method.is_busy) + pub fn convert_temperature(&mut self) -> Result<(), Error> { + let control = self.iface.read_register(Register::CONTROL)?; + if (control & BitFlags::TEMP_CONV) == 0 { + self.iface.write_register(Register::CONTROL, control | BitFlags::TEMP_CONV)?; + } + Ok(()) + } + /// Enable the 32kHz output. /// /// (Does not alter the device register if already enabled). diff --git a/src/lib.rs b/src/lib.rs index 24d4cc3..7cabac3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -295,6 +295,7 @@ impl BitFlags { const AM_PM : u8 = 0b0010_0000; const CENTURY : u8 = 0b1000_0000; const EOSC : u8 = 0b1000_0000; + const TEMP_CONV : u8 = 0b0010_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 b06f2ea..906d066 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -25,6 +25,7 @@ pub struct BitFlags; #[allow(unused)] impl BitFlags { pub const EOSC : u8 = 0b1000_0000; + pub const TEMP_CONV : u8 = 0b0010_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 35da152..fca25d1 100644 --- a/tests/configuration.rs +++ b/tests/configuration.rs @@ -39,6 +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!(conv_temp, convert_temperature, CONTROL, 0xFF, 0xFF & !BF::TEMP_CONV); 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);