1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
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 ****************************************************************************/
24 #include "string-extra.h"
31 #include "backlight.h"
34 #include "settings_list.h"
38 #include "powermgmt.h"
40 #ifdef HAVE_REMOTE_LCD
41 #include "lcd-remote.h"
44 #include "rbunicode.h"
45 #ifdef HAVE_LCD_BITMAP
46 #include "peakmeter.h"
48 #include "menus/eq_menu.h"
52 #ifdef IPOD_ACCESSORY_PROTOCOL
55 #include "statusbar.h"
56 #ifdef HAVE_TOUCHSCREEN
57 #include "touchscreen.h"
58 #include "ctype.h" /* For isspace() */
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), \
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*[]) \
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, \
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";
204 /* Default theme settings */
205 #define DEFAULT_WPSNAME "cabbiev2"
206 #define DEFAULT_SBSNAME "-"
207 #define DEFAULT_FMS_NAME "-"
209 #ifdef HAVE_LCD_BITMAP
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
226 #define DEFAULT_FONT_HEIGHT 35
228 #define DEFAULT_GLYPHS 250
229 #define MIN_GLYPHS 50
230 #define MAX_GLYPHS 65540
233 #define DEFAULT_FONT_HEIGHT 12
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"
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"
254 #define DEFAULT_ICONSET "tango_icons.12x12"
255 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.12x12"
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 ""
265 #ifdef HAVE_REMOTE_LCD
266 #if LCD_REMOTE_HEIGHT <= 64
267 #define DEFAULT_REMOTE_FONTNAME "08-Rockfont"
269 #define DEFAULT_REMOTE_FONTNAME "-"
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
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
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
)
320 case -1: return str(LANG_AUTOMATIC
);
321 case 0: return str(LANG_OFF
);
324 snprintf(buffer
, buffer_size
, "%d %s", val
, unit
);
328 static int32_t list_pad_getlang(int value
, int unit
)
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
)
343 return str(LANG_OFF
);
345 snprintf(buffer
, buffer_size
, "%d %s", val
, unit
);
349 static int32_t getlang_unit_0_is_off(int value
, int unit
)
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
)
362 return str(LANG_SKIP_OUTRO
);
364 return str(LANG_SKIP_TRACK
);
365 else if (val
% 60 == 0)
366 snprintf(buffer
, buffer_size
, "%d min", val
/60);
368 snprintf(buffer
, buffer_size
, "%d s", val
);
372 static int32_t getlang_unit_0_is_skip_track(int value
, int unit
)
376 return LANG_SKIP_OUTRO
;
378 return LANG_SKIP_TRACK
;
379 else if (value
% 60 == 0)
380 return TALK_ID(value
/60, UNIT_MIN
);
382 return TALK_ID(value
, UNIT_SEC
);
385 #ifdef HAVE_BACKLIGHT
387 #define DEFAULT_BACKLIGHT_TIMEOUT 0
389 #define DEFAULT_BACKLIGHT_TIMEOUT 15
391 static const char* backlight_formatter(char *buffer
, size_t buffer_size
,
392 int val
, const char *unit
)
395 return str(LANG_OFF
);
399 snprintf(buffer
, buffer_size
, "%d %s", val
, unit
);
402 static int32_t backlight_getlang(int value
, int unit
)
409 return TALK_ID(value
, unit
);
413 #ifndef HAVE_WHEEL_ACCELERATION
414 static const char* scanaccel_formatter(char *buffer
, size_t buffer_size
,
415 int val
, const char *unit
)
419 return str(LANG_OFF
);
421 snprintf(buffer
, buffer_size
, "Speed up every %ds", val
);
426 #if CONFIG_CODEC == SWCODEC
427 static void crossfeed_cross_set(int 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
)
438 dsp_set_compressor(&global_settings
.compressor_settings
);
441 static const char* db_format(char* buffer
, size_t buffer_size
, int value
,
446 snprintf(buffer
, buffer_size
, "%s%d.%d %s", value
< 0 ? "-" : "",
447 v
/ 10, v
% 10, unit
);
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
);
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
);
473 #ifdef HAVE_QUICKSCREEN
474 static int find_setting_by_name(char*name
)
477 const struct settings_list
*setting
;
478 if (!strcmp(name
, "-"))
480 while (i
<nb_settings
)
482 setting
= &settings
[i
];
483 if (setting
->cfg_name
&& !strcmp(setting
->cfg_name
, name
))
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
);
503 const struct settings_list
*var
= &settings
[index
];
504 strlcpy(buf
, var
->cfg_name
, buf_len
);
507 static bool qs_is_changed(void* setting
, void* defaultval
)
509 int i
= *(int*)setting
;
510 if (i
< 0 || i
>= nb_settings
)
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
)
519 find_setting(defaultval
, (int*)setting
);
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
532 #define DEFAULT_TOUCHSCREEN_MODE TOUCHSCREEN_BUTTON
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)
547 vals
[count
++] = atoi(value
);
548 while(!isspace(*value
))
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
);
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
));
577 static const char* hotkey_formatter(char* buffer
, size_t buffer_size
, int value
,
583 return str(get_hotkey_lang_id(value
));
585 static int32_t hotkey_getlang(int value
, int unit
)
588 return get_hotkey_lang_id(value
);
590 #endif /* HAVE_HOTKEY */
591 const struct settings_list settings
[] = {
593 SOUND_SETTING(F_NO_WRAP
,volume
, LANG_VOLUME
, "volume", SOUND_VOLUME
),
594 SOUND_SETTING(0, balance
, LANG_BALANCE
, "balance", SOUND_BALANCE
),
596 #ifdef AUDIOHW_HAVE_BASS
597 SOUND_SETTING(F_NO_WRAP
,bass
, LANG_BASS
, "bass", SOUND_BASS
),
599 #ifdef AUDIOHW_HAVE_TREBLE
600 SOUND_SETTING(F_NO_WRAP
,treble
, LANG_TREBLE
, "treble", SOUND_TREBLE
),
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 */
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. */
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
)),
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
)),
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
)),
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
)),
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",
696 CHOICE_SETTING(F_SOUNDSETTING
, channel_config
, LANG_CHANNEL_CONFIGURATION
,
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",
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
719 #ifdef AB_REPEAT_ENABLE
724 ID2P(LANG_OFF
), ID2P(LANG_ALL
), ID2P(LANG_REPEAT_ONE
),
726 #ifdef AB_REPEAT_ENABLE
727 ,ID2P(LANG_REPEAT_AB
)
729 ), /* CHOICE_SETTING( repeat_mode ) */
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
}}}},
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),
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),
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
),
760 OFFON_SETTING(0, flip_display
, LANG_FLIP_DISPLAY
, false, "flip display",
764 CHOICE_SETTING(F_TEMPVAR
|F_THEMESETTING
, cursor_style
, LANG_INVERT_CURSOR
,
765 #ifdef HAVE_LCD_COLOR
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
)),
773 1, "selector type", "pointer,bar (inverse)", NULL
, 2,
774 ID2P(LANG_INVERT_CURSOR_POINTER
),
775 ID2P(LANG_INVERT_CURSOR_BAR
)),
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
)),
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,
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),
799 #if CONFIG_KEYPAD == RECORDER_PAD
800 OFFON_SETTING(F_THEMESETTING
,buttonbar
, LANG_BUTTON_BAR
,true,"buttonbar", NULL
),
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
)),
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
)),
814 #endif /* HAVE_LCD_BITMAP */
815 OFFON_SETTING(0,show_icons
, LANG_SHOW_ICONS
,true,"show icons", NULL
),
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
,
830 "max files in playlist", UNIT_INT
, 1000, 32000, 1000,
832 INT_SETTING(F_BANFROMQS
, max_files_in_dir
, LANG_MAX_FILES_IN_DIR
,
838 "max files in dir", UNIT_INT
, 50, 10000, 50,
840 /* use this setting for user code even if there's no exchangable battery
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
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 */
865 OFFON_SETTING(NVRAM(1), car_adapter_mode
,
866 LANG_CAR_ADAPTER_MODE
, false, "car adapter mode", NULL
),
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
)),
874 #ifdef HAVE_ACCESSORY_SUPPLY
875 OFFON_SETTING(0, accessory_supply
, LANG_ACCESSORY_SUPPLY
,
876 true, "accessory power supply", accessory_supply_set
),
878 #ifdef HAVE_LINEOUT_POWEROFF
879 OFFON_SETTING(0, lineout_active
, LANG_LINEOUT_ONOFF
,
880 true, "lineout", lineout_set
),
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),
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
)),
894 #ifdef HAVE_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),
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),
918 #ifdef HAVE_REMOTE_LCD_TICKING
919 OFFON_SETTING(0, remote_reduce_ticking
, LANG_REDUCE_TICKING
,
920 false,"remote reduce ticking", NULL
),
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
),
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
),
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
),
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
),
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
),
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
,
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
,
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
),
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 */
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
)),
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
)),
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
),
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
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,
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
),
1153 #if CONFIG_CODEC == MAS3507D
1154 OFFON_SETTING(F_SOUNDSETTING
, line_in
,LANG_LINE_IN
,false,"line in",NULL
),
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
1177 STRINGCHOICE_SETTING(F_RECSETTING
, rec_timesplit
, LANG_SPLIT_TIME
, 0,
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",
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,
1192 "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB,"
1193 "256MB,512MB,650MB,700MB,1GB,1.5GB,1.75GB",
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
},
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],
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
)
1235 2, ID2P(LANG_OFF
), ID2P(LANG_ON
)
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 **/
1272 /* (no settings yet) */
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
},
1278 /* (no settings yet) */
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,
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
),
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
),
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",
1343 ID2P(LANG_SET_BOOL_NO
),
1345 ID2P(LANG_AUTORESUME_CUSTOM
)),
1346 TEXT_SETTING(0, autoresume_paths
, "autoresume next track paths",
1347 "/podcast:/podcasts", NULL
, NULL
),
1350 OFFON_SETTING(0, runtimedb
, LANG_RUNTIMEDB_ACTIVE
, false,
1351 "gather runtime data", NULL
),
1354 #if CONFIG_CODEC == SWCODEC
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
1372 CHOICE_SETTING(F_SOUNDSETTING
, crossfade
, LANG_CROSSFADE_ENABLE
, 0,
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
,
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
,
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
)),
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
),
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
),
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
),
1474 OFFON_SETTING(F_SOUNDSETTING
, dithering_enabled
, LANG_DITHERING
, false,
1475 "dithering enabled", dsp_dither_enable
),
1477 #ifdef HAVE_PITCHCONTROL
1479 OFFON_SETTING(F_SOUNDSETTING
, timestretch_enabled
, LANG_TIMESTRETCH
, false,
1480 "timestretch enabled", dsp_timestretch_enable
),
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
,
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
),
1508 #ifdef AUDIOHW_HAVE_BASS_CUTOFF
1509 SOUND_SETTING(F_NO_WRAP
, bass_cutoff
, LANG_BASS_CUTOFF
,
1510 "bass cutoff", SOUND_BASS_CUTOFF
),
1512 #ifdef AUDIOHW_HAVE_TREBLE_CUTOFF
1513 SOUND_SETTING(F_NO_WRAP
, treble_cutoff
, LANG_TREBLE_CUTOFF
,
1514 "treble cutoff", SOUND_TREBLE_CUTOFF
),
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),
1522 #ifdef HAVE_TAGCACHE
1523 #ifdef HAVE_TC_RAMCACHE
1524 OFFON_SETTING(F_BANFROMQS
,tagcache_ram
,LANG_TAGCACHE_RAM
,false,"tagcache_ram",NULL
),
1526 OFFON_SETTING(F_BANFROMQS
, tagcache_autoupdate
, LANG_TAGCACHE_AUTOUPDATE
, false,
1527 "tagcache_autoupdate", NULL
),
1529 CHOICE_SETTING(0, default_codepage
, LANG_DEFAULT_CODEPAGE
, 0,
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",
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",
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
)),
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
)),
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
)),
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
},
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
)),
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
),
1623 INT_SETTING(0, pause_rewind
, LANG_PAUSE_REWIND
, 0,
1624 "rewind duration on pause", UNIT_SEC
, 0, 15, 1, NULL
, NULL
,
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
)),
1634 OFFON_SETTING(F_BANFROMQS
, audioscrobbler
, LANG_AUDIOSCROBBLER
, false,
1635 "Last.fm Logging", NULL
),
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"),
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,
1653 #ifdef HAVE_REMOTE_LCD
1654 TEXT_SETTING(F_THEMESETTING
, remote_font_file
, "remote font",
1655 DEFAULT_REMOTE_FONTNAME
, FONT_DIR
"/", ".fnt"),
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"),
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"),
1669 TEXT_SETTING(0,lang_file
,"lang","",LANG_DIR
"/",".lng"),
1671 TEXT_SETTING(F_THEMESETTING
,backdrop_file
,"backdrop",
1672 DEFAULT_BACKDROP
, NULL
, NULL
),
1674 #ifdef HAVE_LCD_BITMAP
1675 TEXT_SETTING(0,kbd_file
,"kbd","-",ROCKBOX_DIR
"/",".kbd"),
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
)),
1682 OFFON_SETTING(F_BANFROMQS
,cuesheet
,LANG_CUESHEET_ENABLE
,false,"cuesheet support",
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
1696 #define START_DB_COUNT 0
1699 #ifdef HAVE_RECORDING
1700 #define START_REC_COUNT 1
1703 #define START_REC_COUNT 0
1706 #define START_TUNER_COUNT 1
1709 #define START_TUNER_COUNT 0
1712 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1713 #define START_PF_COUNT 1
1716 #define START_PF_COUNT 0
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
),
1725 ID2P(LANG_RESUME_PLAYBACK
), ID2P(LANG_SETTINGS
),
1726 #ifdef HAVE_RECORDING
1727 ID2P(LANG_RECORDING
),
1730 ID2P(LANG_FM_RADIO
),
1732 ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS
)
1733 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1734 ,ID2P(LANG_ONPLAY_PICTUREFLOW
)
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"),
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"),
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),
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
),
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
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
),
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
),
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
),
1801 OFFON_SETTING(0, keyclick_repeats
, LANG_KEYCLICK_REPEATS
, false,
1802 "keyclick repeats", NULL
),
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
)),
1819 #ifdef HAVE_QUICKSCREEN
1820 CUSTOM_SETTING(0, qs_items
[QUICKSCREEN_TOP
], LANG_TOP_QS_ITEM
,
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
,
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
),
1840 OFFON_SETTING(0, speaker_enabled
, LANG_ENABLE_SPEAKER
, false, "speaker",
1841 audiohw_enable_speaker
),
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
),
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
),
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
1871 #ifdef HAVE_USB_HID_MOUSE
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
)
1881 ), /* CHOICE_SETTING( usb_keypad_mode ) */
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
),
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"),
1896 #ifdef HAVE_MORSE_INPUT
1897 OFFON_SETTING(0, morse_input
, LANG_MORSE_INPUT
, false, "morse input", NULL
),
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
1907 ,UNIT_INT
, hotkey_formatter
, hotkey_getlang
, NULL
,
1908 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1914 HOTKEY_VIEW_PLAYLIST
, HOTKEY_SHOW_TRACK_INFO
, HOTKEY_PITCHSCREEN
,
1915 HOTKEY_OPEN_WITH
, HOTKEY_DELETE
1916 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1917 , HOTKEY_PICTUREFLOW
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
),
1927 #if CONFIG_CODEC == SWCODEC
1928 INT_SETTING(0, resume_rewind
, LANG_RESUME_REWIND
, 0,
1929 "resume rewind", UNIT_SEC
, 0, 60, 5,
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
;