diff options
Diffstat (limited to 'firmware/backlight.c')
-rw-r--r-- | firmware/backlight.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c index 54737da647..2bdfe86c77 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c | |||
@@ -75,6 +75,10 @@ const signed char backlight_timeout_value[19] = | |||
75 | #ifdef HAVE_LCD_SLEEP | 75 | #ifdef HAVE_LCD_SLEEP |
76 | #define LCD_SLEEP 6 | 76 | #define LCD_SLEEP 6 |
77 | #endif | 77 | #endif |
78 | #ifdef HAVE_BUTTON_LIGHT | ||
79 | #define BUTTON_LIGHT_ON 7 | ||
80 | #define BUTTON_LIGHT_OFF 8 | ||
81 | #endif | ||
78 | 82 | ||
79 | static void backlight_thread(void); | 83 | static void backlight_thread(void); |
80 | static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)]; | 84 | static long backlight_stack[DEFAULT_STACK_SIZE/sizeof(long)]; |
@@ -93,6 +97,60 @@ static int backlight_timeout_plugged = 5*HZ; | |||
93 | static int backlight_on_button_hold = 0; | 97 | static int backlight_on_button_hold = 0; |
94 | #endif | 98 | #endif |
95 | 99 | ||
100 | #ifdef HAVE_BUTTON_LIGHT | ||
101 | static int button_backlight_timer; | ||
102 | static int button_backlight_timeout = 5*HZ; | ||
103 | |||
104 | /* external interface */ | ||
105 | void button_backlight_on(void) | ||
106 | { | ||
107 | queue_remove_from_head(&backlight_queue, BUTTON_LIGHT_ON); | ||
108 | queue_post(&backlight_queue, BUTTON_LIGHT_ON, 0); | ||
109 | } | ||
110 | |||
111 | void button_backlight_off(void) | ||
112 | { | ||
113 | queue_post(&backlight_queue, BUTTON_LIGHT_OFF, 0); | ||
114 | } | ||
115 | |||
116 | void button_backlight_set_timeout(int index) | ||
117 | { | ||
118 | if((unsigned)index >= sizeof(backlight_timeout_value)) | ||
119 | /* if given a weird value, use default */ | ||
120 | index = 6; | ||
121 | button_backlight_timeout = HZ * backlight_timeout_value[index]; | ||
122 | if (index == 0) /* off */ | ||
123 | button_backlight_off(); | ||
124 | else if (index == 1) /* on */ | ||
125 | button_backlight_on(); | ||
126 | |||
127 | if (button_backlight_timer) | ||
128 | button_backlight_timer = button_backlight_timeout; | ||
129 | } | ||
130 | |||
131 | /* internal interface */ | ||
132 | static void _button_backlight_on(void) | ||
133 | { | ||
134 | if (button_backlight_timeout < 0) | ||
135 | return; | ||
136 | button_backlight_timer = button_backlight_timeout; | ||
137 | #ifndef SIMULATOR | ||
138 | __button_backlight_on(); | ||
139 | #endif | ||
140 | } | ||
141 | |||
142 | static void _button_backlight_off(void) | ||
143 | { | ||
144 | if (button_backlight_timeout == 0) | ||
145 | return; | ||
146 | button_backlight_timer = 0; | ||
147 | #ifndef SIMULATOR | ||
148 | __button_backlight_off(); | ||
149 | #endif | ||
150 | } | ||
151 | |||
152 | #endif | ||
153 | |||
96 | #ifdef HAVE_REMOTE_LCD | 154 | #ifdef HAVE_REMOTE_LCD |
97 | static int remote_backlight_timer; | 155 | static int remote_backlight_timer; |
98 | static int remote_backlight_timeout = 5*HZ; | 156 | static int remote_backlight_timeout = 5*HZ; |
@@ -444,6 +502,14 @@ void backlight_thread(void) | |||
444 | lcd_sleep(); | 502 | lcd_sleep(); |
445 | break; | 503 | break; |
446 | #endif | 504 | #endif |
505 | #ifdef HAVE_BUTTON_LIGHT | ||
506 | case BUTTON_LIGHT_ON: | ||
507 | _button_backlight_on(); | ||
508 | break; | ||
509 | case BUTTON_LIGHT_OFF: | ||
510 | _button_backlight_off(); | ||
511 | break; | ||
512 | #endif | ||
447 | 513 | ||
448 | #ifdef X5_BACKLIGHT_SHUTDOWN | 514 | #ifdef X5_BACKLIGHT_SHUTDOWN |
449 | case BACKLIGHT_QUIT: | 515 | case BACKLIGHT_QUIT: |
@@ -521,6 +587,16 @@ static void backlight_tick(void) | |||
521 | } | 587 | } |
522 | } | 588 | } |
523 | #endif /* HAVE_REMOVE_LCD */ | 589 | #endif /* HAVE_REMOVE_LCD */ |
590 | #ifdef HAVE_BUTTON_LIGHT | ||
591 | if (button_backlight_timer) | ||
592 | { | ||
593 | button_backlight_timer--; | ||
594 | if (button_backlight_timer == 0) | ||
595 | { | ||
596 | button_backlight_off(); | ||
597 | } | ||
598 | } | ||
599 | #endif /* HAVE_BUTTON_LIGHT */ | ||
524 | } | 600 | } |
525 | 601 | ||
526 | void backlight_init(void) | 602 | void backlight_init(void) |
@@ -542,6 +618,9 @@ void backlight_init(void) | |||
542 | #ifdef HAVE_REMOTE_LCD | 618 | #ifdef HAVE_REMOTE_LCD |
543 | remote_backlight_on(); | 619 | remote_backlight_on(); |
544 | #endif | 620 | #endif |
621 | #ifdef HAVE_BUTTON_LIGHT | ||
622 | button_backlight_on(); | ||
623 | #endif | ||
545 | 624 | ||
546 | create_thread(backlight_thread, backlight_stack, | 625 | create_thread(backlight_thread, backlight_stack, |
547 | sizeof(backlight_stack), backlight_thread_name | 626 | sizeof(backlight_stack), backlight_thread_name |