summaryrefslogtreecommitdiffstats
path: root/firmware/backlight.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/backlight.c')
-rw-r--r--firmware/backlight.c96
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 */