rockbox/apps/plugins/lamp.c
Steve Bavin 6526577818 Plugin parameters should be const.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17492 a1c6a512-1295-4272-9138-f99709370657
2008-05-13 09:57:56 +00:00

231 lines
6.5 KiB
C

/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// __ \_/ ___\| |/ /| __ \ / __ \ \/ /
* Jukebox | | ( (__) ) \___| ( | \_\ ( (__) ) (
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2007 Vuong Minh Hiep (vmh)
* Copyright (C) 2008 Thomas Martitz (kugel.)
* Copyright (C) 2008 Alexander Papst
* Copyright (C) 2008 Peter D'Hoye
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "plugin.h"
#include "helper.h"
PLUGIN_HEADER
#if defined(HAVE_BACKLIGHT)
/* variable button definitions - only targets with a colour display */
#if defined(HAVE_LCD_COLOR)
#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
#elif (CONFIG_KEYPAD == IPOD_4G_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
# define LAMP_NEXT BUTTON_SCROLL_FWD
# define LAMP_PREV BUTTON_SCROLL_BACK
#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
# define LAMP_NEXT BUTTON_SCROLL_FWD
# define LAMP_PREV BUTTON_SCROLL_BACK
#elif (CONFIG_KEYPAD == SANSA_C200_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
# define LAMP_NEXT BUTTON_SCROLL_UP
# define LAMP_PREV BUTTON_SCROLL_DOWN
#elif CONFIG_KEYPAD == MROBE500_PAD
# define LAMP_LEFT BUTTON_LEFT
# define LAMP_RIGHT BUTTON_RIGHT
#elif CONFIG_KEYPAD == COWOND2_PAD
#else
# error Missing key definitions for this keypad
#endif
#endif
#ifdef HAVE_TOUCHPAD
# ifndef LAMP_LEFT
# define LAMP_LEFT BUTTON_MIDLEFT
# endif
# ifndef LAMP_RIGHT
# define LAMP_RIGHT BUTTON_MIDRIGHT
# endif
# ifndef LAMP_NEXT
# define LAMP_NEXT BUTTON_TOPMIDDLE
# endif
# ifndef LAMP_PREV
# define LAMP_PREV BUTTON_BOTTOMMIDDLE
# endif
#endif
static const struct plugin_api* rb; /* global api struct pointer */
#ifdef HAVE_LCD_COLOR
/* RGB color sets */
#define NUM_COLORSETS 2
static int colorset[NUM_COLORSETS][3] = { { 255, 255, 255 } , /* white */
{ 255, 0, 0 } }; /* red */
#endif /* HAVE_LCD_COLOR */
/* this is the plugin entry point */
enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter)
{
(void)parameter;
rb = api;
#ifdef HAVE_LCD_COLOR
int cs = 0;
bool quit = false;
#endif /* HAVE_LCD_COLOR */
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
short old_brightness = rb->global_settings->brightness;
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
short old_buttonlight_brightness =
rb->global_settings->buttonlight_brightness;
#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
#if LCD_DEPTH > 1
unsigned bg_color=rb->lcd_get_background();
rb->lcd_set_backdrop(NULL);
rb->lcd_set_background(LCD_WHITE);
#endif
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
rb->backlight_set_brightness(MAX_BRIGHTNESS_SETTING);
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
rb->buttonlight_set_brightness(MAX_BRIGHTNESS_SETTING);
#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
#ifdef HAVE_LCD_INVERT
#ifdef OLYMPUS_MROBE_100
/* mrobe-100 has inverted display so invert it for max brightness */
rb->lcd_set_invert_display(true);
#else
rb->lcd_set_invert_display(false);
#endif /* OLYMPUS_MROBE_100 */
#endif /* HAVE_LCD_INVERT */
backlight_force_on(rb);
#ifdef HAVE_BUTTON_LIGHT
buttonlight_force_on(rb);
#endif /* HAVE_BUTTON_LIGHT */
#ifdef HAVE_LCD_COLOR
do
{
if(cs < 0)
cs = NUM_COLORSETS-1;
if(cs >= NUM_COLORSETS)
cs = 0;
rb->lcd_set_background( LCD_RGBPACK( colorset[cs][0],
colorset[cs][1],
colorset[cs][2] ) );
rb->lcd_clear_display();
rb->lcd_update();
switch(rb->button_get(true))
{
case LAMP_RIGHT:
#ifdef LAMP_NEXT
case LAMP_NEXT:
#endif /* LAMP_NEXT */
cs++;
break;
case LAMP_LEFT:
#ifdef LAMP_PREV
case LAMP_PREV:
#endif /* LAMP_PREV */
cs--;
break;
case (LAMP_RIGHT|BUTTON_REPEAT):
case (LAMP_RIGHT|BUTTON_REL):
case (LAMP_LEFT|BUTTON_REPEAT):
case (LAMP_LEFT|BUTTON_REL):
#ifdef LAMP_NEXT
case (LAMP_NEXT|BUTTON_REPEAT):
case (LAMP_NEXT|BUTTON_REL):
#endif /* LAMP_NEXT */
#ifdef LAMP_PREV
case (LAMP_PREV|BUTTON_REPEAT):
case (LAMP_PREV|BUTTON_REL):
#endif /* LAMP_PREV */
/* eat these... */
break;
default:
quit = true;
}
} while (!quit);
#else /* HAVE_LCD_COLOR */
rb->lcd_clear_display();
rb->lcd_update();
/* wait */
while(rb->button_get(false) == BUTTON_NONE)
{
rb->yield();
}
#endif /*HAVE_LCD_COLOR */
/* restore */
backlight_use_settings(rb);
#ifdef HAVE_BUTTON_LIGHT
buttonlight_use_settings(rb);
#endif /* HAVE_BUTTON_LIGHT */
#ifdef HAVE_LCD_INVERT
rb->lcd_set_invert_display(rb->global_settings->invert);
#endif /* HAVE_LCD_INVERT */
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
rb->backlight_set_brightness(old_brightness);
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
rb->buttonlight_set_brightness(old_buttonlight_brightness);
#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
#if LCD_DEPTH > 1
rb->lcd_set_background(bg_color);
#endif
return PLUGIN_OK;
}
#endif