forked from len0rd/rockbox
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
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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue