blob: 8a673944bc3d0d1ff5a743fe13ae711dfb27a125 [file] [log] [blame]
Peter D'Hoye39718e32008-04-23 21:15:07 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// __ \_/ ___\| |/ /| __ \ / __ \ \/ /
5 * Jukebox | | ( (__) ) \___| ( | \_\ ( (__) ) (
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2007 Vuong Minh Hiep (vmh)
11 * Copyright (C) 2008 Thomas Martitz (kugel.)
12 * Copyright (C) 2008 Alexander Papst
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000013 * Copyright (C) 2008 Peter D'Hoye
Peter D'Hoye39718e32008-04-23 21:15:07 +000014 *
Daniel Stenberg2acc0ac2008-06-28 18:10:04 +000015 * 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.
Peter D'Hoye39718e32008-04-23 21:15:07 +000019 *
20 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 * KIND, either express or implied.
22 *
23 ****************************************************************************/
24
25#include "plugin.h"
26#include "helper.h"
27
28PLUGIN_HEADER
29
30#if defined(HAVE_BACKLIGHT)
31/* variable button definitions - only targets with a colour display */
32#if defined(HAVE_LCD_COLOR)
33#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000034# define LAMP_LEFT BUTTON_LEFT
35# define LAMP_RIGHT BUTTON_RIGHT
Peter D'Hoye39718e32008-04-23 21:15:07 +000036
37#elif (CONFIG_KEYPAD == IPOD_4G_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000038# define LAMP_LEFT BUTTON_LEFT
39# define LAMP_RIGHT BUTTON_RIGHT
40# define LAMP_NEXT BUTTON_SCROLL_FWD
41# define LAMP_PREV BUTTON_SCROLL_BACK
Peter D'Hoye39718e32008-04-23 21:15:07 +000042
43#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000044# define LAMP_LEFT BUTTON_LEFT
45# define LAMP_RIGHT BUTTON_RIGHT
Peter D'Hoye39718e32008-04-23 21:15:07 +000046
47#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000048# define LAMP_LEFT BUTTON_LEFT
49# define LAMP_RIGHT BUTTON_RIGHT
Peter D'Hoye39718e32008-04-23 21:15:07 +000050
51#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000052# define LAMP_LEFT BUTTON_LEFT
53# define LAMP_RIGHT BUTTON_RIGHT
Peter D'Hoye39718e32008-04-23 21:15:07 +000054
55#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000056# 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
Peter D'Hoye39718e32008-04-23 21:15:07 +000060
61#elif (CONFIG_KEYPAD == SANSA_C200_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000062# define LAMP_LEFT BUTTON_LEFT
63# define LAMP_RIGHT BUTTON_RIGHT
Peter D'Hoye39718e32008-04-23 21:15:07 +000064
65#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000066# 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
Peter D'Hoye39718e32008-04-23 21:15:07 +000070
Peter D'Hoyec9fa7172008-04-23 21:43:18 +000071#elif CONFIG_KEYPAD == MROBE500_PAD
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000072# define LAMP_LEFT BUTTON_LEFT
73# define LAMP_RIGHT BUTTON_RIGHT
Peter D'Hoyec9fa7172008-04-23 21:43:18 +000074
75#elif CONFIG_KEYPAD == COWOND2_PAD
Peter D'Hoyec9fa7172008-04-23 21:43:18 +000076
Peter D'Hoye39718e32008-04-23 21:15:07 +000077#else
78# error Missing key definitions for this keypad
79#endif
80#endif
81
Rob Purchase297e0502008-04-27 15:30:19 +000082#ifdef HAVE_TOUCHPAD
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000083# ifndef LAMP_LEFT
84# define LAMP_LEFT BUTTON_MIDLEFT
Rob Purchase297e0502008-04-27 15:30:19 +000085# endif
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000086# ifndef LAMP_RIGHT
87# define LAMP_RIGHT BUTTON_MIDRIGHT
Rob Purchase297e0502008-04-27 15:30:19 +000088# endif
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000089# ifndef LAMP_NEXT
90# define LAMP_NEXT BUTTON_TOPMIDDLE
Rob Purchase297e0502008-04-27 15:30:19 +000091# endif
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +000092# ifndef LAMP_PREV
93# define LAMP_PREV BUTTON_BOTTOMMIDDLE
Rob Purchase297e0502008-04-27 15:30:19 +000094# endif
95#endif
96
Steve Bavin65265772008-05-13 09:57:56 +000097static const struct plugin_api* rb; /* global api struct pointer */
Peter D'Hoye39718e32008-04-23 21:15:07 +000098
99#ifdef HAVE_LCD_COLOR
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000100/* RGB color sets */
101#define NUM_COLORSETS 2
102static int colorset[NUM_COLORSETS][3] = { { 255, 255, 255 } , /* white */
103 { 255, 0, 0 } }; /* red */
104#endif /* HAVE_LCD_COLOR */
Peter D'Hoye39718e32008-04-23 21:15:07 +0000105
106/* this is the plugin entry point */
Steve Bavin65265772008-05-13 09:57:56 +0000107enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter)
Peter D'Hoye39718e32008-04-23 21:15:07 +0000108{
109 (void)parameter;
110 rb = api;
111
112#ifdef HAVE_LCD_COLOR
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000113 int cs = 0;
Peter D'Hoye39718e32008-04-23 21:15:07 +0000114 bool quit = false;
115#endif /* HAVE_LCD_COLOR */
116
117#ifdef HAVE_BACKLIGHT_BRIGHTNESS
118 short old_brightness = rb->global_settings->brightness;
119#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
Peter D'Hoye21a37332008-05-08 21:23:31 +0000120#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
121 short old_buttonlight_brightness =
122 rb->global_settings->buttonlight_brightness;
123#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
Peter D'Hoye39718e32008-04-23 21:15:07 +0000124
125#if LCD_DEPTH > 1
Peter D'Hoye39718e32008-04-23 21:15:07 +0000126 unsigned bg_color=rb->lcd_get_background();
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000127 rb->lcd_set_backdrop(NULL);
Peter D'Hoye39718e32008-04-23 21:15:07 +0000128 rb->lcd_set_background(LCD_WHITE);
129#endif
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000130
Peter D'Hoye39718e32008-04-23 21:15:07 +0000131#ifdef HAVE_BACKLIGHT_BRIGHTNESS
132 rb->backlight_set_brightness(MAX_BRIGHTNESS_SETTING);
133#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
Peter D'Hoye21a37332008-05-08 21:23:31 +0000134#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
135 rb->buttonlight_set_brightness(MAX_BRIGHTNESS_SETTING);
136#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
Peter D'Hoye39718e32008-04-23 21:15:07 +0000137
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000138#ifdef HAVE_LCD_INVERT
Robert Kuklab4beb052008-06-28 18:00:04 +0000139#ifdef MROBE_100
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000140 /* mrobe-100 has inverted display so invert it for max brightness */
Peter D'Hoye6482c732008-04-24 00:21:08 +0000141 rb->lcd_set_invert_display(true);
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000142#else
Peter D'Hoye6482c732008-04-24 00:21:08 +0000143 rb->lcd_set_invert_display(false);
Robert Kuklab4beb052008-06-28 18:00:04 +0000144#endif /* MROBE_100 */
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000145#endif /* HAVE_LCD_INVERT */
146
Peter D'Hoye39718e32008-04-23 21:15:07 +0000147 backlight_force_on(rb);
Peter D'Hoye21a37332008-05-08 21:23:31 +0000148#ifdef HAVE_BUTTON_LIGHT
149 buttonlight_force_on(rb);
150#endif /* HAVE_BUTTON_LIGHT */
Peter D'Hoye39718e32008-04-23 21:15:07 +0000151
152#ifdef HAVE_LCD_COLOR
Peter D'Hoye21a37332008-05-08 21:23:31 +0000153 do
Peter D'Hoye39718e32008-04-23 21:15:07 +0000154 {
Peter D'Hoyed4027742008-05-03 14:55:34 +0000155 if(cs < 0)
156 cs = NUM_COLORSETS-1;
157 if(cs >= NUM_COLORSETS)
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000158 cs = 0;
159 rb->lcd_set_background( LCD_RGBPACK( colorset[cs][0],
160 colorset[cs][1],
161 colorset[cs][2] ) );
Peter D'Hoye39718e32008-04-23 21:15:07 +0000162 rb->lcd_clear_display();
163 rb->lcd_update();
164
165 switch(rb->button_get(true))
166 {
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +0000167 case LAMP_RIGHT:
168#ifdef LAMP_NEXT
169 case LAMP_NEXT:
170#endif /* LAMP_NEXT */
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000171 cs++;
172 break;
173
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +0000174 case LAMP_LEFT:
175#ifdef LAMP_PREV
176 case LAMP_PREV:
177#endif /* LAMP_PREV */
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000178 cs--;
179 break;
180
Peter D'Hoyeebdb89b2008-05-07 21:59:45 +0000181 case (LAMP_RIGHT|BUTTON_REPEAT):
182 case (LAMP_RIGHT|BUTTON_REL):
183 case (LAMP_LEFT|BUTTON_REPEAT):
184 case (LAMP_LEFT|BUTTON_REL):
185#ifdef LAMP_NEXT
186 case (LAMP_NEXT|BUTTON_REPEAT):
187 case (LAMP_NEXT|BUTTON_REL):
188#endif /* LAMP_NEXT */
189#ifdef LAMP_PREV
190 case (LAMP_PREV|BUTTON_REPEAT):
191 case (LAMP_PREV|BUTTON_REL):
192#endif /* LAMP_PREV */
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000193 /* eat these... */
Peter D'Hoye39718e32008-04-23 21:15:07 +0000194 break;
Peter D'Hoye39718e32008-04-23 21:15:07 +0000195 default:
196 quit = true;
197 }
198 } while (!quit);
199
200#else /* HAVE_LCD_COLOR */
201 rb->lcd_clear_display();
202 rb->lcd_update();
203 /* wait */
204 while(rb->button_get(false) == BUTTON_NONE)
205 {
206 rb->yield();
207 }
208
209#endif /*HAVE_LCD_COLOR */
210
211 /* restore */
212 backlight_use_settings(rb);
Peter D'Hoye21a37332008-05-08 21:23:31 +0000213#ifdef HAVE_BUTTON_LIGHT
214 buttonlight_use_settings(rb);
215#endif /* HAVE_BUTTON_LIGHT */
Peter D'Hoye39718e32008-04-23 21:15:07 +0000216
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000217#ifdef HAVE_LCD_INVERT
Peter D'Hoye6482c732008-04-24 00:21:08 +0000218 rb->lcd_set_invert_display(rb->global_settings->invert);
Peter D'Hoye8efd5d32008-04-24 00:06:45 +0000219#endif /* HAVE_LCD_INVERT */
220
Peter D'Hoye39718e32008-04-23 21:15:07 +0000221#ifdef HAVE_BACKLIGHT_BRIGHTNESS
222 rb->backlight_set_brightness(old_brightness);
223#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
Peter D'Hoye21a37332008-05-08 21:23:31 +0000224#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
225 rb->buttonlight_set_brightness(old_buttonlight_brightness);
226#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
Peter D'Hoye39718e32008-04-23 21:15:07 +0000227
228#if LCD_DEPTH > 1
229 rb->lcd_set_background(bg_color);
230#endif
231 return PLUGIN_OK;
232}
233#endif