blob: 6cdf2626e0bf64b93669f202188c8525faa469a4 [file] [log] [blame]
Robert Hak84a6ba22002-06-24 21:39:48 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 Robert Hak
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 "config.h"
21
22#include <stdio.h>
23#include <stdbool.h>
Justin Heinerb5025a82002-08-31 04:58:35 +000024
Robert Hak84a6ba22002-06-24 21:39:48 +000025#include "lcd.h"
26#include "menu.h"
27#include "mpeg.h"
28#include "button.h"
29#include "kernel.h"
Björn Stenbergc4d8d972003-02-14 09:44:34 +000030#include "thread.h"
Robert Hak84a6ba22002-06-24 21:39:48 +000031#include "sprintf.h"
Robert Hak84a6ba22002-06-24 21:39:48 +000032#include "settings.h"
33#include "settings_menu.h"
34#include "backlight.h"
Robert Hakea8a4cf2002-10-14 09:12:52 +000035#include "playlist.h" /* for playlist_shuffle */
Daniel Stenberg053d9042002-08-22 15:47:30 +000036#include "fat.h" /* For dotfile settings */
Björn Stenbergfe375a02004-01-14 14:42:31 +000037#include "sleeptimer.h"
Heikki Hannikainen6eb42542002-08-06 10:52:51 +000038#include "powermgmt.h"
Markus Braun3181f682002-08-09 12:38:45 +000039#include "rtc.h"
Björn Stenberg457b8a02002-08-26 13:21:14 +000040#include "ata.h"
Björn Stenbergde5477c2003-09-29 21:26:53 +000041#include "tree.h"
Robert Hak8f4c5042002-10-14 11:55:20 +000042#include "screens.h"
Jörg Hohensohnfa97f162004-03-19 22:15:53 +000043#include "talk.h"
Daniel Stenbergf7c3ffa2002-09-27 10:18:48 +000044#ifdef HAVE_LCD_BITMAP
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +000045#include "peakmeter.h"
Daniel Stenbergf7c3ffa2002-09-27 10:18:48 +000046#endif
Björn Stenberg505eca72002-09-18 14:08:05 +000047#include "lang.h"
Linus Nielsen Feltzingc22b4112003-11-03 23:36:36 +000048#ifdef HAVE_MAS3507D
Linus Nielsen Feltzing54a7e202003-11-04 00:18:19 +000049void dac_line_in(bool enable);
Linus Nielsen Feltzingc22b4112003-11-03 23:36:36 +000050#endif
Björn Stenbergfe375a02004-01-14 14:42:31 +000051#ifdef HAVE_ALARM_MOD
52#include "alarm_menu.h"
53#endif
Robert Hak84a6ba22002-06-24 21:39:48 +000054
Björn Stenbergb1c429e2003-10-17 14:49:00 +000055static bool car_adapter_mode(void)
56{
57 return set_bool_options( str(LANG_CAR_ADAPTER_MODE),
58 &global_settings.car_adapter_mode,
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +000059 STR(LANG_SET_BOOL_YES),
60 STR(LANG_SET_BOOL_NO),
Björn Stenbergb1c429e2003-10-17 14:49:00 +000061 set_car_adapter_mode);
62}
63
Björn Stenbergb1b8bd42002-09-24 17:22:12 +000064static bool contrast(void)
Linus Nielsen Feltzing638184f2002-08-13 11:10:11 +000065{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +000066 return set_int( str(LANG_CONTRAST), "", UNIT_INT,
67 &global_settings.contrast,
Linus Nielsen Feltzing9fb2d342003-06-25 23:24:47 +000068 lcd_set_contrast, 1, MIN_CONTRAST_SETTING,
69 MAX_CONTRAST_SETTING );
Linus Nielsen Feltzing638184f2002-08-13 11:10:11 +000070}
71
Björn Stenberg8d4471d2003-04-24 08:27:11 +000072static bool caption_backlight(void)
73{
74 bool rc = set_bool( str(LANG_CAPTION_BACKLIGHT),
75 &global_settings.caption_backlight);
76
77 return rc;
78}
79
Björn Stenbergd1a6fa12003-06-05 09:38:26 +000080/**
81 * Menu to set icon visibility
82 */
83static bool show_icons(void)
84{
85 return set_bool( str(LANG_SHOW_ICONS), &global_settings.show_icons );
86}
87
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +000088#ifdef HAVE_LCD_BITMAP
Robert Hakda407262002-10-26 05:46:53 +000089
Björn Stenbergd1a6fa12003-06-05 09:38:26 +000090 /**
91 * Menu to set LCD Mode (normal/inverse)
92 */
Björn Stenbergb1079202003-02-27 14:22:30 +000093static bool invert(void)
94{
Björn Stenberg233b7f32003-04-24 13:13:16 +000095 bool rc = set_bool_options(str(LANG_INVERT),
96 &global_settings.invert,
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +000097 STR(LANG_INVERT_LCD_INVERSE),
98 STR(LANG_INVERT_LCD_NORMAL),
Björn Stenberg26712d52003-06-05 11:11:10 +000099 lcd_set_invert_display);
Björn Stenberg233b7f32003-04-24 13:13:16 +0000100 return rc;
Björn Stenbergb1079202003-02-27 14:22:30 +0000101}
102
Björn Stenbergd1a6fa12003-06-05 09:38:26 +0000103/**
104 * Menu to set Line Selector Type (Pointer/Bar)
105 */
Linus Nielsen Feltzinge43b78a2003-04-16 00:12:31 +0000106static bool invert_cursor(void)
107{
Björn Stenberg233b7f32003-04-24 13:13:16 +0000108 return set_bool_options(str(LANG_INVERT_CURSOR),
109 &global_settings.invert_cursor,
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000110 STR(LANG_INVERT_CURSOR_BAR),
111 STR(LANG_INVERT_CURSOR_POINTER),
Björn Stenberg26712d52003-06-05 11:11:10 +0000112 NULL);
Linus Nielsen Feltzinge43b78a2003-04-16 00:12:31 +0000113}
114
Robert Hakda407262002-10-26 05:46:53 +0000115/**
Jörg Hohensohna5e1d062003-12-20 10:00:37 +0000116 * Menu to turn the display+buttons by 180 degrees
117 */
118static bool flip_display(void)
119{
120 bool rc = set_bool( str(LANG_FLIP_DISPLAY),
121 &global_settings.flip_display);
122
123 button_set_flip(global_settings.flip_display);
124 lcd_set_flip(global_settings.flip_display);
125
126 return rc;
127}
128
129/**
Robert Hakda407262002-10-26 05:46:53 +0000130 * Menu to configure the battery display on status bar
131 */
132static bool battery_type(void)
133{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000134 struct opt_items names[] = {
135 { STR(LANG_DISPLAY_GRAPHIC) },
136 { STR(LANG_DISPLAY_NUMERIC) }
137 };
Robert Hakda407262002-10-26 05:46:53 +0000138 return set_option( str(LANG_BATTERY_DISPLAY),
Björn Stenberg26712d52003-06-05 11:11:10 +0000139 &global_settings.battery_type, INT, names, 2, NULL);
Robert Hakda407262002-10-26 05:46:53 +0000140}
141
142/**
143 * Menu to configure the volume display on status bar
144 */
145static bool volume_type(void)
146{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000147 struct opt_items names[] = {
148 { STR(LANG_DISPLAY_GRAPHIC) },
149 { STR(LANG_DISPLAY_NUMERIC) }
150 };
Robert Hakda407262002-10-26 05:46:53 +0000151 return set_option( str(LANG_VOLUME_DISPLAY), &global_settings.volume_type,
Björn Stenberg26712d52003-06-05 11:11:10 +0000152 INT, names, 2, NULL);
Robert Hakda407262002-10-26 05:46:53 +0000153}
154
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000155#ifdef PM_DEBUG
156static bool peak_meter_fps_menu(void) {
157 bool retval = false;
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000158 retval = set_int( "Refresh rate", "/s", UNIT_PER_SEC,
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000159 &peak_meter_fps,
160 NULL, 1, 5, 40);
161 return retval;
162}
163#endif /* PM_DEBUG */
164
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000165/**
166 * Menu to set the hold time of normal peaks.
167 */
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000168static bool peak_meter_hold(void) {
169 bool retval = false;
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000170 struct opt_items names[] = {
171 { STR(LANG_OFF) },
Jörg Hohensohnfa97f162004-03-19 22:15:53 +0000172 { "200 ms " , TALK_ID(200, UNIT_MS) },
173 { "300 ms " , TALK_ID(300, UNIT_MS) },
174 { "500 ms " , TALK_ID(500, UNIT_MS) },
175 { "1 s" , TALK_ID(1, UNIT_SEC) },
176 { "2 s" , TALK_ID(2, UNIT_SEC) },
177 { "3 s" , TALK_ID(3, UNIT_SEC) },
178 { "4 s" , TALK_ID(4, UNIT_SEC) },
179 { "5 s" , TALK_ID(5, UNIT_SEC) },
180 { "6 s" , TALK_ID(6, UNIT_SEC) },
181 { "7 s" , TALK_ID(7, UNIT_SEC) },
182 { "8 s" , TALK_ID(8, UNIT_SEC) },
183 { "9 s" , TALK_ID(9, UNIT_SEC) },
184 { "10 s" , TALK_ID(10, UNIT_SEC) },
185 { "15 s" , TALK_ID(15, UNIT_SEC) },
186 { "20 s" , TALK_ID(20, UNIT_SEC) },
187 { "30 s" , TALK_ID(30, UNIT_SEC) },
188 { "1 min" , TALK_ID(1, UNIT_MIN) }
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000189 };
Björn Stenberg26712d52003-06-05 11:11:10 +0000190 retval = set_option( str(LANG_PM_PEAK_HOLD),
191 &global_settings.peak_meter_hold, INT, names,
192 18, NULL);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000193
194 peak_meter_init_times(global_settings.peak_meter_release,
195 global_settings.peak_meter_hold,
196 global_settings.peak_meter_clip_hold);
197
198 return retval;
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000199}
200
201/**
202 * Menu to set the hold time of clips.
203 */
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000204static bool peak_meter_clip_hold(void) {
205 bool retval = false;
206
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000207 struct opt_items names[] = {
208 { STR(LANG_PM_ETERNAL) },
Jörg Hohensohnfa97f162004-03-19 22:15:53 +0000209 { "1s " , TALK_ID(1, UNIT_SEC) },
210 { "2s " , TALK_ID(2, UNIT_SEC) },
211 { "3s " , TALK_ID(3, UNIT_SEC) },
212 { "4s " , TALK_ID(4, UNIT_SEC) },
213 { "5s " , TALK_ID(5, UNIT_SEC) },
214 { "6s " , TALK_ID(6, UNIT_SEC) },
215 { "7s " , TALK_ID(7, UNIT_SEC) },
216 { "8s " , TALK_ID(8, UNIT_SEC) },
217 { "9s " , TALK_ID(9, UNIT_SEC) },
218 { "10s" , TALK_ID(10, UNIT_SEC) },
219 { "15s" , TALK_ID(15, UNIT_SEC) },
220 { "20s" , TALK_ID(20, UNIT_SEC) },
221 { "25s" , TALK_ID(25, UNIT_SEC) },
222 { "30s" , TALK_ID(30, UNIT_SEC) },
223 { "45s" , TALK_ID(45, UNIT_SEC) },
224 { "60s" , TALK_ID(60, UNIT_SEC) },
225 { "90s" , TALK_ID(90, UNIT_SEC) },
226 { "2min" , TALK_ID(2, UNIT_MIN) },
227 { "3min" , TALK_ID(3, UNIT_MIN) },
228 { "5min" , TALK_ID(5, UNIT_MIN) },
229 { "10min" , TALK_ID(10, UNIT_MIN) },
230 { "20min" , TALK_ID(20, UNIT_MIN) },
231 { "45min" , TALK_ID(45, UNIT_MIN) },
232 { "90min" , TALK_ID(90, UNIT_MIN) }
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000233 };
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000234 retval = set_option( str(LANG_PM_CLIP_HOLD),
Björn Stenberg26712d52003-06-05 11:11:10 +0000235 &global_settings.peak_meter_clip_hold, INT, names,
236 25, peak_meter_set_clip_hold);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000237
238 peak_meter_init_times(global_settings.peak_meter_release,
239 global_settings.peak_meter_hold,
240 global_settings.peak_meter_clip_hold);
241
242 return retval;
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000243}
244
245/**
246 * Menu to set the release time of the peak meter.
247 */
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000248static bool peak_meter_release(void) {
249 bool retval = false;
250
251 /* The range of peak_meter_release is restricted so that it
252 fits into a 7 bit number. The 8th bit is used for storing
253 something else in the rtc ram.
254 Also, the max value is 0x7e, since the RTC value 0xff is reserved */
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000255 retval = set_int( str(LANG_PM_RELEASE), STR(LANG_PM_UNITS_PER_READ),
Robert Hakea8a4cf2002-10-14 09:12:52 +0000256 &global_settings.peak_meter_release,
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000257 NULL, 1, 1, 0x7e);
258
259 peak_meter_init_times(global_settings.peak_meter_release,
260 global_settings.peak_meter_hold,
261 global_settings.peak_meter_clip_hold);
262
263 return retval;
264}
265
266/**
267 * Menu to select wether the scale of the meter
268 * displays dBfs of linear values.
269 */
270static bool peak_meter_scale(void) {
271 bool retval = false;
272 bool use_dbfs = global_settings.peak_meter_dbfs;
273 retval = set_bool_options(str(LANG_PM_SCALE),
274 &use_dbfs,
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000275 STR(LANG_PM_DBFS), STR(LANG_PM_LINEAR),
Björn Stenberg26712d52003-06-05 11:11:10 +0000276 NULL);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000277
278 /* has the user really changed the scale? */
279 if (use_dbfs != global_settings.peak_meter_dbfs) {
280
281 /* store the change */
282 global_settings.peak_meter_dbfs = use_dbfs;
283 peak_meter_set_use_dbfs(use_dbfs);
284
285 /* If the user changed the scale mode the meaning of
286 peak_meter_min (peak_meter_max) has changed. Thus we have
287 to convert the values stored in global_settings. */
288 if (use_dbfs) {
289
290 /* we only store -dBfs */
291 global_settings.peak_meter_min = -peak_meter_get_min() / 100;
292 global_settings.peak_meter_max = -peak_meter_get_max() / 100;
293 } else {
294 int max;
295
296 /* linear percent */
297 global_settings.peak_meter_min = peak_meter_get_min();
298
299 /* converting dBfs -> percent results in a precision loss.
300 I assume that the user doesn't bother that conversion
301 dBfs <-> percent isn't symmetrical for odd values but that
302 he wants 0 dBfs == 100%. Thus I 'correct' the percent value
303 resulting from dBfs -> percent manually here */
304 max = peak_meter_get_max();
305 global_settings.peak_meter_max = max < 99 ? max : 100;
306 }
307 settings_apply_pm_range();
308 }
309 return retval;
310}
311
312/**
313 * Adjust the min value of the value range that
314 * the peak meter shall visualize.
315 */
316static bool peak_meter_min(void) {
317 bool retval = false;
318 if (global_settings.peak_meter_dbfs) {
319
320 /* for dBfs scale */
321 int range_max = -global_settings.peak_meter_max;
322 int min = -global_settings.peak_meter_min;
323
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000324 retval = set_int(str(LANG_PM_MIN), str(LANG_PM_DBFS), UNIT_DB,
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000325 &min, NULL, 1, -89, range_max);
326
327 global_settings.peak_meter_min = - min;
328 }
329
330 /* for linear scale */
331 else {
332 int min = global_settings.peak_meter_min;
333
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000334 retval = set_int(str(LANG_PM_MIN), "%", UNIT_PERCENT,
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000335 &min, NULL,
336 1, 0, global_settings.peak_meter_max - 1);
337
338 global_settings.peak_meter_min = (unsigned char)min;
339 }
340
341 settings_apply_pm_range();
342 return retval;
343}
344
345
346/**
347 * Adjust the max value of the value range that
348 * the peak meter shall visualize.
349 */
350static bool peak_meter_max(void) {
351 bool retval = false;
352 if (global_settings.peak_meter_dbfs) {
353
354 /* for dBfs scale */
355 int range_min = -global_settings.peak_meter_min;
356 int max = -global_settings.peak_meter_max;;
357
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000358 retval = set_int(str(LANG_PM_MAX), str(LANG_PM_DBFS), UNIT_DB,
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000359 &max, NULL, 1, range_min, 0);
360
361 global_settings.peak_meter_max = - max;
362
363 }
364
365 /* for linear scale */
366 else {
367 int max = global_settings.peak_meter_max;
368
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000369 retval = set_int(str(LANG_PM_MAX), "%", UNIT_PERCENT,
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000370 &max, NULL,
371 1, global_settings.peak_meter_min + 1, 100);
372
373 global_settings.peak_meter_max = (unsigned char)max;
374 }
375
376 settings_apply_pm_range();
377 return retval;
378}
379
380/**
381 * Menu to select wether the meter is in
382 * precision or in energy saver mode
383 */
384static bool peak_meter_performance(void) {
385 bool retval = false;
386 retval = set_bool_options(str(LANG_PM_PERFORMANCE),
387 &global_settings.peak_meter_performance,
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000388 STR(LANG_PM_HIGH_PERFORMANCE), STR(LANG_PM_ENERGY_SAVER),
Björn Stenberg26712d52003-06-05 11:11:10 +0000389 NULL);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000390
391 if (global_settings.peak_meter_performance) {
392 peak_meter_fps = 25;
393 } else {
394 peak_meter_fps = 20;
395 }
396 return retval;
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000397}
398
399/**
400 * Menu to configure the peak meter
401 */
402static bool peak_meter_menu(void)
403{
404 int m;
405 bool result;
406
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +0000407 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +0000408 { STR(LANG_PM_RELEASE) , peak_meter_release },
409 { STR(LANG_PM_PEAK_HOLD), peak_meter_hold },
410 { STR(LANG_PM_CLIP_HOLD), peak_meter_clip_hold },
411 { STR(LANG_PM_PERFORMANCE), peak_meter_performance },
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000412#ifdef PM_DEBUG
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +0000413 { "Refresh rate" , -1 , peak_meter_fps_menu },
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000414#endif
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +0000415 { STR(LANG_PM_SCALE) , peak_meter_scale },
416 { STR(LANG_PM_MIN) , peak_meter_min },
417 { STR(LANG_PM_MAX) , peak_meter_max },
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000418 };
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +0000419
420 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
421 NULL, NULL, NULL );
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000422 result = menu_run(m);
423 menu_exit(m);
424 return result;
425}
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +0000426#endif /* HAVE_LCD_BITMAP */
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +0000427
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000428static bool shuffle(void)
Robert Hak84a6ba22002-06-24 21:39:48 +0000429{
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000430 return set_bool( str(LANG_SHUFFLE), &global_settings.playlist_shuffle );
Björn Stenberg60b356e2002-06-27 01:08:11 +0000431}
Björn Stenberga6d0abb2002-10-04 08:48:20 +0000432
433static bool repeat_mode(void)
434{
435 bool result;
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000436 struct opt_items names[] = {
437 { STR(LANG_OFF) },
438 { STR(LANG_REPEAT_ALL) },
439 { STR(LANG_REPEAT_ONE) }
440 };
Björn Stenberga6d0abb2002-10-04 08:48:20 +0000441 int old_repeat = global_settings.repeat_mode;
442
443 result = set_option( str(LANG_REPEAT), &global_settings.repeat_mode,
Björn Stenberg26712d52003-06-05 11:11:10 +0000444 INT, names, 3, NULL );
Björn Stenberga6d0abb2002-10-04 08:48:20 +0000445
446 if (old_repeat != global_settings.repeat_mode)
447 mpeg_flush_and_reload_tracks();
448
449 return result;
450}
Robert Hak84a6ba22002-06-24 21:39:48 +0000451
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000452static bool play_selected(void)
Linus Nielsen Feltzing25316c52002-09-18 10:13:09 +0000453{
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000454 return set_bool( str(LANG_PLAY_SELECTED), &global_settings.play_selected );
Linus Nielsen Feltzing25316c52002-09-18 10:13:09 +0000455}
456
Björn Stenberga7dcf912002-09-24 19:12:09 +0000457static bool dir_filter(void)
Björn Stenberg60b356e2002-06-27 01:08:11 +0000458{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000459 struct opt_items names[] = {
460 { STR(LANG_FILTER_ALL) },
461 { STR(LANG_FILTER_SUPPORTED) },
462 { STR(LANG_FILTER_MUSIC) },
463 { STR(LANG_FILTER_PLAYLIST) }
464 };
Björn Stenberg26712d52003-06-05 11:11:10 +0000465 return set_option( str(LANG_FILTER), &global_settings.dirfilter, INT,
Robert Hak657a2f32002-12-02 04:46:19 +0000466 names, 4, NULL );
Robert Hak84a6ba22002-06-24 21:39:48 +0000467}
468
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000469static bool sort_case(void)
Linus Nielsen Feltzingc132c482002-07-22 16:39:17 +0000470{
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000471 return set_bool( str(LANG_SORT_CASE), &global_settings.sort_case );
Linus Nielsen Feltzingc132c482002-07-22 16:39:17 +0000472}
473
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000474static bool resume(void)
Björn Stenberg6224cdb2002-08-16 14:41:47 +0000475{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000476 struct opt_items names[] = {
477 { STR(LANG_SET_BOOL_NO) },
478 { STR(LANG_RESUME_SETTING_ASK) },
479 { STR(LANG_RESUME_SETTING_ASK_ONCE) },
480 { STR(LANG_SET_BOOL_YES) }
481 };
Björn Stenberg26712d52003-06-05 11:11:10 +0000482 return set_option( str(LANG_RESUME), &global_settings.resume, INT,
Robert Hakc88751f2002-10-16 07:25:33 +0000483 names, 4, NULL );
Björn Stenberg6224cdb2002-08-16 14:41:47 +0000484}
485
Björn Stenberga108ec22004-01-14 00:13:04 +0000486static bool autocreatebookmark(void)
487{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000488 struct opt_items names[] = {
489 { STR(LANG_SET_BOOL_NO) },
490 { STR(LANG_SET_BOOL_YES) },
491 { STR(LANG_RESUME_SETTING_ASK) },
492 { STR(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES) },
493 { STR(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK) }
494 };
Björn Stenberga108ec22004-01-14 00:13:04 +0000495 return set_option( str(LANG_BOOKMARK_SETTINGS_AUTOCREATE),
496 &global_settings.autocreatebookmark, INT,
497 names, 5, NULL );
498}
499
500static bool autoloadbookmark(void)
501{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000502 struct opt_items names[] = {
503 { STR(LANG_SET_BOOL_NO) },
504 { STR(LANG_SET_BOOL_YES) },
505 { STR(LANG_RESUME_SETTING_ASK) }
506 };
Björn Stenberga108ec22004-01-14 00:13:04 +0000507 return set_option( str(LANG_BOOKMARK_SETTINGS_AUTOLOAD),
508 &global_settings.autoloadbookmark, INT,
509 names, 3, NULL );
510}
511
512static bool useMRB(void)
513{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000514 struct opt_items names[] = {
515 { STR(LANG_SET_BOOL_NO) },
516 { STR(LANG_SET_BOOL_YES) },
517 { STR(LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY) }
518 };
Björn Stenberga108ec22004-01-14 00:13:04 +0000519 return set_option( str(LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS),
520 &global_settings.usemrb, INT,
521 names, 3, NULL );
522}
Daniel Stenbergb95fe1a2002-10-01 10:59:36 +0000523static bool backlight_on_when_charging(void)
524{
525 bool result = set_bool(str(LANG_BACKLIGHT_ON_WHEN_CHARGING),
526 &global_settings.backlight_on_when_charging);
527 backlight_set_on_when_charging(global_settings.backlight_on_when_charging);
528 return result;
529}
Daniel Stenbergb95fe1a2002-10-01 10:59:36 +0000530
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000531static bool backlight_timer(void)
Robert Hak84a6ba22002-06-24 21:39:48 +0000532{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000533 struct opt_items names[] = {
534 { STR(LANG_OFF) },
535 { STR(LANG_ON) },
Jörg Hohensohnfa97f162004-03-19 22:15:53 +0000536 { "1s ", TALK_ID(1, UNIT_SEC) },
537 { "2s ", TALK_ID(2, UNIT_SEC) },
538 { "3s ", TALK_ID(3, UNIT_SEC) },
539 { "4s ", TALK_ID(4, UNIT_SEC) },
540 { "5s ", TALK_ID(5, UNIT_SEC) },
541 { "6s ", TALK_ID(6, UNIT_SEC) },
542 { "7s ", TALK_ID(7, UNIT_SEC) },
543 { "8s ", TALK_ID(8, UNIT_SEC) },
544 { "9s ", TALK_ID(9, UNIT_SEC) },
545 { "10s", TALK_ID(10, UNIT_SEC) },
546 { "15s", TALK_ID(15, UNIT_SEC) },
547 { "20s", TALK_ID(20, UNIT_SEC) },
548 { "25s", TALK_ID(25, UNIT_SEC) },
549 { "30s", TALK_ID(30, UNIT_SEC) },
550 { "45s", TALK_ID(45, UNIT_SEC) },
551 { "60s", TALK_ID(60, UNIT_SEC) },
552 { "90s", TALK_ID(90, UNIT_SEC) }
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000553 };
Daniel Stenbergb95fe1a2002-10-01 10:59:36 +0000554 return set_option(str(LANG_BACKLIGHT), &global_settings.backlight_timeout,
Björn Stenberg26712d52003-06-05 11:11:10 +0000555 INT, names, 19, backlight_set_timeout );
Robert Hak84a6ba22002-06-24 21:39:48 +0000556}
557
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000558static bool poweroff_idle_timer(void)
Linus Nielsen Feltzing083a6db2002-09-23 11:42:48 +0000559{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000560 struct opt_items names[] = {
561 { STR(LANG_OFF) },
Jörg Hohensohnfa97f162004-03-19 22:15:53 +0000562 { "1m ", TALK_ID(1, UNIT_MIN) },
563 { "2m ", TALK_ID(2, UNIT_MIN) },
564 { "3m ", TALK_ID(3, UNIT_MIN) },
565 { "4m ", TALK_ID(4, UNIT_MIN) },
566 { "5m ", TALK_ID(5, UNIT_MIN) },
567 { "6m ", TALK_ID(6, UNIT_MIN) },
568 { "7m ", TALK_ID(7, UNIT_MIN) },
569 { "8m ", TALK_ID(8, UNIT_MIN) },
570 { "9m ", TALK_ID(9, UNIT_MIN) },
571 { "10m", TALK_ID(10, UNIT_MIN) },
572 { "15m", TALK_ID(15, UNIT_MIN) },
573 { "30m", TALK_ID(30, UNIT_MIN) },
574 { "45m", TALK_ID(45, UNIT_MIN) },
575 { "60m", TALK_ID(60, UNIT_MIN) }
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000576 };
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000577 return set_option(str(LANG_POWEROFF_IDLE), &global_settings.poweroff,
Björn Stenberg26712d52003-06-05 11:11:10 +0000578 INT, names, 15, set_poweroff_timeout);
Linus Nielsen Feltzing083a6db2002-09-23 11:42:48 +0000579}
580
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000581static bool scroll_speed(void)
Robert Hak84a6ba22002-06-24 21:39:48 +0000582{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000583 return set_int(str(LANG_SCROLL), "Hz", UNIT_HERTZ,
584 &global_settings.scroll_speed,
Robert Hakb4b9e3b2002-12-12 20:29:51 +0000585 &lcd_scroll_speed, 1, 1, 10 );
Robert Hak048fa132002-12-12 17:20:37 +0000586}
587
588
589static bool scroll_delay(void)
590{
591 int dummy = global_settings.scroll_delay * (HZ/10);
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000592 int rc = set_int(str(LANG_SCROLL_DELAY), "ms", UNIT_MS,
593 &dummy,
Robert Hak89d8f762002-12-12 20:34:30 +0000594 &lcd_scroll_delay, 100, 0, 2500 );
Robert Hak048fa132002-12-12 17:20:37 +0000595 global_settings.scroll_delay = dummy / (HZ/10);
596 return rc;
Robert Hak84a6ba22002-06-24 21:39:48 +0000597}
598
Björn Stenberga2e98c12002-12-12 15:20:37 +0000599#ifdef HAVE_LCD_BITMAP
600static bool scroll_step(void)
601{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000602 return set_int(str(LANG_SCROLL_STEP_EXAMPLE), "pixels", UNIT_PIXEL,
Björn Stenberga2e98c12002-12-12 15:20:37 +0000603 &global_settings.scroll_step,
604 &lcd_scroll_step, 1, 1, LCD_WIDTH );
605}
Mats Lidellc65dadf2003-01-14 10:48:01 +0000606#endif
Björn Stenberga2e98c12002-12-12 15:20:37 +0000607
Björn Stenberga2e98c12002-12-12 15:20:37 +0000608static bool bidir_limit(void)
609{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000610 return set_int(str(LANG_BIDIR_SCROLL), "%", UNIT_PERCENT,
611 &global_settings.bidir_limit,
Björn Stenberga2e98c12002-12-12 15:20:37 +0000612 &lcd_bidir_scroll, 25, 0, 200 );
613}
Björn Stenberga2e98c12002-12-12 15:20:37 +0000614
Kjell Ericson53f156a2003-05-22 06:42:14 +0000615#ifdef HAVE_LCD_CHARCELLS
616static bool jump_scroll(void)
617{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000618 struct opt_items names[] = {
619 { STR(LANG_OFF) },
620 { STR(LANG_ONE_TIME) },
Jörg Hohensohnfa97f162004-03-19 22:15:53 +0000621 { "2", TALK_ID(2, UNIT_INT) },
622 { "3", TALK_ID(3, UNIT_INT) },
623 { "4", TALK_ID(4, UNIT_INT) },
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000624 { STR(LANG_ALWAYS) }
625 };
Kjell Ericson6143eeb2003-05-27 12:54:11 +0000626 bool ret;
627 ret=set_option(str(LANG_JUMP_SCROLL), &global_settings.jump_scroll,
Björn Stenberg26712d52003-06-05 11:11:10 +0000628 INT, names, 6, lcd_jump_scroll);
Kjell Ericson6143eeb2003-05-27 12:54:11 +0000629 return ret;
630}
631static bool jump_scroll_delay(void)
632{
633 int dummy = global_settings.jump_scroll_delay * (HZ/10);
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000634 int rc = set_int(str(LANG_JUMP_SCROLL_DELAY), "ms", UNIT_MS,
635 &dummy,
Kjell Ericson6143eeb2003-05-27 12:54:11 +0000636 &lcd_jump_scroll_delay, 100, 0, 2500 );
637 global_settings.jump_scroll_delay = dummy / (HZ/10);
638 return rc;
Kjell Ericson53f156a2003-05-22 06:42:14 +0000639}
640#endif
641
Uwe Freese0bf70e62002-12-16 22:58:48 +0000642#ifndef SIMULATOR
Uwe Freese4cff0302002-12-15 18:12:00 +0000643/**
644 * Menu to set the battery capacity
645 */
Uwe Freese0bf70e62002-12-16 22:58:48 +0000646static bool battery_capacity(void)
647{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000648 return set_int(str(LANG_BATTERY_CAPACITY), "mAh", UNIT_MAH,
649 &global_settings.battery_capacity,
Uwe Freese0bf70e62002-12-16 22:58:48 +0000650 &set_battery_capacity, 50, 1500, BATTERY_CAPACITY_MAX );
Uwe Freese4cff0302002-12-15 18:12:00 +0000651}
Uwe Freese0bf70e62002-12-16 22:58:48 +0000652#endif
Uwe Freese4cff0302002-12-15 18:12:00 +0000653
Heikki Hannikainen6eb42542002-08-06 10:52:51 +0000654#ifdef HAVE_CHARGE_CTRL
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000655static bool deep_discharge(void)
Heikki Hannikainen6eb42542002-08-06 10:52:51 +0000656{
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000657 bool result;
658 result = set_bool( str(LANG_DISCHARGE), &global_settings.discharge );
Robert Hak228ec422002-09-04 04:02:46 +0000659 charge_restart_level = global_settings.discharge ?
660 CHARGE_RESTART_LO : CHARGE_RESTART_HI;
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000661 return result;
Heikki Hannikainen6eb42542002-08-06 10:52:51 +0000662}
Uwe Freesedb5bcc62002-12-14 15:45:39 +0000663static bool trickle_charge(void)
664{
665 bool result;
666 result = set_bool( str(LANG_TRICKLE_CHARGE), &global_settings.trickle_charge );
Uwe Freeseae1ba1d2002-12-16 15:02:23 +0000667 enable_trickle_charge(global_settings.trickle_charge);
Uwe Freesedb5bcc62002-12-14 15:45:39 +0000668 return result;
669}
Heikki Hannikainen6eb42542002-08-06 10:52:51 +0000670#endif
671
Björn Stenbergfe375a02004-01-14 14:42:31 +0000672#ifdef HAVE_RTC
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000673static bool timedate_set(void)
Markus Braun3181f682002-08-09 12:38:45 +0000674{
Markus Braun2012acf2002-08-09 13:50:58 +0000675 int timedate[7]; /* hour,minute,second,year,month,day,dayofweek */
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000676 bool result;
Markus Braun3181f682002-08-09 12:38:45 +0000677
Markus Braun3181f682002-08-09 12:38:45 +0000678 timedate[0] = rtc_read(0x03); /* hour */
679 timedate[1] = rtc_read(0x02); /* minute */
680 timedate[2] = rtc_read(0x01); /* second */
Markus Braun2012acf2002-08-09 13:50:58 +0000681 timedate[3] = rtc_read(0x07); /* year */
Markus Braun3181f682002-08-09 12:38:45 +0000682 timedate[4] = rtc_read(0x06); /* month */
Markus Braun2012acf2002-08-09 13:50:58 +0000683 timedate[5] = rtc_read(0x05); /* day */
Markus Braun44ee2ab2003-05-27 14:28:08 +0000684
685 /* day of week not read, calculated in set_time() */
Robert Hak228ec422002-09-04 04:02:46 +0000686 /* hour */
687 timedate[0] = ((timedate[0] & 0x30) >> 4) * 10 + (timedate[0] & 0x0f);
688 /* minute */
689 timedate[1] = ((timedate[1] & 0x70) >> 4) * 10 + (timedate[1] & 0x0f);
690 /* second */
691 timedate[2] = ((timedate[2] & 0x70) >> 4) * 10 + (timedate[2] & 0x0f);
692 /* year */
693 timedate[3] = ((timedate[3] & 0xf0) >> 4) * 10 + (timedate[3] & 0x0f);
694 /* month */
695 timedate[4] = ((timedate[4] & 0x10) >> 4) * 10 + (timedate[4] & 0x0f);
696 /* day */
697 timedate[5] = ((timedate[5] & 0x30) >> 4) * 10 + (timedate[5] & 0x0f);
Markus Braun44ee2ab2003-05-27 14:28:08 +0000698
699 /* do some range checks */
700 /* This prevents problems with time/date setting after a power loss */
701 if (timedate[0] < 0 || timedate[0] > 23 ||
702 timedate[1] < 0 || timedate[1] > 59 ||
703 timedate[2] < 0 || timedate[2] > 59 ||
704 timedate[3] < 0 || timedate[3] > 99 ||
Markus Braun66875e02003-05-27 14:40:18 +0000705 timedate[4] < 1 || timedate[4] > 12 ||
706 timedate[5] < 1 || timedate[5] > 31)
Markus Braun44ee2ab2003-05-27 14:28:08 +0000707 {
708 /* hour */
709 timedate[0] = 0;
710 /* minute */
711 timedate[1] = 0;
712 /* second */
713 timedate[2] = 0;
714 /* year */
715 timedate[3] = 3;
716 /* month */
717 timedate[4] = 1;
718 /* day */
719 timedate[5] = 1;
720 }
Markus Braun3181f682002-08-09 12:38:45 +0000721
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000722 result = set_time(str(LANG_TIME),timedate);
Markus Braun3181f682002-08-09 12:38:45 +0000723
724 if(timedate[0] != -1) {
Robert Hak228ec422002-09-04 04:02:46 +0000725 /* hour */
726 timedate[0] = ((timedate[0]/10) << 4 | timedate[0]%10) & 0x3f;
727 /* minute */
728 timedate[1] = ((timedate[1]/10) << 4 | timedate[1]%10) & 0x7f;
729 /* second */
730 timedate[2] = ((timedate[2]/10) << 4 | timedate[2]%10) & 0x7f;
731 /* year */
732 timedate[3] = ((timedate[3]/10) << 4 | timedate[3]%10) & 0xff;
733 /* month */
734 timedate[4] = ((timedate[4]/10) << 4 | timedate[4]%10) & 0x1f;
735 /* day */
736 timedate[5] = ((timedate[5]/10) << 4 | timedate[5]%10) & 0x3f;
737
Björn Stenberg505eca72002-09-18 14:08:05 +0000738 rtc_write(0x03, timedate[0] | (rtc_read(0x03) & 0xc0)); /* hour */
739 rtc_write(0x02, timedate[1] | (rtc_read(0x02) & 0x80)); /* minute */
740 rtc_write(0x01, timedate[2] | (rtc_read(0x01) & 0x80)); /* second */
741 rtc_write(0x07, timedate[3]); /* year */
742 rtc_write(0x06, timedate[4] | (rtc_read(0x06) & 0xe0)); /* month */
743 rtc_write(0x05, timedate[5] | (rtc_read(0x05) & 0xc0)); /* day */
744 rtc_write(0x04, timedate[6] | (rtc_read(0x04) & 0xf8)); /* dayofweek */
745 rtc_write(0x00, 0x00); /* 0.1 + 0.01 seconds */
Markus Braun3181f682002-08-09 12:38:45 +0000746 }
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000747 return result;
Markus Braun3181f682002-08-09 12:38:45 +0000748}
Markus Braun22a7a2d2002-10-14 12:50:20 +0000749
750static bool timeformat_set(void)
751{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000752 struct opt_items names[] = {
753 { STR(LANG_24_HOUR_CLOCK) },
754 { STR(LANG_12_HOUR_CLOCK) }
755 };
Björn Stenberg26712d52003-06-05 11:11:10 +0000756 return set_option(str(LANG_TIMEFORMAT), &global_settings.timeformat,
757 INT, names, 2, NULL);
Markus Braun22a7a2d2002-10-14 12:50:20 +0000758}
Markus Braun3181f682002-08-09 12:38:45 +0000759#endif
760
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000761static bool spindown(void)
Björn Stenberg457b8a02002-08-26 13:21:14 +0000762{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000763 return set_int(str(LANG_SPINDOWN), "s", UNIT_SEC,
764 &global_settings.disk_spindown,
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000765 ata_spindown, 1, 3, 254 );
Björn Stenberg05704972002-08-14 19:23:34 +0000766}
767
Linus Nielsen Feltzingc22b4112003-11-03 23:36:36 +0000768#ifdef HAVE_MAS3507D
769static bool line_in(void)
770{
771 bool rc = set_bool(str(LANG_LINE_IN), &global_settings.line_in);
772 dac_line_in(global_settings.line_in);
773 return rc;
774}
775#endif
776
Daniel Stenberg39c54742002-11-29 07:05:46 +0000777#ifdef HAVE_ATA_POWER_OFF
Björn Stenberg2b77b4f2002-11-28 22:46:19 +0000778static bool poweroff(void)
779{
780 bool rc = set_bool(str(LANG_POWEROFF), &global_settings.disk_poweroff);
781 ata_poweroff(global_settings.disk_poweroff);
782 return rc;
783}
Daniel Stenberg39c54742002-11-29 07:05:46 +0000784#endif
Björn Stenberg2b77b4f2002-11-28 22:46:19 +0000785
Linus Nielsen Feltzing20d031f2003-05-09 16:01:21 +0000786static bool max_files_in_dir(void)
787{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000788 return set_int(str(LANG_MAX_FILES_IN_DIR), "", UNIT_INT,
Linus Nielsen Feltzing20d031f2003-05-09 16:01:21 +0000789 &global_settings.max_files_in_dir,
790 NULL, 50, 50, 10000 );
791}
792
793static bool max_files_in_playlist(void)
794{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000795 return set_int(str(LANG_MAX_FILES_IN_PLAYLIST), "", UNIT_INT,
Linus Nielsen Feltzing20d031f2003-05-09 16:01:21 +0000796 &global_settings.max_files_in_playlist,
Linus Nielsen Feltzing2ce9ba52003-05-09 21:59:04 +0000797 NULL, 1000, 1000, 20000 );
Linus Nielsen Feltzing20d031f2003-05-09 16:01:21 +0000798}
799
Linus Nielsen Feltzingb8ff5f82002-12-05 13:09:51 +0000800static bool buffer_margin(void)
801{
Jörg Hohensohnbeec2e92004-03-20 16:49:58 +0000802 return set_int(str(LANG_MP3BUFFER_MARGIN), "s", UNIT_SEC,
Linus Nielsen Feltzingb8ff5f82002-12-05 13:09:51 +0000803 &global_settings.buffer_margin,
804 mpeg_set_buffer_margin, 1, 0, 7 );
805}
806
Linus Nielsen Feltzing20d031f2003-05-09 16:01:21 +0000807static bool ff_rewind_min_step(void)
Eric Linenberg7eb27112002-09-04 03:38:37 +0000808{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000809 struct opt_items names[] = {
Jörg Hohensohnfa97f162004-03-19 22:15:53 +0000810 { "1s", TALK_ID(1, UNIT_SEC) },
811 { "2s", TALK_ID(2, UNIT_SEC) },
812 { "3s", TALK_ID(3, UNIT_SEC) },
813 { "4s", TALK_ID(4, UNIT_SEC) },
814 { "5s", TALK_ID(5, UNIT_SEC) },
815 { "6s", TALK_ID(6, UNIT_SEC) },
816 { "8s", TALK_ID(8, UNIT_SEC) },
817 { "10s", TALK_ID(10, UNIT_SEC) },
818 { "15s", TALK_ID(15, UNIT_SEC) },
819 { "20s", TALK_ID(20, UNIT_SEC) },
820 { "25s", TALK_ID(25, UNIT_SEC) },
821 { "30s", TALK_ID(30, UNIT_SEC) },
822 { "45s", TALK_ID(45, UNIT_SEC) },
823 { "60s", TALK_ID(60, UNIT_SEC) }
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000824 };
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000825 return set_option(str(LANG_FFRW_STEP), &global_settings.ff_rewind_min_step,
Björn Stenberg26712d52003-06-05 11:11:10 +0000826 INT, names, 14, NULL );
Eric Linenberg7eb27112002-09-04 03:38:37 +0000827}
828
Björn Stenberge2628d92003-02-14 15:54:52 +0000829static bool set_fade_on_stop(void)
830{
831 return set_bool( str(LANG_FADE_ON_STOP), &global_settings.fade_on_stop );
832}
833
834
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000835static bool ff_rewind_accel(void)
Justin Heiner8097ee62002-08-29 05:41:35 +0000836{
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000837 struct opt_items names[] = {
838 { STR(LANG_OFF) },
Jörg Hohensohnfa97f162004-03-19 22:15:53 +0000839 { "2x/1s", TALK_ID(1, UNIT_SEC) },
840 { "2x/2s", TALK_ID(2, UNIT_SEC) },
841 { "2x/3s", TALK_ID(3, UNIT_SEC) },
842 { "2x/4s", TALK_ID(4, UNIT_SEC) },
843 { "2x/5s", TALK_ID(5, UNIT_SEC) },
844 { "2x/6s", TALK_ID(6, UNIT_SEC) },
845 { "2x/7s", TALK_ID(7, UNIT_SEC) },
846 { "2x/8s", TALK_ID(8, UNIT_SEC) },
847 { "2x/9s", TALK_ID(9, UNIT_SEC) },
848 { "2x/10s", TALK_ID(10, UNIT_SEC) },
849 { "2x/11s", TALK_ID(11, UNIT_SEC) },
850 { "2x/12s", TALK_ID(12, UNIT_SEC) },
851 { "2x/13s", TALK_ID(13, UNIT_SEC) },
852 { "2x/14s", TALK_ID(14, UNIT_SEC) },
853 { "2x/15s", TALK_ID(15, UNIT_SEC) }
Jörg Hohensohn42ffbf92004-03-15 08:27:51 +0000854 };
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000855 return set_option(str(LANG_FFRW_ACCEL), &global_settings.ff_rewind_accel,
Björn Stenberg26712d52003-06-05 11:11:10 +0000856 INT, names, 16, NULL );
Justin Heiner8097ee62002-08-29 05:41:35 +0000857}
Eric Linenberg65240762002-08-28 19:34:07 +0000858
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000859static bool browse_current(void)
Eric Linenbergecca1232002-09-09 14:25:39 +0000860{
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000861 return set_bool( str(LANG_FOLLOW), &global_settings.browse_current );
Eric Linenbergecca1232002-09-09 14:25:39 +0000862}
863
Björn Stenbergde5477c2003-09-29 21:26:53 +0000864static bool custom_wps_browse(void)
865{
866 return rockbox_browse(ROCKBOX_DIR, SHOW_WPS);
867}
868
869static bool custom_cfg_browse(void)
870{
871 return rockbox_browse(ROCKBOX_DIR, SHOW_CFG);
872}
873
874static bool language_browse(void)
875{
Daniel Stenberg0f689582004-01-08 12:40:25 +0000876 return rockbox_browse(ROCKBOX_DIR LANG_DIR, SHOW_LNG);
Björn Stenbergde5477c2003-09-29 21:26:53 +0000877}
878
Jörg Hohensohn3aa99e12004-03-27 00:11:01 +0000879static bool voice_menus(void)
880{
881 bool ret;
882 bool temp = global_settings.talk_menu;
883 /* work on a temp variable first, avoid "life" disabling */
884 ret = set_bool( str(LANG_VOICE_MENU), &temp );
885 global_settings.talk_menu = temp;
886 return ret;
887}
888
889static bool voice_dirs(void)
890{
891 struct opt_items names[] = {
892 { STR(LANG_OFF) },
893 { STR(LANG_VOICE_NUMBER) },
Jörg Hohensohnc8592ba2004-04-04 19:08:44 +0000894 { STR(LANG_VOICE_SPELL) },
Jörg Hohensohn3aa99e12004-03-27 00:11:01 +0000895 { STR(LANG_VOICE_DIR_ENTER) },
896 { STR(LANG_VOICE_DIR_HOVER) }
897 };
898 return set_option( str(LANG_VOICE_DIR),
Jörg Hohensohnc8592ba2004-04-04 19:08:44 +0000899 &global_settings.talk_dir, INT, names, 5, NULL);
Jörg Hohensohn3aa99e12004-03-27 00:11:01 +0000900}
901
902static bool voice_files(void)
903{
904 struct opt_items names[] = {
905 { STR(LANG_OFF) },
Jörg Hohensohnc8592ba2004-04-04 19:08:44 +0000906 { STR(LANG_VOICE_NUMBER) },
907 { STR(LANG_VOICE_SPELL) }
Jörg Hohensohn3aa99e12004-03-27 00:11:01 +0000908 };
Jörg Hohensohnc8592ba2004-04-04 19:08:44 +0000909 return set_option( str(LANG_VOICE_FILE),
910 &global_settings.talk_file, INT, names, 3, NULL);
Jörg Hohensohn3aa99e12004-03-27 00:11:01 +0000911}
912
913static bool voice_menu(void)
914{
915 int m;
916 bool result;
917
918 struct menu_item items[] = {
919 { STR(LANG_VOICE_MENU), voice_menus },
920 { STR(LANG_VOICE_DIR), voice_dirs },
921 { STR(LANG_VOICE_FILE), voice_files }
922 };
923
924 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
925 NULL, NULL, NULL);
926 result = menu_run(m);
927 menu_exit(m);
928 return result;
929}
930
Björn Stenbergfe375a02004-01-14 14:42:31 +0000931#ifdef HAVE_LCD_BITMAP
Björn Stenbergde5477c2003-09-29 21:26:53 +0000932static bool font_browse(void)
933{
Daniel Stenberg0f689582004-01-08 12:40:25 +0000934 return rockbox_browse(ROCKBOX_DIR FONT_DIR, SHOW_FONT);
Björn Stenbergde5477c2003-09-29 21:26:53 +0000935}
Björn Stenbergde5477c2003-09-29 21:26:53 +0000936
Jörg Hohensohn459abc22003-04-21 12:39:36 +0000937static bool scroll_bar(void)
938{
939 return set_bool( str(LANG_SCROLL_BAR), &global_settings.scrollbar );
940}
941
942static bool status_bar(void)
943{
944 return set_bool( str(LANG_STATUS_BAR), &global_settings.statusbar );
945}
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +0000946
947static bool button_bar(void)
948{
949 return set_bool( str(LANG_BUTTON_BAR), &global_settings.buttonbar );
950}
Linus Nielsen Feltzing72221682003-04-22 00:04:47 +0000951#endif
Jörg Hohensohn459abc22003-04-21 12:39:36 +0000952
Björn Stenbergfe375a02004-01-14 14:42:31 +0000953static bool ff_rewind_settings_menu(void)
954{
955 int m;
956 bool result;
957
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +0000958 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +0000959 { STR(LANG_FFRW_STEP), ff_rewind_min_step },
960 { STR(LANG_FFRW_ACCEL), ff_rewind_accel },
Björn Stenbergfe375a02004-01-14 14:42:31 +0000961 };
962
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +0000963 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
964 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +0000965 result = menu_run(m);
966 menu_exit(m);
967
968 return result;
969}
970
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000971static bool playback_settings_menu(void)
Eric Linenbergc5b645b2002-09-05 04:42:12 +0000972{
973 int m;
Björn Stenbergb1b8bd42002-09-24 17:22:12 +0000974 bool result;
Eric Linenbergc5b645b2002-09-05 04:42:12 +0000975
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +0000976 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +0000977 { STR(LANG_SHUFFLE), shuffle },
978 { STR(LANG_REPEAT), repeat_mode },
979 { STR(LANG_PLAY_SELECTED), play_selected },
980 { STR(LANG_RESUME), resume },
981 { STR(LANG_WIND_MENU), ff_rewind_settings_menu },
982 { STR(LANG_MP3BUFFER_MARGIN), buffer_margin },
983 { STR(LANG_FADE_ON_STOP), set_fade_on_stop },
Robert Hak84a6ba22002-06-24 21:39:48 +0000984 };
Björn Stenberg505eca72002-09-18 14:08:05 +0000985
Daniel Stenberg360ae3e2002-08-02 13:20:03 +0000986 bool old_shuffle = global_settings.playlist_shuffle;
Björn Stenbergfe375a02004-01-14 14:42:31 +0000987
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +0000988 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
989 NULL, NULL, NULL);
Daniel Stenbergb2850762002-08-23 12:32:52 +0000990 result = menu_run(m);
Robert Hak84a6ba22002-06-24 21:39:48 +0000991 menu_exit(m);
Daniel Stenberg360ae3e2002-08-02 13:20:03 +0000992
993 if (old_shuffle != global_settings.playlist_shuffle)
994 {
995 if (global_settings.playlist_shuffle)
996 {
Hardeep Sidhu107ebc52004-01-26 17:05:21 +0000997 playlist_randomise(NULL, current_tick, true);
Daniel Stenberg360ae3e2002-08-02 13:20:03 +0000998 }
999 else
1000 {
Hardeep Sidhu107ebc52004-01-26 17:05:21 +00001001 playlist_sort(NULL, true);
Daniel Stenberg360ae3e2002-08-02 13:20:03 +00001002 }
1003 }
Daniel Stenbergb2850762002-08-23 12:32:52 +00001004 return result;
Robert Hak84a6ba22002-06-24 21:39:48 +00001005}
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001006
Björn Stenberga108ec22004-01-14 00:13:04 +00001007static bool bookmark_settings_menu(void)
1008{
1009 int m;
1010 bool result;
1011
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001012 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001013 { STR(LANG_BOOKMARK_SETTINGS_AUTOCREATE), autocreatebookmark},
1014 { STR(LANG_BOOKMARK_SETTINGS_AUTOLOAD), autoloadbookmark},
1015 { STR(LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS), useMRB},
Björn Stenberga108ec22004-01-14 00:13:04 +00001016 };
1017
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001018 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1019 NULL, NULL, NULL);
Björn Stenberga108ec22004-01-14 00:13:04 +00001020 result = menu_run(m);
1021 menu_exit(m);
1022
1023 return result;
1024}
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001025static bool reset_settings(void)
Justin Heiner2f9b54b2002-09-06 07:00:20 +00001026{
Robert Hakea8a4cf2002-10-14 09:12:52 +00001027 bool done=false;
1028 int line;
1029
1030 lcd_clear_display();
1031
1032#ifdef HAVE_LCD_CHARCELLS
1033 line = 0;
1034#else
1035 line = 1;
1036 lcd_puts(0,0,str(LANG_RESET_ASK_RECORDER));
1037#endif
1038 lcd_puts(0,line,str(LANG_RESET_CONFIRM));
1039 lcd_puts(0,line+1,str(LANG_RESET_CANCEL));
1040
1041 lcd_update();
Robert Hakea8a4cf2002-10-14 09:12:52 +00001042
1043 while(!done) {
1044 switch(button_get(true)) {
1045 case BUTTON_PLAY:
1046 settings_reset();
1047 settings_apply();
Robert Hak65002e82002-12-12 16:56:19 +00001048 lcd_clear_display();
Robert Hakea8a4cf2002-10-14 09:12:52 +00001049 lcd_puts(0,1,str(LANG_RESET_DONE_CLEAR));
1050 done = true;
1051 break;
1052
Björn Stenbergfe375a02004-01-14 14:42:31 +00001053#ifdef HAVE_RECORDER_KEYPAD
Robert Hakea8a4cf2002-10-14 09:12:52 +00001054 case BUTTON_OFF:
Justin Heiner2f9b54b2002-09-06 07:00:20 +00001055#else
Robert Hakea8a4cf2002-10-14 09:12:52 +00001056 case BUTTON_STOP:
Justin Heiner2f9b54b2002-09-06 07:00:20 +00001057#endif
Robert Hak65002e82002-12-12 16:56:19 +00001058 lcd_clear_display();
Robert Hakea8a4cf2002-10-14 09:12:52 +00001059 lcd_puts(0,1,str(LANG_RESET_DONE_CANCEL));
1060 done = true;
1061 break;
1062
1063 case SYS_USB_CONNECTED:
1064 usb_screen();
1065 return true;
1066 }
Justin Heiner2f9b54b2002-09-06 07:00:20 +00001067 }
Robert Hakea8a4cf2002-10-14 09:12:52 +00001068
1069 lcd_puts(0,0,str(LANG_RESET_DONE_SETTING));
1070 lcd_update();
1071 sleep(HZ);
1072 return false;
Justin Heiner2f9b54b2002-09-06 07:00:20 +00001073}
1074
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001075static bool fileview_settings_menu(void)
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001076{
1077 int m;
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001078 bool result;
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001079
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001080 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001081 { STR(LANG_CASE_MENU), sort_case },
1082 { STR(LANG_FILTER), dir_filter },
1083 { STR(LANG_FOLLOW), browse_current },
1084 { STR(LANG_SHOW_ICONS), show_icons },
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001085 };
1086
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001087 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1088 NULL, NULL, NULL);
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001089 result = menu_run(m);
1090 menu_exit(m);
1091 return result;
1092}
1093
Robert Hak65002e82002-12-12 16:56:19 +00001094
1095static bool scroll_settings_menu(void)
1096{
1097 int m;
1098 bool result;
1099
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001100 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001101 { STR(LANG_SCROLL_SPEED), scroll_speed },
1102 { STR(LANG_SCROLL_DELAY), scroll_delay },
Robert Hak65002e82002-12-12 16:56:19 +00001103#ifdef HAVE_LCD_BITMAP
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001104 { STR(LANG_SCROLL_STEP), scroll_step },
Robert Hak65002e82002-12-12 16:56:19 +00001105#endif
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001106 { STR(LANG_BIDIR_SCROLL), bidir_limit },
Kjell Ericson53f156a2003-05-22 06:42:14 +00001107#ifdef HAVE_LCD_CHARCELLS
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001108 { STR(LANG_JUMP_SCROLL), jump_scroll },
1109 { STR(LANG_JUMP_SCROLL_DELAY), jump_scroll_delay },
Kjell Ericson53f156a2003-05-22 06:42:14 +00001110#endif
Robert Hak65002e82002-12-12 16:56:19 +00001111 };
1112
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001113 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1114 NULL, NULL, NULL);
Robert Hak65002e82002-12-12 16:56:19 +00001115 result = menu_run(m);
1116 menu_exit(m);
1117 return result;
1118}
1119
Björn Stenbergfe375a02004-01-14 14:42:31 +00001120static bool lcd_settings_menu(void)
1121{
1122 int m;
1123 bool result;
1124
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001125 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001126 { STR(LANG_BACKLIGHT), backlight_timer },
1127 { STR(LANG_BACKLIGHT_ON_WHEN_CHARGING), backlight_on_when_charging },
1128 { STR(LANG_CAPTION_BACKLIGHT), caption_backlight },
1129 { STR(LANG_CONTRAST), contrast },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001130#ifdef HAVE_LCD_BITMAP
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001131 { STR(LANG_INVERT), invert },
1132 { STR(LANG_FLIP_DISPLAY), flip_display },
1133 { STR(LANG_INVERT_CURSOR), invert_cursor },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001134#endif
1135 };
1136
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001137 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1138 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +00001139 result = menu_run(m);
1140 menu_exit(m);
1141 return result;
1142}
1143
1144#ifdef HAVE_LCD_BITMAP
1145static bool bars_settings_menu(void)
1146{
1147 int m;
1148 bool result;
1149
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001150 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001151 { STR(LANG_SCROLL_BAR), scroll_bar },
1152 { STR(LANG_STATUS_BAR), status_bar },
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001153 { STR(LANG_BUTTON_BAR), button_bar },
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001154 { STR(LANG_VOLUME_DISPLAY), volume_type },
1155 { STR(LANG_BATTERY_DISPLAY), battery_type },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001156 };
1157
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001158 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1159 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +00001160 result = menu_run(m);
1161 menu_exit(m);
1162 return result;
1163}
1164#endif
Robert Hak65002e82002-12-12 16:56:19 +00001165
1166
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001167static bool display_settings_menu(void)
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001168{
1169 int m;
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001170 bool result;
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001171
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001172 struct menu_item items[] = {
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +00001173#ifdef HAVE_LCD_BITMAP
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001174 { STR(LANG_CUSTOM_FONT), font_browse },
Linus Nielsen Feltzingbb572c42002-09-27 09:31:31 +00001175#endif
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001176 { STR(LANG_WHILE_PLAYING), custom_wps_browse },
1177 { STR(LANG_LCD_MENU), lcd_settings_menu },
1178 { STR(LANG_SCROLL_MENU), scroll_settings_menu },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001179#ifdef HAVE_LCD_BITMAP
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001180 { STR(LANG_BARS_MENU), bars_settings_menu },
1181 { STR(LANG_PM_MENU), peak_meter_menu },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001182#endif
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001183 };
Björn Stenbergfe375a02004-01-14 14:42:31 +00001184
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001185 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1186 NULL, NULL, NULL);
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001187 result = menu_run(m);
1188 menu_exit(m);
1189 return result;
1190}
1191
Björn Stenbergfe375a02004-01-14 14:42:31 +00001192
1193static bool firmware_browse(void)
1194{
1195 return rockbox_browse(ROCKBOX_DIR, SHOW_MOD);
1196}
1197
1198static bool battery_settings_menu(void)
1199{
1200 int m;
1201 bool result;
1202
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001203 struct menu_item items[] = {
Björn Stenbergfe375a02004-01-14 14:42:31 +00001204#ifdef HAVE_CHARGE_CTRL
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001205 { STR(LANG_DISCHARGE), deep_discharge },
1206 { STR(LANG_TRICKLE_CHARGE), trickle_charge },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001207#endif
1208#ifndef SIMULATOR
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001209 { STR(LANG_BATTERY_CAPACITY), battery_capacity },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001210#endif
1211 };
1212
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001213 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1214 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +00001215 result = menu_run(m);
1216 menu_exit(m);
1217 return result;
1218}
1219
1220static bool disk_settings_menu(void)
1221{
1222 int m;
1223 bool result;
1224
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001225 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001226 { STR(LANG_SPINDOWN), spindown },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001227#ifdef HAVE_ATA_POWER_OFF
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001228 { STR(LANG_POWEROFF), poweroff },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001229#endif
1230 };
1231
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001232 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1233 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +00001234 result = menu_run(m);
1235 menu_exit(m);
1236 return result;
1237}
1238
1239#ifdef HAVE_LCD_BITMAP
1240static bool time_settings_menu(void)
1241{
1242 int m;
1243 bool result;
1244
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001245 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001246 { STR(LANG_TIME), timedate_set },
1247 { STR(LANG_TIMEFORMAT), timeformat_set },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001248 };
1249
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001250 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1251 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +00001252 result = menu_run(m);
1253 menu_exit(m);
1254 return result;
1255}
1256#endif
1257
1258static bool manage_settings_menu(void)
1259{
1260 int m;
1261 bool result;
1262
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001263 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001264 { STR(LANG_CUSTOM_CFG), custom_cfg_browse },
1265 { STR(LANG_FIRMWARE), firmware_browse },
1266 { STR(LANG_RESET), reset_settings },
1267 { STR(LANG_SAVE_SETTINGS), settings_save_config },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001268 };
1269
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001270 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1271 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +00001272 result = menu_run(m);
1273 menu_exit(m);
1274 return result;
1275}
1276
1277static bool limits_settings_menu(void)
1278{
1279 int m;
1280 bool result;
1281
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001282 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001283 { STR(LANG_MAX_FILES_IN_DIR), max_files_in_dir },
1284 { STR(LANG_MAX_FILES_IN_PLAYLIST), max_files_in_playlist },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001285 };
1286
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001287 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1288 NULL, NULL, NULL);
Björn Stenbergfe375a02004-01-14 14:42:31 +00001289 result = menu_run(m);
1290 menu_exit(m);
1291 return result;
1292}
1293
1294
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001295static bool system_settings_menu(void)
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001296{
1297 int m;
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001298 bool result;
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001299
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001300 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001301 { STR(LANG_BATTERY_MENU), battery_settings_menu },
1302 { STR(LANG_DISK_MENU), disk_settings_menu },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001303#ifdef HAVE_RTC
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001304 { STR(LANG_TIME_MENU), time_settings_menu },
Björn Stenbergfe375a02004-01-14 14:42:31 +00001305#endif
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001306 { STR(LANG_POWEROFF_IDLE), poweroff_idle_timer },
1307 { STR(LANG_SLEEP_TIMER), sleeptimer_screen },
Björn Stenberga73cc6a2004-01-15 08:25:42 +00001308#ifdef HAVE_ALARM_MOD
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001309 { STR(LANG_ALARM_MOD_ALARM_MENU), alarm_screen },
Björn Stenberga73cc6a2004-01-15 08:25:42 +00001310#endif
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001311 { STR(LANG_LIMITS_MENU), limits_settings_menu },
Linus Nielsen Feltzingc22b4112003-11-03 23:36:36 +00001312#ifdef HAVE_MAS3507D
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001313 { STR(LANG_LINE_IN), line_in },
Linus Nielsen Feltzingc22b4112003-11-03 23:36:36 +00001314#endif
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001315 { STR(LANG_CAR_ADAPTER_MODE), car_adapter_mode },
1316 { STR(LANG_MANAGE_MENU), manage_settings_menu },
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001317 };
Björn Stenbergfe375a02004-01-14 14:42:31 +00001318
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001319 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1320 NULL, NULL, NULL);
Eric Linenbergc5b645b2002-09-05 04:42:12 +00001321 result = menu_run(m);
1322 menu_exit(m);
1323 return result;
1324}
Björn Stenberg94afb542002-09-07 12:28:46 +00001325
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001326bool settings_menu(void)
Björn Stenberg94afb542002-09-07 12:28:46 +00001327{
1328 int m;
Björn Stenbergb1b8bd42002-09-24 17:22:12 +00001329 bool result;
Björn Stenberg94afb542002-09-07 12:28:46 +00001330
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001331 struct menu_item items[] = {
Jörg Hohensohn4f36ea82004-03-14 21:33:53 +00001332 { STR(LANG_PLAYBACK), playback_settings_menu },
1333 { STR(LANG_FILE), fileview_settings_menu },
1334 { STR(LANG_DISPLAY), display_settings_menu },
1335 { STR(LANG_SYSTEM), system_settings_menu },
1336 { STR(LANG_BOOKMARK_SETTINGS),bookmark_settings_menu },
1337 { STR(LANG_LANGUAGE), language_browse },
Jörg Hohensohn3aa99e12004-03-27 00:11:01 +00001338 { STR(LANG_VOICE), voice_menu },
Björn Stenberg94afb542002-09-07 12:28:46 +00001339 };
1340
Linus Nielsen Feltzing77936e62004-03-16 13:44:56 +00001341 m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
1342 NULL, NULL, NULL);
Björn Stenberg94afb542002-09-07 12:28:46 +00001343 result = menu_run(m);
1344 menu_exit(m);
1345 return result;
1346}