From 1197f4d682881cc6ba6c2654658b21ed14c2c49f Mon Sep 17 00:00:00 2001 From: Ben Blazak Date: Fri, 24 May 2013 12:35:51 -0700 Subject: [PATCH] (forgot this; split platform dependent/agnostic timer code) --- firmware/lib/timer/general.c | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 firmware/lib/timer/general.c diff --git a/firmware/lib/timer/general.c b/firmware/lib/timer/general.c new file mode 100644 index 0000000..df51998 --- /dev/null +++ b/firmware/lib/timer/general.c @@ -0,0 +1,40 @@ +/* ---------------------------------------------------------------------------- + * Copyright (c) 2013 Ben Blazak + * Released under The MIT License (see "doc/licenses/MIT.md") + * Project located at + * ------------------------------------------------------------------------- */ + +/** description + * Implements the device agnostic portion of the timer interface defined in + * ".../firmware/lib/timer.h" + */ + + +#include +#include "../../../firmware/lib/data-types/list.h" +#include "./event-list.h" + +// ---------------------------------------------------------------------------- + +#define DEFINE_TIMER(name) \ + static uint16_t _##name##__counter; \ + static list__list_t * _##name##__scheduled_events = &(list__list_t){}; \ + \ + uint16_t timer__get_##name(void) { \ + return _##name##__counter; \ + } \ + uint8_t timer__schedule_##name(uint16_t name, void(*function)(void)) { \ + return event_list__append( \ + _##name##__scheduled_events, name, function ); \ + } \ + void timer___tick_##name(void) { \ + _##name##__counter++; \ + event_list__tick(_##name##__scheduled_events); \ + } + +// ---------------------------------------------------------------------------- + +DEFINE_TIMER(cycles); + +// TODO: make a timer for keypresses? +