From 0ad4a4e585de9a125174c56d94e86353f61b6150 Mon Sep 17 00:00:00 2001 From: Diego Barrios Romero Date: Mon, 29 Oct 2018 18:16:23 +0100 Subject: [PATCH] Add support for reading busy status --- src/ds323x/mod.rs | 1 + src/ds323x/status.rs | 16 ++++++++++++++++ src/lib.rs | 2 ++ tests/common/mod.rs | 2 ++ tests/status.rs | 12 ++++++++++++ 5 files changed, 33 insertions(+) create mode 100644 src/ds323x/status.rs create mode 100644 tests/status.rs diff --git a/src/ds323x/mod.rs b/src/ds323x/mod.rs index 4a7a4bb..28ac75c 100644 --- a/src/ds323x/mod.rs +++ b/src/ds323x/mod.rs @@ -1,3 +1,4 @@ mod configuration; +mod status; mod datetime; pub use self::datetime::{ Hours, DateTime }; diff --git a/src/ds323x/status.rs b/src/ds323x/status.rs new file mode 100644 index 0000000..4f9a73e --- /dev/null +++ b/src/ds323x/status.rs @@ -0,0 +1,16 @@ +//! Device configuration + +extern crate embedded_hal as hal; +use super::super::{ Ds323x, Register, BitFlags, Error }; +use interface::{ ReadData, WriteData }; + +impl Ds323x +where + DI: ReadData + WriteData +{ + /// Read busy status. + pub fn is_busy(&mut self) -> Result> { + let status = self.iface.read_register(Register::STATUS)?; + Ok((status & BitFlags::BUSY) != 0) + } +} diff --git a/src/lib.rs b/src/lib.rs index 2a48c29..a43ee01 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -285,6 +285,7 @@ impl Register { const MONTH : u8 = 0x05; const YEAR : u8 = 0x06; const CONTROL : u8 = 0x0E; + const STATUS : u8 = 0x0F; } struct BitFlags; @@ -294,6 +295,7 @@ impl BitFlags { const AM_PM : u8 = 0b0010_0000; const CENTURY : u8 = 0b1000_0000; const EOSC : u8 = 0b1000_0000; + const BUSY : u8 = 0b0000_0100; } const DEVICE_ADDRESS: u8 = 0b110_1000; diff --git a/tests/common/mod.rs b/tests/common/mod.rs index cca98d7..9911e8e 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -17,6 +17,7 @@ impl Register { pub const DOM : u8 = 0x04; pub const MONTH : u8 = 0x05; pub const CONTROL : u8 = 0x0E; + pub const STATUS : u8 = 0x0F; } pub struct BitFlags; @@ -24,6 +25,7 @@ pub struct BitFlags; #[allow(unused)] impl BitFlags { pub const EOSC : u8 = 0b1000_0000; + pub const BUSY : u8 = 0b0000_0100; } pub struct DummyOutputPin; diff --git a/tests/status.rs b/tests/status.rs new file mode 100644 index 0000000..7652c50 --- /dev/null +++ b/tests/status.rs @@ -0,0 +1,12 @@ +#[deny(warnings)] + +extern crate embedded_hal_mock as hal; +use hal::i2c::Transaction as I2cTrans; +use hal::spi::Transaction as SpiTrans; +mod common; +use common::{ DEVICE_ADDRESS as DEV_ADDR, Register, new_ds3231, + new_ds3232, new_ds3234, destroy_ds3231, destroy_ds3232, + destroy_ds3234, BitFlags as BF }; + +get_param_test!(is_busy, is_busy, STATUS, true, 0xFF); +get_param_test!(is_not_busy, is_busy, STATUS, false, 0xFF & !BF::BUSY); \ No newline at end of file