X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/aa2843fdbdd9b5cc579d198fd1a9ec874642706e..f044ca812256b421e793c4335ce1ffed74710a70:/lunaix-os/hal/timer/hwtimer.c diff --git a/lunaix-os/hal/timer/hwtimer.c b/lunaix-os/hal/timer/hwtimer.c index bd6477a..1a994f7 100644 --- a/lunaix-os/hal/timer/hwtimer.c +++ b/lunaix-os/hal/timer/hwtimer.c @@ -1,34 +1,28 @@ #include #include -struct hwtimer_context* current_timer; +#include -void -hwtimer_init(u32_t hertz, void* tick_callback) -{ - struct hwtimer_context* hwt_ctx = hwtimer_choose(); - - hwt_ctx->init(hwt_ctx, hertz, tick_callback); - hwt_ctx->running_freq = hertz; - - current_timer = hwt_ctx; -} +struct hwtimer* current_timer; ticks_t hwtimer_base_frequency() { + assert(current_timer); return current_timer->base_freq; } ticks_t hwtimer_current_systicks() { + assert(current_timer); return current_timer->systicks(); } ticks_t hwtimer_to_ticks(u32_t value, int unit) { + assert(current_timer); // in case system frequency is less than 1000Hz if (unit != TIME_MS) { return current_timer->running_freq * unit * value; @@ -37,4 +31,34 @@ hwtimer_to_ticks(u32_t value, int unit) ticks_t freq_ms = current_timer->running_freq / 1000; return freq_ms * value; +} + +static int +__hwtimer_ioctl(struct device* dev, u32_t req, va_list args) +{ + struct hwtimer* hwt = (struct hwtimer*)dev->underlay; + switch (req) { + case TIMERIO_GETINFO: + // TODO + break; + + default: + break; + } + return 0; +} + +void +hwtimer_init(u32_t hertz, void* tick_callback) +{ + struct hwtimer* hwt_ctx = hwtimer_choose(); + + hwt_ctx->init(hwt_ctx, hertz, tick_callback); + hwt_ctx->running_freq = hertz; + + current_timer = hwt_ctx; + + struct device* timerdev = device_addsys(NULL, hwt_ctx, hwt_ctx->name); + + timerdev->ops.exec_cmd = __hwtimer_ioctl; } \ No newline at end of file