* Fix plugin keymaps for VX777
[kugel-rb.git] / apps / plugins / lamp.c
blob0775ef84e6b2670c1e50dcb221c1857401f5cd83
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// __ \_/ ___\| |/ /| __ \ / __ \ \/ /
5 * Jukebox | | ( (__) ) \___| ( | \_\ ( (__) ) (
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2007 Vuong Minh Hiep (vmh)
11 * Copyright (C) 2008 Thomas Martitz (kugel.)
12 * Copyright (C) 2008 Alexander Papst
13 * Copyright (C) 2008 Peter D'Hoye
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 * KIND, either express or implied.
23 ****************************************************************************/
25 #include "plugin.h"
26 #include "lib/helper.h"
28 PLUGIN_HEADER
30 /* variable button definitions - only targets with a colour display */
31 #if defined(HAVE_LCD_COLOR)
32 #if (CONFIG_KEYPAD == IRIVER_H300_PAD)
33 # define LAMP_LEFT BUTTON_LEFT
34 # define LAMP_RIGHT BUTTON_RIGHT
36 #elif (CONFIG_KEYPAD == IPOD_4G_PAD)
37 # define LAMP_LEFT BUTTON_LEFT
38 # define LAMP_RIGHT BUTTON_RIGHT
39 # define LAMP_NEXT BUTTON_SCROLL_FWD
40 # define LAMP_PREV BUTTON_SCROLL_BACK
42 #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
43 # define LAMP_LEFT BUTTON_LEFT
44 # define LAMP_RIGHT BUTTON_RIGHT
46 #elif (CONFIG_KEYPAD == GIGABEAT_PAD)
47 # define LAMP_LEFT BUTTON_LEFT
48 # define LAMP_RIGHT BUTTON_RIGHT
50 #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
51 # define LAMP_LEFT BUTTON_LEFT
52 # define LAMP_RIGHT BUTTON_RIGHT
54 #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \
55 (CONFIG_KEYPAD == SANSA_FUZE_PAD)
56 # define LAMP_LEFT BUTTON_LEFT
57 # define LAMP_RIGHT BUTTON_RIGHT
58 # define LAMP_NEXT BUTTON_SCROLL_FWD
59 # define LAMP_PREV BUTTON_SCROLL_BACK
61 #elif (CONFIG_KEYPAD == SANSA_C200_PAD)
62 # define LAMP_LEFT BUTTON_LEFT
63 # define LAMP_RIGHT BUTTON_RIGHT
65 #elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
66 # define LAMP_LEFT BUTTON_LEFT
67 # define LAMP_RIGHT BUTTON_RIGHT
68 # define LAMP_NEXT BUTTON_SCROLL_UP
69 # define LAMP_PREV BUTTON_SCROLL_DOWN
71 #elif CONFIG_KEYPAD == MROBE500_PAD
72 # define LAMP_LEFT BUTTON_LEFT
73 # define LAMP_RIGHT BUTTON_RIGHT
75 #elif CONFIG_KEYPAD == COWOND2_PAD
77 #elif CONFIG_KEYPAD == IAUDIO67_PAD
78 # define LAMP_LEFT BUTTON_LEFT
79 # define LAMP_RIGHT BUTTON_RIGHT
81 #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
82 # define LAMP_LEFT BUTTON_LEFT
83 # define LAMP_RIGHT BUTTON_RIGHT
85 #elif CONFIG_KEYPAD == ONDAVX747_PAD
86 # define LAMP_LEFT BUTTON_VOL_DOWN
87 # define LAMP_RIGHT BUTTON_VOL_UP
89 #elif CONFIG_KEYPAD == ONDAVX777_PAD
91 #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
92 # define LAMP_LEFT BUTTON_LEFT
93 # define LAMP_RIGHT BUTTON_RIGHT
95 #else
96 # error Missing key definitions for this keypad
97 #endif
98 #endif
100 #ifdef HAVE_TOUCHSCREEN
101 # ifndef LAMP_LEFT
102 # define LAMP_LEFT BUTTON_MIDLEFT
103 # endif
104 # ifndef LAMP_RIGHT
105 # define LAMP_RIGHT BUTTON_MIDRIGHT
106 # endif
107 # ifndef LAMP_NEXT
108 # define LAMP_NEXT BUTTON_TOPMIDDLE
109 # endif
110 # ifndef LAMP_PREV
111 # define LAMP_PREV BUTTON_BOTTOMMIDDLE
112 # endif
113 #endif
115 #ifdef HAVE_LCD_COLOR
116 /* RGB color sets */
117 #define NUM_COLORSETS 2
118 static int colorset[NUM_COLORSETS][3] = { { 255, 255, 255 } , /* white */
119 { 255, 0, 0 } }; /* red */
120 #endif /* HAVE_LCD_COLOR */
122 /* this is the plugin entry point */
123 enum plugin_status plugin_start(const void* parameter)
125 long button;
126 (void)parameter;
128 #ifdef HAVE_LCD_COLOR
129 int cs = 0;
130 bool quit = false;
131 #endif /* HAVE_LCD_COLOR */
133 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
134 short old_brightness = rb->global_settings->brightness;
135 #endif /* HAVE_BACKLIGHT_BRIGHTNESS */
136 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
137 short old_buttonlight_brightness =
138 rb->global_settings->buttonlight_brightness;
139 #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
141 #if LCD_DEPTH > 1
142 unsigned bg_color=rb->lcd_get_background();
143 rb->lcd_set_backdrop(NULL);
144 rb->lcd_set_background(LCD_WHITE);
145 #endif
147 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
148 rb->backlight_set_brightness(MAX_BRIGHTNESS_SETTING);
149 #endif /* HAVE_BACKLIGHT_BRIGHTNESS */
150 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
151 rb->buttonlight_set_brightness(MAX_BRIGHTNESS_SETTING);
152 #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
154 #ifdef HAVE_LCD_INVERT
155 #if defined(MROBE_100) || defined(SANSA_CLIP)
156 /* mrobe-100 has inverted display so invert it for max brightness */
157 /* sansa clip has no real backlight so we need to enable all pixels */
158 rb->lcd_set_invert_display(true);
159 #else
160 rb->lcd_set_invert_display(false);
161 #endif /* MROBE_100 */
162 #endif /* HAVE_LCD_INVERT */
164 backlight_force_on();
165 #ifdef HAVE_BUTTON_LIGHT
166 buttonlight_force_on();
167 #endif /* HAVE_BUTTON_LIGHT */
169 #ifdef HAVE_LCD_COLOR
172 if(cs < 0)
173 cs = NUM_COLORSETS-1;
174 if(cs >= NUM_COLORSETS)
175 cs = 0;
176 rb->lcd_set_background( LCD_RGBPACK( colorset[cs][0],
177 colorset[cs][1],
178 colorset[cs][2] ) );
179 rb->lcd_clear_display();
180 rb->lcd_update();
182 switch((button = rb->button_get(true)))
184 case LAMP_RIGHT:
185 #ifdef LAMP_NEXT
186 case LAMP_NEXT:
187 #endif /* LAMP_NEXT */
188 cs++;
189 break;
191 case LAMP_LEFT:
192 #ifdef LAMP_PREV
193 case LAMP_PREV:
194 #endif /* LAMP_PREV */
195 cs--;
196 break;
198 case (LAMP_RIGHT|BUTTON_REPEAT):
199 case (LAMP_RIGHT|BUTTON_REL):
200 case (LAMP_LEFT|BUTTON_REPEAT):
201 case (LAMP_LEFT|BUTTON_REL):
202 #ifdef LAMP_NEXT
203 case (LAMP_NEXT|BUTTON_REPEAT):
204 case (LAMP_NEXT|BUTTON_REL):
205 #endif /* LAMP_NEXT */
206 #ifdef LAMP_PREV
207 case (LAMP_PREV|BUTTON_REPEAT):
208 case (LAMP_PREV|BUTTON_REL):
209 #endif /* LAMP_PREV */
210 /* eat these... */
211 break;
212 default:
213 quit = true;
215 } while (!quit);
217 #else /* HAVE_LCD_COLOR */
218 rb->lcd_clear_display();
219 rb->lcd_update();
220 /* wait */
223 button = rb->button_get(false);
224 if (button && !IS_SYSEVENT(button))
225 break;
226 rb->yield();
227 } while (1);
229 #endif /*HAVE_LCD_COLOR */
231 /* restore */
232 backlight_use_settings();
233 #ifdef HAVE_BUTTON_LIGHT
234 buttonlight_use_settings();
235 #endif /* HAVE_BUTTON_LIGHT */
237 #ifdef HAVE_LCD_INVERT
238 rb->lcd_set_invert_display(rb->global_settings->invert);
239 #endif /* HAVE_LCD_INVERT */
241 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
242 rb->backlight_set_brightness(old_brightness);
243 #endif /* HAVE_BACKLIGHT_BRIGHTNESS */
244 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
245 rb->buttonlight_set_brightness(old_buttonlight_brightness);
246 #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
248 #if LCD_DEPTH > 1
249 rb->lcd_set_background(bg_color);
250 #endif
251 return PLUGIN_OK;