diff options
Diffstat (limited to 'apps/plugins/clock/clock_settings.c')
-rw-r--r-- | apps/plugins/clock/clock_settings.c | 200 |
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 | |||
26 | static int max_skin[]={ | ||
27 | [ANALOG]=2, | ||
28 | [BINARY]=3, | ||
29 | [DIGITAL]=2, | ||
30 | }; | ||
31 | |||
32 | enum message{ | ||
33 | MESSAGE_LOADING, | ||
34 | MESSAGE_LOADED, | ||
35 | MESSAGE_ERRLOAD, | ||
36 | MESSAGE_SAVING, | ||
37 | MESSAGE_SAVED, | ||
38 | MESSAGE_ERRSAVE | ||
39 | }; | ||
40 | |||
41 | enum settings_file_status{ | ||
42 | LOADED, ERRLOAD, | ||
43 | SAVED, ERRSAVE | ||
44 | }; | ||
45 | |||
46 | struct clock_settings clock_settings; | ||
47 | |||
48 | void 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 | |||
70 | void 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 | |||
80 | void 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 | |||
86 | void 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 | |||
92 | enum 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 | |||
109 | enum 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 | |||
120 | void 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 | |||
133 | void 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 | |||
143 | void 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 | |||
171 | void 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 | |||
198 | void save_settings_wo_gui(void){ | ||
199 | clock_settings_save(&clock_settings, settings_filename); | ||
200 | } | ||