Add comment to the BOOL_SETTING macro; use that macro for OFFON_SETTING (FS#10544)
[kugel-rb.git] / apps / settings_list.c
blob73c39bfa500d5835335dde735a6940b028a3dd24
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2007 Jonathan Gordon
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 ****************************************************************************/
22 #include "config.h"
23 #include <stdbool.h>
24 #include <string.h>
25 #include "system.h"
26 #include "storage.h"
27 #include "lang.h"
28 #include "talk.h"
29 #include "lcd.h"
30 #include "button.h"
31 #include "backlight.h"
32 #include "settings.h"
33 #include "settings_list.h"
34 #include "sound.h"
35 #include "dsp.h"
36 #include "mpeg.h"
37 #include "audio.h"
38 #include "power.h"
39 #include "powermgmt.h"
40 #include "kernel.h"
41 #include "lcd-remote.h"
42 #include "list.h"
43 #include "rbunicode.h"
44 #ifdef HAVE_LCD_BITMAP
45 #include "peakmeter.h"
46 #endif
47 #include "menus/eq_menu.h"
48 #if CONFIG_TUNER
49 #include "radio.h"
50 #endif
51 #ifdef IPOD_ACCESSORY_PROTOCOL
52 #include "iap.h"
53 #endif
54 #include "statusbar.h"
55 #ifdef HAVE_TOUCHSCREEN
56 #include "touchscreen.h"
57 #include "ctype.h" /* For isspace() */
58 #endif
60 #define NVRAM(bytes) (bytes<<F_NVRAM_MASK_SHIFT)
61 /** NOTE: NVRAM_CONFIG_VERSION is in settings_list.h
62 and you may need to update it if you edit this file */
64 #define UNUSED {.RESERVED=NULL}
65 #define INT(a) {.int_ = a}
66 #define UINT(a) {.uint_ = a}
67 #define BOOL(a) {.bool_ = a}
68 #define CHARPTR(a) {.charptr = a}
69 #define UCHARPTR(a) {.ucharptr = a}
70 #define FUNCTYPE(a) {.func = a}
71 #define NODEFAULT INT(0)
73 /* in all the following macros the args are:
74 - flags: bitwise | or the F_ bits in settings_list.h
75 - var: pointer to the variable being changed (usually in global_settings)
76 - lang_id: LANG_* id to display in menus and setting screens for the setting
77 - default: the default value for the variable, set if settings are reset
78 - name: the name of the setting in config files
79 - cfg_vals: comma seperated list of legal values in cfg files.
80 NULL if a number is written to the file instead.
81 - cb: the callback used by the setting screen.
84 /* Use for int settings which use the set_sound() function to set them */
85 #define SOUND_SETTING(flags,var,lang_id,name,setting) \
86 {flags|F_T_INT|F_T_SOUND|F_SOUNDSETTING, &global_settings.var, \
87 lang_id, NODEFAULT,name,NULL, \
88 {.sound_setting=(struct sound_setting[]){{setting}}} }
90 /* Use for bool variables which don't use LANG_SET_BOOL_YES and LANG_SET_BOOL_NO
91 or dont save as "off" or "on" in the cfg.
92 cfgvals are comma separated values (without spaces after the comma!) to write
93 for 'false' and 'true' (in this order)
95 #define BOOL_SETTING(flags,var,lang_id,default,name,cfgvals,yes,no,cb) \
96 {flags|F_BOOL_SETTING, &global_settings.var, \
97 lang_id, BOOL(default),name,cfgvals, \
98 {.bool_setting=(struct bool_setting[]){{cb,yes,no}}} }
100 /* bool setting which does use LANG_YES and _NO and save as "off,on" */
101 #define OFFON_SETTING(flags,var,lang_id,default,name,cb) \
102 BOOL_SETTING(flags,var,lang_id,default,name,off_on, \
103 LANG_SET_BOOL_YES,LANG_SET_BOOL_NO,cb)
105 /* int variable which is NOT saved to .cfg files,
106 (Use NVRAM() in the flags to save to the nvram (or nvram.bin file) */
107 #define SYSTEM_SETTING(flags,var,default) \
108 {flags|F_T_INT, &global_status.var,-1, INT(default), \
109 NULL, NULL, UNUSED}
111 /* setting which stores as a filename (or another string) in the .cfgvals
112 The string must be a char array (which all of our string settings are),
113 not just a char pointer.
114 prefix: The absolute path to not save in the variable, ex /.rockbox/wps_file
115 suffix: The file extention (usually...) e.g .wps_file
116 If the prefix is set (not NULL), then the suffix must be set as well.
118 #define TEXT_SETTING(flags,var,name,default,prefix,suffix) \
119 {flags|F_T_UCHARPTR, &global_settings.var,-1, \
120 CHARPTR(default),name,NULL, \
121 {.filename_setting= \
122 (struct filename_setting[]){ \
123 {prefix,suffix,sizeof(global_settings.var)}}} }
125 /* Used for settings which use the set_option() setting screen.
126 The ... arg is a list of pointers to strings to display in the setting
127 screen. These can either be literal strings, or ID2P(LANG_*) */
128 #define CHOICE_SETTING(flags,var,lang_id,default,name,cfg_vals,cb,count,...) \
129 {flags|F_CHOICE_SETTING|F_T_INT, &global_settings.var, lang_id, \
130 INT(default), name, cfg_vals, \
131 {.choice_setting = (struct choice_setting[]){ \
132 {cb, count, {.desc = (const unsigned char*[]) \
133 {__VA_ARGS__}}}}}}
135 /* Similar to above, except the strings to display are taken from cfg_vals,
136 the ... arg is a list of ID's to talk for the strings, can use TALK_ID()'s */
137 #define STRINGCHOICE_SETTING(flags,var,lang_id,default,name,cfg_vals, \
138 cb,count,...) \
139 {flags|F_CHOICE_SETTING|F_T_INT|F_CHOICETALKS, \
140 &global_settings.var, lang_id, \
141 INT(default), name, cfg_vals, \
142 {.choice_setting = (struct choice_setting[]){ \
143 {cb, count, {.talks = (const int[]){__VA_ARGS__}}}}}}
145 /* for settings which use the set_int() setting screen.
146 unit is the UNIT_ define to display/talk.
147 the first one saves a string to the config file,
148 the second one saves the variable value to the config file */
149 #define INT_SETTING_W_CFGVALS(flags, var, lang_id, default, name, cfg_vals, \
150 unit, min, max, step, formatter, get_talk_id, cb) \
151 {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \
152 lang_id, INT(default), name, cfg_vals, \
153 {.int_setting = (struct int_setting[]){ \
154 {cb, unit, min, max, step, formatter, get_talk_id}}}}
155 #define INT_SETTING(flags, var, lang_id, default, name, \
156 unit, min, max, step, formatter, get_talk_id, cb) \
157 {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \
158 lang_id, INT(default), name, NULL, \
159 {.int_setting = (struct int_setting[]){ \
160 {cb, unit, min, max, step, formatter, get_talk_id}}}}
161 #define INT_SETTING_NOWRAP(flags, var, lang_id, default, name, \
162 unit, min, max, step, formatter, get_talk_id, cb) \
163 {flags|F_INT_SETTING|F_T_INT|F_NO_WRAP, &global_settings.var, \
164 lang_id, INT(default), name, NULL, \
165 {.int_setting = (struct int_setting[]){ \
166 {cb, unit, min, max, step, formatter, get_talk_id}}}}
168 #define TABLE_SETTING(flags, var, lang_id, default, name, cfg_vals, \
169 unit, formatter, get_talk_id, cb, count, ...) \
170 {flags|F_TABLE_SETTING|F_T_INT, &global_settings.var, \
171 lang_id, INT(default), name, cfg_vals, \
172 {.table_setting = (struct table_setting[]) { \
173 {cb, formatter, get_talk_id, unit, count, \
174 (const int[]){__VA_ARGS__}}}}}
176 #define CUSTOM_SETTING(flags, var, lang_id, default, name, \
177 load_from_cfg, write_to_cfg, \
178 is_change, set_default) \
179 {flags|F_CUSTOM_SETTING|F_T_CUSTOM|F_BANFROMQS, \
180 &global_settings.var, lang_id, \
181 {.custom = (void*)default}, name, NULL, \
182 {.custom_setting = (struct custom_setting[]){ \
183 {load_from_cfg, write_to_cfg, is_change, set_default}}}}
185 #define VIEWPORT_SETTING(var,name) \
186 TEXT_SETTING(F_THEMESETTING,var,name,"-", NULL, NULL)
188 /* some sets of values which are used more than once, to save memory */
189 static const char off_on[] = "off,on";
190 static const char off_on_ask[] = "off,on,ask";
191 static const char off_number_spell[] = "off,number,spell";
192 #ifdef HAVE_LCD_BITMAP
193 static const char graphic_numeric[] = "graphic,numeric";
194 #endif
196 /* Default theme settings */
197 #define DEFAULT_WPSNAME "cabbiev2"
199 #ifdef HAVE_LCD_BITMAP
201 #if LCD_HEIGHT <= 64
202 #define DEFAULT_FONTNAME "08-Rockfont"
203 #elif LCD_HEIGHT <= 80
204 #define DEFAULT_FONTNAME "11-Sazanami-Mincho"
205 #elif LCD_HEIGHT <= 220
206 #define DEFAULT_FONTNAME "12-Adobe-Helvetica"
207 #elif LCD_HEIGHT <= 320
208 #define DEFAULT_FONTNAME "15-Adobe-Helvetica"
209 #else
210 #define DEFAULT_FONTNAME "12-Adobe-Helvetica"
211 #endif
213 #else
214 #define DEFAULT_FONTNAME ""
215 #endif
217 #ifdef HAVE_LCD_COLOR
218 #define DEFAULT_ICONSET "tango_small"
219 #define DEFAULT_VIEWERS_ICONSET "tango_small_viewers"
220 #elif LCD_DEPTH >= 2
221 #define DEFAULT_ICONSET "tango_small_mono"
222 #define DEFAULT_VIEWERS_ICONSET "tango_small_viewers_mono"
223 #else /* monochrome */
224 #define DEFAULT_ICONSET ""
225 #define DEFAULT_VIEWERS_ICONSET ""
226 #endif
228 #define DEFAULT_THEME_FOREGROUND LCD_RGBPACK(0xce, 0xcf, 0xce)
229 #define DEFAULT_THEME_BACKGROUND LCD_RGBPACK(0x00, 0x00, 0x00)
230 #define DEFAULT_THEME_SELECTOR_START LCD_RGBPACK(0xff, 0xeb, 0x9c)
231 #define DEFAULT_THEME_SELECTOR_END LCD_RGBPACK(0xb5, 0x8e, 0x00)
232 #define DEFAULT_THEME_SELECTOR_TEXT LCD_RGBPACK(0x00, 0x00, 0x00)
234 #define DEFAULT_BACKDROP "cabbiev2"
236 #ifdef HAVE_RECORDING
237 /* these should be in the config.h files */
238 #if CONFIG_CODEC == MAS3587F
239 # define DEFAULT_REC_MIC_GAIN 8
240 # define DEFAULT_REC_LEFT_GAIN 2
241 # define DEFAULT_REC_RIGHT_GAIN 2
242 #elif CONFIG_CODEC == SWCODEC
243 # ifdef HAVE_UDA1380
244 # define DEFAULT_REC_MIC_GAIN 16
245 # define DEFAULT_REC_LEFT_GAIN 0
246 # define DEFAULT_REC_RIGHT_GAIN 0
247 # elif defined(HAVE_TLV320)
248 # define DEFAULT_REC_MIC_GAIN 0
249 # define DEFAULT_REC_LEFT_GAIN 0
250 # define DEFAULT_REC_RIGHT_GAIN 0
251 # elif defined(HAVE_WM8975)
252 # define DEFAULT_REC_MIC_GAIN 16
253 # define DEFAULT_REC_LEFT_GAIN 0
254 # define DEFAULT_REC_RIGHT_GAIN 0
255 # elif defined(HAVE_WM8758)
256 # define DEFAULT_REC_MIC_GAIN 16
257 # define DEFAULT_REC_LEFT_GAIN 0
258 # define DEFAULT_REC_RIGHT_GAIN 0
259 # elif defined(HAVE_WM8731)
260 # define DEFAULT_REC_MIC_GAIN 16
261 # define DEFAULT_REC_LEFT_GAIN 0
262 # define DEFAULT_REC_RIGHT_GAIN 0
263 # endif
264 #endif
266 #endif /* HAVE_RECORDING */
268 static void formatter_unit_0_is_off(char *buffer, size_t buffer_size,
269 int val, const char *unit)
271 if (val == 0)
272 strcpy(buffer, str(LANG_OFF));
273 else
274 snprintf(buffer, buffer_size, "%d %s", val, unit);
277 static int32_t getlang_unit_0_is_off(int value, int unit)
279 if (value == 0)
280 return LANG_OFF;
281 else
282 return TALK_ID(value,unit);
285 static void formatter_unit_0_is_skip_track(char *buffer, size_t buffer_size,
286 int val, const char *unit)
288 (void)unit;
289 if (val == 0)
290 strcpy(buffer, str(LANG_SKIP_TRACK));
291 else if (val % 60 == 0)
292 snprintf(buffer, buffer_size, "%d min", val/60);
293 else
294 snprintf(buffer, buffer_size, "%d s", val);
297 static int32_t getlang_unit_0_is_skip_track(int value, int unit)
299 (void)unit;
300 if (value == 0)
301 return LANG_SKIP_TRACK;
302 else if (value % 60 == 0)
303 return TALK_ID(value/60, UNIT_MIN);
304 else
305 return TALK_ID(value, UNIT_SEC);
308 #ifdef HAVE_BACKLIGHT
309 static void backlight_formatter(char *buffer, size_t buffer_size,
310 int val, const char *unit)
312 if (val == -1)
313 strcpy(buffer, str(LANG_OFF));
314 else if (val == 0)
315 strcpy(buffer, str(LANG_ON));
316 else
317 snprintf(buffer, buffer_size, "%d %s", val, unit);
319 static int32_t backlight_getlang(int value, int unit)
321 if (value == -1)
322 return LANG_OFF;
323 else if (value == 0)
324 return LANG_ON;
325 else
326 return TALK_ID(value, unit);
328 #endif
330 #ifndef HAVE_WHEEL_ACCELERATION
331 static void scanaccel_formatter(char *buffer, size_t buffer_size,
332 int val, const char *unit)
334 (void)unit;
335 if (val == 0)
336 strcpy(buffer, str(LANG_OFF));
337 else
338 snprintf(buffer, buffer_size, "2x/%ds", val);
340 #endif
342 #if CONFIG_CODEC == SWCODEC
343 static void crossfeed_cross_set(int val)
345 (void)val;
346 dsp_set_crossfeed_cross_params(global_settings.crossfeed_cross_gain,
347 global_settings.crossfeed_hf_attenuation,
348 global_settings.crossfeed_hf_cutoff);
351 static void db_format(char* buffer, size_t buffer_size, int value,
352 const char* unit)
354 int v = abs(value);
356 snprintf(buffer, buffer_size, "%s%d.%d %s", value < 0 ? "-" : "",
357 v / 10, v % 10, unit);
360 static int32_t get_dec_talkid(int value, int unit)
362 return TALK_ID_DECIMAL(value, 1, unit);
365 static int32_t get_precut_talkid(int value, int unit)
367 return TALK_ID_DECIMAL(-value, 1, unit);
370 #endif
371 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
372 static void set_mdb_enable(bool value)
374 sound_set_mdb_enable((int)value);
376 static void set_superbass(bool value)
378 sound_set_superbass((int)value);
380 #endif
382 #ifdef HAVE_LCD_CHARCELLS
383 static void jumpscroll_format(char* buffer, size_t buffer_size, int value,
384 const char* unit)
386 (void)unit;
387 switch (value)
389 case 0:
390 strcpy(buffer, str(LANG_OFF));
391 break;
392 case 1:
393 strcpy(buffer, str(LANG_ONE_TIME));
394 break;
395 case 2:
396 case 3:
397 case 4:
398 snprintf(buffer, buffer_size, "%d", value);
399 break;
400 case 5:
401 strcpy(buffer, str(LANG_ALWAYS));
402 break;
405 static int32_t jumpscroll_getlang(int value, int unit)
407 switch (value)
409 case 0:
410 return LANG_OFF;
411 case 1:
412 return LANG_ONE_TIME;
413 case 2:
414 case 3:
415 case 4:
416 return TALK_ID(value, unit);
417 case 5:
418 return LANG_ALWAYS;
420 return -1;
422 #endif /* HAVE_LCD_CHARCELLS */
424 #ifdef HAVE_QUICKSCREEN
425 static int find_setting_by_name(char*name)
427 int i = 0;
428 const struct settings_list *setting;
429 while (i<nb_settings)
431 setting = &settings[i];
432 if (setting->cfg_name && !strcmp(setting->cfg_name, name))
434 return i;
436 i++;
438 return -1;
440 static void qs_load_from_cfg(void* var, char*value)
442 *(int*)var = find_setting_by_name(value);
444 static char* qs_write_to_cfg(void* setting, char*buf, int buf_len)
446 const struct settings_list *var = &settings[*(int*)setting];
447 strlcpy(buf, var->cfg_name, buf_len);
448 return buf;
450 static bool qs_is_changed(void* setting, void* defaultval)
452 int i = *(int*)setting;
453 if (i < 0 || i >= nb_settings)
454 return false;
455 const struct settings_list *var = &settings[i];
456 return var != find_setting(defaultval, NULL);
458 static void qs_set_default(void* setting, void* defaultval)
460 find_setting(defaultval, (int*)setting);
462 #endif
463 #ifdef HAVE_TOUCHSCREEN
464 static void tsc_load_from_cfg(void* setting, char*value)
466 struct touchscreen_parameter *var = (struct touchscreen_parameter*) setting;
468 /* Replacement for sscanf(value, "%d ..., &var->A, ...); */
469 int vals[7], count = 0;
470 while(*value != 0 && count < 7)
472 if(isspace(*value))
473 value++;
474 else
476 vals[count++] = atoi(value);
477 while(!isspace(*value))
478 value++;
481 var->A = vals[0];
482 var->B = vals[1];
483 var->C = vals[2];
484 var->D = vals[3];
485 var->E = vals[4];
486 var->F = vals[5];
487 var->divider = vals[6];
490 static char* tsc_write_to_cfg(void* setting, char*buf, int buf_len)
492 const struct touchscreen_parameter *var = (const struct touchscreen_parameter*) setting;
493 snprintf(buf, buf_len, "%d %d %d %d %d %d %d", var->A, var->B, var->C, var->D, var->E, var->F, var->divider);
494 return buf;
496 static bool tsc_is_changed(void* setting, void* defaultval)
498 return memcmp(setting, defaultval, sizeof(struct touchscreen_parameter)) != 0;
500 static void tsc_set_default(void* setting, void* defaultval)
502 memcpy(setting, defaultval, sizeof(struct touchscreen_parameter));
504 #endif
505 const struct settings_list settings[] = {
506 /* sound settings */
507 SOUND_SETTING(F_NO_WRAP,volume, LANG_VOLUME, "volume", SOUND_VOLUME),
508 SOUND_SETTING(0, balance, LANG_BALANCE, "balance", SOUND_BALANCE),
509 SOUND_SETTING(F_NO_WRAP,bass, LANG_BASS, "bass", SOUND_BASS),
510 SOUND_SETTING(F_NO_WRAP,treble, LANG_TREBLE, "treble", SOUND_TREBLE),
512 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
513 SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS),
514 STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume",
515 "off,20ms,2,4,8,", sound_set_avc, 5,
516 LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC),
517 TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)),
518 OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass",
519 set_superbass),
520 #endif
522 CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION,
523 0,"channels",
524 "stereo,mono,custom,mono left,mono right,karaoke",
525 sound_set_channels, 6,
526 ID2P(LANG_CHANNEL_STEREO), ID2P(LANG_CHANNEL_MONO),
527 ID2P(LANG_CHANNEL_CUSTOM), ID2P(LANG_CHANNEL_LEFT),
528 ID2P(LANG_CHANNEL_RIGHT), ID2P(LANG_CHANNEL_KARAOKE)),
529 SOUND_SETTING(F_SOUNDSETTING, stereo_width, LANG_STEREO_WIDTH,
530 "stereo_width", SOUND_STEREO_WIDTH),
531 /* playback */
532 OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL),
533 SYSTEM_SETTING(NVRAM(4), resume_index, -1),
534 SYSTEM_SETTING(NVRAM(4), resume_offset, -1),
535 CHOICE_SETTING(0, repeat_mode, LANG_REPEAT, REPEAT_OFF, "repeat",
536 "off,all,one,shuffle"
537 #ifdef AB_REPEAT_ENABLE
538 ",ab"
539 #endif
540 , NULL,
541 #ifdef AB_REPEAT_ENABLE
543 #else
545 #endif
546 ID2P(LANG_OFF), ID2P(LANG_ALL), ID2P(LANG_REPEAT_ONE),
547 ID2P(LANG_SHUFFLE)
548 #ifdef AB_REPEAT_ENABLE
549 ,ID2P(LANG_REPEAT_AB)
550 #endif
551 ), /* CHOICE_SETTING( repeat_mode ) */
552 /* LCD */
553 #ifdef HAVE_LCD_CONTRAST
554 /* its easier to leave this one un-macro()ed for the time being */
555 { F_T_INT|F_DEF_ISFUNC|F_INT_SETTING, &global_settings.contrast,
556 LANG_CONTRAST, FUNCTYPE(lcd_default_contrast), "contrast", NULL , {
557 .int_setting = (struct int_setting[]) {
558 { lcd_set_contrast, UNIT_INT, MIN_CONTRAST_SETTING,
559 MAX_CONTRAST_SETTING, 1, NULL, NULL }}}},
560 #endif
561 #ifdef HAVE_BACKLIGHT
562 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout, LANG_BACKLIGHT, 15,
563 "backlight timeout", off_on, UNIT_SEC, backlight_formatter,
564 backlight_getlang, backlight_set_timeout, 20,
565 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
566 #if CONFIG_CHARGING
567 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout_plugged,
568 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10,
569 "backlight timeout plugged", off_on, UNIT_SEC,
570 backlight_formatter, backlight_getlang,
571 backlight_set_timeout_plugged, 20,
572 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
573 #endif
574 #endif /* HAVE_BACKLIGHT */
575 #ifdef HAVE_LCD_BITMAP
576 #ifdef HAVE_LCD_INVERT
577 BOOL_SETTING(0, invert, LANG_INVERT, false ,"invert", off_on,
578 LANG_INVERT_LCD_INVERSE, LANG_NORMAL, lcd_set_invert_display),
579 #endif
580 #ifdef HAVE_LCD_FLIP
581 OFFON_SETTING(0, flip_display, LANG_FLIP_DISPLAY, false, "flip display",
582 NULL),
583 #endif
584 /* display */
585 CHOICE_SETTING(F_TEMPVAR|F_THEMESETTING, cursor_style, LANG_INVERT_CURSOR,
586 #ifdef HAVE_LCD_COLOR
587 3, "selector type",
588 "pointer,bar (inverse),bar (color),bar (gradient)", NULL, 4,
589 ID2P(LANG_INVERT_CURSOR_POINTER),
590 ID2P(LANG_INVERT_CURSOR_BAR),
591 ID2P(LANG_INVERT_CURSOR_COLOR),
592 ID2P(LANG_INVERT_CURSOR_GRADIENT)),
593 #else
594 1, "selector type", "pointer,bar (inverse)", NULL, 2,
595 ID2P(LANG_INVERT_CURSOR_POINTER),
596 ID2P(LANG_INVERT_CURSOR_BAR)),
597 #endif
598 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar,
599 LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom",
600 gui_statusbar_changed, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
601 ID2P(LANG_STATUSBAR_BOTTOM)),
602 #ifdef HAVE_REMOTE_LCD
603 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, remote_statusbar,
604 LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom",
605 gui_statusbar_changed, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
606 ID2P(LANG_STATUSBAR_BOTTOM)),
607 #endif
608 OFFON_SETTING(0,scrollbar, LANG_SCROLL_BAR, true, "scrollbar", NULL),
609 INT_SETTING(0, scrollbar_width, LANG_SCROLLBAR_WIDTH, 6, "scrollbar width",
610 UNIT_INT, 3, LCD_WIDTH/10, 1, NULL, NULL, NULL),
611 BOOL_SETTING(0, scrollbar_position, LANG_SCROLLBAR_POSITION, true,
612 "scrollbar pos", "left,right", LANG_LEFT, LANG_RIGHT, NULL),
613 #if CONFIG_KEYPAD == RECORDER_PAD
614 OFFON_SETTING(0,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL),
615 #endif
616 CHOICE_SETTING(0, volume_type, LANG_VOLUME_DISPLAY, 0,
617 "volume display", graphic_numeric, NULL, 2,
618 ID2P(LANG_DISPLAY_GRAPHIC),
619 ID2P(LANG_DISPLAY_NUMERIC)),
620 CHOICE_SETTING(0, battery_display, LANG_BATTERY_DISPLAY, 0,
621 "battery display", graphic_numeric, NULL, 2,
622 ID2P(LANG_DISPLAY_GRAPHIC), ID2P(LANG_DISPLAY_NUMERIC)),
623 #if CONFIG_RTC
624 CHOICE_SETTING(0, timeformat, LANG_TIMEFORMAT, 0,
625 "time format", "24hour,12hour", NULL, 2,
626 ID2P(LANG_24_HOUR_CLOCK), ID2P(LANG_12_HOUR_CLOCK)),
627 #endif
628 #endif /* HAVE_LCD_BITMAP */
629 OFFON_SETTING(0,show_icons, LANG_SHOW_ICONS ,true,"show icons", NULL),
630 /* system */
631 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, poweroff, LANG_POWEROFF_IDLE, 10,
632 "idle poweroff", "off", UNIT_MIN, formatter_unit_0_is_off,
633 getlang_unit_0_is_off, set_poweroff_timeout, 15,
634 0,1,2,3,4,5,6,7,8,9,10,15,30,45,60),
635 SYSTEM_SETTING(NVRAM(4), runtime, 0),
636 SYSTEM_SETTING(NVRAM(4), topruntime, 0),
637 INT_SETTING(F_BANFROMQS, max_files_in_playlist,
638 LANG_MAX_FILES_IN_PLAYLIST,
639 #if MEM > 1
640 10000,
641 #else
642 400,
643 #endif
644 "max files in playlist", UNIT_INT, 1000, 32000, 1000,
645 NULL, NULL, NULL),
646 INT_SETTING(F_BANFROMQS, max_files_in_dir, LANG_MAX_FILES_IN_DIR,
647 #if MEM > 1
648 1000,
649 #else
650 200,
651 #endif
652 "max files in dir", UNIT_INT, 50, 10000, 50,
653 NULL, NULL, NULL),
654 #if BATTERY_CAPACITY_INC > 0
655 INT_SETTING(0, battery_capacity, LANG_BATTERY_CAPACITY,
656 BATTERY_CAPACITY_DEFAULT, "battery capacity", UNIT_MAH,
657 BATTERY_CAPACITY_MIN, BATTERY_CAPACITY_MAX,
658 BATTERY_CAPACITY_INC, NULL, NULL, NULL),
659 #endif
660 #if CONFIG_CHARGING
661 OFFON_SETTING(NVRAM(1), car_adapter_mode,
662 LANG_CAR_ADAPTER_MODE, false, "car adapter mode", NULL),
663 #endif
664 #ifdef IPOD_ACCESSORY_PROTOCOL
665 CHOICE_SETTING(0, serial_bitrate, LANG_SERIAL_BITRATE, 0, "serial bitrate",
666 "auto,9600,19200,38400,57600", iap_bitrate_set, 5, ID2P(LANG_SERIAL_BITRATE_AUTO),
667 ID2P(LANG_SERIAL_BITRATE_9600),ID2P(LANG_SERIAL_BITRATE_19200),
668 ID2P(LANG_SERIAL_BITRATE_38400),ID2P(LANG_SERIAL_BITRATE_57600)),
669 #endif
670 #ifdef HAVE_ACCESSORY_SUPPLY
671 OFFON_SETTING(0, accessory_supply, LANG_ACCESSORY_SUPPLY,
672 true, "accessory power supply", accessory_supply_set),
673 #endif
674 /* tuner */
675 #if CONFIG_TUNER
676 OFFON_SETTING(0,fm_force_mono, LANG_FM_MONO_MODE,
677 false, "force fm mono", toggle_mono_mode),
678 SYSTEM_SETTING(NVRAM(4),last_frequency,0),
679 #endif
681 #if BATTERY_TYPES_COUNT > 1
682 CHOICE_SETTING(0, battery_type, LANG_BATTERY_TYPE, 0, "battery type",
683 "alkaline,nimh", NULL, 2, ID2P(LANG_BATTERY_TYPE_ALKALINE),
684 ID2P(LANG_BATTERY_TYPE_NIMH)),
685 #endif
686 #ifdef HAVE_REMOTE_LCD
687 /* remote lcd */
688 INT_SETTING(0, remote_contrast, LANG_CONTRAST,
689 DEFAULT_REMOTE_CONTRAST_SETTING, "remote contrast", UNIT_INT,
690 MIN_REMOTE_CONTRAST_SETTING, MAX_REMOTE_CONTRAST_SETTING, 1,
691 NULL, NULL, lcd_remote_set_contrast),
692 BOOL_SETTING(0, remote_invert, LANG_INVERT, false ,"remote invert", off_on,
693 LANG_INVERT_LCD_INVERSE, LANG_NORMAL,
694 lcd_remote_set_invert_display),
695 OFFON_SETTING(0,remote_flip_display, LANG_FLIP_DISPLAY,
696 false,"remote flip display", NULL),
697 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout,
698 LANG_BACKLIGHT, 5, "remote backlight timeout", off_on,
699 UNIT_SEC, backlight_formatter, backlight_getlang,
700 remote_backlight_set_timeout, 20,
701 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
702 #if CONFIG_CHARGING
703 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout_plugged,
704 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10,
705 "remote backlight timeout plugged", off_on, UNIT_SEC,
706 backlight_formatter, backlight_getlang,
707 remote_backlight_set_timeout_plugged, 20,
708 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
709 #endif
710 #ifdef HAVE_REMOTE_LCD_TICKING
711 OFFON_SETTING(0, remote_reduce_ticking, LANG_REDUCE_TICKING,
712 false,"remote reduce ticking", NULL),
713 #endif
714 #endif
716 #ifdef HAVE_BACKLIGHT
717 OFFON_SETTING(0, bl_filter_first_keypress,
718 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
719 "backlight filters first keypress", NULL),
720 #ifdef HAVE_REMOTE_LCD
721 OFFON_SETTING(0, remote_bl_filter_first_keypress,
722 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
723 "backlight filters first remote keypress", NULL),
724 #endif
725 #endif /* HAVE_BACKLIGHT */
727 /** End of old RTC config block **/
729 #ifdef HAVE_BACKLIGHT
730 OFFON_SETTING(0, caption_backlight, LANG_CAPTION_BACKLIGHT,
731 false, "caption backlight", NULL),
732 #ifdef HAVE_REMOTE_LCD
733 OFFON_SETTING(0, remote_caption_backlight, LANG_CAPTION_BACKLIGHT,
734 false, "remote caption backlight", NULL),
735 #endif
736 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
737 INT_SETTING(F_NO_WRAP, brightness, LANG_BRIGHTNESS,
738 DEFAULT_BRIGHTNESS_SETTING, "brightness",UNIT_INT,
739 MIN_BRIGHTNESS_SETTING, MAX_BRIGHTNESS_SETTING, 1,
740 NULL, NULL, backlight_set_brightness),
741 #endif
742 /* backlight fading */
743 #if defined(HAVE_BACKLIGHT_FADING_INT_SETTING)
744 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_in,
745 LANG_BACKLIGHT_FADE_IN, 300, "backlight fade in", "off",
746 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off,
747 backlight_set_fade_in, 7, 0,100,200,300,500,1000,2000),
748 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_out,
749 LANG_BACKLIGHT_FADE_OUT, 2000, "backlight fade out", "off",
750 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off,
751 backlight_set_fade_out, 10,
752 0,100,200,300,500,1000,2000,3000,5000,10000),
753 #elif defined(HAVE_BACKLIGHT_FADING_BOOL_SETTING)
754 OFFON_SETTING(0, backlight_fade_in, LANG_BACKLIGHT_FADE_IN,
755 true, "backlight fade in", backlight_set_fade_in),
756 OFFON_SETTING(0, backlight_fade_out, LANG_BACKLIGHT_FADE_OUT,
757 true, "backlight fade out", backlight_set_fade_out),
758 #endif
759 #endif /* HAVE_BACKLIGHT */
760 INT_SETTING(F_PADTITLE, scroll_speed, LANG_SCROLL_SPEED, 9,"scroll speed",
761 UNIT_INT, 0, 15, 1, NULL, NULL, lcd_scroll_speed),
762 INT_SETTING(F_PADTITLE, scroll_delay, LANG_SCROLL_DELAY, 1000,
763 "scroll delay", UNIT_MS, 0, 2500, 100, NULL,
764 NULL, lcd_scroll_delay),
765 INT_SETTING(0, bidir_limit, LANG_BIDIR_SCROLL, 50, "bidir limit",
766 UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_bidir_scroll),
767 #ifdef HAVE_REMOTE_LCD
768 INT_SETTING(0, remote_scroll_speed, LANG_SCROLL_SPEED, 9,
769 "remote scroll speed", UNIT_INT, 0,15, 1,
770 NULL, NULL, lcd_remote_scroll_speed),
771 INT_SETTING(0, remote_scroll_step, LANG_SCROLL_STEP, 6,
772 "remote scroll step", UNIT_PIXEL, 1, LCD_REMOTE_WIDTH, 1, NULL,
773 NULL, lcd_remote_scroll_step),
774 INT_SETTING(0, remote_scroll_delay, LANG_SCROLL_DELAY, 1000,
775 "remote scroll delay", UNIT_MS, 0, 2500, 100, NULL, NULL,
776 lcd_remote_scroll_delay),
777 INT_SETTING(0, remote_bidir_limit, LANG_BIDIR_SCROLL, 50,
778 "remote bidir limit", UNIT_PERCENT, 0, 200, 25, NULL, NULL,
779 lcd_remote_bidir_scroll),
780 #endif
781 #ifdef HAVE_LCD_BITMAP
782 OFFON_SETTING(0, offset_out_of_view, LANG_SCREEN_SCROLL_VIEW,
783 false, "Screen Scrolls Out Of View",
784 gui_list_screen_scroll_out_of_view),
785 INT_SETTING(F_PADTITLE, scroll_step, LANG_SCROLL_STEP, 6, "scroll step",
786 UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, lcd_scroll_step),
787 INT_SETTING(F_PADTITLE, screen_scroll_step, LANG_SCREEN_SCROLL_STEP, 16,
788 "screen scroll step", UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL,
789 gui_list_screen_scroll_step),
790 #endif /* HAVE_LCD_BITMAP */
791 #ifdef HAVE_LCD_CHARCELLS
792 INT_SETTING(0, jump_scroll, LANG_JUMP_SCROLL, 0, "jump scroll", UNIT_INT, 0,
793 5, 1, jumpscroll_format, jumpscroll_getlang, lcd_jump_scroll),
794 INT_SETTING(0, jump_scroll_delay, LANG_JUMP_SCROLL_DELAY, 500,
795 "jump scroll delay", UNIT_MS, 0, 2500, 100, NULL, NULL,
796 lcd_jump_scroll_delay),
797 #endif
798 OFFON_SETTING(0,scroll_paginated,LANG_SCROLL_PAGINATED,
799 false,"scroll paginated",NULL),
800 #ifdef HAVE_LCD_COLOR
802 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.fg_color,-1,
803 INT(DEFAULT_THEME_FOREGROUND),"foreground color",NULL,UNUSED},
804 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.bg_color,-1,
805 INT(DEFAULT_THEME_BACKGROUND),"background color",NULL,UNUSED},
806 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lss_color,-1,
807 INT(DEFAULT_THEME_SELECTOR_START),"line selector start color",NULL,
808 UNUSED},
809 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lse_color,-1,
810 INT(DEFAULT_THEME_SELECTOR_END),"line selector end color",NULL,UNUSED},
811 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lst_color,-1,
812 INT(DEFAULT_THEME_SELECTOR_TEXT),"line selector text color",NULL,
813 UNUSED},
815 #endif
816 /* more playback */
817 OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL),
818 OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL),
819 OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL),
820 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, ff_rewind_min_step,
821 LANG_FFRW_STEP, 1, "scan min step", NULL, UNIT_SEC,
822 NULL, NULL, NULL, 14, 1,2,3,4,5,6,8,10,15,20,25,30,45,60),
823 CHOICE_SETTING(0, ff_rewind_accel, LANG_FFRW_ACCEL, 2,
824 "seek acceleration", "very fast,fast,normal,slow,very slow", NULL, 5,
825 ID2P(LANG_VERY_FAST), ID2P(LANG_FAST), ID2P(LANG_NORMAL),
826 ID2P(LANG_SLOW) , ID2P(LANG_VERY_SLOW)),
827 #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_DISK_STORAGE)
828 STRINGCHOICE_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0,"antiskip",
829 "5s,15s,30s,1min,2min,3min,5min,10min", NULL, 8,
830 TALK_ID(5, UNIT_SEC), TALK_ID(15, UNIT_SEC),
831 TALK_ID(30, UNIT_SEC), TALK_ID(1, UNIT_MIN),
832 TALK_ID(2, UNIT_MIN), TALK_ID(3, UNIT_MIN),
833 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN)),
834 #elif defined(HAVE_DISK_STORAGE)
835 INT_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0, "antiskip",
836 UNIT_SEC, 0, 7, 1, NULL, NULL, audio_set_buffer_margin),
837 #endif
838 /* disk */
839 #ifdef HAVE_DISK_STORAGE
840 INT_SETTING(0, disk_spindown, LANG_SPINDOWN, 5, "disk spindown",
841 UNIT_SEC, 3, 254, 1, NULL, NULL, storage_spindown),
842 #endif /* HAVE_DISK_STORAGE */
843 /* browser */
844 CHOICE_SETTING(0, dirfilter, LANG_FILTER, SHOW_SUPPORTED, "show files",
845 "all,supported,music,playlists", NULL, 4, ID2P(LANG_ALL),
846 ID2P(LANG_FILTER_SUPPORTED), ID2P(LANG_FILTER_MUSIC),
847 ID2P(LANG_PLAYLISTS)),
848 /* file sorting */
849 OFFON_SETTING(0, sort_case, LANG_SORT_CASE, false, "sort case", NULL),
850 CHOICE_SETTING(0, sort_dir, LANG_SORT_DIR, 0 ,
851 "sort dirs", "alpha,oldest,newest", NULL, 3,
852 ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE),
853 ID2P(LANG_SORT_DATE_REVERSE)),
854 CHOICE_SETTING(0, sort_file, LANG_SORT_FILE, 0 ,
855 "sort files", "alpha,oldest,newest,type", NULL, 4,
856 ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE),
857 ID2P(LANG_SORT_DATE_REVERSE) , ID2P(LANG_SORT_TYPE)),
858 CHOICE_SETTING(0, interpret_numbers, LANG_SORT_INTERPRET_NUMBERS, 1,
859 "sort interpret number", "digits,numbers",NULL, 2,
860 ID2P(LANG_SORT_INTERPRET_AS_DIGIT),
861 ID2P(LANG_SORT_INTERPRET_AS_NUMBERS)),
862 CHOICE_SETTING(0, show_filename_ext, LANG_SHOW_FILENAME_EXT, 3,
863 "show filename exts", "off,on,unknown,view_all", NULL , 4 ,
864 ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_UNKNOWN_TYPES),
865 ID2P(LANG_EXT_ONLY_VIEW_ALL)),
866 OFFON_SETTING(0,browse_current,LANG_FOLLOW,false,"follow playlist",NULL),
867 OFFON_SETTING(0,playlist_viewer_icons,LANG_SHOW_ICONS,true,
868 "playlist viewer icons",NULL),
869 OFFON_SETTING(0,playlist_viewer_indices,LANG_SHOW_INDICES,true,
870 "playlist viewer indices",NULL),
871 CHOICE_SETTING(0, playlist_viewer_track_display, LANG_TRACK_DISPLAY, 0,
872 "playlist viewer track display","track name,full path",
873 NULL, 2, ID2P(LANG_DISPLAY_TRACK_NAME_ONLY),
874 ID2P(LANG_DISPLAY_FULL_PATH)),
875 CHOICE_SETTING(0, recursive_dir_insert, LANG_RECURSE_DIRECTORY , RECURSE_ON,
876 "recursive directory insert", off_on_ask, NULL , 3 ,
877 ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_ASK)),
878 /* bookmarks */
879 CHOICE_SETTING(0, autocreatebookmark, LANG_BOOKMARK_SETTINGS_AUTOCREATE,
880 BOOKMARK_NO, "autocreate bookmarks",
881 "off,on,ask,recent only - on,recent only - ask", NULL, 5,
882 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
883 ID2P(LANG_ASK), ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES),
884 ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK)),
885 CHOICE_SETTING(0, autoloadbookmark, LANG_BOOKMARK_SETTINGS_AUTOLOAD,
886 BOOKMARK_NO, "autoload bookmarks", off_on_ask, NULL, 3,
887 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
888 ID2P(LANG_ASK)),
889 CHOICE_SETTING(0, usemrb, LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS,
890 BOOKMARK_NO, "use most-recent-bookmarks",
891 "off,on,unique only", NULL, 3, ID2P(LANG_SET_BOOL_NO),
892 ID2P(LANG_SET_BOOL_YES),
893 ID2P(LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY)),
894 #ifdef HAVE_LCD_BITMAP
895 /* peak meter */
896 STRINGCHOICE_SETTING(0, peak_meter_clip_hold, LANG_PM_CLIP_HOLD, 16,
897 "peak meter clip hold",
898 "on,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,2min"
899 ",3min,5min,10min,20min,45min,90min",
900 peak_meter_set_clip_hold, 25, LANG_PM_ETERNAL,
901 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC),
902 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC),
903 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC),
904 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC),
905 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC),
906 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
907 TALK_ID(25, UNIT_SEC), TALK_ID(30, UNIT_SEC),
908 TALK_ID(45, UNIT_SEC), TALK_ID(60, UNIT_SEC),
909 TALK_ID(90, UNIT_SEC), TALK_ID(2, UNIT_MIN),
910 TALK_ID(3, UNIT_MIN), TALK_ID(5, UNIT_MIN),
911 TALK_ID(10, UNIT_MIN), TALK_ID(20, UNIT_MIN),
912 TALK_ID(45, UNIT_MIN), TALK_ID(90, UNIT_MIN)),
913 STRINGCHOICE_SETTING(0, peak_meter_hold, LANG_PM_PEAK_HOLD, 3,
914 "peak meter hold",
915 "off,200ms,300ms,500ms,1,2,3,4,5,6,7,8,9,10,15,20,30,1min",
916 NULL, 18, LANG_OFF, TALK_ID(200, UNIT_MS),
917 TALK_ID(300, UNIT_MS), TALK_ID(500, UNIT_MS),
918 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC),
919 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC),
920 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC),
921 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC),
922 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC),
923 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
924 TALK_ID(30, UNIT_SEC), TALK_ID(60, UNIT_SEC)),
925 INT_SETTING(0, peak_meter_release, LANG_PM_RELEASE, 8, "peak meter release",
926 UNIT_PM_TICK, 1, 0x7e, 1, NULL, NULL,NULL),
927 OFFON_SETTING(0,peak_meter_dbfs,LANG_PM_DBFS,true,"peak meter dbfs",NULL),
928 {F_T_INT, &global_settings.peak_meter_min, LANG_PM_MIN,INT(60),
929 "peak meter min", NULL, UNUSED},
930 {F_T_INT, &global_settings.peak_meter_max, LANG_PM_MAX,INT(0),
931 "peak meter max", NULL, UNUSED},
932 #ifdef HAVE_RECORDING
933 OFFON_SETTING(0, peak_meter_clipcounter, LANG_PM_CLIPCOUNTER, false,
934 "peak meter clipcounter", NULL),
935 #endif /* HAVE_RECORDING */
936 #endif /* HAVE_LCD_BITMAP */
937 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
938 SOUND_SETTING(F_SOUNDSETTING, mdb_strength, LANG_MDB_STRENGTH,
939 "mdb strength", SOUND_MDB_STRENGTH),
940 SOUND_SETTING(F_SOUNDSETTING, mdb_harmonics, LANG_MDB_HARMONICS,
941 "mdb harmonics", SOUND_MDB_HARMONICS),
942 SOUND_SETTING(F_SOUNDSETTING, mdb_center, LANG_MDB_CENTER,
943 "mdb center", SOUND_MDB_CENTER),
944 SOUND_SETTING(F_SOUNDSETTING, mdb_shape, LANG_MDB_SHAPE,
945 "mdb shape", SOUND_MDB_SHAPE),
946 OFFON_SETTING(F_SOUNDSETTING, mdb_enable, LANG_MDB_ENABLE,
947 false, "mdb enable", set_mdb_enable),
948 #endif
949 #if CONFIG_CODEC == MAS3507D
950 OFFON_SETTING(F_SOUNDSETTING, line_in,LANG_LINE_IN,false,"line in",NULL),
951 #endif
952 /* voice */
953 OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL),
954 CHOICE_SETTING(0, talk_dir, LANG_VOICE_DIR, 0,
955 "talk dir", off_number_spell, NULL, 3,
956 ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
957 ID2P(LANG_VOICE_SPELL)),
958 OFFON_SETTING(F_TEMPVAR, talk_dir_clip, LANG_VOICE_DIR_TALK, false,
959 "talk dir clip", NULL),
960 CHOICE_SETTING(0, talk_file, LANG_VOICE_FILE, 0,
961 "talk file", off_number_spell, NULL, 3,
962 ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
963 ID2P(LANG_VOICE_SPELL)),
964 OFFON_SETTING(F_TEMPVAR, talk_file_clip, LANG_VOICE_FILE_TALK, false,
965 "talk file clip", NULL),
966 OFFON_SETTING(F_TEMPVAR, talk_filetype, LANG_VOICE_FILETYPE, false,
967 "talk filetype", NULL),
968 OFFON_SETTING(F_TEMPVAR, talk_battery_level, LANG_TALK_BATTERY_LEVEL, false,
969 "Announce Battery Level", NULL),
971 #ifdef HAVE_RECORDING
972 /* recording */
973 STRINGCHOICE_SETTING(F_RECSETTING, rec_timesplit, LANG_SPLIT_TIME, 0,
974 "rec timesplit",
975 "off,00:05,00:10,00:15,00:30,01:00,01:14,01:20,02:00,"
976 "04:00,06:00,08:00,10:00,12:00,18:00,24:00",
977 NULL, 16, LANG_OFF,
978 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN),
979 TALK_ID(15, UNIT_MIN), TALK_ID(30, UNIT_MIN),
980 TALK_ID(60, UNIT_MIN), TALK_ID(74, UNIT_MIN),
981 TALK_ID(80, UNIT_MIN), TALK_ID(2, UNIT_HOUR),
982 TALK_ID(4, UNIT_HOUR), TALK_ID(6, UNIT_HOUR),
983 TALK_ID(8, UNIT_HOUR), TALK_ID(10, UNIT_HOUR),
984 TALK_ID(12, UNIT_HOUR), TALK_ID(18, UNIT_HOUR),
985 TALK_ID(20, UNIT_HOUR), TALK_ID(24, UNIT_HOUR)),
986 STRINGCHOICE_SETTING(F_RECSETTING, rec_sizesplit, LANG_SPLIT_SIZE, 0,
987 "rec sizesplit",
988 "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB,"
989 "256MB,512MB,650MB,700MB,1GB,1.5GB,1.75GB",
990 NULL, 16, LANG_OFF,
991 TALK_ID(5, UNIT_MB), TALK_ID(10, UNIT_MB),
992 TALK_ID(15, UNIT_MB), TALK_ID(32, UNIT_MB),
993 TALK_ID(64, UNIT_MB), TALK_ID(75, UNIT_MB),
994 TALK_ID(100, UNIT_MB), TALK_ID(128, UNIT_MB),
995 TALK_ID(256, UNIT_MB), TALK_ID(512, UNIT_MB),
996 TALK_ID(650, UNIT_MB), TALK_ID(700, UNIT_MB),
997 TALK_ID(1024, UNIT_MB), TALK_ID(1536, UNIT_MB),
998 TALK_ID(1792, UNIT_MB)),
999 {F_T_INT|F_RECSETTING, &global_settings.rec_channels, LANG_CHANNELS, INT(0),
1000 "rec channels","stereo,mono",UNUSED},
1001 #if CONFIG_CODEC == SWCODEC
1002 {F_T_INT|F_RECSETTING, &global_settings.rec_mono_mode,
1003 LANG_RECORDING_MONO_MODE, INT(0), "rec mono mode","L+R,L,R",UNUSED},
1004 #endif
1005 CHOICE_SETTING(F_RECSETTING, rec_split_type, LANG_SPLIT_TYPE, 0,
1006 "rec split type", "Split,Stop,Shutdown", NULL, 3,
1007 ID2P(LANG_START_NEW_FILE), ID2P(LANG_STOP_RECORDING),ID2P(LANG_STOP_RECORDING_AND_SHUTDOWN)),
1008 CHOICE_SETTING(F_RECSETTING, rec_split_method, LANG_SPLIT_MEASURE, 0,
1009 "rec split method", "Time,Filesize", NULL, 2,
1010 ID2P(LANG_TIME), ID2P(LANG_REC_SIZE)),
1011 {F_T_INT|F_RECSETTING, &global_settings.rec_source, LANG_RECORDING_SOURCE,
1012 INT(0), "rec source",
1013 &HAVE_MIC_REC_(",mic")
1014 HAVE_LINE_REC_(",line")
1015 HAVE_SPDIF_REC_(",spdif")
1016 HAVE_FMRADIO_REC_(",fmradio")[1],
1017 UNUSED},
1018 INT_SETTING(F_RECSETTING, rec_prerecord_time, LANG_RECORD_PRERECORD_TIME, 0,
1019 "prerecording time", UNIT_SEC, 0, 30, 1,
1020 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL),
1022 TEXT_SETTING(F_RECSETTING, rec_directory, "rec path",
1023 REC_BASE_DIR, NULL, NULL),
1024 #ifdef HAVE_BACKLIGHT
1025 CHOICE_SETTING(F_RECSETTING, cliplight, LANG_CLIP_LIGHT, 0,
1026 "cliplight", "off,main,both,remote", NULL,
1027 #ifdef HAVE_REMOTE_LCD
1028 4, ID2P(LANG_OFF), ID2P(LANG_MAIN_UNIT),
1029 ID2P(LANG_REMOTE_MAIN), ID2P(LANG_REMOTE_UNIT)
1030 #else
1031 2, ID2P(LANG_OFF), ID2P(LANG_ON)
1032 #endif
1034 #endif
1035 #ifdef DEFAULT_REC_MIC_GAIN
1036 {F_T_INT|F_RECSETTING,&global_settings.rec_mic_gain,
1037 LANG_GAIN,INT(DEFAULT_REC_MIC_GAIN),
1038 "rec mic gain",NULL,UNUSED},
1039 #endif /* DEFAULT_REC_MIC_GAIN */
1040 #ifdef DEFAULT_REC_LEFT_GAIN
1041 {F_T_INT|F_RECSETTING,&global_settings.rec_left_gain,
1042 LANG_GAIN_LEFT,INT(DEFAULT_REC_LEFT_GAIN),
1043 "rec left gain",NULL,UNUSED},
1044 #endif /* DEFAULT_REC_LEFT_GAIN */
1045 #ifdef DEFAULT_REC_RIGHT_GAIN
1046 {F_T_INT|F_RECSETTING,&global_settings.rec_right_gain,LANG_GAIN_RIGHT,
1047 INT(DEFAULT_REC_RIGHT_GAIN),
1048 "rec right gain",NULL,UNUSED},
1049 #endif /* DEFAULT_REC_RIGHT_GAIN */
1050 #if CONFIG_CODEC == MAS3587F
1051 {F_T_INT|F_RECSETTING,&global_settings.rec_frequency,
1052 LANG_RECORDING_FREQUENCY, INT(0),
1053 "rec frequency","44,48,32,22,24,16", UNUSED},
1054 INT_SETTING(F_RECSETTING, rec_quality, LANG_RECORDING_QUALITY, 5,
1055 "rec quality", UNIT_INT, 0, 7, 1, NULL, NULL, NULL),
1056 OFFON_SETTING(F_RECSETTING, rec_editable, LANG_RECORDING_EDITABLE, false,
1057 "editable recordings", NULL),
1058 #endif /* CONFIG_CODEC == MAS3587F */
1059 #if CONFIG_CODEC == SWCODEC
1060 {F_T_INT|F_RECSETTING,&global_settings.rec_frequency,
1061 LANG_RECORDING_FREQUENCY,INT(REC_FREQ_DEFAULT),
1062 "rec frequency",REC_FREQ_CFG_VAL_LIST,UNUSED},
1063 {F_T_INT|F_RECSETTING,&global_settings.rec_format,
1064 LANG_RECORDING_FORMAT,INT(REC_FORMAT_DEFAULT),
1065 "rec format",REC_FORMAT_CFG_VAL_LIST,UNUSED},
1066 /** Encoder settings start - keep these together **/
1067 /* aiff_enc */
1068 /* (no settings yet) */
1069 /* mp3_enc */
1070 {F_T_INT|F_RECSETTING, &global_settings.mp3_enc_config.bitrate,-1,
1071 INT(MP3_ENC_BITRATE_CFG_DEFAULT),
1072 "mp3_enc bitrate",MP3_ENC_BITRATE_CFG_VALUE_LIST,UNUSED},
1073 /* wav_enc */
1074 /* (no settings yet) */
1075 /* wavpack_enc */
1076 /* (no settings yet) */
1077 /** Encoder settings end **/
1078 #endif /* CONFIG_CODEC == SWCODEC */
1079 /* values for the trigger */
1080 INT_SETTING(F_RECSETTING, rec_start_thres_db, LANG_RECORD_START_THRESHOLD, -35,
1081 "trigger start threshold dB", UNIT_DB, VOLUME_MIN/10, 0, -1, NULL, NULL, NULL),
1082 INT_SETTING(F_RECSETTING, rec_start_thres_linear, LANG_RECORD_START_THRESHOLD, 5,
1083 "trigger start threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL),
1084 INT_SETTING(F_RECSETTING, rec_stop_thres_db, LANG_RECORD_STOP_THRESHOLD, -45,
1085 "trigger stop threshold dB", UNIT_DB, VOLUME_MIN/10, 0, -1, NULL, NULL, NULL),
1086 INT_SETTING(F_RECSETTING, rec_stop_thres_linear, LANG_RECORD_STOP_THRESHOLD, 10,
1087 "trigger stop threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL),
1088 TABLE_SETTING(F_RECSETTING, rec_start_duration, LANG_MIN_DURATION, 0,
1089 "trigger start duration",
1090 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1091 UNIT_SEC, NULL, NULL, NULL, 13,
1092 0,1,2,5,10,15,20,25,30,60,120,300,600),
1093 TABLE_SETTING(F_RECSETTING, rec_stop_postrec, LANG_MIN_DURATION, 0,
1094 "trigger stop duration",
1095 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1096 UNIT_SEC, NULL, NULL, NULL, 13,
1097 0,1,2,5,10,15,20,25,30,60,120,300,600),
1098 TABLE_SETTING(F_RECSETTING, rec_stop_gap, LANG_RECORD_STOP_GAP, 1,
1099 "trigger min gap",
1100 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1101 UNIT_SEC, NULL, NULL, NULL, 13,
1102 0,1,2,5,10,15,20,25,30,60,120,300,600),
1103 CHOICE_SETTING(F_RECSETTING, rec_trigger_mode, LANG_RECORD_TRIGGER, TRIG_MODE_OFF,
1104 "trigger mode","off,once,repeat", NULL ,3,
1105 ID2P(LANG_OFF), ID2P(LANG_RECORD_TRIG_NOREARM), ID2P(LANG_REPEAT)),
1106 CHOICE_SETTING(F_RECSETTING, rec_trigger_type, LANG_RECORD_TRIGGER_TYPE, TRIG_TYPE_STOP,
1107 "trigger type","stop,pause,nf stp", NULL ,3,
1108 ID2P(LANG_RECORD_TRIGGER_STOP), ID2P(LANG_PAUSE), ID2P(LANG_RECORD_TRIGGER_NEWFILESTP)),
1109 #endif /* HAVE_RECORDING */
1111 #ifdef HAVE_SPDIF_POWER
1112 OFFON_SETTING(F_SOUNDSETTING, spdif_enable, LANG_SPDIF_ENABLE, false,
1113 "spdif enable", spdif_power_enable),
1114 #endif
1115 CHOICE_SETTING(0, next_folder, LANG_NEXT_FOLDER, FOLDER_ADVANCE_OFF,
1116 "folder navigation", "off,on,random",NULL ,3,
1117 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
1118 ID2P(LANG_RANDOM)),
1120 #ifdef HAVE_TAGCACHE
1121 OFFON_SETTING(0, runtimedb, LANG_RUNTIMEDB_ACTIVE, false,
1122 "gather runtime data", NULL),
1123 #endif
1125 #if CONFIG_CODEC == SWCODEC
1126 /* replay gain */
1127 CHOICE_SETTING(F_SOUNDSETTING, replaygain_type, LANG_REPLAYGAIN_MODE,
1128 REPLAYGAIN_SHUFFLE, "replaygain type",
1129 "track,album,track shuffle,off", NULL, 4, ID2P(LANG_TRACK_GAIN),
1130 ID2P(LANG_ALBUM_GAIN), ID2P(LANG_SHUFFLE_GAIN), ID2P(LANG_OFF)),
1131 OFFON_SETTING(F_SOUNDSETTING, replaygain_noclip, LANG_REPLAYGAIN_NOCLIP,
1132 false, "replaygain noclip", NULL),
1133 INT_SETTING_NOWRAP(F_SOUNDSETTING, replaygain_preamp,
1134 LANG_REPLAYGAIN_PREAMP, 0, "replaygain preamp",
1135 UNIT_DB, -120, 120, 5, db_format, get_dec_talkid, NULL),
1137 CHOICE_SETTING(0, beep, LANG_BEEP, 0, "beep", "off,weak,moderate,strong",
1138 NULL, 4, ID2P(LANG_OFF), ID2P(LANG_WEAK),
1139 ID2P(LANG_MODERATE), ID2P(LANG_STRONG)),
1141 #ifdef HAVE_CROSSFADE
1142 /* crossfade */
1143 CHOICE_SETTING(F_SOUNDSETTING, crossfade, LANG_CROSSFADE_ENABLE, 0,
1144 "crossfade",
1145 "off,shuffle,track skip,shuffle and track skip,always", NULL,
1146 5, ID2P(LANG_OFF), ID2P(LANG_SHUFFLE), ID2P(LANG_TRACKSKIP),
1147 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)),
1148 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_delay,
1149 LANG_CROSSFADE_FADE_IN_DELAY, 0,
1150 "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL),
1151 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_delay,
1152 LANG_CROSSFADE_FADE_OUT_DELAY, 0,
1153 "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL,NULL),
1154 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_duration,
1155 LANG_CROSSFADE_FADE_IN_DURATION, 2,
1156 "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL,
1157 NULL),
1158 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_duration,
1159 LANG_CROSSFADE_FADE_OUT_DURATION, 2,
1160 "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL,
1161 NULL),
1162 CHOICE_SETTING(F_SOUNDSETTING, crossfade_fade_out_mixmode,
1163 LANG_CROSSFADE_FADE_OUT_MODE, 0,
1164 "crossfade fade out mode", "crossfade,mix", NULL, 2,
1165 ID2P(LANG_CROSSFADE), ID2P(LANG_MIX)),
1166 #endif
1168 /* crossfeed */
1169 OFFON_SETTING(F_SOUNDSETTING, crossfeed, LANG_CROSSFEED, false,
1170 "crossfeed", dsp_set_crossfeed),
1171 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_direct_gain,
1172 LANG_CROSSFEED_DIRECT_GAIN, -15,
1173 "crossfeed direct gain", UNIT_DB, -60, 0, 5,
1174 db_format, get_dec_talkid,dsp_set_crossfeed_direct_gain),
1175 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_cross_gain,
1176 LANG_CROSSFEED_CROSS_GAIN, -60,
1177 "crossfeed cross gain", UNIT_DB, -120, -30, 5,
1178 db_format, get_dec_talkid, crossfeed_cross_set),
1179 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_attenuation,
1180 LANG_CROSSFEED_HF_ATTENUATION, -160,
1181 "crossfeed hf attenuation", UNIT_DB, -240, -60, 5,
1182 db_format, get_dec_talkid, crossfeed_cross_set),
1183 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_cutoff,
1184 LANG_CROSSFEED_HF_CUTOFF, 700,
1185 "crossfeed hf cutoff", UNIT_HERTZ, 500, 2000, 100,
1186 NULL, NULL, crossfeed_cross_set),
1188 /* equalizer */
1189 OFFON_SETTING(F_EQSETTING, eq_enabled, LANG_EQUALIZER_ENABLED, false,
1190 "eq enabled", NULL),
1191 INT_SETTING_NOWRAP(F_EQSETTING, eq_precut, LANG_EQUALIZER_PRECUT, 0,
1192 "eq precut", UNIT_DB, 0, 240, 5, eq_precut_format,
1193 get_precut_talkid, dsp_set_eq_precut),
1194 /* 0..32768 Hz */
1195 INT_SETTING_NOWRAP(F_EQSETTING, eq_band0_cutoff, LANG_EQUALIZER_BAND_CUTOFF,
1196 60, "eq band 0 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1197 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1198 INT_SETTING_NOWRAP(F_EQSETTING, eq_band1_cutoff, LANG_EQUALIZER_BAND_CENTER,
1199 200, "eq band 1 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1200 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1201 INT_SETTING_NOWRAP(F_EQSETTING, eq_band2_cutoff, LANG_EQUALIZER_BAND_CENTER,
1202 800, "eq band 2 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1203 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1204 INT_SETTING_NOWRAP(F_EQSETTING, eq_band3_cutoff, LANG_EQUALIZER_BAND_CENTER,
1205 4000, "eq band 3 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1206 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1207 INT_SETTING_NOWRAP(F_EQSETTING, eq_band4_cutoff, LANG_EQUALIZER_BAND_CUTOFF,
1208 12000, "eq band 4 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1209 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1210 /* 0..64 (or 0.0 to 6.4) */
1211 INT_SETTING_NOWRAP(F_EQSETTING, eq_band0_q, LANG_EQUALIZER_BAND_Q, 7,
1212 "eq band 0 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1213 eq_q_format, get_dec_talkid, NULL),
1214 INT_SETTING_NOWRAP(F_EQSETTING, eq_band1_q, LANG_EQUALIZER_BAND_Q, 10,
1215 "eq band 1 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1216 eq_q_format, get_dec_talkid, NULL),
1217 INT_SETTING_NOWRAP(F_EQSETTING, eq_band2_q, LANG_EQUALIZER_BAND_Q, 10,
1218 "eq band 2 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1219 eq_q_format, get_dec_talkid, NULL),
1220 INT_SETTING_NOWRAP(F_EQSETTING, eq_band3_q, LANG_EQUALIZER_BAND_Q, 10,
1221 "eq band 3 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1222 eq_q_format, get_dec_talkid, NULL),
1223 INT_SETTING_NOWRAP(F_EQSETTING, eq_band4_q, LANG_EQUALIZER_BAND_Q, 7,
1224 "eq band 4 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1225 eq_q_format, get_dec_talkid, NULL),
1226 /* -240..240 (or -24db to +24db) */
1227 INT_SETTING_NOWRAP(F_EQSETTING, eq_band0_gain, LANG_GAIN, 0,
1228 "eq band 0 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1229 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1230 INT_SETTING_NOWRAP(F_EQSETTING, eq_band1_gain, LANG_GAIN, 0,
1231 "eq band 1 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1232 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1233 INT_SETTING_NOWRAP(F_EQSETTING, eq_band2_gain, LANG_GAIN, 0,
1234 "eq band 2 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1235 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1236 INT_SETTING_NOWRAP(F_EQSETTING, eq_band3_gain, LANG_GAIN, 0,
1237 "eq band 3 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1238 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1239 INT_SETTING_NOWRAP(F_EQSETTING, eq_band4_gain, LANG_GAIN, 0,
1240 "eq band 4 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1241 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1243 /* dithering */
1244 OFFON_SETTING(F_SOUNDSETTING, dithering_enabled, LANG_DITHERING, false,
1245 "dithering enabled", dsp_dither_enable),
1247 /* timestretch */
1248 OFFON_SETTING(F_SOUNDSETTING, timestretch_enabled, LANG_TIMESTRETCH, false,
1249 "timestretch enabled", dsp_timestretch_enable),
1251 /* limiter */
1252 INT_SETTING_NOWRAP(F_SOUNDSETTING, limiter_level,
1253 LANG_LIMITER, 0,
1254 "limiter level", UNIT_DB, 0, MAX_LIMITER_GAIN,
1255 5, db_format, get_dec_talkid, dsp_set_limiter),
1256 #endif
1257 #ifdef HAVE_WM8758
1258 SOUND_SETTING(F_NO_WRAP, bass_cutoff, LANG_BASS_CUTOFF,
1259 "bass cutoff", SOUND_BASS_CUTOFF),
1260 SOUND_SETTING(F_NO_WRAP, treble_cutoff, LANG_TREBLE_CUTOFF,
1261 "treble cutoff", SOUND_TREBLE_CUTOFF),
1262 #endif
1263 #ifdef HAVE_DIRCACHE
1264 OFFON_SETTING(F_BANFROMQS,dircache,LANG_DIRCACHE_ENABLE,false,"dircache",NULL),
1265 SYSTEM_SETTING(NVRAM(4),dircache_size,0),
1266 #endif
1268 #ifdef HAVE_TAGCACHE
1269 #ifdef HAVE_TC_RAMCACHE
1270 OFFON_SETTING(F_BANFROMQS,tagcache_ram,LANG_TAGCACHE_RAM,false,"tagcache_ram",NULL),
1271 #endif
1272 OFFON_SETTING(F_BANFROMQS, tagcache_autoupdate, LANG_TAGCACHE_AUTOUPDATE, false,
1273 "tagcache_autoupdate", NULL),
1274 #endif
1275 CHOICE_SETTING(0, default_codepage, LANG_DEFAULT_CODEPAGE, 0,
1276 "default codepage",
1277 #ifdef HAVE_LCD_BITMAP
1278 /* The order must match with that in unicode.c */
1279 "iso8859-1,iso8859-7,iso8859-8,cp1251,iso8859-11,cp1256,"
1280 "iso8859-9,iso8859-2,cp1250,sjis,gb2312,ksx1001,big5,utf-8",
1281 set_codepage, 14,
1282 ID2P(LANG_CODEPAGE_LATIN1), ID2P(LANG_CODEPAGE_GREEK),
1283 ID2P(LANG_CODEPAGE_HEBREW), ID2P(LANG_CODEPAGE_CYRILLIC),
1284 ID2P(LANG_CODEPAGE_THAI), ID2P(LANG_CODEPAGE_ARABIC),
1285 ID2P(LANG_CODEPAGE_TURKISH),
1286 ID2P(LANG_CODEPAGE_LATIN_EXTENDED),
1287 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN),
1288 ID2P(LANG_CODEPAGE_JAPANESE),
1289 ID2P(LANG_CODEPAGE_SIMPLIFIED), ID2P(LANG_CODEPAGE_KOREAN),
1290 ID2P(LANG_CODEPAGE_TRADITIONAL), ID2P(LANG_CODEPAGE_UTF8)),
1291 #else /* !HAVE_LCD_BITMAP */
1292 /* The order must match with that in unicode.c */
1293 "iso8859-1,iso8859-7,cp1251,iso8859-9,iso8859-2,cp1250,utf-8",
1294 set_codepage, 7,
1295 ID2P(LANG_CODEPAGE_LATIN1), ID2P(LANG_CODEPAGE_GREEK),
1296 ID2P(LANG_CODEPAGE_CYRILLIC), ID2P(LANG_CODEPAGE_TURKISH),
1297 ID2P(LANG_CODEPAGE_LATIN_EXTENDED),
1298 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN),
1299 ID2P(LANG_CODEPAGE_UTF8)),
1300 #endif
1301 OFFON_SETTING(0, warnon_erase_dynplaylist, LANG_WARN_ERASEDYNPLAYLIST_MENU,
1302 true, "warn when erasing dynamic playlist",NULL),
1304 #ifdef HAVE_BACKLIGHT
1305 #ifdef HAS_BUTTON_HOLD
1306 CHOICE_SETTING(0, backlight_on_button_hold, LANG_BACKLIGHT_ON_BUTTON_HOLD,
1307 1, "backlight on button hold", "normal,off,on",
1308 backlight_set_on_button_hold, 3,
1309 ID2P(LANG_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)),
1310 #endif
1312 #ifdef HAVE_LCD_SLEEP_SETTING
1313 STRINGCHOICE_SETTING(0, lcd_sleep_after_backlight_off,
1314 LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF, 3,
1315 "lcd sleep after backlight off",
1316 "always,never,5,10,15,20,30,45,60,90",
1317 lcd_set_sleep_after_backlight_off, 10,
1318 LANG_ALWAYS, LANG_NEVER, TALK_ID(5, UNIT_SEC),
1319 TALK_ID(10, UNIT_SEC), TALK_ID(15, UNIT_SEC),
1320 TALK_ID(20, UNIT_SEC), TALK_ID(30, UNIT_SEC),
1321 TALK_ID(45, UNIT_SEC),TALK_ID(60, UNIT_SEC),
1322 TALK_ID(90, UNIT_SEC)),
1323 #endif /* HAVE_LCD_SLEEP_SETTING */
1324 #endif /* HAVE_BACKLIGHT */
1326 OFFON_SETTING(0, hold_lr_for_scroll_in_list, -1, true,
1327 "hold_lr_for_scroll_in_list",NULL),
1328 #ifdef HAVE_LCD_BITMAP
1329 CHOICE_SETTING(0, show_path_in_browser, LANG_SHOW_PATH, SHOW_PATH_CURRENT,
1330 "show path in browser", "off,current directory,full path",
1331 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_SHOW_PATH_CURRENT),
1332 ID2P(LANG_DISPLAY_FULL_PATH)),
1333 #endif
1335 #ifdef HAVE_AGC
1336 {F_T_INT,&global_settings.rec_agc_preset_mic,LANG_RECORDING_AGC_PRESET,
1337 INT(1),"agc mic preset",NULL,UNUSED},
1338 {F_T_INT,&global_settings.rec_agc_preset_line,LANG_RECORDING_AGC_PRESET,
1339 INT(1),"agc line preset",NULL,UNUSED},
1340 {F_T_INT,&global_settings.rec_agc_maxgain_mic,-1,INT(104),
1341 "agc maximum mic gain",NULL,UNUSED},
1342 {F_T_INT,&global_settings.rec_agc_maxgain_line,-1,INT(96),
1343 "agc maximum line gain",NULL,UNUSED},
1344 {F_T_INT,&global_settings.rec_agc_cliptime,LANG_RECORDING_AGC_CLIPTIME,
1345 INT(1),"agc cliptime","0.2s,0.4s,0.6s,0.8,1s",UNUSED},
1346 #endif
1348 #ifdef HAVE_REMOTE_LCD
1349 #ifdef HAS_REMOTE_BUTTON_HOLD
1350 CHOICE_SETTING(0, remote_backlight_on_button_hold,
1351 LANG_BACKLIGHT_ON_BUTTON_HOLD, 0,
1352 "remote backlight on button hold",
1353 "normal,off,on", remote_backlight_set_on_button_hold, 3,
1354 ID2P(LANG_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)),
1355 #endif
1356 #endif
1357 #ifdef HAVE_HEADPHONE_DETECTION
1358 CHOICE_SETTING(0, unplug_mode, LANG_HEADPHONE_UNPLUG, 0,
1359 "pause on headphone unplug", "off,pause,pause and resume",
1360 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_PAUSE),
1361 ID2P(LANG_HEADPHONE_UNPLUG_RESUME)),
1362 INT_SETTING(0, unplug_rw, LANG_HEADPHONE_UNPLUG_RW, 0,
1363 "rewind duration on pause", UNIT_SEC, 0, 15, 1, NULL, NULL,
1364 NULL),
1365 OFFON_SETTING(0, unplug_autoresume,
1366 LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME, false,
1367 "disable autoresume if phones not present",NULL),
1368 #endif
1369 #if CONFIG_TUNER
1370 CHOICE_SETTING(0, fm_region, LANG_FM_REGION, 0,
1371 "fm_region", "eu,us,jp,kr", set_radio_region, 4,
1372 ID2P(LANG_FM_EUROPE), ID2P(LANG_FM_US),
1373 ID2P(LANG_FM_JAPAN), ID2P(LANG_FM_KOREA)),
1374 #endif
1376 OFFON_SETTING(F_BANFROMQS, audioscrobbler, LANG_AUDIOSCROBBLER, false,
1377 "Last.fm Logging", NULL),
1378 #if CONFIG_TUNER
1379 TEXT_SETTING(0, fmr_file, "fmr", "",
1380 FMPRESET_PATH "/", ".fmr"),
1381 #endif
1382 #ifdef HAVE_LCD_BITMAP
1383 TEXT_SETTING(F_THEMESETTING, font_file, "font",
1384 DEFAULT_FONTNAME, FONT_DIR "/", ".fnt"),
1385 #endif
1386 TEXT_SETTING(F_THEMESETTING,wps_file, "wps",
1387 DEFAULT_WPSNAME, WPS_DIR "/", ".wps"),
1388 TEXT_SETTING(0,lang_file,"lang","",LANG_DIR "/",".lng"),
1389 #ifdef HAVE_REMOTE_LCD
1390 TEXT_SETTING(F_THEMESETTING,rwps_file,"rwps",
1391 DEFAULT_WPSNAME, WPS_DIR "/", ".rwps"),
1392 #endif
1393 #if LCD_DEPTH > 1
1394 TEXT_SETTING(F_THEMESETTING,backdrop_file,"backdrop",
1395 DEFAULT_BACKDROP, BACKDROP_DIR "/", ".bmp"),
1396 #endif
1397 #ifdef HAVE_LCD_BITMAP
1398 TEXT_SETTING(0,kbd_file,"kbd","",ROCKBOX_DIR "/",".kbd"),
1399 #endif
1400 #ifdef HAVE_USB_CHARGING_ENABLE
1401 OFFON_SETTING(0,usb_charging,LANG_USB_CHARGING,false,"usb charging",NULL),
1402 #endif
1403 OFFON_SETTING(F_BANFROMQS,cuesheet,LANG_CUESHEET_ENABLE,false,"cuesheet support",
1404 NULL),
1405 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, skip_length,
1406 LANG_SKIP_LENGTH, 0, "skip length",
1407 "track,1s,2s,3s,5s,7s,10s,15s,20s,30s,45s,1min,90s,2min,3min,5min,10min,15min",
1408 UNIT_SEC, formatter_unit_0_is_skip_track,
1409 getlang_unit_0_is_skip_track, NULL,
1410 18, 0,1,2,3,5,7,10,15,20,30,45,60,90,120,180,300,600,900),
1411 CHOICE_SETTING(0, start_in_screen, LANG_START_SCREEN, 1,
1412 "start in screen", "previous,root,files,"
1413 #ifdef HAVE_TAGCACHE
1414 "db,"
1415 #endif
1416 "wps,menu,"
1417 #ifdef HAVE_RECORDING
1418 "recording,"
1419 #endif
1420 #if CONFIG_TUNER
1421 "radio,"
1422 #endif
1423 "bookmarks" ,NULL,
1424 #if defined(HAVE_TAGCACHE)
1425 #if defined(HAVE_RECORDING) && CONFIG_TUNER
1427 #elif defined(HAVE_RECORDING) || CONFIG_TUNER /* only one of them */
1429 #else
1431 #endif
1432 #else
1433 #if defined(HAVE_RECORDING) && CONFIG_TUNER
1435 #elif defined(HAVE_RECORDING) || CONFIG_TUNER /* only one of them */
1437 #else
1439 #endif
1440 #endif
1441 ID2P(LANG_PREVIOUS_SCREEN), ID2P(LANG_MAIN_MENU),
1442 ID2P(LANG_DIR_BROWSER),
1443 #ifdef HAVE_TAGCACHE
1444 ID2P(LANG_TAGCACHE),
1445 #endif
1446 ID2P(LANG_RESUME_PLAYBACK), ID2P(LANG_SETTINGS),
1447 #ifdef HAVE_RECORDING
1448 ID2P(LANG_RECORDING),
1449 #endif
1450 #if CONFIG_TUNER
1451 ID2P(LANG_FM_RADIO),
1452 #endif
1453 ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS)
1455 SYSTEM_SETTING(NVRAM(1),last_screen,-1),
1456 #if defined(HAVE_RTC_ALARM) && \
1457 (defined(HAVE_RECORDING) || CONFIG_TUNER)
1458 {F_T_INT, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN,
1459 INT(ALARM_START_WPS), "alarm wakeup screen", ALARM_SETTING_TEXT,UNUSED},
1460 #endif /* HAVE_RTC_ALARM */
1462 /* Customizable icons */
1463 #ifdef HAVE_LCD_BITMAP
1464 TEXT_SETTING(F_THEMESETTING, icon_file, "iconset", DEFAULT_ICONSET,
1465 ICON_DIR "/", ".bmp"),
1466 TEXT_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset",
1467 DEFAULT_VIEWERS_ICONSET,
1468 ICON_DIR "/", ".bmp"),
1469 #endif
1470 #ifdef HAVE_REMOTE_LCD
1471 TEXT_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "",
1472 ICON_DIR "/", ".bmp"),
1473 TEXT_SETTING(F_THEMESETTING, remote_viewers_icon_file,
1474 "remote viewers iconset", "",
1475 ICON_DIR "/", ".bmp"),
1476 #endif /* HAVE_REMOTE_LCD */
1477 #ifdef HAVE_LCD_COLOR
1478 TEXT_SETTING(F_THEMESETTING, colors_file, "filetype colours", "-",
1479 THEME_DIR "/", ".colours"),
1480 #endif
1481 #ifdef HAVE_BUTTON_LIGHT
1482 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, buttonlight_timeout,
1483 LANG_BUTTONLIGHT_TIMEOUT, 5, "button light timeout", off_on,
1484 UNIT_SEC, backlight_formatter, backlight_getlang,
1485 buttonlight_set_timeout, 20,
1486 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
1487 #endif
1488 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
1489 INT_SETTING(F_NO_WRAP, buttonlight_brightness, LANG_BUTTONLIGHT_BRIGHTNESS,
1490 DEFAULT_BRIGHTNESS_SETTING,
1491 "button light brightness",UNIT_INT, MIN_BRIGHTNESS_SETTING,
1492 MAX_BRIGHTNESS_SETTING, 1, NULL, NULL,
1493 buttonlight_set_brightness),
1494 #endif
1495 #ifndef HAVE_WHEEL_ACCELERATION
1496 INT_SETTING(0, list_accel_start_delay, LANG_LISTACCEL_START_DELAY,
1497 2, "list_accel_start_delay", UNIT_MS, 0, 10, 1,
1498 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL),
1499 INT_SETTING(0, list_accel_wait, LANG_LISTACCEL_ACCEL_SPEED,
1500 3, "list_accel_wait", UNIT_SEC, 1, 10, 1,
1501 scanaccel_formatter, getlang_unit_0_is_off, NULL),
1502 #endif /* HAVE_WHEEL_ACCELERATION */
1503 #if CONFIG_CODEC == SWCODEC
1504 /* keyclick */
1505 CHOICE_SETTING(0, keyclick, LANG_KEYCLICK, 0,
1506 "keyclick", "off,weak,moderate,strong", NULL, 4,
1507 ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE),
1508 ID2P(LANG_STRONG)),
1509 OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false,
1510 "keyclick repeats", NULL),
1511 #endif /* CONFIG_CODEC == SWCODEC */
1512 TEXT_SETTING(0, playlist_catalog_dir, "playlist catalog directory",
1513 PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL),
1514 #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
1515 CHOICE_SETTING(0, touchpad_sensitivity, LANG_TOUCHPAD_SENSITIVITY, 0,
1516 "touchpad sensitivity", "normal,high", touchpad_set_sensitivity, 2,
1517 ID2P(LANG_NORMAL), ID2P(LANG_HIGH)),
1518 #endif
1519 #ifdef HAVE_QUICKSCREEN
1520 CUSTOM_SETTING(0, qs_item_left, LANG_LEFT_QS_ITEM,
1521 &global_settings.playlist_shuffle, "qs left",
1522 qs_load_from_cfg, qs_write_to_cfg,
1523 qs_is_changed, qs_set_default),
1524 CUSTOM_SETTING(0, qs_item_right, LANG_RIGHT_QS_ITEM,
1525 &global_settings.repeat_mode, "qs right",
1526 qs_load_from_cfg, qs_write_to_cfg,
1527 qs_is_changed, qs_set_default),
1528 CUSTOM_SETTING(0, qs_item_bottom, LANG_BOTTOM_QS_ITEM,
1529 &global_settings.dirfilter, "qs bottom",
1530 qs_load_from_cfg, qs_write_to_cfg,
1531 qs_is_changed, qs_set_default),
1532 #endif
1533 #ifdef HAVE_SPEAKER
1534 OFFON_SETTING(0, speaker_enabled, LANG_ENABLE_SPEAKER, false, "speaker",
1535 audiohw_enable_speaker),
1536 #endif
1537 #ifdef HAVE_TOUCHSCREEN
1538 CHOICE_SETTING(0, touch_mode, LANG_TOUCHSCREEN_MODE, TOUCHSCREEN_BUTTON,
1539 "touchscreen mode", "point,grid", NULL, 2,
1540 ID2P(LANG_TOUCHSCREEN_POINT), ID2P(LANG_TOUCHSCREEN_GRID)),
1541 CUSTOM_SETTING(0, ts_calibration_data, -1,
1542 &default_calibration_parameters, "touchscreen calibration",
1543 tsc_load_from_cfg, tsc_write_to_cfg,
1544 tsc_is_changed, tsc_set_default),
1545 #endif
1546 OFFON_SETTING(0, prevent_skip, LANG_PREVENT_SKIPPING, false, "prevent track skip", NULL),
1548 #ifdef HAVE_PITCHSCREEN
1549 OFFON_SETTING(0, pitch_mode_semitone, LANG_SEMITONE, false,
1550 "Semitone pitch change", NULL),
1551 #if CONFIG_CODEC == SWCODEC
1552 OFFON_SETTING(0, pitch_mode_timestretch, LANG_TIMESTRETCH, false,
1553 "Timestretch mode", NULL),
1554 #endif
1555 #endif
1557 /* Customizable list */
1558 #ifdef HAVE_LCD_BITMAP
1559 VIEWPORT_SETTING(ui_vp_config, "ui viewport"),
1560 #ifdef HAVE_REMOTE_LCD
1561 VIEWPORT_SETTING(remote_ui_vp_config, "remote ui viewport"),
1562 #endif
1563 #endif
1566 const int nb_settings = sizeof(settings)/sizeof(*settings);
1568 const struct settings_list* get_settings_list(int*count)
1570 *count = nb_settings;
1571 return settings;