xref: /DragonOS/kernel/src/time/timekeep.rs (revision 9fab312ea9921618629924ab15c28c2d255b21c6)
1 #![allow(dead_code)]
2 
3 use system_error::SystemError;
4 
5 use crate::driver::rtc::interface::rtc_read_time_default;
6 
7 use super::PosixTimeSpec;
8 
9 #[allow(non_camel_case_types)]
10 pub type ktime_t = i64;
11 
12 // @brief 将ktime_t类型转换为纳秒类型
13 #[inline]
14 fn ktime_to_ns(kt: ktime_t) -> i64 {
15     return kt;
16 }
17 
18 /// @brief 从RTC获取当前时间,然后计算时间戳。
19 /// 时间戳为从UTC+0 1970-01-01 00:00到当前UTC+0时间,所经过的纳秒数。
20 /// 注意,由于当前未引入时区,因此本函数默认时区为UTC+8来计算
21 fn ktime_get_real() -> Result<ktime_t, SystemError> {
22     let rtc_time = rtc_read_time_default()?;
23     let time_spec: PosixTimeSpec = rtc_time.into();
24     let r = time_spec.tv_sec * 1_000_000_000 + time_spec.tv_nsec;
25     return Ok(r);
26 }
27 
28 /// @brief 暴露给外部使用的接口,返回一个时间戳
29 #[inline]
30 pub fn ktime_get_real_ns() -> i64 {
31     let kt: ktime_t = ktime_get_real().unwrap_or(0);
32     return ktime_to_ns(kt);
33 }
34