decode_datetime_logfile/
decode_datetime_logfile.rs1use radio_datetime_utils::{DST_ANNOUNCED, DST_PROCESSED, DST_SUMMER};
5
6use msf60_utils::MSFUtils;
7
8fn parse_dst(dst: Option<u8>) -> String {
10 if dst.is_none() {
11 return String::from("*");
12 }
13 let mut res = String::from("");
14 let s_dst = dst.unwrap();
15 if s_dst & DST_ANNOUNCED != 0 {
16 res += "announced ";
17 }
18 if s_dst & DST_PROCESSED != 0 {
19 res += "processed ";
20 }
21 if s_dst & DST_SUMMER != 0 {
22 res += "summer";
23 }
24 res
25}
26
27fn str_weekday(day: Option<u8>) -> String {
28 String::from(match day {
29 Some(0) => "Sunday",
30 Some(1) => "Monday",
31 Some(2) => "Tuesday",
32 Some(3) => "Wednesday",
33 Some(4) => "Thursday",
34 Some(5) => "Friday",
35 Some(6) => "Saturday",
36 Some(7) => "?",
37 None => "None",
38 _ => "<panic>",
39 })
40}
41
42fn main() {
43 let mut msf = MSFUtils::default();
44
45 const MSG: &str = "4 00000000.22000000 0010.0100 0.0100 01.0010 101 10.0000 000.0010 01313330";
46 for m in MSG.chars() {
47 match m {
48 '0' => {
49 msf.set_current_bit_a(Some(false));
50 msf.set_current_bit_b(Some(false));
51 }
52 '1' => {
53 msf.set_current_bit_a(Some(true));
54 msf.set_current_bit_b(Some(false));
55 }
56 '2' => {
57 msf.set_current_bit_a(Some(false));
58 msf.set_current_bit_b(Some(true));
59 }
60 '3' => {
61 msf.set_current_bit_a(Some(true));
62 msf.set_current_bit_b(Some(true));
63 }
64 '4' => msf.force_past_new_minute(),
65 '_' => {
66 msf.set_current_bit_a(None);
67 msf.set_current_bit_b(None);
68 }
69 _ => continue,
70 }
72 if msf.end_of_minute_marker_present() {
74 msf.decode_time(true, false);
75 let rdt = msf.get_radio_datetime();
76 println!("DUT1={:?}", rdt.get_dut1());
77 println!(
78 "Parities={:?} {:?} {:?} {:?}",
79 msf.get_parity_1(),
80 msf.get_parity_2(),
81 msf.get_parity_3(),
82 msf.get_parity_4()
83 );
84 println!(
85 "Date/time={:?}-{:?}-{:?} {:?}:{:?} {} {}",
86 rdt.get_year(),
87 rdt.get_month(),
88 rdt.get_day(),
89 rdt.get_hour(),
90 rdt.get_minute(),
91 str_weekday(rdt.get_weekday()),
92 parse_dst(rdt.get_dst())
93 );
94 msf.force_new_minute();
95 }
96 if !msf.increase_second() {
97 println!("Bad increase_second at second {}", msf.get_second());
98 }
99 }
100 println!("Before reset: {:#?}", msf);
101 msf.reset();
102 println!("After reset: {:#?}", msf);
103}