From: Wintermute Date: Mon, 28 Oct 2013 22:12:26 +0000 (+0100) Subject: Backlight bei Inaktivität aus. X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/commitdiff_plain/7751ce27e6d1ab3ec789c8edb5baa41b1ba1e85a Backlight bei Inaktivität aus. --- diff --git a/Makefile b/Makefile index 21b726e..97eda7a 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ OPTDEFINES = -D__NEWLIB__ SRCS = \ badge/fahrplan.c \ + badge/backlight.c \ badge/init.c \ badge/main.c \ badge/jumpnrun/collision.c \ diff --git a/badge/backlight.h b/badge/backlight.h new file mode 100644 index 0000000..9169c00 --- /dev/null +++ b/badge/backlight.h @@ -0,0 +1,8 @@ +#ifndef INCLUDED_BADGE_BACKLIGHT_H +#define INCLUDED_BADGE_BACKLIGHT_H + +void badge_backlight_init(void); +void badge_backlight_enable(void); +void badge_backlight_disable(void); + +#endif diff --git a/badge/init.c b/badge/init.c index 33d048d..7f9cec1 100644 --- a/badge/init.c +++ b/badge/init.c @@ -1,4 +1,5 @@ #include "init.h" +#include "backlight.h" #include "pinconfig.h" #include "util/util.h" #include "ui/display.h" @@ -6,16 +7,6 @@ #include #include -static void badge_init_backlight(void) { - HOB_SET_PIN_FUNC(HOB_LCD_BACKLIGHT, CLKOUT); - - wdtInit(false); - SCB_CLKOUTCLKSEL = SCB_MAINCLKSEL_SOURCE_WDTOSC; - SCB_CLKOUTCLKUEN = SCB_CLKOUTCLKUEN_DISABLE; - SCB_CLKOUTCLKUEN = SCB_CLKOUTCLKUEN_UPDATE; - SCB_CLKOUTCLKDIV = 75; -} - void badge_init(void) { #define INPUT_PIN_CONFIG(spec, mode) do { \ HOB_SET_PIN_FUNC(spec, GPIO); \ @@ -47,6 +38,6 @@ void badge_init(void) { #undef OUTPUT_PIN_CONFIG - badge_init_backlight(); + badge_backlight_init(); badge_display_init(); } diff --git a/badge/ui/event.c b/badge/ui/event.c index 55cbdbd..e77dcb5 100644 --- a/badge/ui/event.c +++ b/badge/ui/event.c @@ -1,4 +1,5 @@ #include "event.h" +#include "../backlight.h" #include #include @@ -10,9 +11,14 @@ #include #endif +enum { + BACKLIGHT_ACTIVITY_TIMEOUT = 2307 +}; + // We depend on input being popped often, so no queue. static badge_event_t volatile event_buffer; static uint8_t volatile event_flag; +static uint16_t volatile activity_counter = BACKLIGHT_ACTIVITY_TIMEOUT; enum { BADGE_EVENT_FLAG_INPUT = 1, @@ -51,12 +57,23 @@ void badge_event_irq(void) { uint8_t new_state = badge_input_raw(); if(new_state != old_state) { + if(activity_counter == 0) { + badge_backlight_enable(); + } + activity_counter = BACKLIGHT_ACTIVITY_TIMEOUT; + event_buffer = badge_event_new(BADGE_EVENT_USER_INPUT, old_state, new_state); event_flag |= BADGE_EVENT_FLAG_INPUT; } + if(activity_counter == 0) { + badge_backlight_disable(); + } else { + --activity_counter; + } + event_flag |= BADGE_EVENT_FLAG_TIMER; }