summaryrefslogtreecommitdiffstats
path: root/apps/alarm_menu.c
diff options
context:
space:
mode:
authorUwe Freese <thebreaker@rockbox.org>2003-01-22 12:50:34 +0000
committerUwe Freese <thebreaker@rockbox.org>2003-01-22 12:50:34 +0000
commit86352ccc3f47bc0f6bdcdcdc7b752f0836900fcd (patch)
tree6bb892fcae88e04a3a45239236cd3dde97d8d7ce /apps/alarm_menu.c
parentfa2229559802f7066b55cc2ab0761c9e742658f7 (diff)
downloadrockbox-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.c154
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