summaryrefslogtreecommitdiff
path: root/firmware/backlight.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/backlight.c')
-rw-r--r--firmware/backlight.c54
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);
103static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)]; 103static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)];
104static const char backlight_thread_name[] = "backlight"; 104static const char backlight_thread_name[] = "backlight";
105static struct event_queue backlight_queue SHAREDBSS_ATTR; 105static struct event_queue backlight_queue SHAREDBSS_ATTR;
106static bool ignore_backlight_on = false;
107static int backlight_ignored_timer = 0;
106#ifdef BACKLIGHT_DRIVER_CLOSE 108#ifdef BACKLIGHT_DRIVER_CLOSE
107static unsigned int backlight_thread_id = 0; 109static 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
124static int buttonlight_timer; 126static int buttonlight_timer;
125static int buttonlight_timeout = 5*HZ; 127static int buttonlight_timeout = 5*HZ;
128static bool ignore_buttonlight_on = false;
129static 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 */
128static void buttonlight_update_state(void) 132static 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
143void buttonlight_on(void) 148void 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
157void buttonlight_on_ignore(bool value, int timeout)
158{
159 ignore_buttonlight_on = value;
160 buttonlight_ignored_timer = timeout;
147} 161}
148 162
149void buttonlight_off(void) 163void 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 */
233static int32_t bl_fade_in_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/300; 247static int32_t bl_fade_in_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/300;
234static int32_t bl_fade_out_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/2000; 248static int32_t bl_fade_out_step = ((BL_PWM_INTERVAL*BL_PWM_COUNT)<<16)/2000;
235static int32_t bl_dim_fraction = 0; 249static int32_t bl_dim_fraction = 0;
236 250
237static int bl_dim_target = 0; 251static int bl_dim_target = 0;
238static int bl_dim_current = 0; 252static 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
729void backlight_init(void) 755void backlight_init(void)
@@ -768,8 +794,17 @@ void backlight_close(void)
768 794
769void backlight_on(void) 795void 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
804void backlight_on_ignore(bool value, int timeout)
805{
806 ignore_backlight_on = value;
807 backlight_ignored_timer = timeout;
773} 808}
774 809
775void backlight_off(void) 810void backlight_off(void)
@@ -829,8 +864,13 @@ void backlight_set_timeout_plugged(int value)
829void backlight_hold_changed(bool hold_button) 864void 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
836void backlight_set_on_button_hold(int index) 876void backlight_set_on_button_hold(int index)