Index: apps/settings.c =================================================================== --- apps/settings.c (revision 16213) +++ apps/settings.c (working copy) @@ -923,6 +923,7 @@ #ifdef HAVE_BACKLIGHT set_backlight_filter_keypress(global_settings.bl_filter_first_keypress); + set_backlight_filter_buttons(global_settings.bl_filter_buttons); #ifdef HAVE_REMOTE_LCD set_remote_backlight_filter_keypress(global_settings.remote_bl_filter_first_keypress); #endif Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 17714) +++ apps/lang/english.lang (working copy) @@ -11750,3 +11750,72 @@ gigabeatf: "High" + + id: LANG_BACKLIGHT_FILTER_BUTTONS + desc: in settings + user: + + *: "Backlight On Buttons" + + + *: "Backlight On Buttons" + + + *: "Backlight On Buttons" + + + + id: LANG_BACKLIGHT_FILTER_BUTTONS_ALL + desc: in settings + user: + + *: "All" + + + *: "All" + + + *: "All" + + + + id: LANG_BACKLIGHT_FILTER_BUTTONS_SELECTED + desc: in settings + user: + + *: "Selected only" + ipod*: "PLAY, SELECT and MENU" + h10: "POWER only" + ifp7xx: "SELECT and PLAY" + gigabeatf: "POWER, SELECT and MENU" + c200,e200,x5,e5: "POWER and SELECT" + h100,h120,h300: "ON, OFF and SELECT" + recorderv2: "ON and OFF" + ondiosp: "OFF and MENU" + player: "ON and MENU" + + + *: "Selected only" + ipod*: "PLAY, SELECT and MENU" + h10: "POWER only" + ifp7xx: "SELECT and PLAY" + gigabeatf: "POWER, SELECT and MENU" + c200,e200,x5,e5: "POWER and SELECT" + h100,h120,h300: "ON, OFF and SELECT" + recorderv2: "ON and OFF" + ondiosp: "OFF and MENU" + player: "ON and MENU" + + + *: "Selected only" + ipod*: "PLAY, SELECT and MENU" + h10: "POWER only" + ifp7xx: "SELECT and PLAY" + gigabeatf: "POWER, SELECT and MENU" + c200,e200,x5,e5: "POWER and SELECT" + h100,h120,h300: "ON, OFF and SELECT" + recorderv2: "ON and OFF" + ondiosp: "OFF and MENU" + player: "ON and MENU" + + Index: apps/settings.h =================================================================== --- apps/settings.h (revision 16213) +++ apps/settings.h (working copy) @@ -635,6 +635,7 @@ #ifdef HAVE_BACKLIGHT bool bl_filter_first_keypress; /* filter first keypress when dark? */ + bool bl_filter_buttons; /* prevent some buttons from turning backlight on */ #ifdef HAVE_REMOTE_LCD bool remote_bl_filter_first_keypress; /* filter first remote keypress when remote dark? */ #endif Index: apps/menus/display_menu.c =================================================================== --- apps/menus/display_menu.c (revision 17588) +++ apps/menus/display_menu.c (working copy) @@ -53,6 +53,17 @@ } return action; } +int filterbuttons_callback(int action,const struct menu_item_ex *this_item) +{ + (void)this_item; + switch (action) + { + case ACTION_EXIT_MENUITEM: + set_backlight_filter_buttons(global_settings.bl_filter_buttons); + break; + } + return action; +} #endif #ifdef HAVE_LCD_FLIP static int flipdisplay_callback(int action,const struct menu_item_ex *this_item) @@ -91,9 +102,9 @@ MENUITEM_SETTING(backlight_fade_in, &global_settings.backlight_fade_in, NULL); MENUITEM_SETTING(backlight_fade_out, &global_settings.backlight_fade_out, NULL); #endif -MENUITEM_SETTING(bl_filter_first_keypress, - &global_settings.bl_filter_first_keypress, - filterfirstkeypress_callback); +MENUITEM_SETTING(bl_filter_buttons, + &global_settings.bl_filter_buttons, + filterbuttons_callback); #ifdef HAVE_LCD_SLEEP_SETTING MENUITEM_SETTING(lcd_sleep_after_backlight_off, &global_settings.lcd_sleep_after_backlight_off, NULL); @@ -129,7 +140,7 @@ # if defined(HAVE_BACKLIGHT_PWM_FADING) && !defined(SIMULATOR) ,&backlight_fade_in, &backlight_fade_out # endif - ,&bl_filter_first_keypress + ,&bl_filter_buttons # ifdef HAVE_LCD_SLEEP_SETTING ,&lcd_sleep_after_backlight_off # endif Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 17588) +++ apps/settings_list.c (working copy) @@ -572,6 +572,10 @@ OFFON_SETTING(0, bl_filter_first_keypress, LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false, "backlight filters first keypress", NULL), + BOOL_SETTING(0,bl_filter_buttons, LANG_BACKLIGHT_FILTER_BUTTONS, false, + "backlight on buttons", "all,selected", + LANG_BACKLIGHT_FILTER_BUTTONS_SELECTED, LANG_BACKLIGHT_FILTER_BUTTONS_ALL, + set_backlight_filter_buttons), #ifdef HAVE_REMOTE_LCD OFFON_SETTING(0, remote_bl_filter_first_keypress, LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false, Index: firmware/export/button.h =================================================================== --- firmware/export/button.h (revision 16213) +++ firmware/export/button.h (working copy) @@ -38,6 +38,7 @@ #endif #ifdef HAVE_BACKLIGHT void set_backlight_filter_keypress(bool value); +void set_backlight_filter_buttons(bool value); #ifdef HAVE_REMOTE_LCD void set_remote_backlight_filter_keypress(bool value); #endif Index: firmware/target/arm/tatung/tpj1022/button-target.h =================================================================== --- firmware/target/arm/tatung/tpj1022/button-target.h (revision 16213) +++ firmware/target/arm/tatung/tpj1022/button-target.h (working copy) @@ -55,4 +55,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h =================================================================== --- firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h (revision 16213) +++ firmware/target/arm/pnx0101/iriver-ifp7xx/button-target.h (working copy) @@ -53,4 +53,6 @@ #define POWEROFF_BUTTON BUTTON_PLAY #define POWEROFF_COUNT 40 +#define BACKLIGHT_BUTTON BUTTON_SELECT BUTTON_PLAY + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/tcc77x/logikdax/button-target.h =================================================================== --- firmware/target/arm/tcc77x/logikdax/button-target.h (revision 16213) +++ firmware/target/arm/tcc77x/logikdax/button-target.h (working copy) @@ -48,4 +48,6 @@ #define POWEROFF_BUTTON BUTTON_POWERPLAY #define POWEROFF_COUNT 40 +#define BACKLIGHT_BUTTON BUTTON_POWERPLAY BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/archos/av300/button-target.h =================================================================== --- firmware/target/arm/archos/av300/button-target.h (revision 16213) +++ firmware/target/arm/archos/av300/button-target.h (working copy) @@ -46,4 +46,6 @@ |BUTTON_UP|BUTTON_DOWN|BUTTON_SELECT\ |BUTTON_F1|BUTTON_F2|BUTTON_F3) +#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF | BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/ipod/button-target.h =================================================================== --- firmware/target/arm/ipod/button-target.h (revision 16213) +++ firmware/target/arm/ipod/button-target.h (working copy) @@ -58,4 +58,6 @@ #define POWEROFF_BUTTON BUTTON_PLAY #define POWEROFF_COUNT 40 +#define BACKLIGHT_BUTTON BUTTON_PLAY | BUTTON_SELECT | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/sandisk/sansa-c200/button-target.h =================================================================== --- firmware/target/arm/sandisk/sansa-c200/button-target.h (revision 16213) +++ firmware/target/arm/sandisk/sansa-c200/button-target.h (working copy) @@ -50,4 +50,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/sandisk/sansa-e200/button-e200.c =================================================================== --- firmware/target/arm/sandisk/sansa-e200/button-e200.c (revision 16213) +++ firmware/target/arm/sandisk/sansa-e200/button-e200.c (working copy) @@ -194,7 +194,7 @@ /* poke backlight to turn it on or maintain it no more often than every 1/4 second*/ next_backlight_on = current_tick + HZ/4; - backlight_on(); + /*backlight_on();*/ buttonlight_on(); reset_poweroff_timer(); } Index: firmware/target/arm/sandisk/sansa-e200/button-target.h =================================================================== --- firmware/target/arm/sandisk/sansa-e200/button-target.h (revision 16213) +++ firmware/target/arm/sandisk/sansa-e200/button-target.h (working copy) @@ -51,4 +51,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_REC | BUTTON_DOWN | BUTTON_SELECT | BUTTON_UP | BUTTON_POWER + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/tms320dm320/mrobe-500/button-target.h =================================================================== --- firmware/target/arm/tms320dm320/mrobe-500/button-target.h (revision 16213) +++ firmware/target/arm/tms320dm320/mrobe-500/button-target.h (working copy) @@ -67,4 +67,6 @@ BUTTON_RC_PLAY|BUTTON_RC_DOWN| \ BUTTON_RC_REW|BUTTON_RC_FF) +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_MODE + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/iriver/h10/button-target.h =================================================================== --- firmware/target/arm/iriver/h10/button-target.h (revision 16213) +++ firmware/target/arm/iriver/h10/button-target.h (working copy) @@ -65,4 +65,6 @@ #define RC_POWEROFF_BUTTON BUTTON_RC_PLAY #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/imx31/gigabeat-s/button-target.h =================================================================== --- firmware/target/arm/imx31/gigabeat-s/button-target.h (revision 16213) +++ firmware/target/arm/imx31/gigabeat-s/button-target.h (working copy) @@ -56,4 +56,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/arm/s3c2440/gigabeat-fx/button-target.h =================================================================== --- firmware/target/arm/s3c2440/gigabeat-fx/button-target.h (revision 16213) +++ firmware/target/arm/s3c2440/gigabeat-fx/button-target.h (working copy) @@ -95,4 +95,6 @@ #define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/coldfire/iriver/button-target.h =================================================================== --- firmware/target/coldfire/iriver/button-target.h (revision 16213) +++ firmware/target/coldfire/iriver/button-target.h (working copy) @@ -83,4 +83,6 @@ #define RC_POWEROFF_BUTTON BUTTON_RC_STOP #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF | BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/coldfire/iaudio/button-target.h =================================================================== --- firmware/target/coldfire/iaudio/button-target.h (revision 16213) +++ firmware/target/coldfire/iaudio/button-target.h (working copy) @@ -70,4 +70,6 @@ #define RC_POWEROFF_BUTTON BUTTON_RC_PLAY #define POWEROFF_COUNT 30 +#define BACKLIGHT_BUTTON BUTTON_POWER | BUTTON_SELECT + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/sh/archos/recorder/button-target.h =================================================================== --- firmware/target/sh/archos/recorder/button-target.h (revision 16213) +++ firmware/target/sh/archos/recorder/button-target.h (working copy) @@ -60,4 +60,6 @@ |BUTTON_RC_LEFT|BUTTON_RC_RIGHT\ |BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN) +#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/sh/archos/ondio/button-target.h =================================================================== --- firmware/target/sh/archos/ondio/button-target.h (revision 16213) +++ firmware/target/sh/archos/ondio/button-target.h (working copy) @@ -42,4 +42,6 @@ #define POWEROFF_BUTTON BUTTON_OFF #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_OFF | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/sh/archos/fm_v2/button-target.h =================================================================== --- firmware/target/sh/archos/fm_v2/button-target.h (revision 16213) +++ firmware/target/sh/archos/fm_v2/button-target.h (working copy) @@ -50,4 +50,6 @@ #define POWEROFF_BUTTON BUTTON_OFF #define POWEROFF_COUNT 10 +#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_OFF + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/target/sh/archos/player/button-target.h =================================================================== --- firmware/target/sh/archos/player/button-target.h (revision 16213) +++ firmware/target/sh/archos/player/button-target.h (working copy) @@ -53,4 +53,6 @@ |BUTTON_RC_LEFT|BUTTON_RC_RIGHT\ |BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN) +#define BACKLIGHT_BUTTON BUTTON_ON | BUTTON_MENU + #endif /* _BUTTON_TARGET_H_ */ Index: firmware/drivers/button.c =================================================================== --- firmware/drivers/button.c (revision 16213) +++ firmware/drivers/button.c (working copy) @@ -56,6 +56,7 @@ #endif #ifdef HAVE_BACKLIGHT static bool filter_first_keypress; +static long backlight_on_button_mask = -1; #ifdef HAVE_REMOTE_LCD static bool remote_filter_first_keypress; #endif @@ -258,15 +259,16 @@ skip_remote_release = true; } else + { #endif - if (!filter_first_keypress || is_backlight_on(false) -#if BUTTON_REMOTE - || (btn & BUTTON_REMOTE) -#endif - ) + if (is_backlight_on(false) || !filter_first_keypress + || (filter_first_keypress && !(btn & backlight_on_button_mask))) queue_post(&button_queue, btn, data); else skip_release = true; +#ifdef HAVE_REMOTE_LCD + } +#endif #else /* no backlight, nothing to skip */ queue_post(&button_queue, btn, data); #endif @@ -277,11 +279,15 @@ else #endif { + /* any button press should keep backlight lit, + * but only some may turn it on */ + if(is_backlight_on(false) || (btn & backlight_on_button_mask)) { backlight_on(); #ifdef HAVE_BUTTON_LIGHT buttonlight_on(); #endif } + } reset_poweroff_timer(); } @@ -478,6 +484,15 @@ { filter_first_keypress = value; } + +void set_backlight_filter_buttons(bool value) +{ + if(value) + backlight_on_button_mask = BACKLIGHT_BUTTON; + else + backlight_on_button_mask = -1; +} + #ifdef HAVE_REMOTE_LCD void set_remote_backlight_filter_keypress(bool value) { Index: uisimulator/sdl/button.c =================================================================== --- uisimulator/sdl/button.c (revision 16213) +++ uisimulator/sdl/button.c (working copy) @@ -57,11 +57,20 @@ #ifdef HAVE_BACKLIGHT static bool filter_first_keypress; +static long backlight_on_button_mask; void set_backlight_filter_keypress(bool value) { filter_first_keypress = value; } + +void set_backlight_filter_buttons(bool value) +{ + if(value) + backlight_on_button_mask = BACKLIGHT_BUTTON; + else + backlight_on_button_mask = -1; +} #ifdef HAVE_REMOTE_LCD static bool remote_filter_first_keypress; @@ -890,12 +899,16 @@ skip_remote_release = true; } else -#endif - if (!filter_first_keypress - || is_backlight_on(false)) + { +#endif + if (is_backlight_on(false) || !filter_first_keypress + || (filter_first_keypress && !(btn & backlight_on_button_mask))) queue_post(&button_queue, btn, data); else skip_release = true; +#ifdef HAVE_REMOTE_LCD + } +#endif #else /* no backlight, nothing to skip */ queue_post(&button_queue, btn, data); #endif @@ -837,7 +851,16 @@ remote_backlight_on(); else #endif - backlight_on(); + { + /* any button press should keep backlight lit, + * but only some may turn it on */ + if(is_backlight_on(false) || (btn & backlight_on_button_mask)) { + backlight_on(); +#ifdef HAVE_BUTTON_LIGHT + buttonlight_on(); +#endif + } + } } }