1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#![deny(unsafe_code, missing_docs)]
#![no_std]
mod datetime;
pub mod interface;
use embedded_hal::blocking::i2c::{Write, WriteRead};
use interface::I2cInterface;
const DEVICE_ADDRESS: u8 = 0x32;
#[derive(Debug)]
pub enum Error<E> {
I2c(E),
InvalidInputData,
}
mod register {
pub const SECONDS: u8 = 0x00;
pub const MINUTES: u8 = 0x01;
pub const HOURS: u8 = 0x02;
pub const DOW: u8 = 0x03;
pub const DOM: u8 = 0x04;
pub const MONTH: u8 = 0x05;
pub const YEAR: u8 = 0x06;
pub const CONTROL_1: u8 = 0x0F;
pub const CONTROL_2: u8 = 0x10;
pub const TIME_TRIMMING: u8 = 0x12;
}
mod flag {
pub const H12_H24: u8 = 0b1000_0000;
pub const AM_PM: u8 = 0b0010_0000;
pub const WRITE_RTC1: u8 = 0b1000_0000;
pub const WRITE_RTC2: u8 = 0b0000_0100;
pub const WRITE_RTC3: u8 = 0b1000_0000;
}
#[derive(Debug, Default)]
pub struct Sd2405al<I2C> {
iface: I2cInterface<I2C>,
}
impl<I2C, E> Sd2405al<I2C>
where
I2C: Write<Error = E> + WriteRead<Error = E>,
{
pub fn new(i2c: I2C) -> Self {
Sd2405al {
iface: I2cInterface { i2c },
}
}
pub fn destroy(self) -> I2C {
self.iface.i2c
}
}
mod private {
use super::interface;
pub trait Sealed {}
impl<I2C> Sealed for interface::I2cInterface<I2C> {}
}
pub mod prelude {
pub use crate::Sd2405al;
pub use rtcc::{Datelike, Hours, NaiveDate, NaiveDateTime, NaiveTime, Rtcc, Timelike};
}