1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2003 Uwe Freese
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
37 #include "alarm_menu.h"
41 static void speak_time(int hours
, int minutes
, bool speak_hours
, bool enqueue
)
43 if (global_settings
.talk_menu
){
45 talk_value(hours
, UNIT_HOUR
, enqueue
);
46 talk_value(minutes
, UNIT_MIN
, true);
48 talk_value(minutes
, UNIT_MIN
, enqueue
);
53 bool alarm_screen(void)
61 bool hour_wrapped
= false;
62 struct viewport vp
[NB_SCREENS
];
64 rtc_get_alarm(&h
, &m
);
66 /* After a battery change the RTC values are out of range */
67 if (m
> 60 || h
> 24) {
71 m
= m
/ 5 * 5; /* 5 min accuracy should be enough */
75 viewport_set_defaults(&vp
[i
], i
);
83 screens
[i
].set_viewport(&vp
[i
]);
84 screens
[i
].clear_viewport();
85 screens
[i
].puts(0, 4, str(LANG_ALARM_MOD_KEYS
));
87 /* Talk when entering the wakeup screen */
88 speak_time(h
, m
, true, true);
94 screens
[i
].set_viewport(&vp
[i
]);
95 screens
[i
].putsf(0, 1, str(LANG_ALARM_MOD_TIME
));
96 screens
[i
].putsf(0, 2, "%02d:%02d", h
, m
);
97 screens
[i
].update_viewport();
98 screens
[i
].set_viewport(NULL
);
100 button
= get_action(CONTEXT_SETTINGS
,HZ
);
104 /* prevent that an alarm occurs in the shutdown procedure */
105 /* accept alarms only if they are in 2 minutes or more */
107 togo
= (m
+ h
* 60 - tm
->tm_min
- tm
->tm_hour
* 60 + 1440) % 1440;
112 rtc_enable_alarm(true);
113 if (global_settings
.talk_menu
)
115 talk_id(LANG_ALARM_MOD_TIME_TO_GO
, true);
116 talk_value(togo
/ 60, UNIT_HOUR
, true);
117 talk_value(togo
% 60, UNIT_MIN
, true);
118 talk_force_enqueue_next();
120 splashf(HZ
*2, str(LANG_ALARM_MOD_TIME_TO_GO
),
121 togo
/ 60, togo
% 60);
124 splash(HZ
, ID2P(LANG_ALARM_MOD_ERROR
));
130 case ACTION_SETTINGS_INC
:
131 case ACTION_SETTINGS_INCREPEAT
:
141 speak_time(h
, m
, hour_wrapped
, false);
145 case ACTION_SETTINGS_DEC
:
146 case ACTION_SETTINGS_DECREPEAT
:
156 speak_time(h
, m
, hour_wrapped
, false);
160 case ACTION_STD_NEXT
:
161 case ACTION_STD_NEXTREPEAT
:
164 if (global_settings
.talk_menu
)
165 talk_value(h
, UNIT_HOUR
, false);
169 case ACTION_STD_PREV
:
170 case ACTION_STD_PREVREPEAT
:
173 if (global_settings
.talk_menu
)
174 talk_value(h
, UNIT_HOUR
, false);
177 case ACTION_STD_CANCEL
:
178 rtc_enable_alarm(false);
179 splash(HZ
*2, ID2P(LANG_ALARM_MOD_DISABLE
));
184 hour_wrapped
= false;
188 if(default_event_handler(button
) == SYS_USB_CONNECTED
)
190 rtc_enable_alarm(false);