diff -Bur ./apps/gui/gwps-common.c ../settings/apps/gui/gwps-common.c --- ./apps/gui/gwps-common.c 2007-11-06 11:10:01.000000000 +0100 +++ ../settings/apps/gui/gwps-common.c 2007-11-06 11:11:43.000000000 +0100 @@ -2072,16 +2072,13 @@ display->update(); #ifdef HAVE_BACKLIGHT - if (global_settings.caption_backlight && state->id3) + if ((global_settings.caption_backlight>0) && state->id3) { /* turn on backlight n seconds before track ends, and turn it off n seconds into the new track. n == backlight_timeout, or 5s */ - int n = backlight_timeout_value[global_settings.backlight_timeout] - * 1000; - - if ( n < 1000 ) - n = 5000; /* use 5s if backlight is always on or off */ - + int n = caption_backlight_timeout_value[global_settings.caption_backlight] * 1000; + if ( n < 1000) + n = 50; /* use 50ms as min */ if (((state->id3->elapsed < 1000) || ((state->id3->length - state->id3->elapsed) < (unsigned)n)) && (state->paused == false)) diff -Bur ./apps/settings.h ../settings/apps/settings.h --- ./apps/settings.h 2007-11-06 11:10:01.000000000 +0100 +++ ../settings/apps/settings.h 2007-11-06 06:52:17.000000000 +0100 @@ -502,7 +502,7 @@ int jump_scroll_delay; /* Delay between jump scroll screens */ #endif bool fade_on_stop; /* fade on pause/unpause/stop */ - bool caption_backlight; /* turn on backlight at end and start of track */ + int caption_backlight; /* turn on backlight at end and start of track */ #if CONFIG_TUNER int fm_freq_step; /* Frequency step for manual tuning, in kHz */ diff -Bur ./apps/settings_list.c ../settings/apps/settings_list.c --- ./apps/settings_list.c 2007-11-06 11:10:01.000000000 +0100 +++ ../settings/apps/settings_list.c 2007-11-06 11:14:43.000000000 +0100 @@ -229,6 +227,22 @@ return LANG_ON; return TALK_ID(backlight_timeout_value[value], UNIT_SEC); } + +static const char caption_backlight_times_conf [] ="off,0,1,2,3,4,5,6,7,8,9,10,15,20"; +static void caption_backlight_formatter(char *buffer, size_t buffer_size, int val, const char *unit) +{ + (void)unit; + if (val == 0) + strcpy(buffer, str(LANG_OFF)); + else + snprintf(buffer, buffer_size, "%d s", caption_backlight_timeout_value[val]); +} +static long caption_backlight_getlang(int value) +{ + if (value == 0) + return LANG_OFF; + return TALK_ID(caption_backlight_timeout_value[value], UNIT_SEC); +} #endif /* ffwd/rewind and scan acceleration stuff */ static const unsigned char ff_rewind_min_stepvals[] = {1,2,3,4,5,6,8,10,15,20,25,30,45,60}; @@ -562,8 +576,7 @@ /** End of old RTC config block **/ #ifdef HAVE_BACKLIGHT - OFFON_SETTING(0,caption_backlight, LANG_CAPTION_BACKLIGHT, - false,"caption backlight",NULL), + INT_SETTING_W_CFGVALS(0, caption_backlight, LANG_CAPTION_BACKLIGHT, 6, "caption backlight", caption_backlight_times_conf, UNIT_SEC, 0, 14, 1, caption_backlight_formatter, caption_backlight_getlang, NULL), #ifdef HAVE_REMOTE_LCD OFFON_SETTING(0,remote_caption_backlight, LANG_CAPTION_BACKLIGHT, false,"remote caption backlight",NULL), diff -Bur ./firmware/backlight.c ../settings/firmware/backlight.c --- ./firmware/backlight.c 2007-11-06 11:10:00.000000000 +0100 +++ ../settings/firmware/backlight.c 2007-11-06 08:03:01.000000000 +0100 @@ -78,6 +78,10 @@ { -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 45, 60, 90 }; +const signed char caption_backlight_timeout_value[14] = +{ + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20 +}; #define BACKLIGHT_ON 1 #define BACKLIGHT_OFF 2 diff -Bur ./firmware/export/backlight.h ../settings/firmware/export/backlight.h --- ./firmware/export/backlight.h 2007-10-08 06:00:25.000000000 +0200 +++ ../settings/firmware/export/backlight.h 2007-11-06 10:53:01.000000000 +0100 @@ -38,6 +38,7 @@ void backlight_set_timeout_plugged(int index); extern const signed char backlight_timeout_value[]; +extern const signed char caption_backlight_timeout_value[]; #ifdef HAS_BUTTON_HOLD void backlight_hold_changed(bool hold_button);