summaryrefslogtreecommitdiff
path: root/apps/plugins/clock/clock_settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/clock/clock_settings.c')
-rw-r--r--apps/plugins/clock/clock_settings.c200
1 files changed, 200 insertions, 0 deletions
diff --git a/apps/plugins/clock/clock_settings.c b/apps/plugins/clock/clock_settings.c
new file mode 100644
index 0000000000..9bd7c90d3b
--- /dev/null
+++ b/apps/plugins/clock/clock_settings.c
@@ -0,0 +1,200 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: jackpot.c 14034 2007-07-28 05:42:55Z kevin $
9 *
10 * Copyright (C) 2007 Copyright Kévin Ferrare based on Zakk Roberts's work
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "clock.h"
21#include "clock_bitmaps.h"
22#include "clock_draw.h"
23#include "clock_settings.h"
24#include "picture.h"
25
26static int max_skin[]={
27 [ANALOG]=2,
28 [BINARY]=3,
29 [DIGITAL]=2,
30};
31
32enum message{
33 MESSAGE_LOADING,
34 MESSAGE_LOADED,
35 MESSAGE_ERRLOAD,
36 MESSAGE_SAVING,
37 MESSAGE_SAVED,
38 MESSAGE_ERRSAVE
39};
40
41enum settings_file_status{
42 LOADED, ERRLOAD,
43 SAVED, ERRSAVE
44};
45
46struct clock_settings clock_settings;
47
48void clock_settings_reset(struct clock_settings* settings){
49 settings->mode = ANALOG;
50 int i;
51 for(i=0;i<NB_CLOCK_MODES;i++){
52 settings->skin[i]=0;
53 }
54 settings->general.hour_format = H12;
55 settings->general.date_format = EUROPEAN;
56 settings->general.show_counter = true;
57 settings->general.save_settings = true;
58 settings->general.idle_poweroff=true;
59 settings->general.backlight = ROCKBOX_SETTING;
60
61 settings->analog.show_date = false;
62 settings->analog.show_seconds = true;
63 settings->analog.show_border = true;
64
65 settings->digital.show_seconds = true;
66 settings->digital.blinkcolon = false;
67 apply_backlight_setting(settings->general.backlight);
68}
69
70void apply_backlight_setting(int backlight_setting)
71{
72 if(backlight_setting == ALWAS_OFF)
73 rb->backlight_set_timeout(0);
74 else if(backlight_setting == ROCKBOX_SETTING)
75 rb->backlight_set_timeout(rb->global_settings->backlight_timeout);
76 else if(backlight_setting == ALWAYS_ON)
77 rb->backlight_set_timeout(1);
78}
79
80void clock_settings_skin_next(struct clock_settings* settings){
81 settings->skin[settings->mode]++;
82 if(settings->skin[settings->mode]>=max_skin[settings->mode])
83 settings->skin[settings->mode]=0;
84}
85
86void clock_settings_skin_previous(struct clock_settings* settings){
87 settings->skin[settings->mode]--;
88 if(settings->skin[settings->mode]<0)
89 settings->skin[settings->mode]=max_skin[settings->mode]-1;
90}
91
92enum settings_file_status clock_settings_load(struct clock_settings* settings,
93 char* filename){
94 int fd = rb->open(filename, O_RDONLY);
95 if(fd >= 0){ /* does file exist? */
96 /* basic consistency check */
97 if(rb->filesize(fd) == sizeof(*settings)){
98 rb->read(fd, settings, sizeof(*settings));
99 rb->close(fd);
100 apply_backlight_setting(settings->general.backlight);
101 return(LOADED);
102 }
103 }
104 /* Initializes the settings with default values at least */
105 clock_settings_reset(settings);
106 return(ERRLOAD);
107}
108
109enum settings_file_status clock_settings_save(struct clock_settings* settings,
110 char* filename){
111 int fd = rb->creat(filename);
112 if(fd >= 0){ /* does file exist? */
113 rb->write (fd, settings, sizeof(*settings));
114 rb->close(fd);
115 return(SAVED);
116 }
117 return(ERRSAVE);
118}
119
120void draw_logo(struct screen* display){
121#ifdef HAVE_LCD_COLOR
122 if(display->is_color){
123 display->set_foreground(LCD_BLACK);
124 display->set_background(LCD_RGBPACK(180,200,230));
125 }
126#endif
127
128 const struct picture* logo = &(logos[display->screen_type]);
129 display->clear_display();
130 picture_draw(display, logo, 0, 0);
131}
132
133void draw_message(struct screen* display, int msg, int y){
134 const struct picture* message = &(messages[display->screen_type]);
135 display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
136 display->fillrect(0, display->height-message->height,
137 display->width, message->height);
138 display->set_drawmode(DRMODE_SOLID);
139 vertical_picture_draw_sprite(display, message, msg,
140 0, display->height-(message->height*y));
141}
142
143void load_settings(void){
144 int i;
145 struct screen* display;
146 FOR_NB_SCREENS(i){
147 display=rb->screens[i];
148 display->clear_display();
149 draw_logo(display);
150 draw_message(display, MESSAGE_LOADING, 1);
151 display->update();
152 }
153
154 enum settings_file_status load_status=
155 clock_settings_load(&clock_settings, settings_filename);
156
157 FOR_NB_SCREENS(i){
158 display=rb->screens[i];
159 if(load_status==LOADED)
160 draw_message(display, MESSAGE_LOADED, 1);
161 else
162 draw_message(display, MESSAGE_ERRLOAD, 1);
163 display->update();
164 }
165#ifndef SIMULATOR
166 rb->ata_sleep();
167#endif
168 rb->sleep(HZ);
169}
170
171void save_settings(void){
172 int i;
173 struct screen* display;
174 FOR_NB_SCREENS(i){
175 display=rb->screens[i];
176 display->clear_display();
177 draw_logo(display);
178
179 draw_message(display, MESSAGE_SAVING, 1);
180
181 display->update();
182 }
183 enum settings_file_status load_status=
184 clock_settings_save(&clock_settings, settings_filename);
185
186 FOR_NB_SCREENS(i){
187 display=rb->screens[i];
188
189 if(load_status==SAVED)
190 draw_message(display, MESSAGE_SAVED, 1);
191 else
192 draw_message(display, MESSAGE_ERRSAVE, 1);
193 display->update();
194 }
195 rb->sleep(HZ);
196}
197
198void save_settings_wo_gui(void){
199 clock_settings_save(&clock_settings, settings_filename);
200}