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::TimeSpec; 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: TimeSpec = 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