Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 31266) +++ apps/lang/english.lang (working copy) @@ -12965,3 +12965,17 @@ *: "Glyphs To Cache" + + id: LANG_KEYPRESS_RESTARTS_SLEEP_TIMER + desc: whether to restart running sleep timer on keypress + user: core + + *: "Restart Sleep Timer On Keypress" + + + *: "Restart Sleep Timer On Keypress" + + + *: "Restart Sleep Timer On Keypress" + + Index: apps/settings.c =================================================================== --- apps/settings.c (revision 31266) +++ apps/settings.c (working copy) @@ -844,6 +844,8 @@ dac_line_in(global_settings.line_in); #endif set_poweroff_timeout(global_settings.poweroff); + set_keypress_restarts_sleep_timer( + global_settings.keypress_restarts_sleeptimer); #if defined(BATTERY_CAPACITY_INC) && BATTERY_CAPACITY_INC > 0 /* only call if it's really exchangable */ Index: apps/settings.h =================================================================== --- apps/settings.h (revision 31266) +++ apps/settings.h (working copy) @@ -800,6 +800,7 @@ int sleeptimer_duration; bool sleeptimer_on_startup; + bool keypress_restarts_sleeptimer; #ifdef HAVE_MORSE_INPUT bool morse_input; /* text input method setting */ Index: apps/menus/main_menu.c =================================================================== --- apps/menus/main_menu.c (revision 31266) +++ apps/menus/main_menu.c (working copy) @@ -464,6 +464,8 @@ #if CONFIG_RTC == 0 MENUITEM_SETTING(sleeptimer_on_startup, &global_settings.sleeptimer_on_startup, NULL); +MENUITEM_SETTING(keypress_restarts_sleeptimer, + &global_settings.keypress_restarts_sleeptimer, NULL); #endif MENUITEM_FUNCTION(show_credits_item, 0, ID2P(LANG_CREDITS), @@ -512,7 +514,7 @@ #if CONFIG_RTC &timedate_item, #else - &sleep_timer_call, &sleeptimer_on_startup, + &sleep_timer_call, &sleeptimer_on_startup, &keypress_restarts_sleeptimer, #endif &manage_settings, ); Index: apps/menus/time_menu.c =================================================================== --- apps/menus/time_menu.c (revision 31266) +++ apps/menus/time_menu.c (working copy) @@ -138,6 +138,8 @@ #endif /* HAVE_RTC_ALARM */ MENUITEM_SETTING(sleeptimer_on_startup, &global_settings.sleeptimer_on_startup, NULL); +MENUITEM_SETTING(keypress_restarts_sleeptimer, + &global_settings.keypress_restarts_sleeptimer, NULL); void talk_timedate(void) { @@ -244,7 +246,7 @@ &alarm_wake_up_screen, #endif #endif - &sleeptimer_on_startup, &timeformat); + &sleeptimer_on_startup, &keypress_restarts_sleeptimer, &timeformat); int time_screen(void* ignored) { Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 31266) +++ apps/settings_list.c (working copy) @@ -1808,6 +1808,8 @@ UNIT_MIN, 5, 300, 5, sleeptimer_formatter, NULL, NULL), OFFON_SETTING(0, sleeptimer_on_startup, LANG_SLEEP_TIMER_ON_POWER_UP, false, "sleeptimer on startup", NULL), + OFFON_SETTING(0, keypress_restarts_sleeptimer, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER, false, + "keypress restarts sleeptimer", set_keypress_restarts_sleep_timer), #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING CHOICE_SETTING(0, touchpad_sensitivity, LANG_TOUCHPAD_SENSITIVITY, 0, "touchpad sensitivity", "normal,high", touchpad_set_sensitivity, 2, Index: firmware/export/powermgmt.h =================================================================== --- firmware/export/powermgmt.h (revision 31266) +++ firmware/export/powermgmt.h (working copy) @@ -164,6 +164,7 @@ void set_sleep_timer(int seconds); int get_sleep_timer(void); +void set_keypress_restarts_sleep_timer(bool enable); void handle_auto_poweroff(void); void set_car_adapter_mode(bool setting); void reset_poweroff_timer(void); Index: firmware/powermgmt.c =================================================================== --- firmware/powermgmt.c (revision 31266) +++ firmware/powermgmt.c (working copy) @@ -64,6 +64,8 @@ static bool sleeptimer_active = false; static long sleeptimer_endtick; +static bool sleeptimer_key_restarts = false; +static unsigned int sleeptimer_duration = 0; #if CONFIG_CHARGING /* State of the charger input as seen by the power thread */ @@ -707,6 +709,8 @@ void reset_poweroff_timer(void) { last_event_tick = current_tick; + if (sleeptimer_active && sleeptimer_key_restarts) + set_sleep_timer(sleeptimer_duration); } void sys_poweroff(void) @@ -772,10 +776,12 @@ if (seconds) { sleeptimer_active = true; sleeptimer_endtick = current_tick + seconds * HZ; + sleeptimer_duration = seconds; } else { sleeptimer_active = false; sleeptimer_endtick = 0; + sleeptimer_duration = 0; } } @@ -787,6 +793,11 @@ return 0; } +void set_keypress_restarts_sleep_timer(bool enable) +{ + sleeptimer_key_restarts = enable; +} + static void handle_sleep_timer(void) { #ifndef BOOTLOADER Index: manual/appendix/config_file_options.tex =================================================================== --- manual/appendix/config_file_options.tex (revision 31266) +++ manual/appendix/config_file_options.tex (working copy) @@ -107,6 +107,7 @@ sleeptimer duration & 5 to 300 (in steps of 5) & min\\ sleeptimer on startup & off, on & N/A\\ + keypress restarts sleeptimer & off, on & N/A\\ max files in playlist & 1000 - 32000 & N/A\\ max files in dir & 50 - 10000 & N/A\\ lang & /path/filename.lng & N/A\\ Index: manual/configure_rockbox/sleep_timer.tex =================================================================== --- manual/configure_rockbox/sleep_timer.tex (revision 31266) +++ manual/configure_rockbox/sleep_timer.tex (working copy) @@ -11,3 +11,6 @@ current \setting{Sleep Timer}. \item[Start Sleep Timer On Boot:] If set, a \setting{Sleep Timer} will be initiated when the device starts. +\item[Restart Sleep Timer On Keypress:] + If set, when a \setting{Sleep Timer} is active and a key is pressed, the + \setting{Sleep Timer} will be restarted with the initial duration.