diff options
author | Uwe Freese <thebreaker@rockbox.org> | 2003-01-22 12:50:34 +0000 |
---|---|---|
committer | Uwe Freese <thebreaker@rockbox.org> | 2003-01-22 12:50:34 +0000 |
commit | 86352ccc3f47bc0f6bdcdcdc7b752f0836900fcd (patch) | |
tree | 6bb892fcae88e04a3a45239236cd3dde97d8d7ce /apps/alarm_menu.c | |
parent | fa2229559802f7066b55cc2ab0761c9e742658f7 (diff) | |
download | rockbox-86352ccc3f47bc0f6bdcdcdc7b752f0836900fcd.tar.gz rockbox-86352ccc3f47bc0f6bdcdcdc7b752f0836900fcd.zip |
Code for alarm mod. Enable with adding -DHAVE_ALARM_MOD in Makefile (EXTRA_DEFINES).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3150 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/alarm_menu.c')
-rw-r--r-- | apps/alarm_menu.c | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/apps/alarm_menu.c b/apps/alarm_menu.c new file mode 100644 index 0000000000..ba16743c82 --- /dev/null +++ b/apps/alarm_menu.c @@ -0,0 +1,154 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2003 Uwe Freese + * + * 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 "status.h" +#include "rtc.h" +#include <stdbool.h> + +#include "lang.h" +#include "power.h" +#include "alarm_menu.h" +#include "backlight.h" + +#ifdef HAVE_ALARM_MOD + +bool alarm_screen(void) +{ + /* get alarm time from RTC */ + + int h, m, hour, minute; + + rtc_get_alarm(&h, &m); + + m = m / 5 * 5; /* 5 min accuracy should be enough */ + + bool done=false; + char buf[32]; + + lcd_clear_display(); + lcd_puts(0,1, str(LANG_ALARM_MOD_KEYS)); + + while(!done) { + snprintf(buf, 32, str(LANG_ALARM_MOD_TIME), h, m); + lcd_puts(0,0, buf); + lcd_update(); + + switch(button_get(true)) { + case BUTTON_PLAY: + /* prevent that an alarm occurs in the shutdown procedure */ + /* accept alarms only if they are in 2 minutes or more */ + hour = rtc_read(0x03); + hour = ((hour & 0x30) >> 4) * 10 + (hour & 0x0f); + minute = rtc_read(0x02); + minute = ((minute & 0x70) >> 4) * 10 + (minute & 0x0f); + int togo = (m + h * 60 - minute - hour * 60 + 1440) % 1440; + if (togo > 1) { + lcd_clear_display(); + snprintf(buf, 32, str(LANG_ALARM_MOD_TIME_TO_GO), togo / 60, togo % 60); + lcd_puts(0,0, buf); + lcd_update(); + rtc_init(); + rtc_set_alarm(h,m); + /* in some cases enabling the alarm results in an activated AF flag */ + /* this should not happen, but it does */ + /* if you know why, tell me! */ + /* for now, we try again forever in this case */ + while (rtc_enable_alarm(true)) { /* error occured */ + sleep(HZ / 10); + rtc_init(); + rtc_set_alarm(h,m); + } + sleep(HZ); + lcd_puts(0,1,str(LANG_ALARM_MOD_SHUTDOWN)); + lcd_update(); + sleep(HZ); + power_off(); + } else { + lcd_clear_display(); + lcd_puts(0,0,str(LANG_ALARM_MOD_ERROR)); + lcd_update(); + sleep(HZ); + lcd_clear_display(); + lcd_puts(0,1,str(LANG_ALARM_MOD_KEYS)); + } + break; + + /* inc(m) */ + case BUTTON_RIGHT: + case BUTTON_RIGHT | BUTTON_REPEAT: + m += 5; + if (m == 60) { + h += 1; + m = 0; + } + if (h == 24) + h = 0; + break; + + /* dec(m) */ + case BUTTON_LEFT: + case BUTTON_LEFT | BUTTON_REPEAT: + m -= 5; + if (m == -5) { + h -= 1; + m = 55; + } + if (h == -1) + h = 23; + break; + +#ifdef HAVE_RECORDER_KEYPAD + /* inc(h) */ + case BUTTON_UP: + case BUTTON_UP | BUTTON_REPEAT: + h = (h+1) % 24; + break; + + /* dec(h) */ + case BUTTON_DOWN: + case BUTTON_DOWN | BUTTON_REPEAT: + h = (h+23) % 24; + break; +#endif + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_OFF: +#else + case BUTTON_STOP: + case BUTTON_MENU: +#endif + done = true; + break; + } + } + + return false; +} + +#endif /* HAVE_ALARM_MOD */
\ No newline at end of file |