diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/backlight.c | 79 | ||||
-rw-r--r-- | firmware/export/backlight.h | 6 | ||||
-rw-r--r-- | firmware/export/config-e200.h | 3 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/backlight-e200.c | 11 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/backlight-target.h | 2 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/button-e200.c | 25 |
6 files changed, 102 insertions, 24 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 |
diff --git a/firmware/export/backlight.h b/firmware/export/backlight.h index 4b164c63d2..9bcb6e9d1d 100644 --- a/firmware/export/backlight.h +++ b/firmware/export/backlight.h | |||
@@ -80,4 +80,10 @@ void sim_remote_backlight(int value); | |||
80 | void backlight_set_brightness(int val); | 80 | void backlight_set_brightness(int val); |
81 | #endif /* HAVE_BACKLIGHT_BRIGHTNESS */ | 81 | #endif /* HAVE_BACKLIGHT_BRIGHTNESS */ |
82 | 82 | ||
83 | #ifdef HAVE_BUTTON_LIGHT | ||
84 | void button_backlight_on(void); | ||
85 | void button_backlight_off(void); | ||
86 | void button_backlight_set_timeout(int index); | ||
87 | #endif | ||
88 | |||
83 | #endif /* BACKLIGHT_H */ | 89 | #endif /* BACKLIGHT_H */ |
diff --git a/firmware/export/config-e200.h b/firmware/export/config-e200.h index ccff38dbf2..87d7e78fbb 100644 --- a/firmware/export/config-e200.h +++ b/firmware/export/config-e200.h | |||
@@ -22,6 +22,9 @@ | |||
22 | #define MAX_BRIGHTNESS_SETTING 12 | 22 | #define MAX_BRIGHTNESS_SETTING 12 |
23 | #define DEFAULT_BRIGHTNESS_SETTING 6 | 23 | #define DEFAULT_BRIGHTNESS_SETTING 6 |
24 | 24 | ||
25 | /* define this if you have a light associated with the buttons */ | ||
26 | #define HAVE_BUTTON_LIGHT | ||
27 | |||
25 | /* define this if you have access to the quickscreen */ | 28 | /* define this if you have access to the quickscreen */ |
26 | #define HAVE_QUICKSCREEN | 29 | #define HAVE_QUICKSCREEN |
27 | 30 | ||
diff --git a/firmware/target/arm/sandisk/sansa-e200/backlight-e200.c b/firmware/target/arm/sandisk/sansa-e200/backlight-e200.c index 787f14b1a6..0ec19b4df1 100644 --- a/firmware/target/arm/sandisk/sansa-e200/backlight-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/backlight-e200.c | |||
@@ -39,3 +39,14 @@ void __backlight_off(void) | |||
39 | { | 39 | { |
40 | pp_i2c_send( 0x46, 0x23, 0x0); | 40 | pp_i2c_send( 0x46, 0x23, 0x0); |
41 | } | 41 | } |
42 | |||
43 | |||
44 | void __button_backlight_on(void) | ||
45 | { | ||
46 | GPIOG_OUTPUT_VAL |=0x80; | ||
47 | } | ||
48 | |||
49 | void __button_backlight_off(void) | ||
50 | { | ||
51 | GPIOG_OUTPUT_VAL &=~ 0x80; | ||
52 | } | ||
diff --git a/firmware/target/arm/sandisk/sansa-e200/backlight-target.h b/firmware/target/arm/sandisk/sansa-e200/backlight-target.h index 16a02a4d11..2227278985 100644 --- a/firmware/target/arm/sandisk/sansa-e200/backlight-target.h +++ b/firmware/target/arm/sandisk/sansa-e200/backlight-target.h | |||
@@ -24,4 +24,6 @@ void __backlight_on(void); | |||
24 | void __backlight_off(void); | 24 | void __backlight_off(void); |
25 | void __backlight_set_brightness(int brightness); | 25 | void __backlight_set_brightness(int brightness); |
26 | 26 | ||
27 | void __button_backlight_on(void); | ||
28 | void __button_backlight_off(void); | ||
27 | #endif | 29 | #endif |
diff --git a/firmware/target/arm/sandisk/sansa-e200/button-e200.c b/firmware/target/arm/sandisk/sansa-e200/button-e200.c index fe0b1eaf18..bbe37bcd9a 100644 --- a/firmware/target/arm/sandisk/sansa-e200/button-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/button-e200.c | |||
@@ -31,18 +31,6 @@ | |||
31 | static unsigned int old_wheel_value = 0; | 31 | static unsigned int old_wheel_value = 0; |
32 | static unsigned int wheel_repeat = BUTTON_NONE; | 32 | static unsigned int wheel_repeat = BUTTON_NONE; |
33 | 33 | ||
34 | /* Wheel backlight control */ | ||
35 | #define WHEEL_BACKLIGHT_TIMEOUT 5*HZ; | ||
36 | static unsigned int wheel_backlight_timer; | ||
37 | |||
38 | void wheel_backlight_on(bool enable) | ||
39 | { | ||
40 | if(enable) | ||
41 | GPIOG_OUTPUT_VAL |=0x80; | ||
42 | else | ||
43 | GPIOG_OUTPUT_VAL &=~ 0x80; | ||
44 | } | ||
45 | |||
46 | void button_init_device(void) | 34 | void button_init_device(void) |
47 | { | 35 | { |
48 | /* Enable all buttons */ | 36 | /* Enable all buttons */ |
@@ -52,7 +40,6 @@ void button_init_device(void) | |||
52 | /* Scrollwheel light - enable control through GPIOG pin 7 and set timeout */ | 40 | /* Scrollwheel light - enable control through GPIOG pin 7 and set timeout */ |
53 | GPIOG_ENABLE = 0x80; | 41 | GPIOG_ENABLE = 0x80; |
54 | GPIOG_OUTPUT_EN |= 0x80; | 42 | GPIOG_OUTPUT_EN |= 0x80; |
55 | wheel_backlight_timer = WHEEL_BACKLIGHT_TIMEOUT; | ||
56 | 43 | ||
57 | /* Read initial wheel value (bit 6-7 of GPIOH) */ | 44 | /* Read initial wheel value (bit 6-7 of GPIOH) */ |
58 | old_wheel_value = GPIOH_INPUT_VAL & 0xc0; | 45 | old_wheel_value = GPIOH_INPUT_VAL & 0xc0; |
@@ -153,23 +140,13 @@ int button_read_device(void) | |||
153 | old_wheel_value = new_wheel_value; | 140 | old_wheel_value = new_wheel_value; |
154 | } | 141 | } |
155 | 142 | ||
156 | if(wheel_backlight_timer>0){ | ||
157 | wheel_backlight_timer--; | ||
158 | if(wheel_backlight_timer==0){ | ||
159 | wheel_backlight_on(false); | ||
160 | } | ||
161 | } | ||
162 | |||
163 | if( (btn & BUTTON_SCROLL_UP) || (btn & BUTTON_SCROLL_DOWN) ){ | 143 | if( (btn & BUTTON_SCROLL_UP) || (btn & BUTTON_SCROLL_DOWN) ){ |
164 | /* only trigger once per click */ | 144 | /* only trigger once per click */ |
165 | if ((new_wheel_value == 0x00) || (new_wheel_value == 0xc0)) | 145 | if ((new_wheel_value == 0x00) || (new_wheel_value == 0xc0)) |
166 | { | 146 | { |
167 | btn = btn&(~(BUTTON_SCROLL_UP|BUTTON_SCROLL_DOWN)); | 147 | btn = btn&(~(BUTTON_SCROLL_UP|BUTTON_SCROLL_DOWN)); |
168 | } | 148 | } |
169 | if(wheel_backlight_timer==0){ | 149 | button_backlight_on(); |
170 | wheel_backlight_on(true); | ||
171 | } | ||
172 | wheel_backlight_timer = WHEEL_BACKLIGHT_TIMEOUT; | ||
173 | } | 150 | } |
174 | 151 | ||
175 | return btn; | 152 | return btn; |