summaryrefslogtreecommitdiff
path: root/src/devices/clock.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/clock.rs')
-rw-r--r--src/devices/clock.rs124
1 files changed, 0 insertions, 124 deletions
diff --git a/src/devices/clock.rs b/src/devices/clock.rs
deleted file mode 100644
index 60b1cad..0000000
--- a/src/devices/clock.rs
+++ /dev/null
@@ -1,124 +0,0 @@
-use std::time::{Duration, Instant};
-
-macro_rules! to_ticks { ($dur:expr) => {($dur.as_millis() / 4) as u16}; }
-macro_rules! from_ticks { ($ticks:expr) => {Duration::from_millis(($ticks * 4).into())}; }
-macro_rules! now { () => {
- time::OffsetDateTime::now_local().unwrap_or_else(|_| time::OffsetDateTime::now_utc())};}
-
-/// Create a method to set the instant of a timer.
-macro_rules! generate_set_timer_method {
- ($i:tt) => { mini_paste::item!{
- pub fn [< set_timer_ $i >] (&mut self) {
- let ticks = &mut self. [< timer_ $i >];
- let instant = &mut self. [< timer_ $i _end >];
-
- *instant = Instant::now() + from_ticks!(*ticks);
- }
- }};
-}
-
-/// Create a method to update the value of a timer.
-macro_rules! generate_update_timer_method {
- ($i:tt) => { mini_paste::item!{
- pub fn [< update_timer_ $i >] (&mut self) -> u16 {
- let ticks = &mut self. [< timer_ $i >];
- let instant = &mut self. [< timer_ $i _end >];
-
- if *ticks > 0 {
- *ticks = to_ticks!(instant.duration_since(Instant::now()));
- if *ticks == 0 { self.wake_flag = true; }
- }
- return *ticks;
- }
- }};
-}
-
-pub struct ClockDevice {
- pub wake_flag: bool,
-
- pub program_start: Instant,
- pub uptime: u16,
-
- pub timer_1_end: Instant,
- pub timer_2_end: Instant,
- pub timer_3_end: Instant,
- pub timer_4_end: Instant,
- pub timer_1: u16,
- pub timer_2: u16,
- pub timer_3: u16,
- pub timer_4: u16,
-}
-
-impl ClockDevice {
- pub fn new() -> Self {
- Self {
- wake_flag: false,
-
- program_start: Instant::now(),
- uptime: 0,
-
- timer_1_end: Instant::now(),
- timer_2_end: Instant::now(),
- timer_3_end: Instant::now(),
- timer_4_end: Instant::now(),
- timer_1: 0,
- timer_2: 0,
- timer_3: 0,
- timer_4: 0,
- }
- }
-
- generate_set_timer_method!{1}
- generate_set_timer_method!{2}
- generate_set_timer_method!{3}
- generate_set_timer_method!{4}
-
- generate_update_timer_method!{1}
- generate_update_timer_method!{2}
- generate_update_timer_method!{3}
- generate_update_timer_method!{4}
-
- pub fn update_timers(&mut self) {
- self.update_timer_1();
- self.update_timer_2();
- self.update_timer_3();
- self.update_timer_4();
- }
-
- pub fn update_uptime(&mut self) -> u16 {
- self.uptime = to_ticks!(self.program_start.elapsed());
- return self.uptime;
- }
-
- pub fn year(&self) -> u8 {
- now!().year().saturating_sub(2000).try_into().unwrap_or(u8::MAX)
- }
-
- pub fn month(&self) -> u8 {
- now!().month() as u8 - 1
- }
-
- pub fn day(&self) -> u8 {
- now!().day() as u8 - 1
- }
-
- pub fn hour(&self) -> u8 {
- now!().hour()
- }
-
- pub fn minute(&self) -> u8 {
- now!().minute()
- }
-
- pub fn second(&self) -> u8 {
- now!().second()
- }
-
- pub fn time_to_next_wake(&self) -> Option<Duration> {
- [self.timer_1, self.timer_2, self.timer_3, self.timer_4]
- .iter()
- .filter(|t| **t > 0)
- .min()
- .and_then(|t| Some(from_ticks!(t)))
- }
-}