Add support for cp1252 (Western European) codepage.
[maemo-rb.git] / apps / settings_list.c
blob64bbe07ba4f4c0b8ea075bb84763a830d4619c06
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-extra.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 "sound.h"
33 #include "settings.h"
34 #include "settings_list.h"
35 #include "usb.h"
36 #include "audio.h"
37 #include "power.h"
38 #include "powermgmt.h"
39 #include "kernel.h"
40 #ifdef HAVE_REMOTE_LCD
41 #include "lcd-remote.h"
42 #endif
43 #include "list.h"
44 #include "rbunicode.h"
45 #ifdef HAVE_LCD_BITMAP
46 #include "peakmeter.h"
47 #endif
48 #include "menus/eq_menu.h"
49 #if CONFIG_TUNER
50 #include "radio.h"
51 #endif
52 #ifdef IPOD_ACCESSORY_PROTOCOL
53 #include "iap.h"
54 #endif
55 #include "statusbar.h"
56 #ifdef HAVE_TOUCHSCREEN
57 #include "touchscreen.h"
58 #include "ctype.h" /* For isspace() */
59 #endif
60 #ifdef HAVE_HOTKEY
61 #include "onplay.h"
62 #endif
64 #define NVRAM(bytes) (bytes<<F_NVRAM_MASK_SHIFT)
65 /** NOTE: NVRAM_CONFIG_VERSION is in settings_list.h
66 and you may need to update it if you edit this file */
68 #define UNUSED {.RESERVED=NULL}
69 #define INT(a) {.int_ = a}
70 #define UINT(a) {.uint_ = a}
71 #define BOOL(a) {.bool_ = a}
72 #define CHARPTR(a) {.charptr = a}
73 #define UCHARPTR(a) {.ucharptr = a}
74 #define FUNCTYPE(a) {.func = a}
75 #define NODEFAULT INT(0)
77 /* in all the following macros the args are:
78 - flags: bitwise | or the F_ bits in settings_list.h
79 - var: pointer to the variable being changed (usually in global_settings)
80 - lang_id: LANG_* id to display in menus and setting screens for the setting
81 - default: the default value for the variable, set if settings are reset
82 - name: the name of the setting in config files
83 - cfg_vals: comma separated list of legal values to write to cfg files.
84 The values correspond to the values 0,1,2,etc. of the setting.
85 NULL if just the number itself should be written to the file.
86 No spaces between the values and the commas!
87 - cb: the callback used by the setting screen.
90 /* Use for int settings which use the set_sound() function to set them */
91 #define SOUND_SETTING(flags,var,lang_id,name,setting) \
92 {flags|F_T_INT|F_T_SOUND|F_SOUNDSETTING, &global_settings.var, \
93 lang_id, NODEFAULT,name,NULL, \
94 {.sound_setting=(struct sound_setting[]){{setting}}} }
96 /* Use for bool variables which don't use LANG_SET_BOOL_YES and LANG_SET_BOOL_NO
97 or dont save as "off" or "on" in the cfg.
98 cfgvals are comma separated values (without spaces after the comma!) to write
99 for 'false' and 'true' (in this order)
100 yes_id is the lang_id for the 'yes' (or 'on') option in the menu
101 no_id is the lang_id for the 'no' (or 'off') option in the menu
103 #define BOOL_SETTING(flags,var,lang_id,default,name,cfgvals,yes_id,no_id,cb)\
104 {flags|F_BOOL_SETTING, &global_settings.var, \
105 lang_id, BOOL(default),name,cfgvals, \
106 {.bool_setting=(struct bool_setting[]){{cb,yes_id,no_id}}} }
108 /* bool setting which does use LANG_YES and _NO and save as "off,on" */
109 #define OFFON_SETTING(flags,var,lang_id,default,name,cb) \
110 BOOL_SETTING(flags,var,lang_id,default,name,off_on, \
111 LANG_SET_BOOL_YES,LANG_SET_BOOL_NO,cb)
113 /* int variable which is NOT saved to .cfg files,
114 (Use NVRAM() in the flags to save to the nvram (or nvram.bin file) */
115 #define SYSTEM_SETTING(flags,var,default) \
116 {flags|F_T_INT, &global_status.var,-1, INT(default), \
117 NULL, NULL, UNUSED}
119 /* setting which stores as a filename (or another string) in the .cfgvals
120 The string must be a char array (which all of our string settings are),
121 not just a char pointer.
122 prefix: The absolute path to not save in the variable, ex /.rockbox/wps_file
123 suffix: The file extention (usually...) e.g .wps_file
124 If the prefix is set (not NULL), then the suffix must be set as well.
126 #define TEXT_SETTING(flags,var,name,default,prefix,suffix) \
127 {flags|F_T_UCHARPTR, &global_settings.var,-1, \
128 CHARPTR(default),name,NULL, \
129 {.filename_setting= \
130 (struct filename_setting[]){ \
131 {prefix,suffix,sizeof(global_settings.var)}}} }
133 /* Used for settings which use the set_option() setting screen.
134 The ... arg is a list of pointers to strings to display in the setting
135 screen. These can either be literal strings, or ID2P(LANG_*) */
136 #define CHOICE_SETTING(flags,var,lang_id,default,name,cfg_vals,cb,count,...) \
137 {flags|F_CHOICE_SETTING|F_T_INT, &global_settings.var, lang_id, \
138 INT(default), name, cfg_vals, \
139 {.choice_setting = (struct choice_setting[]){ \
140 {cb, count, {.desc = (const unsigned char*[]) \
141 {__VA_ARGS__}}}}}}
143 /* Similar to above, except the strings to display are taken from cfg_vals,
144 the ... arg is a list of ID's to talk for the strings, can use TALK_ID()'s */
145 #define STRINGCHOICE_SETTING(flags,var,lang_id,default,name,cfg_vals, \
146 cb,count,...) \
147 {flags|F_CHOICE_SETTING|F_T_INT|F_CHOICETALKS, \
148 &global_settings.var, lang_id, \
149 INT(default), name, cfg_vals, \
150 {.choice_setting = (struct choice_setting[]){ \
151 {cb, count, {.talks = (const int[]){__VA_ARGS__}}}}}}
153 /* for settings which use the set_int() setting screen.
154 unit is the UNIT_ define to display/talk.
155 the first one saves a string to the config file,
156 the second one saves the variable value to the config file */
157 #define INT_SETTING_W_CFGVALS(flags, var, lang_id, default, name, cfg_vals, \
158 unit, min, max, step, formatter, get_talk_id, cb) \
159 {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \
160 lang_id, INT(default), name, cfg_vals, \
161 {.int_setting = (struct int_setting[]){ \
162 {cb, unit, min, max, step, formatter, get_talk_id}}}}
163 #define INT_SETTING(flags, var, lang_id, default, name, \
164 unit, min, max, step, formatter, get_talk_id, cb) \
165 {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \
166 lang_id, INT(default), name, NULL, \
167 {.int_setting = (struct int_setting[]){ \
168 {cb, unit, min, max, step, formatter, get_talk_id}}}}
169 #define INT_SETTING_NOWRAP(flags, var, lang_id, default, name, \
170 unit, min, max, step, formatter, get_talk_id, cb) \
171 {flags|F_INT_SETTING|F_T_INT|F_NO_WRAP, &global_settings.var, \
172 lang_id, INT(default), name, NULL, \
173 {.int_setting = (struct int_setting[]){ \
174 {cb, unit, min, max, step, formatter, get_talk_id}}}}
176 #define TABLE_SETTING(flags, var, lang_id, default, name, cfg_vals, \
177 unit, formatter, get_talk_id, cb, count, ...) \
178 {flags|F_TABLE_SETTING|F_T_INT, &global_settings.var, \
179 lang_id, INT(default), name, cfg_vals, \
180 {.table_setting = (struct table_setting[]) { \
181 {cb, formatter, get_talk_id, unit, count, \
182 (const int[]){__VA_ARGS__}}}}}
184 #define CUSTOM_SETTING(flags, var, lang_id, default, name, \
185 load_from_cfg, write_to_cfg, \
186 is_change, set_default) \
187 {flags|F_CUSTOM_SETTING|F_T_CUSTOM|F_BANFROMQS, \
188 &global_settings.var, lang_id, \
189 {.custom = (void*)default}, name, NULL, \
190 {.custom_setting = (struct custom_setting[]){ \
191 {load_from_cfg, write_to_cfg, is_change, set_default}}}}
193 #define VIEWPORT_SETTING(var,name) \
194 TEXT_SETTING(F_THEMESETTING,var,name,"-", NULL, NULL)
196 /* some sets of values which are used more than once, to save memory */
197 static const char off_on[] = "off,on";
198 static const char off_on_ask[] = "off,on,ask";
199 static const char off_number_spell[] = "off,number,spell";
200 #ifdef HAVE_LCD_BITMAP
201 static const char graphic_numeric[] = "graphic,numeric";
202 #endif
204 /* Default theme settings */
205 #define DEFAULT_WPSNAME "cabbiev2"
206 #define DEFAULT_SBSNAME "-"
207 #define DEFAULT_FMS_NAME "-"
209 #ifdef HAVE_LCD_BITMAP
211 #if LCD_HEIGHT <= 64
212 #define DEFAULT_FONT_HEIGHT 8
213 #define DEFAULT_FONTNAME "08-Rockfont"
214 #elif LCD_HEIGHT <= 80
215 #define DEFAULT_FONT_HEIGHT 11
216 #define DEFAULT_FONTNAME "11-Sazanami-Mincho"
217 #elif LCD_HEIGHT <= 220
218 #define DEFAULT_FONT_HEIGHT 12
219 #elif LCD_HEIGHT <= 320
220 #define DEFAULT_FONT_HEIGHT 15
221 #elif LCD_HEIGHT <= 400
222 #define DEFAULT_FONT_HEIGHT 16
223 #elif LCD_HEIGHT <= 480 && LCD_WIDTH < 800
224 #define DEFAULT_FONT_HEIGHT 27
225 #else
226 #define DEFAULT_FONT_HEIGHT 35
227 #endif
228 #define DEFAULT_GLYPHS 250
229 #define MIN_GLYPHS 50
230 #define MAX_GLYPHS 65540
232 #else
233 #define DEFAULT_FONT_HEIGHT 12
234 #endif
236 #ifndef DEFAULT_FONTNAME
237 /* ugly expansion needed */
238 #define _EXPAND2(x) #x
239 #define _EXPAND(x) _EXPAND2(x)
240 #define DEFAULT_FONTNAME _EXPAND(DEFAULT_FONT_HEIGHT) "-Adobe-Helvetica"
241 #endif
243 #ifdef HAVE_LCD_COLOR
244 #if DEFAULT_FONT_HEIGHT >= 31
245 #define DEFAULT_ICONSET "tango_icons.32x32"
246 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.32x32"
247 #elif DEFAULT_FONT_HEIGHT >= 23
248 #define DEFAULT_ICONSET "tango_icons.24x24"
249 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.24x24"
250 #elif DEFAULT_FONT_HEIGHT >= 15
251 #define DEFAULT_ICONSET "tango_icons.16x16"
252 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.16x16"
253 #else
254 #define DEFAULT_ICONSET "tango_icons.12x12"
255 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.12x12"
256 #endif
257 #elif LCD_DEPTH > 1 /* greyscale */
258 #define DEFAULT_ICONSET "tango_small_mono"
259 #define DEFAULT_VIEWERS_ICONSET "tango_small_viewers_mono"
260 #else /* monochrome */
261 #define DEFAULT_ICONSET ""
262 #define DEFAULT_VIEWERS_ICONSET ""
263 #endif
265 #ifdef HAVE_REMOTE_LCD
266 #if LCD_REMOTE_HEIGHT <= 64
267 #define DEFAULT_REMOTE_FONTNAME "08-Rockfont"
268 #else
269 #define DEFAULT_REMOTE_FONTNAME "-"
270 #endif
271 #endif /* HAVE_REMOTE_LCD */
273 #define DEFAULT_THEME_FOREGROUND LCD_RGBPACK(0xce, 0xcf, 0xce)
274 #define DEFAULT_THEME_BACKGROUND LCD_RGBPACK(0x00, 0x00, 0x00)
275 #define DEFAULT_THEME_SELECTOR_START LCD_RGBPACK(0xff, 0xeb, 0x9c)
276 #define DEFAULT_THEME_SELECTOR_END LCD_RGBPACK(0xb5, 0x8e, 0x00)
277 #define DEFAULT_THEME_SELECTOR_TEXT LCD_RGBPACK(0x00, 0x00, 0x00)
279 #define DEFAULT_BACKDROP BACKDROP_DIR "/cabbiev2.bmp"
281 #ifdef HAVE_RECORDING
282 /* these should be in the config.h files */
283 #if CONFIG_CODEC == MAS3587F
284 # define DEFAULT_REC_MIC_GAIN 8
285 # define DEFAULT_REC_LEFT_GAIN 2
286 # define DEFAULT_REC_RIGHT_GAIN 2
287 #elif CONFIG_CODEC == SWCODEC
288 # ifdef HAVE_UDA1380
289 # define DEFAULT_REC_MIC_GAIN 16
290 # define DEFAULT_REC_LEFT_GAIN 0
291 # define DEFAULT_REC_RIGHT_GAIN 0
292 # elif defined(HAVE_TLV320)
293 # define DEFAULT_REC_MIC_GAIN 0
294 # define DEFAULT_REC_LEFT_GAIN 0
295 # define DEFAULT_REC_RIGHT_GAIN 0
296 # elif defined(HAVE_WM8975)
297 # define DEFAULT_REC_MIC_GAIN 16
298 # define DEFAULT_REC_LEFT_GAIN 0
299 # define DEFAULT_REC_RIGHT_GAIN 0
300 # elif defined(HAVE_WM8758)
301 # define DEFAULT_REC_MIC_GAIN 16
302 # define DEFAULT_REC_LEFT_GAIN 0
303 # define DEFAULT_REC_RIGHT_GAIN 0
304 # elif defined(HAVE_WM8731)
305 # define DEFAULT_REC_MIC_GAIN 16
306 # define DEFAULT_REC_LEFT_GAIN 0
307 # define DEFAULT_REC_RIGHT_GAIN 0
308 # endif
309 #endif
311 #endif /* HAVE_RECORDING */
313 #ifdef HAVE_TOUCHSCREEN
315 static const char* list_pad_formatter(char *buffer, size_t buffer_size,
316 int val, const char *unit)
318 switch (val)
320 case -1: return str(LANG_AUTOMATIC);
321 case 0: return str(LANG_OFF);
322 default: break;
324 snprintf(buffer, buffer_size, "%d %s", val, unit);
325 return buffer;
328 static int32_t list_pad_getlang(int value, int unit)
330 switch (value)
332 case -1: return LANG_AUTOMATIC;
333 case 0: return LANG_OFF;
334 default: return TALK_ID(value, unit);
338 #endif /* HAVE_TOUCHSCREEN */
339 static const char* formatter_unit_0_is_off(char *buffer, size_t buffer_size,
340 int val, const char *unit)
342 if (val == 0)
343 return str(LANG_OFF);
344 else
345 snprintf(buffer, buffer_size, "%d %s", val, unit);
346 return buffer;
349 static int32_t getlang_unit_0_is_off(int value, int unit)
351 if (value == 0)
352 return LANG_OFF;
353 else
354 return TALK_ID(value,unit);
357 static const char* formatter_unit_0_is_skip_track(char *buffer, size_t buffer_size,
358 int val, const char *unit)
360 (void)unit;
361 if (val == -1)
362 return str(LANG_SKIP_OUTRO);
363 else if (val == 0)
364 return str(LANG_SKIP_TRACK);
365 else if (val % 60 == 0)
366 snprintf(buffer, buffer_size, "%d min", val/60);
367 else
368 snprintf(buffer, buffer_size, "%d s", val);
369 return buffer;
372 static int32_t getlang_unit_0_is_skip_track(int value, int unit)
374 (void)unit;
375 if (value == -1)
376 return LANG_SKIP_OUTRO;
377 else if (value == 0)
378 return LANG_SKIP_TRACK;
379 else if (value % 60 == 0)
380 return TALK_ID(value/60, UNIT_MIN);
381 else
382 return TALK_ID(value, UNIT_SEC);
385 #ifdef HAVE_BACKLIGHT
386 #ifdef SIMULATOR
387 #define DEFAULT_BACKLIGHT_TIMEOUT 0
388 #else
389 #define DEFAULT_BACKLIGHT_TIMEOUT 15
390 #endif
391 static const char* backlight_formatter(char *buffer, size_t buffer_size,
392 int val, const char *unit)
394 if (val == -1)
395 return str(LANG_OFF);
396 else if (val == 0)
397 return str(LANG_ON);
398 else
399 snprintf(buffer, buffer_size, "%d %s", val, unit);
400 return buffer;
402 static int32_t backlight_getlang(int value, int unit)
404 if (value == -1)
405 return LANG_OFF;
406 else if (value == 0)
407 return LANG_ON;
408 else
409 return TALK_ID(value, unit);
411 #endif
413 #ifndef HAVE_WHEEL_ACCELERATION
414 static const char* scanaccel_formatter(char *buffer, size_t buffer_size,
415 int val, const char *unit)
417 (void)unit;
418 if (val == 0)
419 return str(LANG_OFF);
420 else
421 snprintf(buffer, buffer_size, "Speed up every %ds", val);
422 return buffer;
424 #endif
426 #if CONFIG_CODEC == SWCODEC
427 static void crossfeed_cross_set(int val)
429 (void)val;
430 dsp_set_crossfeed_cross_params(global_settings.crossfeed_cross_gain,
431 global_settings.crossfeed_hf_attenuation,
432 global_settings.crossfeed_hf_cutoff);
435 static void compressor_set(int val)
437 (void)val;
438 dsp_set_compressor(&global_settings.compressor_settings);
441 static const char* db_format(char* buffer, size_t buffer_size, int value,
442 const char* unit)
444 int v = abs(value);
446 snprintf(buffer, buffer_size, "%s%d.%d %s", value < 0 ? "-" : "",
447 v / 10, v % 10, unit);
448 return buffer;
451 static int32_t get_dec_talkid(int value, int unit)
453 return TALK_ID_DECIMAL(value, 1, unit);
456 static int32_t get_precut_talkid(int value, int unit)
458 return TALK_ID_DECIMAL(-value, 1, unit);
461 #endif
462 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
463 static void set_mdb_enable(bool value)
465 sound_set_mdb_enable((int)value);
467 static void set_superbass(bool value)
469 sound_set_superbass((int)value);
471 #endif
473 #ifdef HAVE_QUICKSCREEN
474 static int find_setting_by_name(char*name)
476 int i = 0;
477 const struct settings_list *setting;
478 if (!strcmp(name, "-"))
479 return -1;
480 while (i<nb_settings)
482 setting = &settings[i];
483 if (setting->cfg_name && !strcmp(setting->cfg_name, name))
485 return i;
487 i++;
489 return -1;
491 static void qs_load_from_cfg(void* var, char*value)
493 *(int*)var = find_setting_by_name(value);
495 static char* qs_write_to_cfg(void* setting, char*buf, int buf_len)
497 int index = *(int*)setting;
498 if (index < 0 || index >= nb_settings - 1)
500 strlcpy(buf, "-", buf_len);
501 return buf;
503 const struct settings_list *var = &settings[index];
504 strlcpy(buf, var->cfg_name, buf_len);
505 return buf;
507 static bool qs_is_changed(void* setting, void* defaultval)
509 int i = *(int*)setting;
510 if (i < 0 || i >= nb_settings)
511 return false;
512 const struct settings_list *var = &settings[i];
513 return var != find_setting(defaultval, NULL);
515 static void qs_set_default(void* setting, void* defaultval)
517 if (defaultval == NULL)
518 *(int*)setting = -1;
519 find_setting(defaultval, (int*)setting);
521 #endif
522 #ifdef HAVE_TOUCHSCREEN
524 #if defined(APPLICATION) \
525 || defined(ONDA_VX747) \
526 || defined(ONDA_VX767) \
527 || defined(ONDA_VX747P) \
528 || defined(ONDA_VX777)
530 #define DEFAULT_TOUCHSCREEN_MODE TOUCHSCREEN_POINT
531 #else
532 #define DEFAULT_TOUCHSCREEN_MODE TOUCHSCREEN_BUTTON
533 #endif
535 static void tsc_load_from_cfg(void* setting, char*value)
537 struct touchscreen_parameter *var = (struct touchscreen_parameter*) setting;
539 /* Replacement for sscanf(value, "%d ..., &var->A, ...); */
540 int vals[7], count = 0;
541 while(*value != 0 && count < 7)
543 if(isspace(*value))
544 value++;
545 else
547 vals[count++] = atoi(value);
548 while(!isspace(*value))
549 value++;
552 var->A = vals[0];
553 var->B = vals[1];
554 var->C = vals[2];
555 var->D = vals[3];
556 var->E = vals[4];
557 var->F = vals[5];
558 var->divider = vals[6];
561 static char* tsc_write_to_cfg(void* setting, char*buf, int buf_len)
563 const struct touchscreen_parameter *var = (const struct touchscreen_parameter*) setting;
564 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);
565 return buf;
567 static bool tsc_is_changed(void* setting, void* defaultval)
569 return memcmp(setting, defaultval, sizeof(struct touchscreen_parameter)) != 0;
571 static void tsc_set_default(void* setting, void* defaultval)
573 memcpy(setting, defaultval, sizeof(struct touchscreen_parameter));
575 #endif
576 #ifdef HAVE_HOTKEY
577 static const char* hotkey_formatter(char* buffer, size_t buffer_size, int value,
578 const char* unit)
580 (void)buffer;
581 (void)buffer_size;
582 (void)unit;
583 return str(get_hotkey_lang_id(value));
585 static int32_t hotkey_getlang(int value, int unit)
587 (void)unit;
588 return get_hotkey_lang_id(value);
590 #endif /* HAVE_HOTKEY */
591 const struct settings_list settings[] = {
592 /* sound settings */
593 SOUND_SETTING(F_NO_WRAP,volume, LANG_VOLUME, "volume", SOUND_VOLUME),
594 SOUND_SETTING(0, balance, LANG_BALANCE, "balance", SOUND_BALANCE),
595 /* Tone controls */
596 #ifdef AUDIOHW_HAVE_BASS
597 SOUND_SETTING(F_NO_WRAP,bass, LANG_BASS, "bass", SOUND_BASS),
598 #endif
599 #ifdef AUDIOHW_HAVE_TREBLE
600 SOUND_SETTING(F_NO_WRAP,treble, LANG_TREBLE, "treble", SOUND_TREBLE),
601 #endif
602 /* Hardware EQ tone controls */
603 #ifdef AUDIOHW_HAVE_EQ
604 /* Band gain is generic */
605 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND1].gain,
606 LANG_HW_EQ_GAIN, "tone band1 gain", SOUND_EQ_BAND1_GAIN),
607 #ifdef AUDIOHW_HAVE_EQ_BAND2
608 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND2].gain,
609 LANG_HW_EQ_GAIN, "tone band2 gain", SOUND_EQ_BAND2_GAIN),
610 #endif /* AUDIOHW_HAVE_EQ_BAND2 */
611 #ifdef AUDIOHW_HAVE_EQ_BAND3
612 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND3].gain,
613 LANG_HW_EQ_GAIN, "tone band3 gain", SOUND_EQ_BAND3_GAIN),
614 #endif /* AUDIOHW_HAVE_EQ_BAND3 */
615 #ifdef AUDIOHW_HAVE_EQ_BAND4
616 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND4].gain,
617 LANG_HW_EQ_GAIN, "tone band4 gain", SOUND_EQ_BAND4_GAIN),
618 #endif /* AUDIOHW_HAVE_EQ_BAND4 */
619 #ifdef AUDIOHW_HAVE_EQ_BAND5
620 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND5].gain,
621 LANG_HW_EQ_GAIN, "tone band5 gain", SOUND_EQ_BAND5_GAIN),
622 #endif /* AUDIOHW_HAVE_EQ_BAND5 */
623 #ifdef HAVE_WM8978
624 /* Frequencies vary with samplerate but at least the user has an idea
625 * about the bands and it will be correct with normal playback rates. */
626 /* Band 1 */
627 STRINGCHOICE_SETTING(F_SOUNDSETTING,
628 hw_eq_bands[AUDIOHW_EQ_BAND1].frequency,
629 LANG_HW_EQ_FREQUENCY, 0,"tone band1 frequency",
630 "80 Hz,105 Hz,135 Hz,175 Hz",
631 sound_set_hw_eq_band1_frequency, 4,
632 TALK_ID(80, UNIT_HERTZ), TALK_ID(105, UNIT_HERTZ),
633 TALK_ID(135, UNIT_HERTZ), TALK_ID(175, UNIT_HERTZ)),
634 /* Band 2 */
635 STRINGCHOICE_SETTING(F_SOUNDSETTING,
636 hw_eq_bands[AUDIOHW_EQ_BAND2].frequency,
637 LANG_HW_EQ_FREQUENCY, 0,"tone band2 frequency",
638 "230 Hz,300 Hz,385 Hz,500 Hz",
639 sound_set_hw_eq_band2_frequency, 4,
640 TALK_ID(230, UNIT_HERTZ), TALK_ID(300, UNIT_HERTZ),
641 TALK_ID(385, UNIT_HERTZ), TALK_ID(500, UNIT_HERTZ)),
642 CHOICE_SETTING(F_SOUNDSETTING, hw_eq_bands[AUDIOHW_EQ_BAND2].width,
643 LANG_HW_EQ_WIDTH, 0, "tone band2 width", "narrow,wide",
644 sound_set_hw_eq_band2_width, 2,
645 ID2P(LANG_HW_EQ_WIDTH_NARROW), ID2P(LANG_HW_EQ_WIDTH_WIDE)),
646 /* Band 3 */
647 STRINGCHOICE_SETTING(F_SOUNDSETTING,
648 hw_eq_bands[AUDIOHW_EQ_BAND3].frequency,
649 LANG_HW_EQ_FREQUENCY, 0, "tone band3 frequency",
650 "650 Hz,850 Hz,1.1 kHz,1.4 kHz",
651 sound_set_hw_eq_band3_frequency, 4,
652 TALK_ID(650, UNIT_HERTZ), TALK_ID(850, UNIT_HERTZ),
653 TALK_ID_DECIMAL(11, 1, UNIT_KHZ),
654 TALK_ID_DECIMAL(14, 1, UNIT_KHZ)),
655 CHOICE_SETTING(F_SOUNDSETTING,hw_eq_bands[AUDIOHW_EQ_BAND3].width,
656 LANG_HW_EQ_WIDTH, 0, "tone band3 width", "narrow,wide",
657 sound_set_hw_eq_band3_width, 2,
658 ID2P(LANG_HW_EQ_WIDTH_NARROW), ID2P(LANG_HW_EQ_WIDTH_WIDE)),
659 /* Band 4 */
660 STRINGCHOICE_SETTING(F_SOUNDSETTING,
661 hw_eq_bands[AUDIOHW_EQ_BAND4].frequency,
662 LANG_HW_EQ_FREQUENCY, 0, "tone band4 frequency",
663 "1.8 kHz,2.4 kHz,3.2 kHz,4.1 kHz",
664 sound_set_hw_eq_band4_frequency, 4,
665 TALK_ID_DECIMAL(18, 1, UNIT_KHZ),
666 TALK_ID_DECIMAL(24, 1, UNIT_KHZ),
667 TALK_ID_DECIMAL(32, 1, UNIT_KHZ),
668 TALK_ID_DECIMAL(41, 1, UNIT_KHZ)),
669 CHOICE_SETTING(F_SOUNDSETTING, hw_eq_bands[AUDIOHW_EQ_BAND4].width,
670 LANG_HW_EQ_WIDTH, 0, "tone band4 width", "narrow,wide",
671 sound_set_hw_eq_band4_width, 2,
672 ID2P(LANG_HW_EQ_WIDTH_NARROW), ID2P(LANG_HW_EQ_WIDTH_WIDE)),
673 /* Band 5 */
674 STRINGCHOICE_SETTING(F_SOUNDSETTING,
675 hw_eq_bands[AUDIOHW_EQ_BAND5].frequency,
676 LANG_HW_EQ_FREQUENCY, 0, "tone band5 frequency",
677 "5.3 kHz,6.9 kHz,9.0 kHz,11.7 kHz",
678 sound_set_hw_eq_band5_frequency, 4,
679 TALK_ID_DECIMAL(53, 1, UNIT_KHZ),
680 TALK_ID_DECIMAL(69, 1, UNIT_KHZ),
681 TALK_ID_DECIMAL(90, 1, UNIT_KHZ),
682 TALK_ID_DECIMAL(117, 1, UNIT_KHZ)),
683 #endif /* HAVE_WM8978 */
684 #endif /* AUDIOHW_HAVE_EQ */
685 /* 3-d enhancement effect */
686 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
687 SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS),
688 STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume",
689 "off,20ms,2,4,8,", sound_set_avc, 5,
690 LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC),
691 TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)),
692 OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass",
693 set_superbass),
694 #endif
696 CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION,
697 0,"channels",
698 "stereo,mono,custom,mono left,mono right,karaoke",
699 sound_set_channels, 6,
700 ID2P(LANG_CHANNEL_STEREO), ID2P(LANG_CHANNEL_MONO),
701 ID2P(LANG_CHANNEL_CUSTOM), ID2P(LANG_CHANNEL_LEFT),
702 ID2P(LANG_CHANNEL_RIGHT), ID2P(LANG_CHANNEL_KARAOKE)),
703 SOUND_SETTING(F_SOUNDSETTING, stereo_width, LANG_STEREO_WIDTH,
704 "stereo_width", SOUND_STEREO_WIDTH),
705 #ifdef AUDIOHW_HAVE_DEPTH_3D
706 SOUND_SETTING(0,depth_3d, LANG_DEPTH_3D, "3-d enhancement",
707 SOUND_DEPTH_3D),
708 #endif
709 /* playback */
710 OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL),
711 SYSTEM_SETTING(NVRAM(4), resume_index, -1),
712 SYSTEM_SETTING(NVRAM(4), resume_offset, -1),
713 CHOICE_SETTING(0, repeat_mode, LANG_REPEAT, REPEAT_OFF, "repeat",
714 "off,all,one,shuffle"
715 #ifdef AB_REPEAT_ENABLE
716 ",ab"
717 #endif
718 , NULL,
719 #ifdef AB_REPEAT_ENABLE
721 #else
723 #endif
724 ID2P(LANG_OFF), ID2P(LANG_ALL), ID2P(LANG_REPEAT_ONE),
725 ID2P(LANG_SHUFFLE)
726 #ifdef AB_REPEAT_ENABLE
727 ,ID2P(LANG_REPEAT_AB)
728 #endif
729 ), /* CHOICE_SETTING( repeat_mode ) */
730 /* LCD */
731 #ifdef HAVE_LCD_CONTRAST
732 /* its easier to leave this one un-macro()ed for the time being */
733 { F_T_INT|F_DEF_ISFUNC|F_INT_SETTING, &global_settings.contrast,
734 LANG_CONTRAST, FUNCTYPE(lcd_default_contrast), "contrast", NULL , {
735 .int_setting = (struct int_setting[]) {
736 { lcd_set_contrast, UNIT_INT, MIN_CONTRAST_SETTING,
737 MAX_CONTRAST_SETTING, 1, NULL, NULL }}}},
738 #endif
739 #ifdef HAVE_BACKLIGHT
740 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout, LANG_BACKLIGHT,
741 DEFAULT_BACKLIGHT_TIMEOUT,
742 "backlight timeout", off_on, UNIT_SEC, backlight_formatter,
743 backlight_getlang, backlight_set_timeout, 20,
744 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
745 #if CONFIG_CHARGING
746 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout_plugged,
747 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10,
748 "backlight timeout plugged", off_on, UNIT_SEC,
749 backlight_formatter, backlight_getlang,
750 backlight_set_timeout_plugged, 20,
751 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
752 #endif
753 #endif /* HAVE_BACKLIGHT */
754 #ifdef HAVE_LCD_BITMAP
755 #ifdef HAVE_LCD_INVERT
756 BOOL_SETTING(0, invert, LANG_INVERT, false ,"invert", off_on,
757 LANG_INVERT_LCD_INVERSE, LANG_NORMAL, lcd_set_invert_display),
758 #endif
759 #ifdef HAVE_LCD_FLIP
760 OFFON_SETTING(0, flip_display, LANG_FLIP_DISPLAY, false, "flip display",
761 NULL),
762 #endif
763 /* display */
764 CHOICE_SETTING(F_TEMPVAR|F_THEMESETTING, cursor_style, LANG_INVERT_CURSOR,
765 #ifdef HAVE_LCD_COLOR
766 3, "selector type",
767 "pointer,bar (inverse),bar (color),bar (gradient)", NULL, 4,
768 ID2P(LANG_INVERT_CURSOR_POINTER),
769 ID2P(LANG_INVERT_CURSOR_BAR),
770 ID2P(LANG_INVERT_CURSOR_COLOR),
771 ID2P(LANG_INVERT_CURSOR_GRADIENT)),
772 #else
773 1, "selector type", "pointer,bar (inverse)", NULL, 2,
774 ID2P(LANG_INVERT_CURSOR_POINTER),
775 ID2P(LANG_INVERT_CURSOR_BAR)),
776 #endif
777 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar,
778 LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom",
779 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
780 ID2P(LANG_STATUSBAR_BOTTOM)),
781 #ifdef HAVE_REMOTE_LCD
782 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, remote_statusbar,
783 LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom",
784 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
785 ID2P(LANG_STATUSBAR_BOTTOM)),
786 #endif
787 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, scrollbar,
788 LANG_SCROLL_BAR, SCROLLBAR_LEFT, "scrollbar","off,left,right",
789 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_LEFT), ID2P(LANG_RIGHT)),
790 INT_SETTING(F_THEMESETTING, scrollbar_width, LANG_SCROLLBAR_WIDTH, 6,
791 "scrollbar width",UNIT_INT, 3, MAX(LCD_WIDTH/10,25), 1,
792 NULL, NULL, NULL),
793 #ifdef HAVE_TOUCHSCREEN
794 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, list_line_padding, LANG_LIST_LINE_PADDING,
795 -1, "list padding", "auto,off", UNIT_PIXEL, list_pad_formatter,
796 list_pad_getlang, NULL, 16,
797 -1,0,2,4,6,8,10,12,16,20,24,28,32,38,44,50),
798 #endif
799 #if CONFIG_KEYPAD == RECORDER_PAD
800 OFFON_SETTING(F_THEMESETTING,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL),
801 #endif
802 CHOICE_SETTING(F_THEMESETTING, volume_type, LANG_VOLUME_DISPLAY, 0,
803 "volume display", graphic_numeric, NULL, 2,
804 ID2P(LANG_DISPLAY_GRAPHIC),
805 ID2P(LANG_DISPLAY_NUMERIC)),
806 CHOICE_SETTING(F_THEMESETTING, battery_display, LANG_BATTERY_DISPLAY, 0,
807 "battery display", graphic_numeric, NULL, 2,
808 ID2P(LANG_DISPLAY_GRAPHIC), ID2P(LANG_DISPLAY_NUMERIC)),
809 #if CONFIG_RTC
810 CHOICE_SETTING(0, timeformat, LANG_TIMEFORMAT, 0,
811 "time format", "24hour,12hour", NULL, 2,
812 ID2P(LANG_24_HOUR_CLOCK), ID2P(LANG_12_HOUR_CLOCK)),
813 #endif
814 #endif /* HAVE_LCD_BITMAP */
815 OFFON_SETTING(0,show_icons, LANG_SHOW_ICONS ,true,"show icons", NULL),
816 /* system */
817 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, poweroff, LANG_POWEROFF_IDLE, 10,
818 "idle poweroff", "off", UNIT_MIN, formatter_unit_0_is_off,
819 getlang_unit_0_is_off, set_poweroff_timeout, 15,
820 0,1,2,3,4,5,6,7,8,9,10,15,30,45,60),
821 SYSTEM_SETTING(NVRAM(4), runtime, 0),
822 SYSTEM_SETTING(NVRAM(4), topruntime, 0),
823 INT_SETTING(F_BANFROMQS, max_files_in_playlist,
824 LANG_MAX_FILES_IN_PLAYLIST,
825 #if MEMORYSIZE > 1
826 10000,
827 #else
828 400,
829 #endif
830 "max files in playlist", UNIT_INT, 1000, 32000, 1000,
831 NULL, NULL, NULL),
832 INT_SETTING(F_BANFROMQS, max_files_in_dir, LANG_MAX_FILES_IN_DIR,
833 #if MEMORYSIZE > 1
834 1000,
835 #else
836 200,
837 #endif
838 "max files in dir", UNIT_INT, 50, 10000, 50,
839 NULL, NULL, NULL),
840 /* use this setting for user code even if there's no exchangable battery
841 * support enabled */
842 #if BATTERY_CAPACITY_DEFAULT > 0
843 /* define min/max/inc for this file if there's only one battery */
844 #ifndef BATTERY_CAPACITY_MIN
845 #define BATTERY_CAPACITY_MIN BATTERY_CAPACITY_DEFAULT
846 #define BATTERY_CAPACITY_MAX BATTERY_CAPACITY_DEFAULT
847 #define BATTERY_CAPACITY_INC 0
848 #endif
849 #if defined(IPOD_VIDEO) && !defined(SIMULATOR)
850 /* its easier to leave this one un-macro()ed for the time being */
851 { F_T_INT|F_DEF_ISFUNC|F_INT_SETTING, &global_settings.battery_capacity,
852 LANG_BATTERY_CAPACITY, FUNCTYPE(battery_default_capacity),
853 "battery capacity", NULL , {
854 .int_setting = (struct int_setting[]) {
855 { set_battery_capacity, UNIT_MAH, BATTERY_CAPACITY_MIN,
856 BATTERY_CAPACITY_MAX, BATTERY_CAPACITY_INC, NULL, NULL }}}},
857 #else /* IPOD_VIDEO */
858 INT_SETTING(0, battery_capacity, LANG_BATTERY_CAPACITY,
859 BATTERY_CAPACITY_DEFAULT, "battery capacity", UNIT_MAH,
860 BATTERY_CAPACITY_MIN, BATTERY_CAPACITY_MAX,
861 BATTERY_CAPACITY_INC, NULL, NULL, set_battery_capacity),
862 #endif /* IPOD_VIDEO */
863 #endif
864 #if CONFIG_CHARGING
865 OFFON_SETTING(NVRAM(1), car_adapter_mode,
866 LANG_CAR_ADAPTER_MODE, false, "car adapter mode", NULL),
867 #endif
868 #ifdef IPOD_ACCESSORY_PROTOCOL
869 CHOICE_SETTING(0, serial_bitrate, LANG_SERIAL_BITRATE, 0, "serial bitrate",
870 "auto,9600,19200,38400,57600", iap_bitrate_set, 5, ID2P(LANG_SERIAL_BITRATE_AUTO),
871 ID2P(LANG_SERIAL_BITRATE_9600),ID2P(LANG_SERIAL_BITRATE_19200),
872 ID2P(LANG_SERIAL_BITRATE_38400),ID2P(LANG_SERIAL_BITRATE_57600)),
873 #endif
874 #ifdef HAVE_ACCESSORY_SUPPLY
875 OFFON_SETTING(0, accessory_supply, LANG_ACCESSORY_SUPPLY,
876 true, "accessory power supply", accessory_supply_set),
877 #endif
878 #ifdef HAVE_LINEOUT_POWEROFF
879 OFFON_SETTING(0, lineout_active, LANG_LINEOUT_ONOFF,
880 true, "lineout", lineout_set),
881 #endif
882 /* tuner */
883 #if CONFIG_TUNER
884 OFFON_SETTING(0,fm_force_mono, LANG_FM_MONO_MODE,
885 false, "force fm mono", toggle_mono_mode),
886 SYSTEM_SETTING(NVRAM(4),last_frequency,0),
887 #endif
889 #if BATTERY_TYPES_COUNT > 1
890 CHOICE_SETTING(0, battery_type, LANG_BATTERY_TYPE, 0, "battery type",
891 "alkaline,nimh", NULL, 2, ID2P(LANG_BATTERY_TYPE_ALKALINE),
892 ID2P(LANG_BATTERY_TYPE_NIMH)),
893 #endif
894 #ifdef HAVE_REMOTE_LCD
895 /* remote lcd */
896 INT_SETTING(0, remote_contrast, LANG_CONTRAST,
897 DEFAULT_REMOTE_CONTRAST_SETTING, "remote contrast", UNIT_INT,
898 MIN_REMOTE_CONTRAST_SETTING, MAX_REMOTE_CONTRAST_SETTING, 1,
899 NULL, NULL, lcd_remote_set_contrast),
900 BOOL_SETTING(0, remote_invert, LANG_INVERT, false ,"remote invert", off_on,
901 LANG_INVERT_LCD_INVERSE, LANG_NORMAL,
902 lcd_remote_set_invert_display),
903 OFFON_SETTING(0,remote_flip_display, LANG_FLIP_DISPLAY,
904 false,"remote flip display", NULL),
905 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout,
906 LANG_BACKLIGHT, 5, "remote backlight timeout", off_on,
907 UNIT_SEC, backlight_formatter, backlight_getlang,
908 remote_backlight_set_timeout, 20,
909 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
910 #if CONFIG_CHARGING
911 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout_plugged,
912 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10,
913 "remote backlight timeout plugged", off_on, UNIT_SEC,
914 backlight_formatter, backlight_getlang,
915 remote_backlight_set_timeout_plugged, 20,
916 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
917 #endif
918 #ifdef HAVE_REMOTE_LCD_TICKING
919 OFFON_SETTING(0, remote_reduce_ticking, LANG_REDUCE_TICKING,
920 false,"remote reduce ticking", NULL),
921 #endif
922 #endif
924 #ifdef HAVE_BACKLIGHT
925 OFFON_SETTING(0, bl_filter_first_keypress,
926 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
927 "backlight filters first keypress", NULL),
928 #ifdef HAVE_REMOTE_LCD
929 OFFON_SETTING(0, remote_bl_filter_first_keypress,
930 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
931 "backlight filters first remote keypress", NULL),
932 #endif
933 #endif /* HAVE_BACKLIGHT */
935 /** End of old RTC config block **/
937 #ifdef HAVE_BACKLIGHT
938 OFFON_SETTING(0, caption_backlight, LANG_CAPTION_BACKLIGHT,
939 false, "caption backlight", NULL),
940 #ifdef HAVE_REMOTE_LCD
941 OFFON_SETTING(0, remote_caption_backlight, LANG_CAPTION_BACKLIGHT,
942 false, "remote caption backlight", NULL),
943 #endif
944 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
945 INT_SETTING(F_NO_WRAP, brightness, LANG_BRIGHTNESS,
946 DEFAULT_BRIGHTNESS_SETTING, "brightness",UNIT_INT,
947 MIN_BRIGHTNESS_SETTING, MAX_BRIGHTNESS_SETTING, 1,
948 NULL, NULL, backlight_set_brightness),
949 #endif
950 /* backlight fading */
951 #if defined(HAVE_BACKLIGHT_FADING_INT_SETTING)
952 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_in,
953 LANG_BACKLIGHT_FADE_IN, 300, "backlight fade in", "off",
954 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off,
955 backlight_set_fade_in, 7, 0,100,200,300,500,1000,2000),
956 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_out,
957 LANG_BACKLIGHT_FADE_OUT, 2000, "backlight fade out", "off",
958 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off,
959 backlight_set_fade_out, 10,
960 0,100,200,300,500,1000,2000,3000,5000,10000),
961 #elif defined(HAVE_BACKLIGHT_FADING_BOOL_SETTING)
962 OFFON_SETTING(0, backlight_fade_in, LANG_BACKLIGHT_FADE_IN,
963 true, "backlight fade in", backlight_set_fade_in),
964 OFFON_SETTING(0, backlight_fade_out, LANG_BACKLIGHT_FADE_OUT,
965 true, "backlight fade out", backlight_set_fade_out),
966 #endif
967 #endif /* HAVE_BACKLIGHT */
968 INT_SETTING(F_PADTITLE, scroll_speed, LANG_SCROLL_SPEED, 9,"scroll speed",
969 UNIT_INT, 0, 17, 1, NULL, NULL, lcd_scroll_speed),
970 INT_SETTING(F_PADTITLE, scroll_delay, LANG_SCROLL_DELAY, 1000,
971 "scroll delay", UNIT_MS, 0, 2500, 100, NULL,
972 NULL, lcd_scroll_delay),
973 INT_SETTING(0, bidir_limit, LANG_BIDIR_SCROLL, 50, "bidir limit",
974 UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_bidir_scroll),
975 #ifdef HAVE_REMOTE_LCD
976 INT_SETTING(0, remote_scroll_speed, LANG_SCROLL_SPEED, 9,
977 "remote scroll speed", UNIT_INT, 0,17, 1,
978 NULL, NULL, lcd_remote_scroll_speed),
979 INT_SETTING(0, remote_scroll_step, LANG_SCROLL_STEP, 6,
980 "remote scroll step", UNIT_PIXEL, 1, LCD_REMOTE_WIDTH, 1, NULL,
981 NULL, lcd_remote_scroll_step),
982 INT_SETTING(0, remote_scroll_delay, LANG_SCROLL_DELAY, 1000,
983 "remote scroll delay", UNIT_MS, 0, 2500, 100, NULL, NULL,
984 lcd_remote_scroll_delay),
985 INT_SETTING(0, remote_bidir_limit, LANG_BIDIR_SCROLL, 50,
986 "remote bidir limit", UNIT_PERCENT, 0, 200, 25, NULL, NULL,
987 lcd_remote_bidir_scroll),
988 #endif
989 #ifdef HAVE_LCD_BITMAP
990 OFFON_SETTING(0, offset_out_of_view, LANG_SCREEN_SCROLL_VIEW,
991 false, "Screen Scrolls Out Of View",
992 gui_list_screen_scroll_out_of_view),
993 INT_SETTING(F_PADTITLE, scroll_step, LANG_SCROLL_STEP, 6, "scroll step",
994 UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, lcd_scroll_step),
995 INT_SETTING(F_PADTITLE, screen_scroll_step, LANG_SCREEN_SCROLL_STEP, 16,
996 "screen scroll step", UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL,
997 gui_list_screen_scroll_step),
998 #endif /* HAVE_LCD_BITMAP */
999 OFFON_SETTING(0,scroll_paginated,LANG_SCROLL_PAGINATED,
1000 false,"scroll paginated",NULL),
1001 #ifdef HAVE_LCD_COLOR
1003 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.fg_color,-1,
1004 INT(DEFAULT_THEME_FOREGROUND),"foreground color",NULL,UNUSED},
1005 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.bg_color,-1,
1006 INT(DEFAULT_THEME_BACKGROUND),"background color",NULL,UNUSED},
1007 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lss_color,-1,
1008 INT(DEFAULT_THEME_SELECTOR_START),"line selector start color",NULL,
1009 UNUSED},
1010 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lse_color,-1,
1011 INT(DEFAULT_THEME_SELECTOR_END),"line selector end color",NULL,UNUSED},
1012 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lst_color,-1,
1013 INT(DEFAULT_THEME_SELECTOR_TEXT),"line selector text color",NULL,
1014 UNUSED},
1016 #endif
1017 /* more playback */
1018 OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL),
1019 OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL),
1020 OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL),
1021 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, ff_rewind_min_step,
1022 LANG_FFRW_STEP, 1, "scan min step", NULL, UNIT_SEC,
1023 NULL, NULL, NULL, 14, 1,2,3,4,5,6,8,10,15,20,25,30,45,60),
1024 CHOICE_SETTING(0, ff_rewind_accel, LANG_FFRW_ACCEL, 2,
1025 "seek acceleration", "very fast,fast,normal,slow,very slow", NULL, 5,
1026 ID2P(LANG_VERY_FAST), ID2P(LANG_FAST), ID2P(LANG_NORMAL),
1027 ID2P(LANG_SLOW) , ID2P(LANG_VERY_SLOW)),
1028 #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_DISK_STORAGE)
1029 STRINGCHOICE_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0,"antiskip",
1030 "5s,15s,30s,1min,2min,3min,5min,10min", NULL, 8,
1031 TALK_ID(5, UNIT_SEC), TALK_ID(15, UNIT_SEC),
1032 TALK_ID(30, UNIT_SEC), TALK_ID(1, UNIT_MIN),
1033 TALK_ID(2, UNIT_MIN), TALK_ID(3, UNIT_MIN),
1034 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN)),
1035 #elif defined(HAVE_DISK_STORAGE)
1036 INT_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0, "antiskip",
1037 UNIT_SEC, 0, 7, 1, NULL, NULL, audio_set_buffer_margin),
1038 #endif
1039 /* disk */
1040 #ifdef HAVE_DISK_STORAGE
1041 INT_SETTING(0, disk_spindown, LANG_SPINDOWN, 5, "disk spindown",
1042 UNIT_SEC, 3, 254, 1, NULL, NULL, storage_spindown),
1043 #endif /* HAVE_DISK_STORAGE */
1044 /* browser */
1045 TEXT_SETTING(0, start_directory, "start directory", "/", NULL, NULL),
1046 CHOICE_SETTING(0, dirfilter, LANG_FILTER, SHOW_SUPPORTED, "show files",
1047 "all,supported,music,playlists", NULL, 4, ID2P(LANG_ALL),
1048 ID2P(LANG_FILTER_SUPPORTED), ID2P(LANG_FILTER_MUSIC),
1049 ID2P(LANG_PLAYLISTS)),
1050 /* file sorting */
1051 OFFON_SETTING(0, sort_case, LANG_SORT_CASE, false, "sort case", NULL),
1052 CHOICE_SETTING(0, sort_dir, LANG_SORT_DIR, 0 ,
1053 "sort dirs", "alpha,oldest,newest", NULL, 3,
1054 ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE),
1055 ID2P(LANG_SORT_DATE_REVERSE)),
1056 CHOICE_SETTING(0, sort_file, LANG_SORT_FILE, 0 ,
1057 "sort files", "alpha,oldest,newest,type", NULL, 4,
1058 ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE),
1059 ID2P(LANG_SORT_DATE_REVERSE) , ID2P(LANG_SORT_TYPE)),
1060 CHOICE_SETTING(0, interpret_numbers, LANG_SORT_INTERPRET_NUMBERS, 1,
1061 "sort interpret number", "digits,numbers",NULL, 2,
1062 ID2P(LANG_SORT_INTERPRET_AS_DIGIT),
1063 ID2P(LANG_SORT_INTERPRET_AS_NUMBERS)),
1064 CHOICE_SETTING(0, show_filename_ext, LANG_SHOW_FILENAME_EXT, 3,
1065 "show filename exts", "off,on,unknown,view_all", NULL , 4 ,
1066 ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_UNKNOWN_TYPES),
1067 ID2P(LANG_EXT_ONLY_VIEW_ALL)),
1068 OFFON_SETTING(0,browse_current,LANG_FOLLOW,false,"follow playlist",NULL),
1069 OFFON_SETTING(0,playlist_viewer_icons,LANG_SHOW_ICONS,true,
1070 "playlist viewer icons",NULL),
1071 OFFON_SETTING(0,playlist_viewer_indices,LANG_SHOW_INDICES,true,
1072 "playlist viewer indices",NULL),
1073 CHOICE_SETTING(0, playlist_viewer_track_display, LANG_TRACK_DISPLAY, 0,
1074 "playlist viewer track display","track name,full path",
1075 NULL, 2, ID2P(LANG_DISPLAY_TRACK_NAME_ONLY),
1076 ID2P(LANG_DISPLAY_FULL_PATH)),
1077 CHOICE_SETTING(0, recursive_dir_insert, LANG_RECURSE_DIRECTORY , RECURSE_ON,
1078 "recursive directory insert", off_on_ask, NULL , 3 ,
1079 ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_ASK)),
1080 /* bookmarks */
1081 CHOICE_SETTING(0, autocreatebookmark, LANG_BOOKMARK_SETTINGS_AUTOCREATE,
1082 BOOKMARK_NO, "autocreate bookmarks",
1083 "off,on,ask,recent only - on,recent only - ask", NULL, 5,
1084 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
1085 ID2P(LANG_ASK), ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES),
1086 ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK)),
1087 OFFON_SETTING(0, autoupdatebookmark, LANG_BOOKMARK_SETTINGS_AUTOUPDATE,
1088 false, "autoupdate bookmarks", NULL),
1089 CHOICE_SETTING(0, autoloadbookmark, LANG_BOOKMARK_SETTINGS_AUTOLOAD,
1090 BOOKMARK_NO, "autoload bookmarks", off_on_ask, NULL, 3,
1091 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
1092 ID2P(LANG_ASK)),
1093 CHOICE_SETTING(0, usemrb, LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS,
1094 BOOKMARK_NO, "use most-recent-bookmarks",
1095 "off,on,unique only", NULL, 3, ID2P(LANG_SET_BOOL_NO),
1096 ID2P(LANG_SET_BOOL_YES),
1097 ID2P(LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY)),
1098 #ifdef HAVE_LCD_BITMAP
1099 /* peak meter */
1100 STRINGCHOICE_SETTING(0, peak_meter_clip_hold, LANG_PM_CLIP_HOLD, 16,
1101 "peak meter clip hold",
1102 "on,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,2min"
1103 ",3min,5min,10min,20min,45min,90min",
1104 peak_meter_set_clip_hold, 25, LANG_PM_ETERNAL,
1105 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC),
1106 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC),
1107 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC),
1108 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC),
1109 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC),
1110 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
1111 TALK_ID(25, UNIT_SEC), TALK_ID(30, UNIT_SEC),
1112 TALK_ID(45, UNIT_SEC), TALK_ID(60, UNIT_SEC),
1113 TALK_ID(90, UNIT_SEC), TALK_ID(2, UNIT_MIN),
1114 TALK_ID(3, UNIT_MIN), TALK_ID(5, UNIT_MIN),
1115 TALK_ID(10, UNIT_MIN), TALK_ID(20, UNIT_MIN),
1116 TALK_ID(45, UNIT_MIN), TALK_ID(90, UNIT_MIN)),
1117 STRINGCHOICE_SETTING(0, peak_meter_hold, LANG_PM_PEAK_HOLD, 3,
1118 "peak meter hold",
1119 "off,200ms,300ms,500ms,1,2,3,4,5,6,7,8,9,10,15,20,30,1min",
1120 NULL, 18, LANG_OFF, TALK_ID(200, UNIT_MS),
1121 TALK_ID(300, UNIT_MS), TALK_ID(500, UNIT_MS),
1122 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC),
1123 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC),
1124 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC),
1125 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC),
1126 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC),
1127 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
1128 TALK_ID(30, UNIT_SEC), TALK_ID(60, UNIT_SEC)),
1129 INT_SETTING(0, peak_meter_release, LANG_PM_RELEASE, 8, "peak meter release",
1130 UNIT_PM_TICK, 1, 0x7e, 1, NULL, NULL,NULL),
1131 OFFON_SETTING(0,peak_meter_dbfs,LANG_PM_DBFS,true,"peak meter dbfs",NULL),
1132 {F_T_INT, &global_settings.peak_meter_min, LANG_PM_MIN,INT(60),
1133 "peak meter min", NULL, UNUSED},
1134 {F_T_INT, &global_settings.peak_meter_max, LANG_PM_MAX,INT(0),
1135 "peak meter max", NULL, UNUSED},
1136 #ifdef HAVE_RECORDING
1137 OFFON_SETTING(0, peak_meter_clipcounter, LANG_PM_CLIPCOUNTER, false,
1138 "peak meter clipcounter", NULL),
1139 #endif /* HAVE_RECORDING */
1140 #endif /* HAVE_LCD_BITMAP */
1141 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
1142 SOUND_SETTING(F_SOUNDSETTING, mdb_strength, LANG_MDB_STRENGTH,
1143 "mdb strength", SOUND_MDB_STRENGTH),
1144 SOUND_SETTING(F_SOUNDSETTING, mdb_harmonics, LANG_MDB_HARMONICS,
1145 "mdb harmonics", SOUND_MDB_HARMONICS),
1146 SOUND_SETTING(F_SOUNDSETTING, mdb_center, LANG_MDB_CENTER,
1147 "mdb center", SOUND_MDB_CENTER),
1148 SOUND_SETTING(F_SOUNDSETTING, mdb_shape, LANG_MDB_SHAPE,
1149 "mdb shape", SOUND_MDB_SHAPE),
1150 OFFON_SETTING(F_SOUNDSETTING, mdb_enable, LANG_MDB_ENABLE,
1151 false, "mdb enable", set_mdb_enable),
1152 #endif
1153 #if CONFIG_CODEC == MAS3507D
1154 OFFON_SETTING(F_SOUNDSETTING, line_in,LANG_LINE_IN,false,"line in",NULL),
1155 #endif
1156 /* voice */
1157 OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL),
1158 CHOICE_SETTING(0, talk_dir, LANG_VOICE_DIR, 0,
1159 "talk dir", off_number_spell, NULL, 3,
1160 ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
1161 ID2P(LANG_VOICE_SPELL)),
1162 OFFON_SETTING(F_TEMPVAR, talk_dir_clip, LANG_VOICE_DIR_TALK, false,
1163 "talk dir clip", NULL),
1164 CHOICE_SETTING(0, talk_file, LANG_VOICE_FILE, 0,
1165 "talk file", off_number_spell, NULL, 3,
1166 ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
1167 ID2P(LANG_VOICE_SPELL)),
1168 OFFON_SETTING(F_TEMPVAR, talk_file_clip, LANG_VOICE_FILE_TALK, false,
1169 "talk file clip", NULL),
1170 OFFON_SETTING(F_TEMPVAR, talk_filetype, LANG_VOICE_FILETYPE, false,
1171 "talk filetype", NULL),
1172 OFFON_SETTING(F_TEMPVAR, talk_battery_level, LANG_TALK_BATTERY_LEVEL, false,
1173 "Announce Battery Level", NULL),
1175 #ifdef HAVE_RECORDING
1176 /* recording */
1177 STRINGCHOICE_SETTING(F_RECSETTING, rec_timesplit, LANG_SPLIT_TIME, 0,
1178 "rec timesplit",
1179 "off,00:05,00:10,00:15,00:30,01:00,01:14,01:20,02:00,"
1180 "04:00,06:00,08:00,10:00,12:00,18:00,24:00",
1181 NULL, 16, LANG_OFF,
1182 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN),
1183 TALK_ID(15, UNIT_MIN), TALK_ID(30, UNIT_MIN),
1184 TALK_ID(60, UNIT_MIN), TALK_ID(74, UNIT_MIN),
1185 TALK_ID(80, UNIT_MIN), TALK_ID(2, UNIT_HOUR),
1186 TALK_ID(4, UNIT_HOUR), TALK_ID(6, UNIT_HOUR),
1187 TALK_ID(8, UNIT_HOUR), TALK_ID(10, UNIT_HOUR),
1188 TALK_ID(12, UNIT_HOUR), TALK_ID(18, UNIT_HOUR),
1189 TALK_ID(20, UNIT_HOUR), TALK_ID(24, UNIT_HOUR)),
1190 STRINGCHOICE_SETTING(F_RECSETTING, rec_sizesplit, LANG_SPLIT_SIZE, 0,
1191 "rec sizesplit",
1192 "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB,"
1193 "256MB,512MB,650MB,700MB,1GB,1.5GB,1.75GB",
1194 NULL, 16, LANG_OFF,
1195 TALK_ID(5, UNIT_MB), TALK_ID(10, UNIT_MB),
1196 TALK_ID(15, UNIT_MB), TALK_ID(32, UNIT_MB),
1197 TALK_ID(64, UNIT_MB), TALK_ID(75, UNIT_MB),
1198 TALK_ID(100, UNIT_MB), TALK_ID(128, UNIT_MB),
1199 TALK_ID(256, UNIT_MB), TALK_ID(512, UNIT_MB),
1200 TALK_ID(650, UNIT_MB), TALK_ID(700, UNIT_MB),
1201 TALK_ID(1024, UNIT_MB), TALK_ID(1536, UNIT_MB),
1202 TALK_ID(1792, UNIT_MB)),
1203 {F_T_INT|F_RECSETTING, &global_settings.rec_channels, LANG_CHANNELS, INT(0),
1204 "rec channels","stereo,mono",UNUSED},
1205 #if CONFIG_CODEC == SWCODEC
1206 {F_T_INT|F_RECSETTING, &global_settings.rec_mono_mode,
1207 LANG_RECORDING_MONO_MODE, INT(0), "rec mono mode","L+R,L,R",UNUSED},
1208 #endif
1209 CHOICE_SETTING(F_RECSETTING, rec_split_type, LANG_SPLIT_TYPE, 0,
1210 "rec split type", "Split,Stop,Shutdown", NULL, 3,
1211 ID2P(LANG_START_NEW_FILE), ID2P(LANG_STOP_RECORDING),ID2P(LANG_STOP_RECORDING_AND_SHUTDOWN)),
1212 CHOICE_SETTING(F_RECSETTING, rec_split_method, LANG_SPLIT_MEASURE, 0,
1213 "rec split method", "Time,Filesize", NULL, 2,
1214 ID2P(LANG_TIME), ID2P(LANG_FILESIZE)),
1215 {F_T_INT|F_RECSETTING, &global_settings.rec_source, LANG_RECORDING_SOURCE,
1216 INT(0), "rec source",
1217 &HAVE_MIC_REC_(",mic")
1218 HAVE_LINE_REC_(",line")
1219 HAVE_SPDIF_REC_(",spdif")
1220 HAVE_FMRADIO_REC_(",fmradio")[1],
1221 UNUSED},
1222 INT_SETTING(F_RECSETTING, rec_prerecord_time, LANG_RECORD_PRERECORD_TIME, 0,
1223 "prerecording time", UNIT_SEC, 0, 30, 1,
1224 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL),
1226 TEXT_SETTING(F_RECSETTING, rec_directory, "rec path",
1227 REC_BASE_DIR, NULL, NULL),
1228 #ifdef HAVE_BACKLIGHT
1229 CHOICE_SETTING(F_RECSETTING, cliplight, LANG_CLIP_LIGHT, 0,
1230 "cliplight", "off,main,both,remote", NULL,
1231 #ifdef HAVE_REMOTE_LCD
1232 4, ID2P(LANG_OFF), ID2P(LANG_MAIN_UNIT),
1233 ID2P(LANG_REMOTE_MAIN), ID2P(LANG_REMOTE_UNIT)
1234 #else
1235 2, ID2P(LANG_OFF), ID2P(LANG_ON)
1236 #endif
1238 #endif
1239 #ifdef DEFAULT_REC_MIC_GAIN
1240 {F_T_INT|F_RECSETTING,&global_settings.rec_mic_gain,
1241 LANG_GAIN,INT(DEFAULT_REC_MIC_GAIN),
1242 "rec mic gain",NULL,UNUSED},
1243 #endif /* DEFAULT_REC_MIC_GAIN */
1244 #ifdef DEFAULT_REC_LEFT_GAIN
1245 {F_T_INT|F_RECSETTING,&global_settings.rec_left_gain,
1246 LANG_GAIN_LEFT,INT(DEFAULT_REC_LEFT_GAIN),
1247 "rec left gain",NULL,UNUSED},
1248 #endif /* DEFAULT_REC_LEFT_GAIN */
1249 #ifdef DEFAULT_REC_RIGHT_GAIN
1250 {F_T_INT|F_RECSETTING,&global_settings.rec_right_gain,LANG_GAIN_RIGHT,
1251 INT(DEFAULT_REC_RIGHT_GAIN),
1252 "rec right gain",NULL,UNUSED},
1253 #endif /* DEFAULT_REC_RIGHT_GAIN */
1254 #if CONFIG_CODEC == MAS3587F
1255 {F_T_INT|F_RECSETTING,&global_settings.rec_frequency,
1256 LANG_RECORDING_FREQUENCY, INT(0),
1257 "rec frequency","44,48,32,22,24,16", UNUSED},
1258 INT_SETTING(F_RECSETTING, rec_quality, LANG_RECORDING_QUALITY, 5,
1259 "rec quality", UNIT_INT, 0, 7, 1, NULL, NULL, NULL),
1260 OFFON_SETTING(F_RECSETTING, rec_editable, LANG_RECORDING_EDITABLE, false,
1261 "editable recordings", NULL),
1262 #endif /* CONFIG_CODEC == MAS3587F */
1263 #if CONFIG_CODEC == SWCODEC
1264 {F_T_INT|F_RECSETTING,&global_settings.rec_frequency,
1265 LANG_RECORDING_FREQUENCY,INT(REC_FREQ_DEFAULT),
1266 "rec frequency",REC_FREQ_CFG_VAL_LIST,UNUSED},
1267 {F_T_INT|F_RECSETTING,&global_settings.rec_format,
1268 LANG_RECORDING_FORMAT,INT(REC_FORMAT_DEFAULT),
1269 "rec format",REC_FORMAT_CFG_VAL_LIST,UNUSED},
1270 /** Encoder settings start - keep these together **/
1271 /* aiff_enc */
1272 /* (no settings yet) */
1273 /* mp3_enc */
1274 {F_T_INT|F_RECSETTING, &global_settings.mp3_enc_config.bitrate,-1,
1275 INT(MP3_ENC_BITRATE_CFG_DEFAULT),
1276 "mp3_enc bitrate",MP3_ENC_BITRATE_CFG_VALUE_LIST,UNUSED},
1277 /* wav_enc */
1278 /* (no settings yet) */
1279 /* wavpack_enc */
1280 /* (no settings yet) */
1281 /** Encoder settings end **/
1282 #endif /* CONFIG_CODEC == SWCODEC */
1283 /* values for the trigger */
1284 INT_SETTING(F_RECSETTING, rec_start_thres_db, LANG_RECORD_START_THRESHOLD, -35,
1285 "trigger start threshold dB", UNIT_DB, VOLUME_MIN/10, 0, 1, NULL, NULL, NULL),
1286 INT_SETTING(F_RECSETTING, rec_start_thres_linear, LANG_RECORD_START_THRESHOLD, 5,
1287 "trigger start threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL),
1288 INT_SETTING(F_RECSETTING, rec_stop_thres_db, LANG_RECORD_STOP_THRESHOLD, -45,
1289 "trigger stop threshold dB", UNIT_DB, VOLUME_MIN/10, 0, 1, NULL, NULL, NULL),
1290 INT_SETTING(F_RECSETTING, rec_stop_thres_linear, LANG_RECORD_STOP_THRESHOLD, 10,
1291 "trigger stop threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL),
1292 TABLE_SETTING(F_RECSETTING, rec_start_duration, LANG_MIN_DURATION, 0,
1293 "trigger start duration",
1294 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1295 UNIT_SEC, NULL, NULL, NULL, 13,
1296 0,1,2,5,10,15,20,25,30,60,120,300,600),
1297 TABLE_SETTING(F_RECSETTING, rec_stop_postrec, LANG_MIN_DURATION, 0,
1298 "trigger stop duration",
1299 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1300 UNIT_SEC, NULL, NULL, NULL, 13,
1301 0,1,2,5,10,15,20,25,30,60,120,300,600),
1302 TABLE_SETTING(F_RECSETTING, rec_stop_gap, LANG_RECORD_STOP_GAP, 1,
1303 "trigger min gap",
1304 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1305 UNIT_SEC, NULL, NULL, NULL, 13,
1306 0,1,2,5,10,15,20,25,30,60,120,300,600),
1307 CHOICE_SETTING(F_RECSETTING, rec_trigger_mode, LANG_RECORD_TRIGGER, TRIG_MODE_OFF,
1308 "trigger mode","off,once,repeat", NULL ,3,
1309 ID2P(LANG_OFF), ID2P(LANG_RECORD_TRIG_NOREARM), ID2P(LANG_REPEAT)),
1310 CHOICE_SETTING(F_RECSETTING, rec_trigger_type, LANG_RECORD_TRIGGER_TYPE, TRIG_TYPE_STOP,
1311 "trigger type","stop,pause,nf stp", NULL ,3,
1312 ID2P(LANG_RECORD_TRIGGER_STOP), ID2P(LANG_PAUSE), ID2P(LANG_RECORD_TRIGGER_NEWFILESTP)),
1313 #endif /* HAVE_RECORDING */
1315 #ifdef HAVE_HISTOGRAM
1316 /* TO DO: additional restictions of following REP items? */
1317 TABLE_SETTING(F_RECSETTING, histogram_interval, LANG_HISTOGRAM_INTERVAL, 0,
1318 "histogram interval","0s,1s,2s,4s",
1319 UNIT_SEC, NULL, NULL, NULL, 4, 0,1,2,4),
1320 #endif /* HAVE_HISTOGRAM */
1322 #ifdef HAVE_SPDIF_POWER
1323 OFFON_SETTING(F_SOUNDSETTING, spdif_enable, LANG_SPDIF_ENABLE, false,
1324 "spdif enable", spdif_power_enable),
1325 #endif
1326 CHOICE_SETTING(0, next_folder, LANG_NEXT_FOLDER, FOLDER_ADVANCE_OFF,
1327 "folder navigation", "off,on,random",NULL ,3,
1328 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
1329 ID2P(LANG_RANDOM)),
1330 BOOL_SETTING(0, constrain_next_folder, LANG_CONSTRAIN_NEXT_FOLDER, false,
1331 "constrain next folder", off_on,
1332 LANG_SET_BOOL_YES, LANG_SET_BOOL_NO, NULL),
1334 #ifdef HAVE_TAGCACHE
1335 #if CONFIG_CODEC == SWCODEC
1336 BOOL_SETTING(0, autoresume_enable, LANG_AUTORESUME, false,
1337 "autoresume enable", off_on,
1338 LANG_SET_BOOL_YES, LANG_SET_BOOL_NO, NULL),
1339 CHOICE_SETTING(0, autoresume_automatic, LANG_AUTORESUME_AUTOMATIC,
1340 AUTORESUME_NEXTTRACK_NEVER,
1341 "autoresume next track", "never,all,custom",
1342 NULL, 3,
1343 ID2P(LANG_SET_BOOL_NO),
1344 ID2P(LANG_ALWAYS),
1345 ID2P(LANG_AUTORESUME_CUSTOM)),
1346 TEXT_SETTING(0, autoresume_paths, "autoresume next track paths",
1347 "/podcast:/podcasts", NULL, NULL),
1348 #endif
1350 OFFON_SETTING(0, runtimedb, LANG_RUNTIMEDB_ACTIVE, false,
1351 "gather runtime data", NULL),
1352 #endif
1354 #if CONFIG_CODEC == SWCODEC
1355 /* replay gain */
1356 CHOICE_SETTING(F_SOUNDSETTING, replaygain_settings.type,
1357 LANG_REPLAYGAIN_MODE, REPLAYGAIN_SHUFFLE, "replaygain type",
1358 "track,album,track shuffle,off", NULL, 4, ID2P(LANG_TRACK_GAIN),
1359 ID2P(LANG_ALBUM_GAIN), ID2P(LANG_SHUFFLE_GAIN), ID2P(LANG_OFF)),
1360 OFFON_SETTING(F_SOUNDSETTING, replaygain_settings.noclip,
1361 LANG_REPLAYGAIN_NOCLIP, false, "replaygain noclip", NULL),
1362 INT_SETTING_NOWRAP(F_SOUNDSETTING, replaygain_settings.preamp,
1363 LANG_REPLAYGAIN_PREAMP, 0, "replaygain preamp",
1364 UNIT_DB, -120, 120, 5, db_format, get_dec_talkid, NULL),
1366 CHOICE_SETTING(0, beep, LANG_BEEP, 0, "beep", "off,weak,moderate,strong",
1367 NULL, 4, ID2P(LANG_OFF), ID2P(LANG_WEAK),
1368 ID2P(LANG_MODERATE), ID2P(LANG_STRONG)),
1370 #ifdef HAVE_CROSSFADE
1371 /* crossfade */
1372 CHOICE_SETTING(F_SOUNDSETTING, crossfade, LANG_CROSSFADE_ENABLE, 0,
1373 "crossfade",
1374 "off,auto track change,man track skip,shuffle,shuffle or man track skip,always",
1375 NULL, 6, ID2P(LANG_OFF), ID2P(LANG_AUTOTRACKSKIP),
1376 ID2P(LANG_MANTRACKSKIP), ID2P(LANG_SHUFFLE),
1377 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)),
1378 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_delay,
1379 LANG_CROSSFADE_FADE_IN_DELAY, 0,
1380 "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL),
1381 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_delay,
1382 LANG_CROSSFADE_FADE_OUT_DELAY, 0,
1383 "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL,NULL),
1384 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_duration,
1385 LANG_CROSSFADE_FADE_IN_DURATION, 2,
1386 "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL,
1387 NULL),
1388 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_duration,
1389 LANG_CROSSFADE_FADE_OUT_DURATION, 2,
1390 "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL,
1391 NULL),
1392 CHOICE_SETTING(F_SOUNDSETTING, crossfade_fade_out_mixmode,
1393 LANG_CROSSFADE_FADE_OUT_MODE, 0,
1394 "crossfade fade out mode", "crossfade,mix", NULL, 2,
1395 ID2P(LANG_CROSSFADE), ID2P(LANG_MIX)),
1396 #endif
1398 /* crossfeed */
1399 OFFON_SETTING(F_SOUNDSETTING, crossfeed, LANG_CROSSFEED, false,
1400 "crossfeed", dsp_crossfeed_enable),
1401 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_direct_gain,
1402 LANG_CROSSFEED_DIRECT_GAIN, -15,
1403 "crossfeed direct gain", UNIT_DB, -60, 0, 5,
1404 db_format, get_dec_talkid,dsp_set_crossfeed_direct_gain),
1405 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_cross_gain,
1406 LANG_CROSSFEED_CROSS_GAIN, -60,
1407 "crossfeed cross gain", UNIT_DB, -120, -30, 5,
1408 db_format, get_dec_talkid, crossfeed_cross_set),
1409 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_attenuation,
1410 LANG_CROSSFEED_HF_ATTENUATION, -160,
1411 "crossfeed hf attenuation", UNIT_DB, -240, -60, 5,
1412 db_format, get_dec_talkid, crossfeed_cross_set),
1413 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_cutoff,
1414 LANG_CROSSFEED_HF_CUTOFF, 700,
1415 "crossfeed hf cutoff", UNIT_HERTZ, 500, 2000, 100,
1416 NULL, NULL, crossfeed_cross_set),
1418 /* equalizer */
1419 OFFON_SETTING(F_EQSETTING, eq_enabled, LANG_EQUALIZER_ENABLED, false,
1420 "eq enabled", NULL),
1421 INT_SETTING_NOWRAP(F_EQSETTING, eq_precut, LANG_EQUALIZER_PRECUT, 0,
1422 "eq precut", UNIT_DB, 0, 240, 5, eq_precut_format,
1423 get_precut_talkid, dsp_set_eq_precut),
1424 /* 0..32768 Hz */
1425 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
1426 60, "eq band 0 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1427 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1428 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].cutoff, LANG_EQUALIZER_BAND_CENTER,
1429 200, "eq band 1 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1430 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1431 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].cutoff, LANG_EQUALIZER_BAND_CENTER,
1432 800, "eq band 2 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1433 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1434 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].cutoff, LANG_EQUALIZER_BAND_CENTER,
1435 4000, "eq band 3 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1436 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1437 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
1438 12000, "eq band 4 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1439 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1440 /* 0..64 (or 0.0 to 6.4) */
1441 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].q, LANG_EQUALIZER_BAND_Q, 7,
1442 "eq band 0 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1443 eq_q_format, get_dec_talkid, NULL),
1444 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].q, LANG_EQUALIZER_BAND_Q, 10,
1445 "eq band 1 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1446 eq_q_format, get_dec_talkid, NULL),
1447 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].q, LANG_EQUALIZER_BAND_Q, 10,
1448 "eq band 2 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1449 eq_q_format, get_dec_talkid, NULL),
1450 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].q, LANG_EQUALIZER_BAND_Q, 10,
1451 "eq band 3 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1452 eq_q_format, get_dec_talkid, NULL),
1453 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].q, LANG_EQUALIZER_BAND_Q, 7,
1454 "eq band 4 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1455 eq_q_format, get_dec_talkid, NULL),
1456 /* -240..240 (or -24db to +24db) */
1457 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].gain, LANG_GAIN, 0,
1458 "eq band 0 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1459 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1460 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].gain, LANG_GAIN, 0,
1461 "eq band 1 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1462 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1463 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].gain, LANG_GAIN, 0,
1464 "eq band 2 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1465 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1466 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].gain, LANG_GAIN, 0,
1467 "eq band 3 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1468 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1469 INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].gain, LANG_GAIN, 0,
1470 "eq band 4 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1471 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1473 /* dithering */
1474 OFFON_SETTING(F_SOUNDSETTING, dithering_enabled, LANG_DITHERING, false,
1475 "dithering enabled", dsp_dither_enable),
1477 #ifdef HAVE_PITCHCONTROL
1478 /* timestretch */
1479 OFFON_SETTING(F_SOUNDSETTING, timestretch_enabled, LANG_TIMESTRETCH, false,
1480 "timestretch enabled", dsp_timestretch_enable),
1481 #endif
1483 /* compressor */
1484 INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_settings.threshold,
1485 LANG_COMPRESSOR_THRESHOLD, 0,
1486 "compressor threshold", UNIT_DB, 0, -24,
1487 -3, formatter_unit_0_is_off, getlang_unit_0_is_off,
1488 compressor_set),
1489 CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_settings.makeup_gain,
1490 LANG_COMPRESSOR_GAIN, 1, "compressor makeup gain",
1491 "off,auto", compressor_set, 2,
1492 ID2P(LANG_OFF), ID2P(LANG_AUTO)),
1493 CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_settings.ratio,
1494 LANG_COMPRESSOR_RATIO, 1, "compressor ratio",
1495 "2:1,4:1,6:1,10:1,limit", compressor_set, 5,
1496 ID2P(LANG_COMPRESSOR_RATIO_2), ID2P(LANG_COMPRESSOR_RATIO_4),
1497 ID2P(LANG_COMPRESSOR_RATIO_6), ID2P(LANG_COMPRESSOR_RATIO_10),
1498 ID2P(LANG_COMPRESSOR_RATIO_LIMIT)),
1499 CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_settings.knee,
1500 LANG_COMPRESSOR_KNEE, 1, "compressor knee",
1501 "hard knee,soft knee", compressor_set, 2,
1502 ID2P(LANG_COMPRESSOR_HARD_KNEE), ID2P(LANG_COMPRESSOR_SOFT_KNEE)),
1503 INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_settings.release_time,
1504 LANG_COMPRESSOR_RELEASE, 500,
1505 "compressor release time", UNIT_MS, 100, 1000,
1506 100, NULL, NULL, compressor_set),
1507 #endif
1508 #ifdef AUDIOHW_HAVE_BASS_CUTOFF
1509 SOUND_SETTING(F_NO_WRAP, bass_cutoff, LANG_BASS_CUTOFF,
1510 "bass cutoff", SOUND_BASS_CUTOFF),
1511 #endif
1512 #ifdef AUDIOHW_HAVE_TREBLE_CUTOFF
1513 SOUND_SETTING(F_NO_WRAP, treble_cutoff, LANG_TREBLE_CUTOFF,
1514 "treble cutoff", SOUND_TREBLE_CUTOFF),
1515 #endif
1516 #ifdef HAVE_DIRCACHE
1517 /*enable dircache for all targets > 2MB of RAM by default*/
1518 OFFON_SETTING(F_BANFROMQS,dircache,LANG_DIRCACHE_ENABLE,true,"dircache",NULL),
1519 SYSTEM_SETTING(NVRAM(4),dircache_size,0),
1520 #endif
1522 #ifdef HAVE_TAGCACHE
1523 #ifdef HAVE_TC_RAMCACHE
1524 OFFON_SETTING(F_BANFROMQS,tagcache_ram,LANG_TAGCACHE_RAM,false,"tagcache_ram",NULL),
1525 #endif
1526 OFFON_SETTING(F_BANFROMQS, tagcache_autoupdate, LANG_TAGCACHE_AUTOUPDATE, false,
1527 "tagcache_autoupdate", NULL),
1528 #endif
1529 CHOICE_SETTING(0, default_codepage, LANG_DEFAULT_CODEPAGE, 0,
1530 "default codepage",
1531 #ifdef HAVE_LCD_BITMAP
1532 /* The order must match with that in unicode.c */
1533 "iso8859-1,iso8859-7,iso8859-8,cp1251,iso8859-11,cp1256,"
1534 "iso8859-9,iso8859-2,cp1250,cp1252,sjis,gb2312,ksx1001,big5,utf-8",
1535 set_codepage, 14,
1536 ID2P(LANG_CODEPAGE_LATIN1),
1537 ID2P(LANG_CODEPAGE_GREEK),
1538 ID2P(LANG_CODEPAGE_HEBREW), ID2P(LANG_CODEPAGE_CYRILLIC),
1539 ID2P(LANG_CODEPAGE_THAI), ID2P(LANG_CODEPAGE_ARABIC),
1540 ID2P(LANG_CODEPAGE_TURKISH),
1541 ID2P(LANG_CODEPAGE_LATIN_EXTENDED),
1542 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN),
1543 ID2P(LANG_CODEPAGE_WESTERN_EUROPEAN),
1544 ID2P(LANG_CODEPAGE_JAPANESE),
1545 ID2P(LANG_CODEPAGE_SIMPLIFIED), ID2P(LANG_CODEPAGE_KOREAN),
1546 ID2P(LANG_CODEPAGE_TRADITIONAL), ID2P(LANG_CODEPAGE_UTF8)),
1547 #else /* !HAVE_LCD_BITMAP */
1548 /* The order must match with that in unicode.c */
1549 "iso8859-1,iso8859-7,cp1251,iso8859-9,iso8859-2,cp1250,cp1252,utf-8",
1550 set_codepage, 7,
1551 ID2P(LANG_CODEPAGE_LATIN1), ID2P(LANG_CODEPAGE_GREEK),
1552 ID2P(LANG_CODEPAGE_CYRILLIC), ID2P(LANG_CODEPAGE_TURKISH),
1553 ID2P(LANG_CODEPAGE_LATIN_EXTENDED),
1554 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN),
1555 ID2P(LANG_CODEPAGE_WESTERN_EUROPEAN),
1556 ID2P(LANG_CODEPAGE_UTF8)),
1557 #endif
1558 OFFON_SETTING(0, warnon_erase_dynplaylist, LANG_WARN_ERASEDYNPLAYLIST_MENU,
1559 true, "warn when erasing dynamic playlist",NULL),
1561 #ifdef HAVE_BACKLIGHT
1562 #ifdef HAS_BUTTON_HOLD
1563 CHOICE_SETTING(0, backlight_on_button_hold, LANG_BACKLIGHT_ON_BUTTON_HOLD,
1564 1, "backlight on button hold", "normal,off,on",
1565 backlight_set_on_button_hold, 3,
1566 ID2P(LANG_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)),
1567 #endif
1569 #ifdef HAVE_LCD_SLEEP_SETTING
1570 STRINGCHOICE_SETTING(0, lcd_sleep_after_backlight_off,
1571 LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF, 3,
1572 "lcd sleep after backlight off",
1573 "always,never,5,10,15,20,30,45,60,90",
1574 lcd_set_sleep_after_backlight_off, 10,
1575 LANG_ALWAYS, LANG_NEVER, TALK_ID(5, UNIT_SEC),
1576 TALK_ID(10, UNIT_SEC), TALK_ID(15, UNIT_SEC),
1577 TALK_ID(20, UNIT_SEC), TALK_ID(30, UNIT_SEC),
1578 TALK_ID(45, UNIT_SEC),TALK_ID(60, UNIT_SEC),
1579 TALK_ID(90, UNIT_SEC)),
1580 #endif /* HAVE_LCD_SLEEP_SETTING */
1581 #endif /* HAVE_BACKLIGHT */
1583 OFFON_SETTING(0, hold_lr_for_scroll_in_list, -1, true,
1584 "hold_lr_for_scroll_in_list",NULL),
1585 #ifdef HAVE_LCD_BITMAP
1586 CHOICE_SETTING(0, show_path_in_browser, LANG_SHOW_PATH, SHOW_PATH_CURRENT,
1587 "show path in browser", "off,current directory,full path",
1588 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_SHOW_PATH_CURRENT),
1589 ID2P(LANG_DISPLAY_FULL_PATH)),
1590 #endif
1592 #ifdef HAVE_AGC
1593 {F_T_INT,&global_settings.rec_agc_preset_mic,LANG_RECORDING_AGC_PRESET,
1594 INT(1),"agc mic preset",NULL,UNUSED},
1595 {F_T_INT,&global_settings.rec_agc_preset_line,LANG_RECORDING_AGC_PRESET,
1596 INT(1),"agc line preset",NULL,UNUSED},
1597 {F_T_INT,&global_settings.rec_agc_maxgain_mic,-1,INT(104),
1598 "agc maximum mic gain",NULL,UNUSED},
1599 {F_T_INT,&global_settings.rec_agc_maxgain_line,-1,INT(96),
1600 "agc maximum line gain",NULL,UNUSED},
1601 {F_T_INT,&global_settings.rec_agc_cliptime,LANG_RECORDING_AGC_CLIPTIME,
1602 INT(1),"agc cliptime","0.2s,0.4s,0.6s,0.8,1s",UNUSED},
1603 #endif
1605 #ifdef HAVE_REMOTE_LCD
1606 #ifdef HAS_REMOTE_BUTTON_HOLD
1607 CHOICE_SETTING(0, remote_backlight_on_button_hold,
1608 LANG_BACKLIGHT_ON_BUTTON_HOLD, 0,
1609 "remote backlight on button hold",
1610 "normal,off,on", remote_backlight_set_on_button_hold, 3,
1611 ID2P(LANG_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)),
1612 #endif
1613 #endif
1614 #ifdef HAVE_HEADPHONE_DETECTION
1615 CHOICE_SETTING(0, unplug_mode, LANG_HEADPHONE_UNPLUG, 0,
1616 "pause on headphone unplug", "off,pause,pause and resume",
1617 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_PAUSE),
1618 ID2P(LANG_HEADPHONE_UNPLUG_RESUME)),
1619 OFFON_SETTING(0, unplug_autoresume,
1620 LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME, false,
1621 "disable autoresume if phones not present",NULL),
1622 #endif
1623 INT_SETTING(0, pause_rewind, LANG_PAUSE_REWIND, 0,
1624 "rewind duration on pause", UNIT_SEC, 0, 15, 1, NULL, NULL,
1625 NULL),
1626 #if CONFIG_TUNER
1627 CHOICE_SETTING(0, fm_region, LANG_FM_REGION, 0,
1628 "fm_region", "eu,us,jp,kr,it,wo", set_radio_region, 6,
1629 ID2P(LANG_FM_EUROPE), ID2P(LANG_FM_US),
1630 ID2P(LANG_FM_JAPAN), ID2P(LANG_FM_KOREA),
1631 ID2P(LANG_FM_ITALY), ID2P(LANG_FM_OTHER)),
1632 #endif
1634 OFFON_SETTING(F_BANFROMQS, audioscrobbler, LANG_AUDIOSCROBBLER, false,
1635 "Last.fm Logging", NULL),
1636 #if CONFIG_TUNER
1637 TEXT_SETTING(0, fmr_file, "fmr", "-",
1638 FMPRESET_PATH "/", ".fmr"),
1639 TEXT_SETTING(F_THEMESETTING,fms_file, "fms",
1640 DEFAULT_FMS_NAME, SBS_DIR "/", ".fms"),
1641 #ifdef HAVE_REMOTE_LCD
1642 TEXT_SETTING(F_THEMESETTING,rfms_file, "rfms",
1643 DEFAULT_FMS_NAME, SBS_DIR "/", ".rfms"),
1644 #endif
1645 #endif /* CONFIG_TUNER */
1646 #ifdef HAVE_LCD_BITMAP
1647 TEXT_SETTING(F_THEMESETTING, font_file, "font",
1648 DEFAULT_FONTNAME, FONT_DIR "/", ".fnt"),
1649 INT_SETTING(0, glyphs_to_cache, LANG_GLYPHS, DEFAULT_GLYPHS,
1650 "glyphs", UNIT_INT, MIN_GLYPHS, MAX_GLYPHS, 10,
1651 NULL, NULL, NULL),
1652 #endif
1653 #ifdef HAVE_REMOTE_LCD
1654 TEXT_SETTING(F_THEMESETTING, remote_font_file, "remote font",
1655 DEFAULT_REMOTE_FONTNAME, FONT_DIR "/", ".fnt"),
1656 #endif
1657 TEXT_SETTING(F_THEMESETTING,wps_file, "wps",
1658 DEFAULT_WPSNAME, WPS_DIR "/", ".wps"),
1659 #ifdef HAVE_LCD_BITMAP
1660 TEXT_SETTING(F_THEMESETTING,sbs_file, "sbs",
1661 DEFAULT_SBSNAME, SBS_DIR "/", ".sbs"),
1662 #endif
1663 #ifdef HAVE_REMOTE_LCD
1664 TEXT_SETTING(F_THEMESETTING,rwps_file,"rwps",
1665 DEFAULT_WPSNAME, WPS_DIR "/", ".rwps"),
1666 TEXT_SETTING(F_THEMESETTING,rsbs_file, "rsbs",
1667 DEFAULT_SBSNAME, SBS_DIR "/", ".rsbs"),
1668 #endif
1669 TEXT_SETTING(0,lang_file,"lang","",LANG_DIR "/",".lng"),
1670 #if LCD_DEPTH > 1
1671 TEXT_SETTING(F_THEMESETTING,backdrop_file,"backdrop",
1672 DEFAULT_BACKDROP, NULL, NULL),
1673 #endif
1674 #ifdef HAVE_LCD_BITMAP
1675 TEXT_SETTING(0,kbd_file,"kbd","-",ROCKBOX_DIR "/",".kbd"),
1676 #endif
1677 #ifdef HAVE_USB_CHARGING_ENABLE
1678 CHOICE_SETTING(0, usb_charging, LANG_USB_CHARGING, 1, "usb charging",
1679 "off,on,force", NULL, 3, ID2P(LANG_SET_BOOL_NO),
1680 ID2P(LANG_SET_BOOL_YES), ID2P(LANG_FORCE)),
1681 #endif
1682 OFFON_SETTING(F_BANFROMQS,cuesheet,LANG_CUESHEET_ENABLE,false,"cuesheet support",
1683 NULL),
1684 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, skip_length,
1685 LANG_SKIP_LENGTH, 0, "skip length",
1686 "outro,track,1s,2s,3s,5s,7s,10s,15s,20s,30s,45s,1min,90s,2min,3min,5min,10min,15min",
1687 UNIT_SEC, formatter_unit_0_is_skip_track,
1688 getlang_unit_0_is_skip_track, NULL,
1689 19, -1,0,1,2,3,5,7,10,15,20,30,45,60,90,120,180,300,600,900),
1690 CHOICE_SETTING(0, start_in_screen, LANG_START_SCREEN, 1,
1691 "start in screen", "previous,root,files,"
1692 #ifdef HAVE_TAGCACHE
1693 #define START_DB_COUNT 1
1694 "db,"
1695 #else
1696 #define START_DB_COUNT 0
1697 #endif
1698 "wps,menu,"
1699 #ifdef HAVE_RECORDING
1700 #define START_REC_COUNT 1
1701 "recording,"
1702 #else
1703 #define START_REC_COUNT 0
1704 #endif
1705 #if CONFIG_TUNER
1706 #define START_TUNER_COUNT 1
1707 "radio,"
1708 #else
1709 #define START_TUNER_COUNT 0
1710 #endif
1711 "bookmarks"
1712 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1713 #define START_PF_COUNT 1
1714 ",pictureflow"
1715 #else
1716 #define START_PF_COUNT 0
1717 #endif
1718 , NULL,
1719 (6 + START_DB_COUNT + START_REC_COUNT + START_TUNER_COUNT + START_PF_COUNT),
1720 ID2P(LANG_PREVIOUS_SCREEN), ID2P(LANG_MAIN_MENU),
1721 ID2P(LANG_DIR_BROWSER),
1722 #ifdef HAVE_TAGCACHE
1723 ID2P(LANG_TAGCACHE),
1724 #endif
1725 ID2P(LANG_RESUME_PLAYBACK), ID2P(LANG_SETTINGS),
1726 #ifdef HAVE_RECORDING
1727 ID2P(LANG_RECORDING),
1728 #endif
1729 #if CONFIG_TUNER
1730 ID2P(LANG_FM_RADIO),
1731 #endif
1732 ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS)
1733 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1734 ,ID2P(LANG_ONPLAY_PICTUREFLOW)
1735 #endif
1737 SYSTEM_SETTING(NVRAM(1),last_screen,-1),
1738 #if defined(HAVE_RTC_ALARM) && \
1739 (defined(HAVE_RECORDING) || CONFIG_TUNER)
1740 {F_T_INT, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN,
1741 INT(ALARM_START_WPS), "alarm wakeup screen", ALARM_SETTING_TEXT,UNUSED},
1742 #endif /* HAVE_RTC_ALARM */
1744 /* Customizable icons */
1745 #ifdef HAVE_LCD_BITMAP
1746 TEXT_SETTING(F_THEMESETTING, icon_file, "iconset", DEFAULT_ICONSET,
1747 ICON_DIR "/", ".bmp"),
1748 TEXT_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset",
1749 DEFAULT_VIEWERS_ICONSET,
1750 ICON_DIR "/", ".bmp"),
1751 #endif
1752 #ifdef HAVE_REMOTE_LCD
1753 TEXT_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "-",
1754 ICON_DIR "/", ".bmp"),
1755 TEXT_SETTING(F_THEMESETTING, remote_viewers_icon_file,
1756 "remote viewers iconset", "-",
1757 ICON_DIR "/", ".bmp"),
1758 #endif /* HAVE_REMOTE_LCD */
1759 #ifdef HAVE_LCD_COLOR
1760 TEXT_SETTING(F_THEMESETTING, colors_file, "filetype colours", "-",
1761 THEME_DIR "/", ".colours"),
1762 #endif
1763 #ifdef HAVE_BUTTON_LIGHT
1764 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, buttonlight_timeout,
1765 LANG_BUTTONLIGHT_TIMEOUT, 5, "button light timeout", off_on,
1766 UNIT_SEC, backlight_formatter, backlight_getlang,
1767 buttonlight_set_timeout, 20,
1768 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
1769 #endif
1770 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
1771 INT_SETTING(F_NO_WRAP, buttonlight_brightness, LANG_BUTTONLIGHT_BRIGHTNESS,
1772 DEFAULT_BRIGHTNESS_SETTING,
1773 "button light brightness",UNIT_INT, MIN_BRIGHTNESS_SETTING,
1774 MAX_BRIGHTNESS_SETTING, 1, NULL, NULL,
1775 buttonlight_set_brightness),
1776 #endif
1777 #ifndef HAVE_WHEEL_ACCELERATION
1778 INT_SETTING(0, list_accel_start_delay, LANG_LISTACCEL_START_DELAY,
1779 2, "list_accel_start_delay", UNIT_SEC, 0, 10, 1,
1780 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL),
1781 INT_SETTING(0, list_accel_wait, LANG_LISTACCEL_ACCEL_SPEED,
1782 3, "list_accel_wait", UNIT_SEC, 1, 10, 1,
1783 scanaccel_formatter, getlang_unit_0_is_off, NULL),
1784 #endif /* HAVE_WHEEL_ACCELERATION */
1785 #if CONFIG_CODEC == SWCODEC
1786 /* keyclick */
1787 #ifdef HAVE_HARDWARE_CLICK
1788 CHOICE_SETTING(0, keyclick, LANG_KEYCLICK_SOFTWARE, 0,
1789 "keyclick", "off,weak,moderate,strong", NULL, 4,
1790 ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE),
1791 ID2P(LANG_STRONG)),
1792 OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false,
1793 "keyclick repeats", NULL),
1794 OFFON_SETTING(0, keyclick_hardware, LANG_KEYCLICK_HARDWARE, false,
1795 "hardware keyclick", NULL),
1796 #else
1797 CHOICE_SETTING(0, keyclick, LANG_KEYCLICK, 0,
1798 "keyclick", "off,weak,moderate,strong", NULL, 4,
1799 ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE),
1800 ID2P(LANG_STRONG)),
1801 OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false,
1802 "keyclick repeats", NULL),
1803 #endif
1804 #endif /* CONFIG_CODEC == SWCODEC */
1805 TEXT_SETTING(0, playlist_catalog_dir, "playlist catalog directory",
1806 PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL),
1807 INT_SETTING(0, sleeptimer_duration, LANG_SLEEP_TIMER_DURATION, 30,
1808 "sleeptimer duration",
1809 UNIT_MIN, 5, 300, 5, NULL, NULL, NULL),
1810 OFFON_SETTING(0, sleeptimer_on_startup, LANG_SLEEP_TIMER_ON_POWER_UP, false,
1811 "sleeptimer on startup", NULL),
1812 OFFON_SETTING(0, keypress_restarts_sleeptimer, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER, false,
1813 "keypress restarts sleeptimer", set_keypress_restarts_sleep_timer),
1814 #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
1815 CHOICE_SETTING(0, touchpad_sensitivity, LANG_TOUCHPAD_SENSITIVITY, 0,
1816 "touchpad sensitivity", "normal,high", touchpad_set_sensitivity, 2,
1817 ID2P(LANG_NORMAL), ID2P(LANG_HIGH)),
1818 #endif
1819 #ifdef HAVE_QUICKSCREEN
1820 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_TOP], LANG_TOP_QS_ITEM,
1821 NULL, "qs top",
1822 qs_load_from_cfg, qs_write_to_cfg,
1823 qs_is_changed, qs_set_default),
1824 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_LEFT], LANG_LEFT_QS_ITEM,
1825 &global_settings.playlist_shuffle, "qs left",
1826 qs_load_from_cfg, qs_write_to_cfg,
1827 qs_is_changed, qs_set_default),
1828 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_RIGHT], LANG_RIGHT_QS_ITEM,
1829 &global_settings.repeat_mode, "qs right",
1830 qs_load_from_cfg, qs_write_to_cfg,
1831 qs_is_changed, qs_set_default),
1832 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_BOTTOM], LANG_BOTTOM_QS_ITEM,
1833 NULL, "qs bottom",
1834 qs_load_from_cfg, qs_write_to_cfg,
1835 qs_is_changed, qs_set_default),
1836 OFFON_SETTING(0, shortcuts_replaces_qs, LANG_USE_SHORTCUTS_INSTEAD_OF_QS,
1837 false, "shortcuts instead of quickscreen", NULL),
1838 #endif
1839 #ifdef HAVE_SPEAKER
1840 OFFON_SETTING(0, speaker_enabled, LANG_ENABLE_SPEAKER, false, "speaker",
1841 audiohw_enable_speaker),
1842 #endif
1843 #ifdef HAVE_TOUCHSCREEN
1844 CHOICE_SETTING(0, touch_mode, LANG_TOUCHSCREEN_MODE, DEFAULT_TOUCHSCREEN_MODE,
1845 "touchscreen mode", "point,grid", NULL, 2,
1846 ID2P(LANG_TOUCHSCREEN_POINT), ID2P(LANG_TOUCHSCREEN_GRID)),
1847 CUSTOM_SETTING(0, ts_calibration_data, -1,
1848 &default_calibration_parameters, "touchscreen calibration",
1849 tsc_load_from_cfg, tsc_write_to_cfg,
1850 tsc_is_changed, tsc_set_default),
1851 #endif
1852 OFFON_SETTING(0, prevent_skip, LANG_PREVENT_SKIPPING, false, "prevent track skip", NULL),
1854 #ifdef HAVE_PITCHCONTROL
1855 OFFON_SETTING(0, pitch_mode_semitone, LANG_SEMITONE, false,
1856 "Semitone pitch change", NULL),
1857 #if CONFIG_CODEC == SWCODEC
1858 OFFON_SETTING(0, pitch_mode_timestretch, LANG_TIMESTRETCH, false,
1859 "Timestretch mode", NULL),
1860 #endif
1861 #endif
1863 #ifdef USB_ENABLE_HID
1864 OFFON_SETTING(0, usb_hid, LANG_USB_HID, true, "usb hid", usb_set_hid),
1865 CHOICE_SETTING(0, usb_keypad_mode, LANG_USB_KEYPAD_MODE, 0,
1866 "usb keypad mode", "multimedia,presentation,browser"
1867 #ifdef HAVE_USB_HID_MOUSE
1868 ",mouse"
1869 #endif
1870 , NULL,
1871 #ifdef HAVE_USB_HID_MOUSE
1873 #else
1875 #endif
1876 ID2P(LANG_MULTIMEDIA_MODE), ID2P(LANG_PRESENTATION_MODE),
1877 ID2P(LANG_BROWSER_MODE)
1878 #ifdef HAVE_USB_HID_MOUSE
1879 , ID2P(LANG_MOUSE_MODE)
1880 #endif
1881 ), /* CHOICE_SETTING( usb_keypad_mode ) */
1882 #endif
1884 #if defined(USB_ENABLE_STORAGE) && defined(HAVE_MULTIDRIVE)
1885 OFFON_SETTING(0, usb_skip_first_drive, LANG_USB_SKIP_FIRST_DRIVE, false, "usb skip first drive", usb_set_skip_first_drive),
1886 #endif
1888 /* Customizable list */
1889 #ifdef HAVE_LCD_BITMAP
1890 VIEWPORT_SETTING(ui_vp_config, "ui viewport"),
1891 #ifdef HAVE_REMOTE_LCD
1892 VIEWPORT_SETTING(remote_ui_vp_config, "remote ui viewport"),
1893 #endif
1894 #endif
1896 #ifdef HAVE_MORSE_INPUT
1897 OFFON_SETTING(0, morse_input, LANG_MORSE_INPUT, false, "morse input", NULL),
1898 #endif
1900 #ifdef HAVE_HOTKEY
1901 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, hotkey_wps,
1902 LANG_HOTKEY_WPS, HOTKEY_VIEW_PLAYLIST, "hotkey wps",
1903 "off,view playlist,show track info,pitchscreen,open with,delete"
1904 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1905 ",pictureflow"
1906 #endif
1907 ,UNIT_INT, hotkey_formatter, hotkey_getlang, NULL,
1908 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1910 #else
1912 #endif
1913 HOTKEY_OFF,
1914 HOTKEY_VIEW_PLAYLIST, HOTKEY_SHOW_TRACK_INFO, HOTKEY_PITCHSCREEN,
1915 HOTKEY_OPEN_WITH, HOTKEY_DELETE
1916 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1917 , HOTKEY_PICTUREFLOW
1918 #endif
1920 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, hotkey_tree,
1921 LANG_HOTKEY_FILE_BROWSER, HOTKEY_OFF, "hotkey tree",
1922 "off,open with,delete,insert,insert shuffled",
1923 UNIT_INT, hotkey_formatter, hotkey_getlang, NULL, 5, HOTKEY_OFF,
1924 HOTKEY_OPEN_WITH, HOTKEY_DELETE, HOTKEY_INSERT, HOTKEY_INSERT_SHUFFLED),
1925 #endif
1927 #if CONFIG_CODEC == SWCODEC
1928 INT_SETTING(0, resume_rewind, LANG_RESUME_REWIND, 0,
1929 "resume rewind", UNIT_SEC, 0, 60, 5,
1930 NULL, NULL, NULL),
1931 #endif
1932 CUSTOM_SETTING(0, root_menu_customized,
1933 LANG_ROCKBOX_TITLE, /* lang string here is never actually used */
1934 NULL, "root menu order",
1935 root_menu_load_from_cfg, root_menu_write_to_cfg,
1936 root_menu_is_changed, root_menu_set_default),
1939 const int nb_settings = sizeof(settings)/sizeof(*settings);
1941 const struct settings_list* get_settings_list(int*count)
1943 *count = nb_settings;
1944 return settings;