Browse Source

Minor refactoring work

Kevin Lee 2 years ago
parent
commit
ba6ce2b596
1 changed files with 64 additions and 50 deletions
  1. 64 50
      Nixie_Firmware_Rust/src/ds3231.rs

+ 64 - 50
Nixie_Firmware_Rust/src/ds3231.rs

@@ -81,13 +81,13 @@ register_bitfields![
 
 register_structs! {
     Ds3231Registers {
-        (0x00 => t_second: InMemoryRegister<u8, T_SECOND::Register>),
-        (0x01 => t_minute: InMemoryRegister<u8, T_MINUTE::Register>),
-        (0x02 => t_hour: InMemoryRegister<u8, T_HOUR::Register>),
-        (0x03 => t_weekday: InMemoryRegister<u8, T_DAY::Register>),
-        (0x04 => t_day: InMemoryRegister<u8, T_DATE::Register>),
-        (0x05 => t_month: InMemoryRegister<u8, T_MONTH::Register>),
-        (0x06 => t_year: InMemoryRegister<u8, T_YEAR::Register>),
+        (0x00 => second: InMemoryRegister<u8, T_SECOND::Register>),
+        (0x01 => minute: InMemoryRegister<u8, T_MINUTE::Register>),
+        (0x02 => hour: InMemoryRegister<u8, T_HOUR::Register>),
+        (0x03 => weekday: InMemoryRegister<u8, T_DAY::Register>),
+        (0x04 => day: InMemoryRegister<u8, T_DATE::Register>),
+        (0x05 => month: InMemoryRegister<u8, T_MONTH::Register>),
+        (0x06 => year: InMemoryRegister<u8, T_YEAR::Register>),
         (0x07 => a1_second: InMemoryRegister<u8, A_SECOND::Register>),
         (0x08 => a1_minute: InMemoryRegister<u8, A_MINUTE::Register>),
         (0x09 => a1_hour: InMemoryRegister<u8, A_HOUR::Register>),
@@ -105,13 +105,13 @@ register_structs! {
 }
 
 pub enum Weekday {
-    SUNDAY = 0,
-    MONDAY = 1,
-    TUESDAY = 2,
-    WEDNESDAY = 3,
-    THURSDAY = 4,
-    FRIDAY = 5,
-    SATURDAY = 6,
+    Sunday = 0,
+    Monday = 1,
+    Tuesday = 2,
+    Wednesday = 3,
+    Thursday = 4,
+    Friday = 5,
+    Saturday = 6,
 }
 
 impl Ds3231Registers {
@@ -129,6 +129,20 @@ impl Ds3231Registers {
     }
 }
 
+fn init(address: u8, i2c: &mut impl _embedded_hal_blocking_i2c_Write) {
+
+}
+
+#[inline]
+fn bcd_to_decimal(value: u8) -> u8 {
+    ((value >> 4) * 10) + (value & 0xF)
+}
+
+#[inline]
+fn decimal_to_bcd(value: u8) -> u8 {
+    ((value / 10) << 4) | (value % 10)
+}
+
 pub fn in_dst(weekday: Weekday, day: u32, month: u32, hour_24: u32) -> bool {
     let prev_sunday: i32 = day as i32 - weekday as i32;
     match month {
@@ -156,49 +170,49 @@ mod test {
     #[test]
     fn dst_test() {
         // 2020 - begins Mar 8th @ 2AM (Sunday), ends Nov 1st @ 2AM (Sunday)
-        assert!(in_dst(Weekday::SUNDAY, 8, 3, 1) == false);
-        assert!(in_dst(Weekday::SUNDAY, 8, 3, 2) == true);
-        assert!(in_dst(Weekday::SUNDAY, 8, 3, 3) == true);
-        assert!(in_dst(Weekday::SUNDAY, 1, 11, 1) == true);
-        assert!(in_dst(Weekday::SUNDAY, 1, 11, 2) == false);
-        assert!(in_dst(Weekday::SUNDAY, 1, 11, 3) == false);
+        assert!(in_dst(Weekday::Sunday, 8, 3, 1) == false);
+        assert!(in_dst(Weekday::Sunday, 8, 3, 2) == true);
+        assert!(in_dst(Weekday::Sunday, 8, 3, 3) == true);
+        assert!(in_dst(Weekday::Sunday, 1, 11, 1) == true);
+        assert!(in_dst(Weekday::Sunday, 1, 11, 2) == false);
+        assert!(in_dst(Weekday::Sunday, 1, 11, 3) == false);
 
         // 2021 - begins Mar 14th @ 2AM (Sunday), ends Nov 7th @ 2AM (Sunday)
-        assert!(in_dst(Weekday::SUNDAY, 14, 3, 1) == false);
-        assert!(in_dst(Weekday::SUNDAY, 14, 3, 2) == true);
-        assert!(in_dst(Weekday::SUNDAY, 14, 3, 3) == true);
-        assert!(in_dst(Weekday::SUNDAY, 7, 11, 1) == true);
-        assert!(in_dst(Weekday::SUNDAY, 7, 11, 2) == false);
-        assert!(in_dst(Weekday::SUNDAY, 7, 11, 3) == false);
+        assert!(in_dst(Weekday::Sunday, 14, 3, 1) == false);
+        assert!(in_dst(Weekday::Sunday, 14, 3, 2) == true);
+        assert!(in_dst(Weekday::Sunday, 14, 3, 3) == true);
+        assert!(in_dst(Weekday::Sunday, 7, 11, 1) == true);
+        assert!(in_dst(Weekday::Sunday, 7, 11, 2) == false);
+        assert!(in_dst(Weekday::Sunday, 7, 11, 3) == false);
 
         // 2022 - begins Mar 13th @ 2AM (Sunday), ends Nov 6th @ 2AM (Sunday)
-        assert!(in_dst(Weekday::SUNDAY, 13, 3, 1) == false);
-        assert!(in_dst(Weekday::SUNDAY, 13, 3, 2) == true);
-        assert!(in_dst(Weekday::SUNDAY, 13, 3, 3) == true);
-        assert!(in_dst(Weekday::SUNDAY, 6, 11, 1) == true);
-        assert!(in_dst(Weekday::SUNDAY, 6, 11, 2) == false);
-        assert!(in_dst(Weekday::SUNDAY, 6, 11, 3) == false);
+        assert!(in_dst(Weekday::Sunday, 13, 3, 1) == false);
+        assert!(in_dst(Weekday::Sunday, 13, 3, 2) == true);
+        assert!(in_dst(Weekday::Sunday, 13, 3, 3) == true);
+        assert!(in_dst(Weekday::Sunday, 6, 11, 1) == true);
+        assert!(in_dst(Weekday::Sunday, 6, 11, 2) == false);
+        assert!(in_dst(Weekday::Sunday, 6, 11, 3) == false);
 
         // 2023 - begins Mar 12th @ 2AM (Sunday), ends Nov 5th @ 2AM (Sunday)
-        assert!(in_dst(Weekday::SUNDAY, 12, 3, 1) == false);
-        assert!(in_dst(Weekday::SUNDAY, 12, 3, 2) == true);
-        assert!(in_dst(Weekday::SUNDAY, 12, 3, 3) == true);
-        assert!(in_dst(Weekday::SUNDAY, 5, 11, 1) == true);
-        assert!(in_dst(Weekday::SUNDAY, 5, 11, 2) == false);
-        assert!(in_dst(Weekday::SUNDAY, 5, 11, 3) == false);
+        assert!(in_dst(Weekday::Sunday, 12, 3, 1) == false);
+        assert!(in_dst(Weekday::Sunday, 12, 3, 2) == true);
+        assert!(in_dst(Weekday::Sunday, 12, 3, 3) == true);
+        assert!(in_dst(Weekday::Sunday, 5, 11, 1) == true);
+        assert!(in_dst(Weekday::Sunday, 5, 11, 2) == false);
+        assert!(in_dst(Weekday::Sunday, 5, 11, 3) == false);
 
         // Sanity check other dates in 2021
-        assert!(in_dst(Weekday::FRIDAY, 1, 1, 0) == false);
-        assert!(in_dst(Weekday::MONDAY, 1, 2, 0) == false);
-        assert!(in_dst(Weekday::MONDAY, 1, 3, 0) == false);
-        assert!(in_dst(Weekday::THURSDAY, 1, 4, 0) == true);
-        assert!(in_dst(Weekday::SATURDAY, 1, 5, 0) == true);
-        assert!(in_dst(Weekday::TUESDAY, 1, 6, 0) == true);
-        assert!(in_dst(Weekday::THURSDAY, 1, 7, 0) == true);
-        assert!(in_dst(Weekday::SUNDAY, 1, 8, 0) == true);
-        assert!(in_dst(Weekday::WEDNESDAY, 1, 9, 0) == true);
-        assert!(in_dst(Weekday::FRIDAY, 1, 10, 0) == true);
-        assert!(in_dst(Weekday::MONDAY, 1, 11, 0) == true);
-        assert!(in_dst(Weekday::WEDNESDAY, 1, 12, 0) == false);
+        assert!(in_dst(Weekday::Friday, 1, 1, 0) == false);
+        assert!(in_dst(Weekday::Monday, 1, 2, 0) == false);
+        assert!(in_dst(Weekday::Monday, 1, 3, 0) == false);
+        assert!(in_dst(Weekday::Thursday, 1, 4, 0) == true);
+        assert!(in_dst(Weekday::Saturday, 1, 5, 0) == true);
+        assert!(in_dst(Weekday::Tuesday, 1, 6, 0) == true);
+        assert!(in_dst(Weekday::Thursday, 1, 7, 0) == true);
+        assert!(in_dst(Weekday::Sunday, 1, 8, 0) == true);
+        assert!(in_dst(Weekday::Wednesday, 1, 9, 0) == true);
+        assert!(in_dst(Weekday::Friday, 1, 10, 0) == true);
+        assert!(in_dst(Weekday::Monday, 1, 11, 0) == true);
+        assert!(in_dst(Weekday::Wednesday, 1, 12, 0) == false);
     }
 }