Sleep timer, inspired by Jim Hagani
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2918 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
2c639f5f86
commit
b43dba8760
7 changed files with 209 additions and 0 deletions
|
@ -1166,3 +1166,8 @@ id: LANG_BATTERY_TIME
|
|||
desc: battery level in % and estimated time remaining
|
||||
eng: "%d%% %dh %dm"
|
||||
new:
|
||||
|
||||
id: LANG_SLEEP_TIMER
|
||||
desc: sleep timer setting
|
||||
eng: "Sleep timer"
|
||||
new:
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "sound_menu.h"
|
||||
#include "status.h"
|
||||
#include "fat.h"
|
||||
#include "sleeptimer.h"
|
||||
|
||||
#include "lang.h"
|
||||
|
||||
|
@ -247,6 +248,7 @@ bool main_menu(void)
|
|||
struct menu_items items[] = {
|
||||
{ str(LANG_SOUND_SETTINGS), sound_menu },
|
||||
{ str(LANG_GENERAL_SETTINGS), settings_menu },
|
||||
{ str(LANG_SLEEP_TIMER), sleeptimer_screen },
|
||||
#ifdef HAVE_MAS3587F
|
||||
{ str(LANG_RECORDING_SETTINGS), recording_menu },
|
||||
{ str(LANG_RECORDING), recording_screen },
|
||||
|
|
136
apps/sleeptimer.c
Normal file
136
apps/sleeptimer.c
Normal file
|
@ -0,0 +1,136 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 Linus Nielsen Feltzing
|
||||
*
|
||||
* 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 "config.h"
|
||||
#include "options.h"
|
||||
|
||||
#include "lcd.h"
|
||||
#include "font.h"
|
||||
#include "button.h"
|
||||
#include "kernel.h"
|
||||
#include "sprintf.h"
|
||||
#include <string.h>
|
||||
#include "settings.h"
|
||||
#include "power.h"
|
||||
#include "powermgmt.h"
|
||||
#include "status.h"
|
||||
|
||||
#include "lang.h"
|
||||
|
||||
//#define SMALL_STEP_SIZE 15*60 /* Seconds */
|
||||
#define SMALL_STEP_SIZE 2*60 /* Seconds */
|
||||
#define LARGE_STEP_SIZE 30*60 /* Seconds */
|
||||
#define THRESHOLD 60 /* Minutes */
|
||||
#define MAX_TIME 5*60*60 /* Hours */
|
||||
|
||||
bool sleeptimer_screen(void)
|
||||
{
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
int w, h;
|
||||
#endif
|
||||
unsigned long seconds;
|
||||
int hours, minutes;
|
||||
int button;
|
||||
bool done = false;
|
||||
char buf[32];
|
||||
int oldtime, newtime;
|
||||
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
lcd_setfont(FONT_UI);
|
||||
lcd_getstringsize("M", &w, &h);
|
||||
lcd_setmargins(w, 8);
|
||||
#endif
|
||||
int amount = 0;
|
||||
|
||||
while(!done)
|
||||
{
|
||||
button = button_get_w_tmo(HZ/20);
|
||||
switch(button)
|
||||
{
|
||||
#ifdef HAVE_PLAYER_KEYPAD
|
||||
case BUTTON_STOP:
|
||||
#else
|
||||
case BUTTON_OFF:
|
||||
case BUTTON_LEFT:
|
||||
#endif
|
||||
done = true;
|
||||
break;
|
||||
|
||||
#ifdef HAVE_PLAYER_KEYPAD
|
||||
case BUTTON_RIGHT:
|
||||
#else
|
||||
case BUTTON_UP:
|
||||
#endif
|
||||
oldtime = (get_sleep_timer()+59) / 60;
|
||||
|
||||
if(oldtime < THRESHOLD)
|
||||
amount = SMALL_STEP_SIZE;
|
||||
else
|
||||
amount = LARGE_STEP_SIZE;
|
||||
|
||||
newtime = oldtime * 60 + amount;
|
||||
if(newtime > MAX_TIME)
|
||||
newtime = MAX_TIME;
|
||||
|
||||
set_sleep_timer(newtime);
|
||||
break;
|
||||
|
||||
#ifdef HAVE_PLAYER_KEYPAD
|
||||
case BUTTON_LEFT:
|
||||
#else
|
||||
case BUTTON_DOWN:
|
||||
#endif
|
||||
oldtime = (get_sleep_timer()+59) / 60;
|
||||
|
||||
if(oldtime <= THRESHOLD)
|
||||
amount = SMALL_STEP_SIZE;
|
||||
else
|
||||
amount = LARGE_STEP_SIZE;
|
||||
|
||||
newtime = oldtime*60 - amount;
|
||||
if(newtime < 0)
|
||||
newtime = 0;
|
||||
|
||||
set_sleep_timer(newtime);
|
||||
break;
|
||||
}
|
||||
|
||||
seconds = get_sleep_timer();
|
||||
|
||||
lcd_clear_display();
|
||||
lcd_puts(0, 0, str(LANG_SLEEP_TIMER));
|
||||
if(seconds)
|
||||
{
|
||||
seconds += 59; /* Round up for a "friendlier" display */
|
||||
hours = seconds / 3600;
|
||||
minutes = (seconds - (hours * 3600)) / 60;
|
||||
snprintf(buf, 32, "%d:%02d",
|
||||
hours, minutes);
|
||||
lcd_puts(0, 1, buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
lcd_puts(0, 1, str(LANG_OFF));
|
||||
}
|
||||
|
||||
status_draw();
|
||||
|
||||
lcd_update();
|
||||
}
|
||||
return false;
|
||||
}
|
24
apps/sleeptimer.h
Normal file
24
apps/sleeptimer.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 Linus Nielsen Feltzing
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
#ifndef _SLEEPTIMER_H_
|
||||
#define _SLEEPTIMER_H_
|
||||
|
||||
bool sleeptimer_screen(void);
|
||||
|
||||
#endif
|
|
@ -55,3 +55,4 @@ Mark Hillebrand
|
|||
Damien Teney
|
||||
Andreas Zwirtes
|
||||
Kjell Ericson
|
||||
Jim Hagani
|
||||
|
|
|
@ -87,6 +87,9 @@ static int poweroff_timeout = 0;
|
|||
static long last_charge_time = 0;
|
||||
static int powermgmt_est_runningtime_min = -1;
|
||||
|
||||
static bool sleeptimer_active = false;
|
||||
static unsigned long sleeptimer_endtick;
|
||||
|
||||
unsigned short power_history[POWER_HISTORY_LEN];
|
||||
#ifdef HAVE_CHARGE_CTRL
|
||||
char power_message[POWER_MESSAGE_LEN] = "";
|
||||
|
@ -190,6 +193,28 @@ void set_poweroff_timeout(int timeout)
|
|||
poweroff_timeout = timeout;
|
||||
}
|
||||
|
||||
void set_sleep_timer(int seconds)
|
||||
{
|
||||
if(seconds)
|
||||
{
|
||||
sleeptimer_active = true;
|
||||
sleeptimer_endtick = current_tick + seconds * HZ;
|
||||
}
|
||||
else
|
||||
{
|
||||
sleeptimer_active = false;
|
||||
sleeptimer_endtick = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int get_sleep_timer(void)
|
||||
{
|
||||
if(sleeptimer_active)
|
||||
return (sleeptimer_endtick - current_tick) / HZ;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* We shut off in the following cases:
|
||||
1) The unit is idle, not playing music
|
||||
2) The unit is playing music, but is paused
|
||||
|
@ -224,6 +249,19 @@ static void handle_auto_poweroff(void)
|
|||
TIME_AFTER(current_tick, last_charge_time + timeout))
|
||||
power_off();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Handle sleeptimer */
|
||||
if(sleeptimer_endtick &&
|
||||
!usb_inserted())
|
||||
{
|
||||
if(TIME_AFTER(current_tick, sleeptimer_endtick))
|
||||
{
|
||||
DEBUGF("Sleep timer timeout. Shutting off...\n");
|
||||
power_off();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -76,4 +76,7 @@ bool battery_level_safe(void);
|
|||
|
||||
void set_poweroff_timeout(int timeout);
|
||||
|
||||
void set_sleep_timer(int seconds);
|
||||
int get_sleep_timer(void);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue