mirror of https://github.com/eldruin/ds323x-rs
Move constructors/destructors to the specific modules
parent
8734afa03f
commit
0f866f8145
|
@ -0,0 +1,30 @@
|
||||||
|
//! Functions exclusive of DS3231
|
||||||
|
|
||||||
|
extern crate embedded_hal as hal;
|
||||||
|
use hal::blocking;
|
||||||
|
use core::marker::PhantomData;
|
||||||
|
use super::{ Ds323x, BitFlags, ic, CONTROL_POR_VALUE };
|
||||||
|
use interface::I2cInterface;
|
||||||
|
|
||||||
|
impl<I2C, E> Ds323x<I2cInterface<I2C>, ic::DS3231>
|
||||||
|
where
|
||||||
|
I2C: blocking::i2c::Write<Error = E> + blocking::i2c::WriteRead<Error = E>
|
||||||
|
{
|
||||||
|
/// Create a new instance of the DS3231 device.
|
||||||
|
pub fn new_ds3231(i2c: I2C) -> Self {
|
||||||
|
const STATUS_POR_VALUE : u8 = BitFlags::OSC_STOP | BitFlags::EN32KHZ;
|
||||||
|
Ds323x {
|
||||||
|
iface: I2cInterface {
|
||||||
|
i2c,
|
||||||
|
},
|
||||||
|
control: CONTROL_POR_VALUE,
|
||||||
|
status: STATUS_POR_VALUE,
|
||||||
|
_ic: PhantomData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Destroy driver instance, return I²C bus instance.
|
||||||
|
pub fn destroy_ds3231(self) -> I2C {
|
||||||
|
self.iface.i2c
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,13 +2,33 @@
|
||||||
|
|
||||||
extern crate embedded_hal as hal;
|
extern crate embedded_hal as hal;
|
||||||
use hal::blocking;
|
use hal::blocking;
|
||||||
use super::{ Ds323x, TempConvRate, BitFlags, Error, ic };
|
use core::marker::PhantomData;
|
||||||
|
use super::{ Ds323x, TempConvRate, BitFlags, Error, ic, CONTROL_POR_VALUE };
|
||||||
use interface::I2cInterface;
|
use interface::I2cInterface;
|
||||||
|
|
||||||
|
|
||||||
impl<I2C, E> Ds323x<I2cInterface<I2C>, ic::DS3232>
|
impl<I2C, E> Ds323x<I2cInterface<I2C>, ic::DS3232>
|
||||||
where
|
where
|
||||||
I2C: blocking::i2c::Write<Error = E> + blocking::i2c::WriteRead<Error = E>
|
I2C: blocking::i2c::Write<Error = E> + blocking::i2c::WriteRead<Error = E>
|
||||||
{
|
{
|
||||||
|
/// Create a new instance of the DS3232 device.
|
||||||
|
pub fn new_ds3232(i2c: I2C) -> Self {
|
||||||
|
const STATUS_POR_VALUE : u8 = BitFlags::OSC_STOP | BitFlags::BB32KHZ | BitFlags::EN32KHZ;
|
||||||
|
Ds323x {
|
||||||
|
iface: I2cInterface {
|
||||||
|
i2c,
|
||||||
|
},
|
||||||
|
control: CONTROL_POR_VALUE,
|
||||||
|
status: STATUS_POR_VALUE,
|
||||||
|
_ic: PhantomData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Destroy driver instance, return I²C bus instance.
|
||||||
|
pub fn destroy_ds3232(self) -> I2C {
|
||||||
|
self.iface.i2c
|
||||||
|
}
|
||||||
|
|
||||||
/// Enable the 32kHz output when battery-powered.
|
/// Enable the 32kHz output when battery-powered.
|
||||||
///
|
///
|
||||||
/// Additionally, the 32kHz output needs to be enabled. See
|
/// Additionally, the 32kHz output needs to be enabled. See
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
extern crate embedded_hal as hal;
|
extern crate embedded_hal as hal;
|
||||||
use hal::blocking;
|
use hal::blocking;
|
||||||
use super::{ Ds323x, TempConvRate, BitFlags, Error, ic };
|
use core::marker::PhantomData;
|
||||||
|
use super::{ Ds323x, TempConvRate, BitFlags, Error, ic, CONTROL_POR_VALUE };
|
||||||
use interface::SpiInterface;
|
use interface::SpiInterface;
|
||||||
|
|
||||||
impl<SPI, CS, E> Ds323x<SpiInterface<SPI, CS>, ic::DS3234>
|
impl<SPI, CS, E> Ds323x<SpiInterface<SPI, CS>, ic::DS3234>
|
||||||
|
@ -10,6 +11,25 @@ where
|
||||||
SPI: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>,
|
SPI: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>,
|
||||||
CS: hal::digital::OutputPin
|
CS: hal::digital::OutputPin
|
||||||
{
|
{
|
||||||
|
/// Create a new instance.
|
||||||
|
pub fn new_ds3234(spi: SPI, chip_select: CS) -> Self {
|
||||||
|
const STATUS_POR_VALUE : u8 = BitFlags::OSC_STOP | BitFlags::BB32KHZ | BitFlags::EN32KHZ;
|
||||||
|
Ds323x {
|
||||||
|
iface: SpiInterface {
|
||||||
|
spi,
|
||||||
|
cs: chip_select
|
||||||
|
},
|
||||||
|
control: CONTROL_POR_VALUE,
|
||||||
|
status: STATUS_POR_VALUE,
|
||||||
|
_ic: PhantomData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Destroy driver instance, return SPI bus instance and CS output pin.
|
||||||
|
pub fn destroy_ds3234(self) -> (SPI, CS) {
|
||||||
|
(self.iface.spi, self.iface.cs)
|
||||||
|
}
|
||||||
|
|
||||||
/// Enable the 32kHz output when battery-powered.
|
/// Enable the 32kHz output when battery-powered.
|
||||||
///
|
///
|
||||||
/// Additionally, the 32kHz output needs to be enabled. See
|
/// Additionally, the 32kHz output needs to be enabled. See
|
||||||
|
|
76
src/lib.rs
76
src/lib.rs
|
@ -385,7 +385,6 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
|
|
||||||
extern crate embedded_hal as hal;
|
extern crate embedded_hal as hal;
|
||||||
use hal::blocking;
|
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
/// All possible errors in this crate
|
/// All possible errors in this crate
|
||||||
|
@ -475,8 +474,6 @@ pub mod ic {
|
||||||
/// DS3234 IC marker
|
/// DS3234 IC marker
|
||||||
pub struct DS3234;
|
pub struct DS3234;
|
||||||
}
|
}
|
||||||
pub mod interface;
|
|
||||||
use interface::{ I2cInterface, SpiInterface };
|
|
||||||
|
|
||||||
/// DS3231, DS3232 and DS3234 RTC driver
|
/// DS3231, DS3232 and DS3234 RTC driver
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
|
@ -487,78 +484,9 @@ pub struct Ds323x<DI, IC> {
|
||||||
_ic: PhantomData<IC>
|
_ic: PhantomData<IC>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<I2C, E> Ds323x<I2cInterface<I2C>, ic::DS3231>
|
pub mod interface;
|
||||||
where
|
|
||||||
I2C: blocking::i2c::Write<Error = E> + blocking::i2c::WriteRead<Error = E>
|
|
||||||
{
|
|
||||||
/// Create a new instance of the DS3231 device.
|
|
||||||
pub fn new_ds3231(i2c: I2C) -> Self {
|
|
||||||
const STATUS_POR_VALUE : u8 = BitFlags::OSC_STOP | BitFlags::EN32KHZ;
|
|
||||||
Ds323x {
|
|
||||||
iface: I2cInterface {
|
|
||||||
i2c,
|
|
||||||
},
|
|
||||||
control: CONTROL_POR_VALUE,
|
|
||||||
status: STATUS_POR_VALUE,
|
|
||||||
_ic: PhantomData
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destroy driver instance, return I²C bus instance.
|
|
||||||
pub fn destroy_ds3231(self) -> I2C {
|
|
||||||
self.iface.i2c
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<I2C, E> Ds323x<I2cInterface<I2C>, ic::DS3232>
|
|
||||||
where
|
|
||||||
I2C: blocking::i2c::Write<Error = E> + blocking::i2c::WriteRead<Error = E>
|
|
||||||
{
|
|
||||||
/// Create a new instance of the DS3232 device.
|
|
||||||
pub fn new_ds3232(i2c: I2C) -> Self {
|
|
||||||
const STATUS_POR_VALUE : u8 = BitFlags::OSC_STOP | BitFlags::BB32KHZ | BitFlags::EN32KHZ;
|
|
||||||
Ds323x {
|
|
||||||
iface: I2cInterface {
|
|
||||||
i2c,
|
|
||||||
},
|
|
||||||
control: CONTROL_POR_VALUE,
|
|
||||||
status: STATUS_POR_VALUE,
|
|
||||||
_ic: PhantomData
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destroy driver instance, return I²C bus instance.
|
|
||||||
pub fn destroy_ds3232(self) -> I2C {
|
|
||||||
self.iface.i2c
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<SPI, CS, E> Ds323x<SpiInterface<SPI, CS>, ic::DS3234>
|
|
||||||
where
|
|
||||||
SPI: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>,
|
|
||||||
CS: hal::digital::OutputPin
|
|
||||||
{
|
|
||||||
/// Create a new instance.
|
|
||||||
pub fn new_ds3234(spi: SPI, chip_select: CS) -> Self {
|
|
||||||
const STATUS_POR_VALUE : u8 = BitFlags::OSC_STOP | BitFlags::BB32KHZ | BitFlags::EN32KHZ;
|
|
||||||
Ds323x {
|
|
||||||
iface: SpiInterface {
|
|
||||||
spi,
|
|
||||||
cs: chip_select
|
|
||||||
},
|
|
||||||
control: CONTROL_POR_VALUE,
|
|
||||||
status: STATUS_POR_VALUE,
|
|
||||||
_ic: PhantomData
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Destroy driver instance, return SPI bus instance and CS output pin.
|
|
||||||
pub fn destroy_ds3234(self) -> (SPI, CS) {
|
|
||||||
(self.iface.spi, self.iface.cs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mod ds323x;
|
mod ds323x;
|
||||||
pub use ds323x::{ Hours, DateTime };
|
pub use ds323x::{ Hours, DateTime };
|
||||||
|
mod ds3231;
|
||||||
mod ds3232;
|
mod ds3232;
|
||||||
mod ds3234;
|
mod ds3234;
|
||||||
|
|
Loading…
Reference in New Issue