Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 29474) +++ apps/lang/english.lang (working copy) @@ -4428,7 +4428,7 @@ id: LANG_SLEEP_TIMER - desc: sleep timer setting + desc: sleep timer menu user: core *: "Sleep Timer" @@ -4441,6 +4441,62 @@ + id: LANG_SLEEP_TIMER_START + desc: start sleep timer + user: core + + *: "Start Timer" + + + *: "Start Timer" + + + *: "Start Timer" + + + + id: LANG_SLEEP_TIMER_STOP + desc: stop sleep timer + user: core + + *: "Stop Timer" + + + *: "Stop Timer" + + + *: "Stop Timer" + + + + id: LANG_SLEEP_TIMER_DURATION + desc: sleep timer duration in minutes + user: core + + *: "Timer Duration" + + + *: "Timer Duration" + + + *: "Timer Duration" + + + + id: LANG_SLEEP_TIMER_ON_POWER_UP + desc: whether sleep timer starts on power up + user: core + + *: "Start Timer On Power Up" + + + *: "Start Timer On Power Up" + + + *: "Start Timer On Power Up" + + + id: LANG_LIMITS_MENU desc: in the system sub menu user: core Index: apps/settings.h =================================================================== --- apps/settings.h (revision 29474) +++ apps/settings.h (working copy) @@ -785,6 +785,9 @@ int compressor_release_time; #endif + int sleeptimer_duration; + bool sleeptimer_on_startup; + #ifdef HAVE_MORSE_INPUT bool morse_input; /* text input method setting */ #endif Index: apps/menus/exported_menus.h =================================================================== --- apps/menus/exported_menus.h (revision 29474) +++ apps/menus/exported_menus.h (working copy) @@ -44,7 +44,8 @@ audiohw_eq_tone_controls, /* audiohw_eq_menu.c */ #endif radio_settings_menu, /* radio_menu.c */ - theme_menu; /* theme_menu.c */ + theme_menu, /* theme_menu.c */ + sleeptimer_menu; /* sleeptimer_menu.c */ struct browse_folder_info { const char* dir; Index: apps/menus/main_menu.c =================================================================== --- apps/menus/main_menu.c (revision 29474) +++ apps/menus/main_menu.c (working copy) @@ -392,46 +392,11 @@ MENUITEM_FUNCTION(show_info_item, 0, ID2P(LANG_ROCKBOX_INFO), (menu_function)show_info, NULL, NULL, Icon_NOICON); - -/* sleep Menu */ -static const char* sleep_timer_formatter(char* buffer, size_t buffer_size, - int value, const char* unit) -{ - (void) unit; - int minutes, hours; - - if (value) { - hours = value / 60; - minutes = value - (hours * 60); - snprintf(buffer, buffer_size, "%d:%02d", hours, minutes); - return buffer; - } else { - return str(LANG_OFF); - } -} - -static void sleep_timer_set(int minutes) -{ - set_sleep_timer(minutes * 60); -} - -static int sleep_timer(void) -{ - int minutes = (get_sleep_timer() + 59) / 60; /* round up */ - return (int)set_int(str(LANG_SLEEP_TIMER), "", UNIT_MIN, &minutes, - &sleep_timer_set, 5, 0, 300, sleep_timer_formatter); -} - - #if CONFIG_RTC int time_screen(void* ignored); MENUITEM_FUNCTION(timedate_item, MENU_FUNC_CHECK_RETVAL, ID2P(LANG_TIME_MENU), time_screen, NULL, NULL, Icon_Menu_setting ); #endif -/* This item is in the time/date screen if there is a RTC */ -MENUITEM_FUNCTION(sleep_timer_call, 0, ID2P(LANG_SLEEP_TIMER), sleep_timer, - NULL, NULL, Icon_Menu_setting); /* make it look like a - setting to the user */ MENUITEM_FUNCTION(show_credits_item, 0, ID2P(LANG_CREDITS), (menu_function)show_credits, NULL, NULL, Icon_NOICON); @@ -445,9 +410,6 @@ &timedate_item, #endif &show_info_item, &show_credits_item, &show_runtime_item, -#if CONFIG_RTC == 0 - &sleep_timer_call, -#endif &debug_menu_item); /* INFO MENU */ /***********************************/ Index: apps/menus/time_menu.c =================================================================== --- apps/menus/time_menu.c (revision 29474) +++ apps/menus/time_menu.c (working copy) @@ -81,9 +81,6 @@ timedate_set, NULL, NULL, Icon_NOICON); MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL); -/* in main_menu.c */ -extern const struct menu_item_ex sleep_timer_call; - #ifdef HAVE_RTC_ALARM MENUITEM_FUNCTION(alarm_screen_call, 0, ID2P(LANG_ALARM_MOD_ALARM_MENU), (menu_function)alarm_screen, NULL, NULL, Icon_NOICON); @@ -239,7 +236,7 @@ MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), time_menu_callback, Icon_NOICON, - &time_set, &sleep_timer_call, + &time_set, #ifdef HAVE_RTC_ALARM &alarm_screen_call, #if defined(HAVE_RECORDING) || CONFIG_TUNER Index: apps/menus/settings_menu.c =================================================================== --- apps/menus/settings_menu.c (revision 29474) +++ apps/menus/settings_menu.c (working copy) @@ -332,6 +332,7 @@ &usb_hid, &usb_keypad_mode, #endif + &sleeptimer_menu, ); /* SYSTEM MENU */ Index: apps/menus/sleeptimer_menu.c =================================================================== --- apps/menus/sleeptimer_menu.c (revision 0) +++ apps/menus/sleeptimer_menu.c (revision 0) @@ -0,0 +1,94 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: sleep_timer_menu.c 23867 2009-12-05 11:24:50Z nickp $ + * + * Copyright (C) 2007 Jonathan Gordon + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include +#include "config.h" +#include "string.h" +#include "lang.h" +#include "settings.h" +#include "menu.h" +#include "keyboard.h" +#include "exported_menus.h" +#include "powermgmt.h" +#include "action.h" + +static char* get_current_status(int selected_item, void * data, char *buffer) +{ + (void)selected_item; + (void)data; + int remain = get_sleep_timer(); + if (remain) + { + remain += 59; /* round up minutes */ + snprintf(buffer, MAX_PATH, "%s (%d:%02d)", + str(LANG_SLEEP_TIMER_STOP), + remain / 3600, + ( remain % 3600 ) / 60 + ); + } + else + { + remain = global_settings.sleeptimer_duration; + snprintf(buffer, MAX_PATH, "%s (%d:%02d)", + str(LANG_SLEEP_TIMER_START), + remain / 60, + remain % 60 + ); + } + return buffer; +} + +static int toggle_sleeptimer(void) +{ + if (get_sleep_timer()) + set_sleep_timer(0); + else + set_sleep_timer(global_settings.sleeptimer_duration * 60); + return 0; +} + +static int initial_duration; +static int sleeptimer_duration_cb(int action,const struct menu_item_ex *this_item) +{ + (void)this_item; + switch (action) + { + case ACTION_ENTER_MENUITEM: + initial_duration = global_settings.sleeptimer_duration; + break; + case ACTION_EXIT_MENUITEM: + if (initial_duration != global_settings.sleeptimer_duration && get_sleep_timer()) + set_sleep_timer(global_settings.sleeptimer_duration * 60); + } + return action; +} + +MENUITEM_FUNCTION_DYNTEXT(menu_toggle_sleeptimer, 0, toggle_sleeptimer, NULL, + get_current_status, NULL, NULL, NULL, Icon_NOICON); + +MENUITEM_SETTING(menu_sleeptimer_duration, &global_settings.sleeptimer_duration, + sleeptimer_duration_cb); + +MENUITEM_SETTING(menu_sleeptimer_on_startup, &global_settings.sleeptimer_on_startup, NULL); + +MAKE_MENU(sleeptimer_menu, ID2P(LANG_SLEEP_TIMER), NULL, Icon_NOICON, + &menu_toggle_sleeptimer, &menu_sleeptimer_duration, &menu_sleeptimer_on_startup); Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 29474) +++ apps/settings_list.c (working copy) @@ -517,6 +517,14 @@ memcpy(setting, defaultval, sizeof(struct touchscreen_parameter)); } #endif +static const char* sleeptimer_formatter(char* buffer, size_t buffer_size, + int value, const char* unit) +{ + (void) unit; + snprintf(buffer, buffer_size, "%d:%02d", + value / 60, value % 60); + return buffer; +} #ifdef HAVE_HOTKEY static const char* hotkey_formatter(char* buffer, size_t buffer_size, int value, const char* unit) @@ -1711,6 +1719,9 @@ #endif /* CONFIG_CODEC == SWCODEC */ TEXT_SETTING(0, playlist_catalog_dir, "playlist catalog directory", PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL), + INT_SETTING(0, sleeptimer_duration, LANG_SLEEP_TIMER_DURATION, 30, "sleeptimer duration", + 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), #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING CHOICE_SETTING(0, touchpad_sensitivity, LANG_TOUCHPAD_SENSITIVITY, 0, "touchpad sensitivity", "normal,high", touchpad_set_sensitivity, 2, Index: apps/SOURCES =================================================================== --- apps/SOURCES (revision 29474) +++ apps/SOURCES (working copy) @@ -41,6 +41,7 @@ #if CONFIG_RTC menus/time_menu.c #endif +menus/sleeptimer_menu.c misc.c mp3data.c onplay.c Index: apps/root_menu.c =================================================================== --- apps/root_menu.c (revision 29474) +++ apps/root_menu.c (working copy) @@ -617,6 +617,9 @@ next_screen = GO_TO_ROOT; #endif + if (global_settings.sleeptimer_on_startup) + set_sleep_timer(global_settings.sleeptimer_duration * 60); + while (true) { switch (next_screen) Index: manual/appendix/config_file_options.tex =================================================================== --- manual/appendix/config_file_options.tex (revision 29474) +++ manual/appendix/config_file_options.tex (working copy) @@ -363,6 +363,9 @@ jump scroll delay & 0 to 250 & 0.01~s\\ }% + sleeptimer duration & 5 to 300 (in steps of 5) + & minutes\\ + sleeptimer on startup & off, on & N/A\\ \bottomrule \end{longtable} Index: manual/configure_rockbox/system_options.tex =================================================================== --- manual/configure_rockbox/system_options.tex (revision 29474) +++ manual/configure_rockbox/system_options.tex (working copy) @@ -707,3 +707,21 @@ }} \end{description} } +\subsection{Sleep Timer} + Sleep Timer related menu options. + The \setting{Sleep Timer} powers off your \dap{} after a given time. + \begin{description} + \item[Start Timer (\emph{duration}):] + Shown when the timer is inactive, this option will initiate the timer with the duration shown in brackets. + \item[Stop Timer (\emph{remaining}):] + Shown when the timer is active, this option will disable the current timer. + The time remaining before completion is shown in brackets. + \item[Timer Duration:] + The number of minutes from when new timers are initiated to their completion. + The values range from 5 minutes to 5 hours in 5 minute steps. + If a timer is currently active, the timer's duration will be set to the newly entered value. + The value set is persistent, see \reference{ref:config_file_options}. + \item[Start Timer On Power Up:] + If set, a timer will be initiated when the device starts. + The value set is persistent. + \end{description} Index: manual/main_menu/main.tex =================================================================== --- manual/main_menu/main.tex (revision 29474) +++ manual/main_menu/main.tex (working copy) @@ -200,10 +200,6 @@ Time related menu options. Pressing \ActionStdContext{} will voice the current time if voice support is enabled \begin{description} \item[Set Time/Date:] Set current time and date. - \item[Sleep Timer:] - The \setting{Sleep Timer} powers off your \dap{} after playing for a given - time. It can be set from \setting{Off} to 5 hours in 5 minute steps. - The \setting{Sleep Timer} is reset on boot. \opt{alarm}{ \item[Wake-Up Alarm:] This option will make the \dap{} start up at the specified time. @@ -237,13 +233,6 @@ \item[Credits:] Display the list of contributors. -\nopt{rtc}{ - \item[Sleep Timer:] - The \setting{Sleep Timer} powers off your \dap{} after playing for a given - time. It can be set from \setting{Off} to 5 hours in 5 minute steps. - The \setting{Sleep Timer} is reset on boot. -} - \item[Running Time:] Shows the runtime of your \dap{} in hours, minutes and seconds. \begin{description}