diff options
Diffstat (limited to 'firmware/backlight.c')
-rw-r--r-- | firmware/backlight.c | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c index 19a1d21eb5..25c295197f 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c | |||
@@ -103,6 +103,8 @@ static void backlight_thread(void); | |||
103 | static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)]; | 103 | static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)]; |
104 | static const char backlight_thread_name[] = "backlight"; | 104 | static const char backlight_thread_name[] = "backlight"; |
105 | static struct event_queue backlight_queue SHAREDBSS_ATTR; | 105 | static struct event_queue backlight_queue SHAREDBSS_ATTR; |
106 | static bool ignore_backlight_on = false; | ||
107 | static int backlight_ignored_timer = 0; | ||
106 | #ifdef BACKLIGHT_DRIVER_CLOSE | 108 | #ifdef BACKLIGHT_DRIVER_CLOSE |
107 | static unsigned int backlight_thread_id = 0; | 109 | static unsigned int backlight_thread_id = 0; |
108 | #endif | 110 | #endif |
@@ -123,6 +125,8 @@ static void backlight_timeout_handler(void); | |||
123 | #ifdef HAVE_BUTTON_LIGHT | 125 | #ifdef HAVE_BUTTON_LIGHT |
124 | static int buttonlight_timer; | 126 | static int buttonlight_timer; |
125 | static int buttonlight_timeout = 5*HZ; | 127 | static int buttonlight_timeout = 5*HZ; |
128 | static bool ignore_buttonlight_on = false; | ||
129 | static int buttonlight_ignored_timer = 0; | ||
126 | 130 | ||
127 | /* Update state of buttonlight according to timeout setting */ | 131 | /* Update state of buttonlight according to timeout setting */ |
128 | static void buttonlight_update_state(void) | 132 | static void buttonlight_update_state(void) |
@@ -140,10 +144,20 @@ static void buttonlight_update_state(void) | |||
140 | } | 144 | } |
141 | 145 | ||
142 | /* external interface */ | 146 | /* external interface */ |
147 | |||
143 | void buttonlight_on(void) | 148 | void buttonlight_on(void) |
144 | { | 149 | { |
145 | queue_remove_from_head(&backlight_queue, BUTTON_LIGHT_ON); | 150 | if(!ignore_buttonlight_on) |
146 | queue_post(&backlight_queue, BUTTON_LIGHT_ON, 0); | 151 | { |
152 | queue_remove_from_head(&backlight_queue, BUTTON_LIGHT_ON); | ||
153 | queue_post(&backlight_queue, BUTTON_LIGHT_ON, 0); | ||
154 | } | ||
155 | } | ||
156 | |||
157 | void buttonlight_on_ignore(bool value, int timeout) | ||
158 | { | ||
159 | ignore_buttonlight_on = value; | ||
160 | buttonlight_ignored_timer = timeout; | ||
147 | } | 161 | } |
148 | 162 | ||
149 | void buttonlight_off(void) | 163 | void buttonlight_off(void) |
@@ -232,7 +246,7 @@ static int backlight_fading_state = NOT_FADING; | |||
232 | /* s15.16 fixed point variables */ | 246 | /* s15.16 fixed point variables */ |
233 | static int32_t bl_fade_in_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/300; | 247 | static int32_t bl_fade_in_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/300; |
234 | static int32_t bl_fade_out_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/2000; | 248 | static int32_t bl_fade_out_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/2000; |
235 | static int32_t bl_dim_fraction = 0; | 249 | static int32_t bl_dim_fraction = 0; |
236 | 250 | ||
237 | static int bl_dim_target = 0; | 251 | static int bl_dim_target = 0; |
238 | static int bl_dim_current = 0; | 252 | static int bl_dim_current = 0; |
@@ -642,7 +656,7 @@ void backlight_thread(void) | |||
642 | buttonlight_hw_off(); | 656 | buttonlight_hw_off(); |
643 | break; | 657 | break; |
644 | #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS | 658 | #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS |
645 | case BUTTON_LIGHT_BRIGHTNESS_CHANGED: | 659 | case BUTTON_LIGHT_BRIGHTNESS_CHANGED: |
646 | buttonlight_hw_brightness((int)ev.data); | 660 | buttonlight_hw_brightness((int)ev.data); |
647 | break; | 661 | break; |
648 | #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ | 662 | #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */ |
@@ -723,7 +737,19 @@ static void backlight_timeout_handler(void) | |||
723 | buttonlight_hw_off(); | 737 | buttonlight_hw_off(); |
724 | } | 738 | } |
725 | } | 739 | } |
740 | if (buttonlight_ignored_timer > 0) | ||
741 | { | ||
742 | buttonlight_ignored_timer -= BACKLIGHT_THREAD_TIMEOUT; | ||
743 | if (buttonlight_ignored_timer <= 0) | ||
744 | ignore_buttonlight_on = false; | ||
745 | } | ||
726 | #endif /* HAVE_BUTTON_LIGHT */ | 746 | #endif /* HAVE_BUTTON_LIGHT */ |
747 | if (backlight_ignored_timer > 0) | ||
748 | { | ||
749 | backlight_ignored_timer -= BACKLIGHT_THREAD_TIMEOUT; | ||
750 | if (backlight_ignored_timer <= 0) | ||
751 | ignore_backlight_on = false; | ||
752 | } | ||
727 | } | 753 | } |
728 | 754 | ||
729 | void backlight_init(void) | 755 | void backlight_init(void) |
@@ -768,8 +794,17 @@ void backlight_close(void) | |||
768 | 794 | ||
769 | void backlight_on(void) | 795 | void backlight_on(void) |
770 | { | 796 | { |
771 | queue_remove_from_head(&backlight_queue, BACKLIGHT_ON); | 797 | if(!ignore_backlight_on) |
772 | queue_post(&backlight_queue, BACKLIGHT_ON, 0); | 798 | { |
799 | queue_remove_from_head(&backlight_queue, BACKLIGHT_ON); | ||
800 | queue_post(&backlight_queue, BACKLIGHT_ON, 0); | ||
801 | } | ||
802 | } | ||
803 | |||
804 | void backlight_on_ignore(bool value, int timeout) | ||
805 | { | ||
806 | ignore_backlight_on = value; | ||
807 | backlight_ignored_timer = timeout; | ||
773 | } | 808 | } |
774 | 809 | ||
775 | void backlight_off(void) | 810 | void backlight_off(void) |
@@ -829,8 +864,13 @@ void backlight_set_timeout_plugged(int value) | |||
829 | void backlight_hold_changed(bool hold_button) | 864 | void backlight_hold_changed(bool hold_button) |
830 | { | 865 | { |
831 | if (!hold_button || (backlight_on_button_hold > 0)) | 866 | if (!hold_button || (backlight_on_button_hold > 0)) |
867 | { | ||
832 | /* if unlocked or override in effect */ | 868 | /* if unlocked or override in effect */ |
833 | backlight_on(); | 869 | |
870 | /*backlight_on(); REMOVED*/ | ||
871 | queue_remove_from_head(&backlight_queue, BACKLIGHT_ON); | ||
872 | queue_post(&backlight_queue, BACKLIGHT_ON, 0); | ||
873 | } | ||
834 | } | 874 | } |
835 | 875 | ||
836 | void backlight_set_on_button_hold(int index) | 876 | void backlight_set_on_button_hold(int index) |