vxKernel/include/vhex/timer.h

57 lines
2.0 KiB
C

#ifndef __VHEX_TIMER__
#define __VHEX_TIMER__
#include <vhex/timer/call.h>
#include <vhex/timer/types.h>
/* TIMER_DELAY_MS() : convert ms into us */
#define TIMER_DELAY_MS(ms) (ms * 1000)
#define TIMER_DELAY_SEC(sec) (sec * 1000000)
/* returned status from a callback */
enum {
TIMER_STOP,
TIMER_CONTINUE
};
/* timer_configure(): Reserve and configure a timer
This function finds and configures a timer (without starting it). On
success, it returns the ID of the configured timer, which is used in all
other timer functions. If no timer matching the requested settings is
available, this function returns -1.
When started, the configured timer will run for the requested delay and call
the supplied callback function at the end of this delay. The callback
function can then decide whether to leave the timer running (and be called
again after the same delay) or stop the timer. */
extern tid_t timer_configure(uint64_t delay_us, timer_call_t callback);
/* timer_start(): Start a configured timer */
extern int timer_start(tid_t timer);
/* timer_pause(): Pause a timer without freeing it */
extern int timer_pause(tid_t timer);
/* timer_stop(): Stop and free a timer */
extern int timer_stop(tid_t timer);
/* timer_wait(): Wait for a timer to stop
Waits until the timer pauses or stops. If the timer is not running, returns
immediately. Even after timer_wait(), the timer may not be available since
it may have only paused. If the timer never stops, you're in trouble. */
extern int timer_wait(tid_t timer);
/* timer_spinwait(): Start a timer and actively wait
Waits until the timer has finished its countdown, without sleeping. This is
useful for delays in driver code that is run when interrupts are disabled.
Interrupt are disabled before starting the timer and waiting, so the callback
is never called. */
extern int timer_spinwait(tid_t timer);
/* timer_reload(): Change a timer's delay constant for next interrupts */
extern int timer_reload(tid_t timer, uint64_t delay);
#endif /* __VHEX_TIMER__ */