diff options
author | Diego Barrios Romero <eldruin@gmail.com> | 2018-11-07 20:19:06 +0100 |
---|---|---|
committer | Diego Barrios Romero <eldruin@gmail.com> | 2018-11-07 20:19:06 +0100 |
commit | 28b16cc364cc4f4112aca2195df389ea6f007048 (patch) | |
tree | aa14b2c5d06ee56acea022dfdbe67a6af7ab901c /src/devices | |
parent | a502e4c40952777f0ac5f1fc759fe4f669d8500e (diff) | |
download | ads1x1x-async-28b16cc364cc4f4112aca2195df389ea6f007048.tar.gz ads1x1x-async-28b16cc364cc4f4112aca2195df389ea6f007048.tar.xz ads1x1x-async-28b16cc364cc4f4112aca2195df389ea6f007048.zip |
Convert between modes through transformation of the struct
Diffstat (limited to 'src/devices')
-rw-r--r-- | src/devices/ads1013.rs | 28 | ||||
-rw-r--r-- | src/devices/construction/i2c.rs | 41 | ||||
-rw-r--r-- | src/devices/construction/mod.rs | 3 | ||||
-rw-r--r-- | src/devices/ic.rs | 22 | ||||
-rw-r--r-- | src/devices/mod.rs | 23 |
5 files changed, 71 insertions, 46 deletions
diff --git a/src/devices/ads1013.rs b/src/devices/ads1013.rs deleted file mode 100644 index b4628b5..0000000 --- a/src/devices/ads1013.rs +++ /dev/null @@ -1,28 +0,0 @@ -//! Functions exclusive of ADS1013 - -extern crate embedded_hal as hal; -use hal::blocking; -use core::marker::PhantomData; -use { Ads1x1x, DEVICE_BASE_ADDRESS, SlaveAddr, ic }; -use interface::I2cInterface; - -impl<I2C, E> Ads1x1x<I2cInterface<I2C>, ic::ADS1013> -where - I2C: blocking::i2c::Write<Error = E> + blocking::i2c::WriteRead<Error = E> -{ - /// Create a new instance of the ADS1013 device. - pub fn new_ads1013(i2c: I2C, address: SlaveAddr) -> Self { - Ads1x1x { - iface: I2cInterface { - i2c, - address: address.addr(DEVICE_BASE_ADDRESS) - }, - _ic: PhantomData - } - } - - /// Destroy driver instance, return I²C bus instance. - pub fn destroy_ads1013(self) -> I2C { - self.iface.i2c - } -} diff --git a/src/devices/construction/i2c.rs b/src/devices/construction/i2c.rs new file mode 100644 index 0000000..900a5fe --- /dev/null +++ b/src/devices/construction/i2c.rs @@ -0,0 +1,41 @@ +//! Functions exclusive of ADS1013 + +extern crate embedded_hal as hal; +use hal::blocking; +use core::marker::PhantomData; +use { Ads1x1x, DEVICE_BASE_ADDRESS, SlaveAddr, ic, Config, mode }; +use interface::I2cInterface; + + +macro_rules! impl_new_destroy { + ( $IC:ident, $create:ident, $destroy:ident ) => { + impl<I2C, E> Ads1x1x<I2cInterface<I2C>, ic::$IC, mode::OneShot> + where + I2C: blocking::i2c::Write<Error = E> + blocking::i2c::WriteRead<Error = E> + { + /// Create a new instance of the device in OneShot mode. + pub fn $create(i2c: I2C, address: SlaveAddr) -> Self { + Ads1x1x { + iface: I2cInterface { + i2c, + address: address.addr(DEVICE_BASE_ADDRESS) + }, + config: Config::default(), + a_conversion_was_started: false, + _ic: PhantomData, + _mode: PhantomData + } + } + } + impl<I2C, MODE> Ads1x1x<I2cInterface<I2C>, ic::$IC, MODE> + { + /// Destroy driver instance, return I²C bus instance. + pub fn $destroy(self) -> I2C { + self.iface.i2c + } + } + } +} + +impl_new_destroy!(Ads1013, new_ads1013, destroy_ads1013); +impl_new_destroy!(Ads1113, new_ads1113, destroy_ads1113);
\ No newline at end of file diff --git a/src/devices/construction/mod.rs b/src/devices/construction/mod.rs new file mode 100644 index 0000000..0873d88 --- /dev/null +++ b/src/devices/construction/mod.rs @@ -0,0 +1,3 @@ +//! Construction / destruction functions + +mod i2c; diff --git a/src/devices/ic.rs b/src/devices/ic.rs new file mode 100644 index 0000000..9795de6 --- /dev/null +++ b/src/devices/ic.rs @@ -0,0 +1,22 @@ +/// ICs +#[derive(PartialEq)] +pub enum ResolutionBits { + _12, + _16 +} + +pub trait Resolution : super::private::Sealed { + const BITS : ResolutionBits; +} + +/// ADS1013 IC marker +pub struct Ads1013(()); +impl Resolution for Ads1013 { + const BITS: ResolutionBits = ResolutionBits::_12; +} + +/// ADS1113 IC marker +pub struct Ads1113(()); +impl Resolution for Ads1113 { + const BITS: ResolutionBits = ResolutionBits::_16; +}
\ No newline at end of file diff --git a/src/devices/mod.rs b/src/devices/mod.rs index 529db04..e35196c 100644 --- a/src/devices/mod.rs +++ b/src/devices/mod.rs @@ -1,19 +1,6 @@ -/// IC markers -pub mod ic { - /// ADS1013 IC marker - pub struct ADS1013; - /// ADS1014 IC marker - pub struct ADS1014; - /// ADS1015 IC marker - pub struct ADS1015; - /// ADS1113 IC marker - pub struct ADS1113; - /// ADS1114 IC marker - pub struct ADS1114; - /// ADS1115 IC marker - pub struct ADS1115; - /// ADS1118 IC marker - pub struct ADS1118; -} +use super::private; -mod ads1013; +#[doc(hidden)] +pub mod ic; +mod ads1x1x; +mod construction; |