diff options
Diffstat (limited to 'firmware/backlight.c')
-rw-r--r-- | firmware/backlight.c | 96 |
1 files changed, 62 insertions, 34 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c index e8a71af12c..cc773e0a3b 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c @@ -21,6 +21,10 @@ * ****************************************************************************/ #include "config.h" +#if !defined(BOOTLOADER) +#include "settings.h" +#include "action.h" +#endif #include <stdlib.h> #include "cpu.h" #include "kernel.h" @@ -117,10 +121,8 @@ static int backlight_timeout_normal = 5*HZ; #if CONFIG_CHARGING static int backlight_timeout_plugged = 5*HZ; #endif -#ifdef HAS_BUTTON_HOLD static int backlight_on_button_hold = 0; -#endif -static void backlight_timeout_handler(void); +static void backlight_handle_timeout(void); #ifdef HAVE_BUTTON_LIGHT static int buttonlight_timer; @@ -548,6 +550,17 @@ static void remote_backlight_update_state(void) } #endif /* HAVE_REMOTE_LCD */ +static void backlight_queue_wait(struct queue_event *ev) +{ +#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ + || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) + if (backlight_fading_state != NOT_FADING) + queue_wait_w_tmo(&backlight_queue, ev, FADE_DELAY); + else +#endif + queue_wait_w_tmo(&backlight_queue, ev, BACKLIGHT_THREAD_TIMEOUT); +} + void backlight_thread(void) { struct queue_event ev; @@ -555,13 +568,7 @@ void backlight_thread(void) while(1) { -#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ - || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) - if (backlight_fading_state != NOT_FADING) - queue_wait_w_tmo(&backlight_queue, &ev, FADE_DELAY); - else -#endif - queue_wait_w_tmo(&backlight_queue, &ev, BACKLIGHT_THREAD_TIMEOUT); + backlight_queue_wait(&ev); switch(ev.id) { /* These events must always be processed */ #ifdef _BACKLIGHT_FADE_BOOST @@ -665,9 +672,14 @@ void backlight_thread(void) #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ #endif /* HAVE_BUTTON_LIGHT */ + case SYS_REBOOT: case SYS_POWEROFF: /* Lock backlight on poweroff so it doesn't */ locked = true; /* go off before power is actually cut. */ - /* fall through */ +#if !defined(BOOTLOADER) + if (!global_settings.show_shutdown_message) + break; +#endif + /* else fall through */ #if CONFIG_CHARGING case SYS_CHARGER_CONNECTED: case SYS_CHARGER_DISCONNECTED: @@ -678,24 +690,7 @@ void backlight_thread(void) #endif break; case SYS_TIMEOUT: -#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ - || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) - if (backlight_fading_state != NOT_FADING) - { - if ((_backlight_fade_step(backlight_fading_state))) - { /* finished fading */ -#ifdef HAVE_LCD_SLEEP - if (backlight_fading_state == FADING_DOWN) - { /* start sleep countdown */ - backlight_lcd_sleep_countdown(true); - } -#endif - backlight_fading_state = NOT_FADING; - } - } - else -#endif /* CONFIG_BACKLIGHT_FADING */ - backlight_timeout_handler(); + backlight_handle_timeout(); break; } } /* end while */ @@ -755,6 +750,28 @@ static void backlight_timeout_handler(void) } } +static void backlight_handle_timeout(void) +{ +#if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ + || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) + if (backlight_fading_state != NOT_FADING) + { + if ((_backlight_fade_step(backlight_fading_state))) + { /* finished fading */ +#ifdef HAVE_LCD_SLEEP + if (backlight_fading_state == FADING_DOWN) + { /* start sleep countdown */ + backlight_lcd_sleep_countdown(true); + } +#endif + backlight_fading_state = NOT_FADING; + } + } + else +#endif /* CONFIG_BACKLIGHT_FADING */ + backlight_timeout_handler(); +} + void backlight_init(void) { queue_init(&backlight_queue, true); @@ -828,18 +845,18 @@ bool is_backlight_on(bool ignore_always_off) /* return value in ticks; 0 means always on, <0 means always off */ int backlight_get_current_timeout(void) { -#ifdef HAS_BUTTON_HOLD if ((backlight_on_button_hold != 0) -#ifdef HAVE_REMOTE_LCD_AS_MAIN +#if (defined(HAVE_REMOTE_LCD_AS_MAIN) && defined(HAS_REMOTE_BUTTON_HOLD)) && remote_button_hold() -#else +#elif defined(HAS_BUTTON_HOLD) && button_hold() +#else + && is_keys_locked() #endif ) return (backlight_on_button_hold == 2) ? 0 : -1; /* always on or always off */ else -#endif #if CONFIG_CHARGING if (power_input_present()) return backlight_timeout_plugged; @@ -875,6 +892,7 @@ void backlight_hold_changed(bool hold_button) queue_post(&backlight_queue, BACKLIGHT_ON, 0); } } +#endif /* HAS_BUTTON_HOLD */ void backlight_set_on_button_hold(int index) { @@ -885,7 +903,6 @@ void backlight_set_on_button_hold(int index) backlight_on_button_hold = index; queue_post(&backlight_queue, BACKLIGHT_TMO_CHANGED, 0); } -#endif /* HAS_BUTTON_HOLD */ #ifdef HAVE_LCD_SLEEP_SETTING void lcd_set_sleep_after_backlight_off(int timeout_seconds) @@ -1047,3 +1064,14 @@ void buttonlight_set_brightness(int val) { (void)val; } #endif /* HAVE_BUTTON_LIGHT */ #endif /* defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT) */ + +#ifndef HAVE_BUTTON_LIGHT /* Dummy Functions */ +void buttonlight_on(void) {} +void buttonlight_on_ignore(bool value, int timeout){(void)value;(void)timeout;} +void buttonlight_off(void) {} +void buttonlight_set_timeout(int value) {(void)value;} +#endif /* ndef HAVE_BUTTON_LIGHT */ + +#ifndef HAVE_BUTTONLIGHT_BRIGHTNESS /* Dummy Functions */ +void buttonlight_set_brightness(int val) { (void)val; } +#endif /* ndef HAVE_BUTTONLIGHT_BRIGHTNESS */ |