2019-10-24 15:24:17 +00:00
|
|
|
use chrono::prelude::*;
|
|
|
|
use cmos::{CMOSCenturyHandler, CMOS};
|
|
|
|
use core::convert::TryInto;
|
|
|
|
use lazy_static::lazy_static;
|
|
|
|
use spin::Mutex;
|
|
|
|
|
|
|
|
lazy_static! {
|
|
|
|
static ref CLOCK: Mutex<CMOS> = Mutex::new(unsafe { CMOS::new() });
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn current_time() -> DateTime<Utc> {
|
2020-03-26 15:09:23 +00:00
|
|
|
let rtc = CLOCK.lock().read_rtc(CMOSCenturyHandler::CurrentYear(2000));
|
2019-10-24 15:24:17 +00:00
|
|
|
return Utc
|
|
|
|
.ymd(
|
|
|
|
rtc.year.try_into().unwrap(),
|
|
|
|
rtc.month.into(),
|
|
|
|
rtc.day.into(),
|
|
|
|
)
|
|
|
|
.and_hms(rtc.hour.into(), rtc.minute.into(), rtc.second.into());
|
|
|
|
}
|
2019-10-24 15:34:10 +00:00
|
|
|
|
|
|
|
#[cfg(test)]
|
2020-03-26 15:06:17 +00:00
|
|
|
use crate::{println, serial_print, serial_println};
|
2019-10-24 15:34:10 +00:00
|
|
|
|
|
|
|
#[test_case]
|
|
|
|
fn test_current_time() {
|
2020-03-26 15:06:17 +00:00
|
|
|
serial_print!("current time... ");
|
|
|
|
let now = current_time();
|
|
|
|
println!("{:?}", now);
|
2019-10-24 15:34:10 +00:00
|
|
|
|
2020-03-26 15:06:17 +00:00
|
|
|
assert_ne!(now.month(), 0);
|
2019-10-24 15:34:10 +00:00
|
|
|
|
2020-03-26 15:06:17 +00:00
|
|
|
serial_println!("[ok]");
|
2019-10-24 15:34:10 +00:00
|
|
|
}
|