9 #define USEC_PER_SEC 1000000
14 DRIFT_REINJECT_GRADUAL
,
24 PC_FREQ0
, /* 1.193182Mhz */
25 PC_FREQ1
, /* 32.768 Khz */
33 void set(std::function
<void (void)> func
);
36 void set(T
*obj
, void (T::*method
)(void)) {
37 this->func
= std::bind(method
, obj
);
40 void update(uint64_t next_deadline
, TimeUnit unit
);
43 uint64_t get_deadline(void);
46 void pickle(Marshaller
*m
, const char *name
);
50 std::function
<void (void)> func
;
56 static TimeSource
*get_instance(void);
58 virtual uint64_t now(TimeUnit unit
) = 0;
59 virtual void arm(Timer
*timer
) = 0;
60 virtual void cancel(Timer
*timer
) = 0;
63 static inline uint64_t now(TimeUnit unit
)
65 return TimeSource::get_instance()->now(unit
);
68 static inline void marshal(Marshaller
*m
, const char *name
, DriftMode
*mode
)
70 uint32_t val
= (int)*mode
;
71 marshal(m
, name
, &val
);
72 *mode
= (DriftMode
)val
;
75 uint64_t time_to_ns(uint64_t when
, TimeUnit unit
);
76 uint64_t ns_to_time(uint64_t when
, TimeUnit unit
);
78 void register_time_source(TimeSource
*ts
);