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 "cabbiev2"
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 == 96) && (LCD_WIDTH == 96) /* sandisk sansa clip zip */
218 #define DEFAULT_FONT_HEIGHT 8
219 #define DEFAULT_FONTNAME "08-Rockfont"
220 #elif LCD_HEIGHT <= 220
221 #define DEFAULT_FONT_HEIGHT 12
222 #elif LCD_HEIGHT <= 320
223 #define DEFAULT_FONT_HEIGHT 15
224 #elif LCD_HEIGHT <= 400
225 #define DEFAULT_FONT_HEIGHT 16
226 #elif LCD_HEIGHT <= 480 && LCD_WIDTH < 800
227 #define DEFAULT_FONT_HEIGHT 27
229 #define DEFAULT_FONT_HEIGHT 35
231 #define DEFAULT_GLYPHS 250
232 #define MIN_GLYPHS 50
233 #define MAX_GLYPHS 65540
236 #define DEFAULT_FONT_HEIGHT 12
239 #ifndef DEFAULT_FONTNAME
240 /* ugly expansion needed */
241 #define _EXPAND2(x) #x
242 #define _EXPAND(x) _EXPAND2(x)
243 #define DEFAULT_FONTNAME _EXPAND(DEFAULT_FONT_HEIGHT) "-Adobe-Helvetica"
246 #ifdef HAVE_LCD_COLOR
247 #if DEFAULT_FONT_HEIGHT >= 31
248 #define DEFAULT_ICONSET "tango_icons.32x32"
249 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.32x32"
250 #elif DEFAULT_FONT_HEIGHT >= 23
251 #define DEFAULT_ICONSET "tango_icons.24x24"
252 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.24x24"
253 #elif DEFAULT_FONT_HEIGHT >= 15
254 #define DEFAULT_ICONSET "tango_icons.16x16"
255 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.16x16"
256 #elif DEFAULT_FONT_HEIGHT >= 11
257 #define DEFAULT_ICONSET "tango_icons.12x12"
258 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.12x12"
259 #elif DEFAULT_FONT_HEIGHT >= 7
260 #define DEFAULT_ICONSET "tango_icons.8x8"
261 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.8x8"
263 #elif LCD_DEPTH > 1 /* greyscale */
264 #define DEFAULT_ICONSET "tango_small_mono"
265 #define DEFAULT_VIEWERS_ICONSET "tango_small_viewers_mono"
266 #else /* monochrome */
267 #define DEFAULT_ICONSET ""
268 #define DEFAULT_VIEWERS_ICONSET ""
271 #ifdef HAVE_REMOTE_LCD
272 #if LCD_REMOTE_HEIGHT <= 64
273 #define DEFAULT_REMOTE_FONTNAME "08-Rockfont"
275 #define DEFAULT_REMOTE_FONTNAME "-"
277 #endif /* HAVE_REMOTE_LCD */
279 #define DEFAULT_THEME_FOREGROUND LCD_RGBPACK(0xce, 0xcf, 0xce)
280 #define DEFAULT_THEME_BACKGROUND LCD_RGBPACK(0x00, 0x00, 0x00)
281 #define DEFAULT_THEME_SELECTOR_START LCD_RGBPACK(0xff, 0xeb, 0x9c)
282 #define DEFAULT_THEME_SELECTOR_END LCD_RGBPACK(0xb5, 0x8e, 0x00)
283 #define DEFAULT_THEME_SELECTOR_TEXT LCD_RGBPACK(0x00, 0x00, 0x00)
285 #define DEFAULT_BACKDROP BACKDROP_DIR "/cabbiev2.bmp"
287 #ifdef HAVE_RECORDING
288 /* these should be in the config.h files */
289 #if CONFIG_CODEC == MAS3587F
290 # define DEFAULT_REC_MIC_GAIN 8
291 # define DEFAULT_REC_LEFT_GAIN 2
292 # define DEFAULT_REC_RIGHT_GAIN 2
293 #elif CONFIG_CODEC == SWCODEC
295 # define DEFAULT_REC_MIC_GAIN 16
296 # define DEFAULT_REC_LEFT_GAIN 0
297 # define DEFAULT_REC_RIGHT_GAIN 0
298 # elif defined(HAVE_TLV320)
299 # define DEFAULT_REC_MIC_GAIN 0
300 # define DEFAULT_REC_LEFT_GAIN 0
301 # define DEFAULT_REC_RIGHT_GAIN 0
302 # elif defined(HAVE_WM8975)
303 # define DEFAULT_REC_MIC_GAIN 16
304 # define DEFAULT_REC_LEFT_GAIN 0
305 # define DEFAULT_REC_RIGHT_GAIN 0
306 # elif defined(HAVE_WM8758)
307 # define DEFAULT_REC_MIC_GAIN 16
308 # define DEFAULT_REC_LEFT_GAIN 0
309 # define DEFAULT_REC_RIGHT_GAIN 0
310 # elif defined(HAVE_WM8731)
311 # define DEFAULT_REC_MIC_GAIN 16
312 # define DEFAULT_REC_LEFT_GAIN 0
313 # define DEFAULT_REC_RIGHT_GAIN 0
317 #endif /* HAVE_RECORDING */
319 #if (CONFIG_PLATFORM & PLATFORM_ANDROID)
320 #define DEFAULT_TAGCACHE_SCAN_PATHS "/sdcard"
322 #define DEFAULT_TAGCACHE_SCAN_PATHS "/"
325 #ifdef HAVE_TOUCHSCREEN
327 static const char* list_pad_formatter(char *buffer
, size_t buffer_size
,
328 int val
, const char *unit
)
332 case -1: return str(LANG_AUTOMATIC
);
333 case 0: return str(LANG_OFF
);
336 snprintf(buffer
, buffer_size
, "%d %s", val
, unit
);
340 static int32_t list_pad_getlang(int value
, int unit
)
344 case -1: return LANG_AUTOMATIC
;
345 case 0: return LANG_OFF
;
346 default: return TALK_ID(value
, unit
);
350 #endif /* HAVE_TOUCHSCREEN */
351 static const char* formatter_unit_0_is_off(char *buffer
, size_t buffer_size
,
352 int val
, const char *unit
)
355 return str(LANG_OFF
);
357 snprintf(buffer
, buffer_size
, "%d %s", val
, unit
);
361 static int32_t getlang_unit_0_is_off(int value
, int unit
)
366 return TALK_ID(value
,unit
);
369 static const char* formatter_unit_0_is_skip_track(char *buffer
, size_t buffer_size
,
370 int val
, const char *unit
)
374 return str(LANG_SKIP_OUTRO
);
376 return str(LANG_SKIP_TRACK
);
377 else if (val
% 60 == 0)
378 snprintf(buffer
, buffer_size
, "%d min", val
/60);
380 snprintf(buffer
, buffer_size
, "%d s", val
);
384 static int32_t getlang_unit_0_is_skip_track(int value
, int unit
)
388 return LANG_SKIP_OUTRO
;
390 return LANG_SKIP_TRACK
;
391 else if (value
% 60 == 0)
392 return TALK_ID(value
/60, UNIT_MIN
);
394 return TALK_ID(value
, UNIT_SEC
);
397 #ifdef HAVE_BACKLIGHT
399 #define DEFAULT_BACKLIGHT_TIMEOUT 0
401 #define DEFAULT_BACKLIGHT_TIMEOUT 15
403 static const char* backlight_formatter(char *buffer
, size_t buffer_size
,
404 int val
, const char *unit
)
407 return str(LANG_OFF
);
411 snprintf(buffer
, buffer_size
, "%d %s", val
, unit
);
414 static int32_t backlight_getlang(int value
, int unit
)
421 return TALK_ID(value
, unit
);
425 #ifndef HAVE_WHEEL_ACCELERATION
426 static const char* scanaccel_formatter(char *buffer
, size_t buffer_size
,
427 int val
, const char *unit
)
431 return str(LANG_OFF
);
433 snprintf(buffer
, buffer_size
, "Speed up every %ds", val
);
438 #if CONFIG_CODEC == SWCODEC
439 static void crossfeed_cross_set(int val
)
442 dsp_set_crossfeed_cross_params(global_settings
.crossfeed_cross_gain
,
443 global_settings
.crossfeed_hf_attenuation
,
444 global_settings
.crossfeed_hf_cutoff
);
447 static void compressor_set(int val
)
450 dsp_set_compressor(&global_settings
.compressor_settings
);
453 static const char* db_format(char* buffer
, size_t buffer_size
, int value
,
458 snprintf(buffer
, buffer_size
, "%s%d.%d %s", value
< 0 ? "-" : "",
459 v
/ 10, v
% 10, unit
);
463 static int32_t get_dec_talkid(int value
, int unit
)
465 return TALK_ID_DECIMAL(value
, 1, unit
);
468 static int32_t get_precut_talkid(int value
, int unit
)
470 return TALK_ID_DECIMAL(-value
, 1, unit
);
474 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
475 static void set_mdb_enable(bool value
)
477 sound_set_mdb_enable((int)value
);
479 static void set_superbass(bool value
)
481 sound_set_superbass((int)value
);
485 #ifdef HAVE_QUICKSCREEN
486 static int find_setting_by_name(char*name
)
489 const struct settings_list
*setting
;
490 if (!strcmp(name
, "-"))
492 while (i
<nb_settings
)
494 setting
= &settings
[i
];
495 if (setting
->cfg_name
&& !strcmp(setting
->cfg_name
, name
))
503 static void qs_load_from_cfg(void* var
, char*value
)
505 *(int*)var
= find_setting_by_name(value
);
507 static char* qs_write_to_cfg(void* setting
, char*buf
, int buf_len
)
509 int index
= *(int*)setting
;
510 if (index
< 0 || index
>= nb_settings
- 1)
512 strlcpy(buf
, "-", buf_len
);
515 const struct settings_list
*var
= &settings
[index
];
516 strlcpy(buf
, var
->cfg_name
, buf_len
);
519 static bool qs_is_changed(void* setting
, void* defaultval
)
521 int i
= *(int*)setting
;
522 if (i
< 0 || i
>= nb_settings
)
524 const struct settings_list
*var
= &settings
[i
];
525 return var
!= find_setting(defaultval
, NULL
);
527 static void qs_set_default(void* setting
, void* defaultval
)
529 if (defaultval
== NULL
)
531 find_setting(defaultval
, (int*)setting
);
534 #ifdef HAVE_TOUCHSCREEN
536 #if defined(APPLICATION) \
537 || defined(ONDA_VX747) \
538 || defined(ONDA_VX767) \
539 || defined(ONDA_VX747P) \
540 || defined(ONDA_VX777)
542 #define DEFAULT_TOUCHSCREEN_MODE TOUCHSCREEN_POINT
544 #define DEFAULT_TOUCHSCREEN_MODE TOUCHSCREEN_BUTTON
547 static void tsc_load_from_cfg(void* setting
, char*value
)
549 struct touchscreen_parameter
*var
= (struct touchscreen_parameter
*) setting
;
551 /* Replacement for sscanf(value, "%d ..., &var->A, ...); */
552 int vals
[7], count
= 0;
553 while(*value
!= 0 && count
< 7)
559 vals
[count
++] = atoi(value
);
560 while(!isspace(*value
))
570 var
->divider
= vals
[6];
573 static char* tsc_write_to_cfg(void* setting
, char*buf
, int buf_len
)
575 const struct touchscreen_parameter
*var
= (const struct touchscreen_parameter
*) setting
;
576 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
);
579 static bool tsc_is_changed(void* setting
, void* defaultval
)
581 return memcmp(setting
, defaultval
, sizeof(struct touchscreen_parameter
)) != 0;
583 static void tsc_set_default(void* setting
, void* defaultval
)
585 memcpy(setting
, defaultval
, sizeof(struct touchscreen_parameter
));
589 static const char* hotkey_formatter(char* buffer
, size_t buffer_size
, int value
,
595 return str(get_hotkey_lang_id(value
));
597 static int32_t hotkey_getlang(int value
, int unit
)
600 return get_hotkey_lang_id(value
);
602 #endif /* HAVE_HOTKEY */
603 const struct settings_list settings
[] = {
605 SOUND_SETTING(F_NO_WRAP
,volume
, LANG_VOLUME
, "volume", SOUND_VOLUME
),
606 SOUND_SETTING(0, balance
, LANG_BALANCE
, "balance", SOUND_BALANCE
),
608 #ifdef AUDIOHW_HAVE_BASS
609 SOUND_SETTING(F_NO_WRAP
,bass
, LANG_BASS
, "bass", SOUND_BASS
),
611 #ifdef AUDIOHW_HAVE_TREBLE
612 SOUND_SETTING(F_NO_WRAP
,treble
, LANG_TREBLE
, "treble", SOUND_TREBLE
),
614 /* Hardware EQ tone controls */
615 #ifdef AUDIOHW_HAVE_EQ
616 /* Band gain is generic */
617 SOUND_SETTING(F_NO_WRAP
, hw_eq_bands
[AUDIOHW_EQ_BAND1
].gain
,
618 LANG_HW_EQ_GAIN
, "tone band1 gain", SOUND_EQ_BAND1_GAIN
),
619 #ifdef AUDIOHW_HAVE_EQ_BAND2
620 SOUND_SETTING(F_NO_WRAP
, hw_eq_bands
[AUDIOHW_EQ_BAND2
].gain
,
621 LANG_HW_EQ_GAIN
, "tone band2 gain", SOUND_EQ_BAND2_GAIN
),
622 #endif /* AUDIOHW_HAVE_EQ_BAND2 */
623 #ifdef AUDIOHW_HAVE_EQ_BAND3
624 SOUND_SETTING(F_NO_WRAP
, hw_eq_bands
[AUDIOHW_EQ_BAND3
].gain
,
625 LANG_HW_EQ_GAIN
, "tone band3 gain", SOUND_EQ_BAND3_GAIN
),
626 #endif /* AUDIOHW_HAVE_EQ_BAND3 */
627 #ifdef AUDIOHW_HAVE_EQ_BAND4
628 SOUND_SETTING(F_NO_WRAP
, hw_eq_bands
[AUDIOHW_EQ_BAND4
].gain
,
629 LANG_HW_EQ_GAIN
, "tone band4 gain", SOUND_EQ_BAND4_GAIN
),
630 #endif /* AUDIOHW_HAVE_EQ_BAND4 */
631 #ifdef AUDIOHW_HAVE_EQ_BAND5
632 SOUND_SETTING(F_NO_WRAP
, hw_eq_bands
[AUDIOHW_EQ_BAND5
].gain
,
633 LANG_HW_EQ_GAIN
, "tone band5 gain", SOUND_EQ_BAND5_GAIN
),
634 #endif /* AUDIOHW_HAVE_EQ_BAND5 */
636 /* Frequencies vary with samplerate but at least the user has an idea
637 * about the bands and it will be correct with normal playback rates. */
639 STRINGCHOICE_SETTING(F_SOUNDSETTING
,
640 hw_eq_bands
[AUDIOHW_EQ_BAND1
].frequency
,
641 LANG_HW_EQ_FREQUENCY
, 0,"tone band1 frequency",
642 "80 Hz,105 Hz,135 Hz,175 Hz",
643 sound_set_hw_eq_band1_frequency
, 4,
644 TALK_ID(80, UNIT_HERTZ
), TALK_ID(105, UNIT_HERTZ
),
645 TALK_ID(135, UNIT_HERTZ
), TALK_ID(175, UNIT_HERTZ
)),
647 STRINGCHOICE_SETTING(F_SOUNDSETTING
,
648 hw_eq_bands
[AUDIOHW_EQ_BAND2
].frequency
,
649 LANG_HW_EQ_FREQUENCY
, 0,"tone band2 frequency",
650 "230 Hz,300 Hz,385 Hz,500 Hz",
651 sound_set_hw_eq_band2_frequency
, 4,
652 TALK_ID(230, UNIT_HERTZ
), TALK_ID(300, UNIT_HERTZ
),
653 TALK_ID(385, UNIT_HERTZ
), TALK_ID(500, UNIT_HERTZ
)),
654 CHOICE_SETTING(F_SOUNDSETTING
, hw_eq_bands
[AUDIOHW_EQ_BAND2
].width
,
655 LANG_HW_EQ_WIDTH
, 0, "tone band2 width", "narrow,wide",
656 sound_set_hw_eq_band2_width
, 2,
657 ID2P(LANG_HW_EQ_WIDTH_NARROW
), ID2P(LANG_HW_EQ_WIDTH_WIDE
)),
659 STRINGCHOICE_SETTING(F_SOUNDSETTING
,
660 hw_eq_bands
[AUDIOHW_EQ_BAND3
].frequency
,
661 LANG_HW_EQ_FREQUENCY
, 0, "tone band3 frequency",
662 "650 Hz,850 Hz,1.1 kHz,1.4 kHz",
663 sound_set_hw_eq_band3_frequency
, 4,
664 TALK_ID(650, UNIT_HERTZ
), TALK_ID(850, UNIT_HERTZ
),
665 TALK_ID_DECIMAL(11, 1, UNIT_KHZ
),
666 TALK_ID_DECIMAL(14, 1, UNIT_KHZ
)),
667 CHOICE_SETTING(F_SOUNDSETTING
,hw_eq_bands
[AUDIOHW_EQ_BAND3
].width
,
668 LANG_HW_EQ_WIDTH
, 0, "tone band3 width", "narrow,wide",
669 sound_set_hw_eq_band3_width
, 2,
670 ID2P(LANG_HW_EQ_WIDTH_NARROW
), ID2P(LANG_HW_EQ_WIDTH_WIDE
)),
672 STRINGCHOICE_SETTING(F_SOUNDSETTING
,
673 hw_eq_bands
[AUDIOHW_EQ_BAND4
].frequency
,
674 LANG_HW_EQ_FREQUENCY
, 0, "tone band4 frequency",
675 "1.8 kHz,2.4 kHz,3.2 kHz,4.1 kHz",
676 sound_set_hw_eq_band4_frequency
, 4,
677 TALK_ID_DECIMAL(18, 1, UNIT_KHZ
),
678 TALK_ID_DECIMAL(24, 1, UNIT_KHZ
),
679 TALK_ID_DECIMAL(32, 1, UNIT_KHZ
),
680 TALK_ID_DECIMAL(41, 1, UNIT_KHZ
)),
681 CHOICE_SETTING(F_SOUNDSETTING
, hw_eq_bands
[AUDIOHW_EQ_BAND4
].width
,
682 LANG_HW_EQ_WIDTH
, 0, "tone band4 width", "narrow,wide",
683 sound_set_hw_eq_band4_width
, 2,
684 ID2P(LANG_HW_EQ_WIDTH_NARROW
), ID2P(LANG_HW_EQ_WIDTH_WIDE
)),
686 STRINGCHOICE_SETTING(F_SOUNDSETTING
,
687 hw_eq_bands
[AUDIOHW_EQ_BAND5
].frequency
,
688 LANG_HW_EQ_FREQUENCY
, 0, "tone band5 frequency",
689 "5.3 kHz,6.9 kHz,9.0 kHz,11.7 kHz",
690 sound_set_hw_eq_band5_frequency
, 4,
691 TALK_ID_DECIMAL(53, 1, UNIT_KHZ
),
692 TALK_ID_DECIMAL(69, 1, UNIT_KHZ
),
693 TALK_ID_DECIMAL(90, 1, UNIT_KHZ
),
694 TALK_ID_DECIMAL(117, 1, UNIT_KHZ
)),
695 #endif /* HAVE_WM8978 */
696 #endif /* AUDIOHW_HAVE_EQ */
697 /* 3-d enhancement effect */
698 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
699 SOUND_SETTING(0,loudness
, LANG_LOUDNESS
, "loudness", SOUND_LOUDNESS
),
700 STRINGCHOICE_SETTING(F_SOUNDSETTING
,avc
,LANG_AUTOVOL
,0,"auto volume",
701 "off,20ms,2,4,8,", sound_set_avc
, 5,
702 LANG_OFF
,TALK_ID(20, UNIT_MS
),TALK_ID(2, UNIT_SEC
),
703 TALK_ID(4, UNIT_SEC
),TALK_ID(8, UNIT_SEC
)),
704 OFFON_SETTING(F_SOUNDSETTING
, superbass
, LANG_SUPERBASS
, false, "superbass",
708 CHOICE_SETTING(F_SOUNDSETTING
, channel_config
, LANG_CHANNEL_CONFIGURATION
,
710 "stereo,mono,custom,mono left,mono right,karaoke",
711 sound_set_channels
, 6,
712 ID2P(LANG_CHANNEL_STEREO
), ID2P(LANG_CHANNEL_MONO
),
713 ID2P(LANG_CHANNEL_CUSTOM
), ID2P(LANG_CHANNEL_LEFT
),
714 ID2P(LANG_CHANNEL_RIGHT
), ID2P(LANG_CHANNEL_KARAOKE
)),
715 SOUND_SETTING(F_SOUNDSETTING
, stereo_width
, LANG_STEREO_WIDTH
,
716 "stereo_width", SOUND_STEREO_WIDTH
),
717 #ifdef AUDIOHW_HAVE_DEPTH_3D
718 SOUND_SETTING(0,depth_3d
, LANG_DEPTH_3D
, "3-d enhancement",
722 OFFON_SETTING(0, playlist_shuffle
, LANG_SHUFFLE
, false, "shuffle", NULL
),
723 SYSTEM_SETTING(NVRAM(4), resume_index
, -1),
724 SYSTEM_SETTING(NVRAM(4), resume_crc32
, -1),
725 SYSTEM_SETTING(NVRAM(4), resume_offset
, -1),
726 CHOICE_SETTING(0, repeat_mode
, LANG_REPEAT
, REPEAT_OFF
, "repeat",
727 "off,all,one,shuffle"
728 #ifdef AB_REPEAT_ENABLE
732 #ifdef AB_REPEAT_ENABLE
737 ID2P(LANG_OFF
), ID2P(LANG_ALL
), ID2P(LANG_REPEAT_ONE
),
739 #ifdef AB_REPEAT_ENABLE
740 ,ID2P(LANG_REPEAT_AB
)
742 ), /* CHOICE_SETTING( repeat_mode ) */
744 #ifdef HAVE_LCD_CONTRAST
745 /* its easier to leave this one un-macro()ed for the time being */
746 { F_T_INT
|F_DEF_ISFUNC
|F_INT_SETTING
, &global_settings
.contrast
,
747 LANG_CONTRAST
, FUNCTYPE(lcd_default_contrast
), "contrast", NULL
, {
748 .int_setting
= (struct int_setting
[]) {
749 { lcd_set_contrast
, UNIT_INT
, MIN_CONTRAST_SETTING
,
750 MAX_CONTRAST_SETTING
, 1, NULL
, NULL
}}}},
752 #ifdef HAVE_BACKLIGHT
753 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, backlight_timeout
, LANG_BACKLIGHT
,
754 DEFAULT_BACKLIGHT_TIMEOUT
,
755 "backlight timeout", off_on
, UNIT_SEC
, backlight_formatter
,
756 backlight_getlang
, backlight_set_timeout
, 20,
757 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
759 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, backlight_timeout_plugged
,
760 LANG_BACKLIGHT_ON_WHEN_CHARGING
, 10,
761 "backlight timeout plugged", off_on
, UNIT_SEC
,
762 backlight_formatter
, backlight_getlang
,
763 backlight_set_timeout_plugged
, 20,
764 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
766 #endif /* HAVE_BACKLIGHT */
767 #ifdef HAVE_LCD_BITMAP
768 #ifdef HAVE_LCD_INVERT
769 BOOL_SETTING(0, invert
, LANG_INVERT
, false ,"invert", off_on
,
770 LANG_INVERT_LCD_INVERSE
, LANG_NORMAL
, lcd_set_invert_display
),
773 OFFON_SETTING(0, flip_display
, LANG_FLIP_DISPLAY
, false, "flip display",
777 CHOICE_SETTING(F_TEMPVAR
|F_THEMESETTING
, cursor_style
, LANG_INVERT_CURSOR
,
778 #ifdef HAVE_LCD_COLOR
780 "pointer,bar (inverse),bar (color),bar (gradient)", NULL
, 4,
781 ID2P(LANG_INVERT_CURSOR_POINTER
),
782 ID2P(LANG_INVERT_CURSOR_BAR
),
783 ID2P(LANG_INVERT_CURSOR_COLOR
),
784 ID2P(LANG_INVERT_CURSOR_GRADIENT
)),
786 1, "selector type", "pointer,bar (inverse)", NULL
, 2,
787 ID2P(LANG_INVERT_CURSOR_POINTER
),
788 ID2P(LANG_INVERT_CURSOR_BAR
)),
790 CHOICE_SETTING(F_THEMESETTING
|F_TEMPVAR
, statusbar
,
791 LANG_STATUS_BAR
, STATUSBAR_TOP
, "statusbar","off,top,bottom",
792 NULL
, 3, ID2P(LANG_OFF
), ID2P(LANG_STATUSBAR_TOP
),
793 ID2P(LANG_STATUSBAR_BOTTOM
)),
794 #ifdef HAVE_REMOTE_LCD
795 CHOICE_SETTING(F_THEMESETTING
|F_TEMPVAR
, remote_statusbar
,
796 LANG_REMOTE_STATUSBAR
, STATUSBAR_TOP
, "remote statusbar","off,top,bottom",
797 NULL
, 3, ID2P(LANG_OFF
), ID2P(LANG_STATUSBAR_TOP
),
798 ID2P(LANG_STATUSBAR_BOTTOM
)),
800 CHOICE_SETTING(F_THEMESETTING
|F_TEMPVAR
, scrollbar
,
801 LANG_SCROLL_BAR
, SCROLLBAR_LEFT
, "scrollbar","off,left,right",
802 NULL
, 3, ID2P(LANG_OFF
), ID2P(LANG_LEFT
), ID2P(LANG_RIGHT
)),
803 INT_SETTING(F_THEMESETTING
, scrollbar_width
, LANG_SCROLLBAR_WIDTH
, 6,
804 "scrollbar width",UNIT_INT
, 3, MAX(LCD_WIDTH
/10,25), 1,
806 #ifdef HAVE_TOUCHSCREEN
807 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, list_line_padding
, LANG_LIST_LINE_PADDING
,
808 -1, "list padding", "auto,off", UNIT_PIXEL
, list_pad_formatter
,
809 list_pad_getlang
, NULL
, 16,
810 -1,0,2,4,6,8,10,12,16,20,24,28,32,38,44,50),
812 #if CONFIG_KEYPAD == RECORDER_PAD
813 OFFON_SETTING(F_THEMESETTING
,buttonbar
, LANG_BUTTON_BAR
,true,"buttonbar", NULL
),
815 CHOICE_SETTING(F_THEMESETTING
, volume_type
, LANG_VOLUME_DISPLAY
, 0,
816 "volume display", graphic_numeric
, NULL
, 2,
817 ID2P(LANG_DISPLAY_GRAPHIC
),
818 ID2P(LANG_DISPLAY_NUMERIC
)),
819 CHOICE_SETTING(F_THEMESETTING
, battery_display
, LANG_BATTERY_DISPLAY
, 0,
820 "battery display", graphic_numeric
, NULL
, 2,
821 ID2P(LANG_DISPLAY_GRAPHIC
), ID2P(LANG_DISPLAY_NUMERIC
)),
823 CHOICE_SETTING(0, timeformat
, LANG_TIMEFORMAT
, 0,
824 "time format", "24hour,12hour", NULL
, 2,
825 ID2P(LANG_24_HOUR_CLOCK
), ID2P(LANG_12_HOUR_CLOCK
)),
827 #endif /* HAVE_LCD_BITMAP */
828 OFFON_SETTING(0,show_icons
, LANG_SHOW_ICONS
,true,"show icons", NULL
),
830 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, poweroff
, LANG_POWEROFF_IDLE
, 10,
831 "idle poweroff", "off", UNIT_MIN
, formatter_unit_0_is_off
,
832 getlang_unit_0_is_off
, set_poweroff_timeout
, 15,
833 0,1,2,3,4,5,6,7,8,9,10,15,30,45,60),
834 SYSTEM_SETTING(NVRAM(4), runtime
, 0),
835 SYSTEM_SETTING(NVRAM(4), topruntime
, 0),
836 INT_SETTING(F_BANFROMQS
, max_files_in_playlist
,
837 LANG_MAX_FILES_IN_PLAYLIST
,
843 "max files in playlist", UNIT_INT
, 1000, 32000, 1000,
845 INT_SETTING(F_BANFROMQS
, max_files_in_dir
, LANG_MAX_FILES_IN_DIR
,
851 "max files in dir", UNIT_INT
, 50, 10000, 50,
853 /* use this setting for user code even if there's no exchangable battery
855 #if BATTERY_CAPACITY_DEFAULT > 0
856 /* define min/max/inc for this file if there's only one battery */
857 #ifndef BATTERY_CAPACITY_MIN
858 #define BATTERY_CAPACITY_MIN BATTERY_CAPACITY_DEFAULT
859 #define BATTERY_CAPACITY_MAX BATTERY_CAPACITY_DEFAULT
860 #define BATTERY_CAPACITY_INC 0
862 #if defined(IPOD_VIDEO) && !defined(SIMULATOR)
863 /* its easier to leave this one un-macro()ed for the time being */
864 { F_T_INT
|F_DEF_ISFUNC
|F_INT_SETTING
, &global_settings
.battery_capacity
,
865 LANG_BATTERY_CAPACITY
, FUNCTYPE(battery_default_capacity
),
866 "battery capacity", NULL
, {
867 .int_setting
= (struct int_setting
[]) {
868 { set_battery_capacity
, UNIT_MAH
, BATTERY_CAPACITY_MIN
,
869 BATTERY_CAPACITY_MAX
, BATTERY_CAPACITY_INC
, NULL
, NULL
}}}},
870 #else /* IPOD_VIDEO */
871 INT_SETTING(0, battery_capacity
, LANG_BATTERY_CAPACITY
,
872 BATTERY_CAPACITY_DEFAULT
, "battery capacity", UNIT_MAH
,
873 BATTERY_CAPACITY_MIN
, BATTERY_CAPACITY_MAX
,
874 BATTERY_CAPACITY_INC
, NULL
, NULL
, set_battery_capacity
),
875 #endif /* IPOD_VIDEO */
878 OFFON_SETTING(NVRAM(1), car_adapter_mode
,
879 LANG_CAR_ADAPTER_MODE
, false, "car adapter mode", NULL
),
881 #ifdef IPOD_ACCESSORY_PROTOCOL
882 CHOICE_SETTING(0, serial_bitrate
, LANG_SERIAL_BITRATE
, 0, "serial bitrate",
883 "auto,9600,19200,38400,57600", iap_bitrate_set
, 5, ID2P(LANG_SERIAL_BITRATE_AUTO
),
884 ID2P(LANG_SERIAL_BITRATE_9600
),ID2P(LANG_SERIAL_BITRATE_19200
),
885 ID2P(LANG_SERIAL_BITRATE_38400
),ID2P(LANG_SERIAL_BITRATE_57600
)),
887 #ifdef HAVE_ACCESSORY_SUPPLY
888 OFFON_SETTING(0, accessory_supply
, LANG_ACCESSORY_SUPPLY
,
889 true, "accessory power supply", accessory_supply_set
),
891 #ifdef HAVE_LINEOUT_POWEROFF
892 OFFON_SETTING(0, lineout_active
, LANG_LINEOUT_ONOFF
,
893 true, "lineout", lineout_set
),
897 OFFON_SETTING(0,fm_force_mono
, LANG_FM_MONO_MODE
,
898 false, "force fm mono", toggle_mono_mode
),
899 SYSTEM_SETTING(NVRAM(4),last_frequency
,0),
902 #if BATTERY_TYPES_COUNT > 1
903 CHOICE_SETTING(0, battery_type
, LANG_BATTERY_TYPE
, 0, "battery type",
904 "alkaline,nimh", NULL
, 2, ID2P(LANG_BATTERY_TYPE_ALKALINE
),
905 ID2P(LANG_BATTERY_TYPE_NIMH
)),
907 #ifdef HAVE_REMOTE_LCD
909 INT_SETTING(0, remote_contrast
, LANG_CONTRAST
,
910 DEFAULT_REMOTE_CONTRAST_SETTING
, "remote contrast", UNIT_INT
,
911 MIN_REMOTE_CONTRAST_SETTING
, MAX_REMOTE_CONTRAST_SETTING
, 1,
912 NULL
, NULL
, lcd_remote_set_contrast
),
913 BOOL_SETTING(0, remote_invert
, LANG_INVERT
, false ,"remote invert", off_on
,
914 LANG_INVERT_LCD_INVERSE
, LANG_NORMAL
,
915 lcd_remote_set_invert_display
),
916 OFFON_SETTING(0,remote_flip_display
, LANG_FLIP_DISPLAY
,
917 false,"remote flip display", NULL
),
918 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, remote_backlight_timeout
,
919 LANG_BACKLIGHT
, 5, "remote backlight timeout", off_on
,
920 UNIT_SEC
, backlight_formatter
, backlight_getlang
,
921 remote_backlight_set_timeout
, 20,
922 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
924 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, remote_backlight_timeout_plugged
,
925 LANG_BACKLIGHT_ON_WHEN_CHARGING
, 10,
926 "remote backlight timeout plugged", off_on
, UNIT_SEC
,
927 backlight_formatter
, backlight_getlang
,
928 remote_backlight_set_timeout_plugged
, 20,
929 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
931 #ifdef HAVE_REMOTE_LCD_TICKING
932 OFFON_SETTING(0, remote_reduce_ticking
, LANG_REDUCE_TICKING
,
933 false,"remote reduce ticking", NULL
),
937 #ifdef HAVE_BACKLIGHT
938 OFFON_SETTING(0, bl_filter_first_keypress
,
939 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS
, false,
940 "backlight filters first keypress", NULL
),
941 #ifdef HAVE_REMOTE_LCD
942 OFFON_SETTING(0, remote_bl_filter_first_keypress
,
943 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS
, false,
944 "backlight filters first remote keypress", NULL
),
946 #endif /* HAVE_BACKLIGHT */
948 /** End of old RTC config block **/
950 #ifdef HAVE_BACKLIGHT
951 OFFON_SETTING(0, caption_backlight
, LANG_CAPTION_BACKLIGHT
,
952 false, "caption backlight", NULL
),
953 #ifdef HAVE_REMOTE_LCD
954 OFFON_SETTING(0, remote_caption_backlight
, LANG_CAPTION_BACKLIGHT
,
955 false, "remote caption backlight", NULL
),
957 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
958 INT_SETTING(F_NO_WRAP
, brightness
, LANG_BRIGHTNESS
,
959 DEFAULT_BRIGHTNESS_SETTING
, "brightness",UNIT_INT
,
960 MIN_BRIGHTNESS_SETTING
, MAX_BRIGHTNESS_SETTING
, 1,
961 NULL
, NULL
, backlight_set_brightness
),
963 /* backlight fading */
964 #if defined(HAVE_BACKLIGHT_FADING_INT_SETTING)
965 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, backlight_fade_in
,
966 LANG_BACKLIGHT_FADE_IN
, 300, "backlight fade in", "off",
967 UNIT_MS
, formatter_unit_0_is_off
, getlang_unit_0_is_off
,
968 backlight_set_fade_in
, 7, 0,100,200,300,500,1000,2000),
969 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, backlight_fade_out
,
970 LANG_BACKLIGHT_FADE_OUT
, 2000, "backlight fade out", "off",
971 UNIT_MS
, formatter_unit_0_is_off
, getlang_unit_0_is_off
,
972 backlight_set_fade_out
, 10,
973 0,100,200,300,500,1000,2000,3000,5000,10000),
974 #elif defined(HAVE_BACKLIGHT_FADING_BOOL_SETTING)
975 OFFON_SETTING(0, backlight_fade_in
, LANG_BACKLIGHT_FADE_IN
,
976 true, "backlight fade in", backlight_set_fade_in
),
977 OFFON_SETTING(0, backlight_fade_out
, LANG_BACKLIGHT_FADE_OUT
,
978 true, "backlight fade out", backlight_set_fade_out
),
980 #endif /* HAVE_BACKLIGHT */
981 INT_SETTING(F_PADTITLE
, scroll_speed
, LANG_SCROLL_SPEED
, 9,"scroll speed",
982 UNIT_INT
, 0, 17, 1, NULL
, NULL
, lcd_scroll_speed
),
983 INT_SETTING(F_PADTITLE
, scroll_delay
, LANG_SCROLL_DELAY
, 1000,
984 "scroll delay", UNIT_MS
, 0, 2500, 100, NULL
,
985 NULL
, lcd_scroll_delay
),
986 INT_SETTING(0, bidir_limit
, LANG_BIDIR_SCROLL
, 50, "bidir limit",
987 UNIT_PERCENT
, 0, 200, 25, NULL
, NULL
, lcd_bidir_scroll
),
988 #ifdef HAVE_REMOTE_LCD
989 INT_SETTING(0, remote_scroll_speed
, LANG_SCROLL_SPEED
, 9,
990 "remote scroll speed", UNIT_INT
, 0,17, 1,
991 NULL
, NULL
, lcd_remote_scroll_speed
),
992 INT_SETTING(0, remote_scroll_step
, LANG_SCROLL_STEP
, 6,
993 "remote scroll step", UNIT_PIXEL
, 1, LCD_REMOTE_WIDTH
, 1, NULL
,
994 NULL
, lcd_remote_scroll_step
),
995 INT_SETTING(0, remote_scroll_delay
, LANG_SCROLL_DELAY
, 1000,
996 "remote scroll delay", UNIT_MS
, 0, 2500, 100, NULL
, NULL
,
997 lcd_remote_scroll_delay
),
998 INT_SETTING(0, remote_bidir_limit
, LANG_BIDIR_SCROLL
, 50,
999 "remote bidir limit", UNIT_PERCENT
, 0, 200, 25, NULL
, NULL
,
1000 lcd_remote_bidir_scroll
),
1002 #ifdef HAVE_LCD_BITMAP
1003 OFFON_SETTING(0, offset_out_of_view
, LANG_SCREEN_SCROLL_VIEW
,
1004 false, "Screen Scrolls Out Of View",
1005 gui_list_screen_scroll_out_of_view
),
1006 INT_SETTING(F_PADTITLE
, scroll_step
, LANG_SCROLL_STEP
, 6, "scroll step",
1007 UNIT_PIXEL
, 1, LCD_WIDTH
, 1, NULL
, NULL
, lcd_scroll_step
),
1008 INT_SETTING(F_PADTITLE
, screen_scroll_step
, LANG_SCREEN_SCROLL_STEP
, 16,
1009 "screen scroll step", UNIT_PIXEL
, 1, LCD_WIDTH
, 1, NULL
, NULL
,
1010 gui_list_screen_scroll_step
),
1011 #endif /* HAVE_LCD_BITMAP */
1012 OFFON_SETTING(0,scroll_paginated
,LANG_SCROLL_PAGINATED
,
1013 false,"scroll paginated",NULL
),
1014 #ifdef HAVE_LCD_COLOR
1016 {F_T_INT
|F_RGB
|F_THEMESETTING
,&global_settings
.fg_color
,-1,
1017 INT(DEFAULT_THEME_FOREGROUND
),"foreground color",NULL
,UNUSED
},
1018 {F_T_INT
|F_RGB
|F_THEMESETTING
,&global_settings
.bg_color
,-1,
1019 INT(DEFAULT_THEME_BACKGROUND
),"background color",NULL
,UNUSED
},
1020 {F_T_INT
|F_RGB
|F_THEMESETTING
,&global_settings
.lss_color
,-1,
1021 INT(DEFAULT_THEME_SELECTOR_START
),"line selector start color",NULL
,
1023 {F_T_INT
|F_RGB
|F_THEMESETTING
,&global_settings
.lse_color
,-1,
1024 INT(DEFAULT_THEME_SELECTOR_END
),"line selector end color",NULL
,UNUSED
},
1025 {F_T_INT
|F_RGB
|F_THEMESETTING
,&global_settings
.lst_color
,-1,
1026 INT(DEFAULT_THEME_SELECTOR_TEXT
),"line selector text color",NULL
,
1031 OFFON_SETTING(0,play_selected
,LANG_PLAY_SELECTED
,true,"play selected",NULL
),
1032 OFFON_SETTING(0,party_mode
,LANG_PARTY_MODE
,false,"party mode",NULL
),
1033 OFFON_SETTING(0,fade_on_stop
,LANG_FADE_ON_STOP
,true,"volume fade",NULL
),
1034 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, ff_rewind_min_step
,
1035 LANG_FFRW_STEP
, 1, "scan min step", NULL
, UNIT_SEC
,
1036 NULL
, NULL
, NULL
, 14, 1,2,3,4,5,6,8,10,15,20,25,30,45,60),
1037 CHOICE_SETTING(0, ff_rewind_accel
, LANG_FFRW_ACCEL
, 2,
1038 "seek acceleration", "very fast,fast,normal,slow,very slow", NULL
, 5,
1039 ID2P(LANG_VERY_FAST
), ID2P(LANG_FAST
), ID2P(LANG_NORMAL
),
1040 ID2P(LANG_SLOW
) , ID2P(LANG_VERY_SLOW
)),
1041 #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_DISK_STORAGE)
1042 STRINGCHOICE_SETTING(0, buffer_margin
, LANG_MP3BUFFER_MARGIN
, 0,"antiskip",
1043 "5s,15s,30s,1min,2min,3min,5min,10min", NULL
, 8,
1044 TALK_ID(5, UNIT_SEC
), TALK_ID(15, UNIT_SEC
),
1045 TALK_ID(30, UNIT_SEC
), TALK_ID(1, UNIT_MIN
),
1046 TALK_ID(2, UNIT_MIN
), TALK_ID(3, UNIT_MIN
),
1047 TALK_ID(5, UNIT_MIN
), TALK_ID(10, UNIT_MIN
)),
1048 #elif defined(HAVE_DISK_STORAGE)
1049 INT_SETTING(0, buffer_margin
, LANG_MP3BUFFER_MARGIN
, 0, "antiskip",
1050 UNIT_SEC
, 0, 7, 1, NULL
, NULL
, audio_set_buffer_margin
),
1053 #ifdef HAVE_DISK_STORAGE
1054 INT_SETTING(0, disk_spindown
, LANG_SPINDOWN
, 5, "disk spindown",
1055 UNIT_SEC
, 3, 254, 1, NULL
, NULL
, storage_spindown
),
1056 #endif /* HAVE_DISK_STORAGE */
1058 TEXT_SETTING(0, start_directory
, "start directory", "/", NULL
, NULL
),
1059 CHOICE_SETTING(0, dirfilter
, LANG_FILTER
, SHOW_SUPPORTED
, "show files",
1060 "all,supported,music,playlists", NULL
, 4, ID2P(LANG_ALL
),
1061 ID2P(LANG_FILTER_SUPPORTED
), ID2P(LANG_FILTER_MUSIC
),
1062 ID2P(LANG_PLAYLISTS
)),
1064 OFFON_SETTING(0, sort_case
, LANG_SORT_CASE
, false, "sort case", NULL
),
1065 CHOICE_SETTING(0, sort_dir
, LANG_SORT_DIR
, 0 ,
1066 "sort dirs", "alpha,oldest,newest", NULL
, 3,
1067 ID2P(LANG_SORT_ALPHA
), ID2P(LANG_SORT_DATE
),
1068 ID2P(LANG_SORT_DATE_REVERSE
)),
1069 CHOICE_SETTING(0, sort_file
, LANG_SORT_FILE
, 0 ,
1070 "sort files", "alpha,oldest,newest,type", NULL
, 4,
1071 ID2P(LANG_SORT_ALPHA
), ID2P(LANG_SORT_DATE
),
1072 ID2P(LANG_SORT_DATE_REVERSE
) , ID2P(LANG_SORT_TYPE
)),
1073 CHOICE_SETTING(0, interpret_numbers
, LANG_SORT_INTERPRET_NUMBERS
, 1,
1074 "sort interpret number", "digits,numbers",NULL
, 2,
1075 ID2P(LANG_SORT_INTERPRET_AS_DIGIT
),
1076 ID2P(LANG_SORT_INTERPRET_AS_NUMBERS
)),
1077 CHOICE_SETTING(0, show_filename_ext
, LANG_SHOW_FILENAME_EXT
, 3,
1078 "show filename exts", "off,on,unknown,view_all", NULL
, 4 ,
1079 ID2P(LANG_OFF
), ID2P(LANG_ON
), ID2P(LANG_UNKNOWN_TYPES
),
1080 ID2P(LANG_EXT_ONLY_VIEW_ALL
)),
1081 OFFON_SETTING(0,browse_current
,LANG_FOLLOW
,false,"follow playlist",NULL
),
1082 OFFON_SETTING(0,playlist_viewer_icons
,LANG_SHOW_ICONS
,true,
1083 "playlist viewer icons",NULL
),
1084 OFFON_SETTING(0,playlist_viewer_indices
,LANG_SHOW_INDICES
,true,
1085 "playlist viewer indices",NULL
),
1086 CHOICE_SETTING(0, playlist_viewer_track_display
, LANG_TRACK_DISPLAY
, 0,
1087 "playlist viewer track display","track name,full path",
1088 NULL
, 2, ID2P(LANG_DISPLAY_TRACK_NAME_ONLY
),
1089 ID2P(LANG_DISPLAY_FULL_PATH
)),
1090 CHOICE_SETTING(0, recursive_dir_insert
, LANG_RECURSE_DIRECTORY
, RECURSE_ON
,
1091 "recursive directory insert", off_on_ask
, NULL
, 3 ,
1092 ID2P(LANG_OFF
), ID2P(LANG_ON
), ID2P(LANG_ASK
)),
1094 CHOICE_SETTING(0, autocreatebookmark
, LANG_BOOKMARK_SETTINGS_AUTOCREATE
,
1095 BOOKMARK_NO
, "autocreate bookmarks",
1096 "off,on,ask,recent only - on,recent only - ask", NULL
, 5,
1097 ID2P(LANG_SET_BOOL_NO
), ID2P(LANG_SET_BOOL_YES
),
1098 ID2P(LANG_ASK
), ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES
),
1099 ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK
)),
1100 OFFON_SETTING(0, autoupdatebookmark
, LANG_BOOKMARK_SETTINGS_AUTOUPDATE
,
1101 false, "autoupdate bookmarks", NULL
),
1102 CHOICE_SETTING(0, autoloadbookmark
, LANG_BOOKMARK_SETTINGS_AUTOLOAD
,
1103 BOOKMARK_NO
, "autoload bookmarks", off_on_ask
, NULL
, 3,
1104 ID2P(LANG_SET_BOOL_NO
), ID2P(LANG_SET_BOOL_YES
),
1106 CHOICE_SETTING(0, usemrb
, LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS
,
1107 BOOKMARK_NO
, "use most-recent-bookmarks",
1108 "off,on,unique only", NULL
, 3, ID2P(LANG_SET_BOOL_NO
),
1109 ID2P(LANG_SET_BOOL_YES
),
1110 ID2P(LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
)),
1111 #ifdef HAVE_LCD_BITMAP
1113 STRINGCHOICE_SETTING(0, peak_meter_clip_hold
, LANG_PM_CLIP_HOLD
, 16,
1114 "peak meter clip hold",
1115 "on,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,2min"
1116 ",3min,5min,10min,20min,45min,90min",
1117 peak_meter_set_clip_hold
, 25, LANG_PM_ETERNAL
,
1118 TALK_ID(1, UNIT_SEC
), TALK_ID(2, UNIT_SEC
),
1119 TALK_ID(3, UNIT_SEC
), TALK_ID(4, UNIT_SEC
),
1120 TALK_ID(5, UNIT_SEC
), TALK_ID(6, UNIT_SEC
),
1121 TALK_ID(7, UNIT_SEC
), TALK_ID(8, UNIT_SEC
),
1122 TALK_ID(9, UNIT_SEC
), TALK_ID(10, UNIT_SEC
),
1123 TALK_ID(15, UNIT_SEC
), TALK_ID(20, UNIT_SEC
),
1124 TALK_ID(25, UNIT_SEC
), TALK_ID(30, UNIT_SEC
),
1125 TALK_ID(45, UNIT_SEC
), TALK_ID(60, UNIT_SEC
),
1126 TALK_ID(90, UNIT_SEC
), TALK_ID(2, UNIT_MIN
),
1127 TALK_ID(3, UNIT_MIN
), TALK_ID(5, UNIT_MIN
),
1128 TALK_ID(10, UNIT_MIN
), TALK_ID(20, UNIT_MIN
),
1129 TALK_ID(45, UNIT_MIN
), TALK_ID(90, UNIT_MIN
)),
1130 STRINGCHOICE_SETTING(0, peak_meter_hold
, LANG_PM_PEAK_HOLD
, 3,
1132 "off,200ms,300ms,500ms,1,2,3,4,5,6,7,8,9,10,15,20,30,1min",
1133 NULL
, 18, LANG_OFF
, TALK_ID(200, UNIT_MS
),
1134 TALK_ID(300, UNIT_MS
), TALK_ID(500, UNIT_MS
),
1135 TALK_ID(1, UNIT_SEC
), TALK_ID(2, UNIT_SEC
),
1136 TALK_ID(3, UNIT_SEC
), TALK_ID(4, UNIT_SEC
),
1137 TALK_ID(5, UNIT_SEC
), TALK_ID(6, UNIT_SEC
),
1138 TALK_ID(7, UNIT_SEC
), TALK_ID(8, UNIT_SEC
),
1139 TALK_ID(9, UNIT_SEC
), TALK_ID(10, UNIT_SEC
),
1140 TALK_ID(15, UNIT_SEC
), TALK_ID(20, UNIT_SEC
),
1141 TALK_ID(30, UNIT_SEC
), TALK_ID(60, UNIT_SEC
)),
1142 INT_SETTING(0, peak_meter_release
, LANG_PM_RELEASE
, 8, "peak meter release",
1143 UNIT_PM_TICK
, 1, 0x7e, 1, NULL
, NULL
,NULL
),
1144 OFFON_SETTING(0,peak_meter_dbfs
,LANG_PM_DBFS
,true,"peak meter dbfs",NULL
),
1145 {F_T_INT
, &global_settings
.peak_meter_min
, LANG_PM_MIN
,INT(60),
1146 "peak meter min", NULL
, UNUSED
},
1147 {F_T_INT
, &global_settings
.peak_meter_max
, LANG_PM_MAX
,INT(0),
1148 "peak meter max", NULL
, UNUSED
},
1149 #ifdef HAVE_RECORDING
1150 OFFON_SETTING(0, peak_meter_clipcounter
, LANG_PM_CLIPCOUNTER
, false,
1151 "peak meter clipcounter", NULL
),
1152 #endif /* HAVE_RECORDING */
1153 #endif /* HAVE_LCD_BITMAP */
1154 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
1155 SOUND_SETTING(F_SOUNDSETTING
, mdb_strength
, LANG_MDB_STRENGTH
,
1156 "mdb strength", SOUND_MDB_STRENGTH
),
1157 SOUND_SETTING(F_SOUNDSETTING
, mdb_harmonics
, LANG_MDB_HARMONICS
,
1158 "mdb harmonics", SOUND_MDB_HARMONICS
),
1159 SOUND_SETTING(F_SOUNDSETTING
, mdb_center
, LANG_MDB_CENTER
,
1160 "mdb center", SOUND_MDB_CENTER
),
1161 SOUND_SETTING(F_SOUNDSETTING
, mdb_shape
, LANG_MDB_SHAPE
,
1162 "mdb shape", SOUND_MDB_SHAPE
),
1163 OFFON_SETTING(F_SOUNDSETTING
, mdb_enable
, LANG_MDB_ENABLE
,
1164 false, "mdb enable", set_mdb_enable
),
1166 #if CONFIG_CODEC == MAS3507D
1167 OFFON_SETTING(F_SOUNDSETTING
, line_in
,LANG_LINE_IN
,false,"line in",NULL
),
1170 OFFON_SETTING(F_TEMPVAR
, talk_menu
, LANG_VOICE_MENU
, true, "talk menu", NULL
),
1171 CHOICE_SETTING(0, talk_dir
, LANG_VOICE_DIR
, 0,
1172 "talk dir", off_number_spell
, NULL
, 3,
1173 ID2P(LANG_OFF
), ID2P(LANG_VOICE_NUMBER
),
1174 ID2P(LANG_VOICE_SPELL
)),
1175 OFFON_SETTING(F_TEMPVAR
, talk_dir_clip
, LANG_VOICE_DIR_TALK
, false,
1176 "talk dir clip", NULL
),
1177 CHOICE_SETTING(0, talk_file
, LANG_VOICE_FILE
, 0,
1178 "talk file", off_number_spell
, NULL
, 3,
1179 ID2P(LANG_OFF
), ID2P(LANG_VOICE_NUMBER
),
1180 ID2P(LANG_VOICE_SPELL
)),
1181 OFFON_SETTING(F_TEMPVAR
, talk_file_clip
, LANG_VOICE_FILE_TALK
, false,
1182 "talk file clip", NULL
),
1183 OFFON_SETTING(F_TEMPVAR
, talk_filetype
, LANG_VOICE_FILETYPE
, false,
1184 "talk filetype", NULL
),
1185 OFFON_SETTING(F_TEMPVAR
, talk_battery_level
, LANG_TALK_BATTERY_LEVEL
, false,
1186 "Announce Battery Level", NULL
),
1188 #ifdef HAVE_RECORDING
1190 STRINGCHOICE_SETTING(F_RECSETTING
, rec_timesplit
, LANG_SPLIT_TIME
, 0,
1192 "off,00:05,00:10,00:15,00:30,01:00,01:14,01:20,02:00,"
1193 "04:00,06:00,08:00,10:00,12:00,18:00,24:00",
1195 TALK_ID(5, UNIT_MIN
), TALK_ID(10, UNIT_MIN
),
1196 TALK_ID(15, UNIT_MIN
), TALK_ID(30, UNIT_MIN
),
1197 TALK_ID(60, UNIT_MIN
), TALK_ID(74, UNIT_MIN
),
1198 TALK_ID(80, UNIT_MIN
), TALK_ID(2, UNIT_HOUR
),
1199 TALK_ID(4, UNIT_HOUR
), TALK_ID(6, UNIT_HOUR
),
1200 TALK_ID(8, UNIT_HOUR
), TALK_ID(10, UNIT_HOUR
),
1201 TALK_ID(12, UNIT_HOUR
), TALK_ID(18, UNIT_HOUR
),
1202 TALK_ID(20, UNIT_HOUR
), TALK_ID(24, UNIT_HOUR
)),
1203 STRINGCHOICE_SETTING(F_RECSETTING
, rec_sizesplit
, LANG_SPLIT_SIZE
, 0,
1205 "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB,"
1206 "256MB,512MB,650MB,700MB,1GB,1.5GB,1.75GB",
1208 TALK_ID(5, UNIT_MB
), TALK_ID(10, UNIT_MB
),
1209 TALK_ID(15, UNIT_MB
), TALK_ID(32, UNIT_MB
),
1210 TALK_ID(64, UNIT_MB
), TALK_ID(75, UNIT_MB
),
1211 TALK_ID(100, UNIT_MB
), TALK_ID(128, UNIT_MB
),
1212 TALK_ID(256, UNIT_MB
), TALK_ID(512, UNIT_MB
),
1213 TALK_ID(650, UNIT_MB
), TALK_ID(700, UNIT_MB
),
1214 TALK_ID(1024, UNIT_MB
), TALK_ID(1536, UNIT_MB
),
1215 TALK_ID(1792, UNIT_MB
)),
1216 {F_T_INT
|F_RECSETTING
, &global_settings
.rec_channels
, LANG_CHANNELS
, INT(0),
1217 "rec channels","stereo,mono",UNUSED
},
1218 #if CONFIG_CODEC == SWCODEC
1219 {F_T_INT
|F_RECSETTING
, &global_settings
.rec_mono_mode
,
1220 LANG_RECORDING_MONO_MODE
, INT(0), "rec mono mode","L+R,L,R",UNUSED
},
1222 CHOICE_SETTING(F_RECSETTING
, rec_split_type
, LANG_SPLIT_TYPE
, 0,
1223 "rec split type", "Split,Stop,Shutdown", NULL
, 3,
1224 ID2P(LANG_START_NEW_FILE
), ID2P(LANG_STOP_RECORDING
),ID2P(LANG_STOP_RECORDING_AND_SHUTDOWN
)),
1225 CHOICE_SETTING(F_RECSETTING
, rec_split_method
, LANG_SPLIT_MEASURE
, 0,
1226 "rec split method", "Time,Filesize", NULL
, 2,
1227 ID2P(LANG_TIME
), ID2P(LANG_FILESIZE
)),
1228 {F_T_INT
|F_RECSETTING
, &global_settings
.rec_source
, LANG_RECORDING_SOURCE
,
1229 INT(0), "rec source",
1230 &HAVE_MIC_REC_(",mic")
1231 HAVE_LINE_REC_(",line")
1232 HAVE_SPDIF_REC_(",spdif")
1233 HAVE_FMRADIO_REC_(",fmradio")[1],
1235 INT_SETTING(F_RECSETTING
, rec_prerecord_time
, LANG_RECORD_PRERECORD_TIME
, 0,
1236 "prerecording time", UNIT_SEC
, 0, 30, 1,
1237 formatter_unit_0_is_off
, getlang_unit_0_is_off
, NULL
),
1239 TEXT_SETTING(F_RECSETTING
, rec_directory
, "rec path",
1240 REC_BASE_DIR
, NULL
, NULL
),
1241 #ifdef HAVE_BACKLIGHT
1242 CHOICE_SETTING(F_RECSETTING
, cliplight
, LANG_CLIP_LIGHT
, 0,
1243 "cliplight", "off,main,both,remote", NULL
,
1244 #ifdef HAVE_REMOTE_LCD
1245 4, ID2P(LANG_OFF
), ID2P(LANG_MAIN_UNIT
),
1246 ID2P(LANG_REMOTE_MAIN
), ID2P(LANG_REMOTE_UNIT
)
1248 2, ID2P(LANG_OFF
), ID2P(LANG_ON
)
1252 #ifdef DEFAULT_REC_MIC_GAIN
1253 {F_T_INT
|F_RECSETTING
,&global_settings
.rec_mic_gain
,
1254 LANG_GAIN
,INT(DEFAULT_REC_MIC_GAIN
),
1255 "rec mic gain",NULL
,UNUSED
},
1256 #endif /* DEFAULT_REC_MIC_GAIN */
1257 #ifdef DEFAULT_REC_LEFT_GAIN
1258 {F_T_INT
|F_RECSETTING
,&global_settings
.rec_left_gain
,
1259 LANG_GAIN_LEFT
,INT(DEFAULT_REC_LEFT_GAIN
),
1260 "rec left gain",NULL
,UNUSED
},
1261 #endif /* DEFAULT_REC_LEFT_GAIN */
1262 #ifdef DEFAULT_REC_RIGHT_GAIN
1263 {F_T_INT
|F_RECSETTING
,&global_settings
.rec_right_gain
,LANG_GAIN_RIGHT
,
1264 INT(DEFAULT_REC_RIGHT_GAIN
),
1265 "rec right gain",NULL
,UNUSED
},
1266 #endif /* DEFAULT_REC_RIGHT_GAIN */
1267 #if CONFIG_CODEC == MAS3587F
1268 {F_T_INT
|F_RECSETTING
,&global_settings
.rec_frequency
,
1269 LANG_RECORDING_FREQUENCY
, INT(0),
1270 "rec frequency","44,48,32,22,24,16", UNUSED
},
1271 INT_SETTING(F_RECSETTING
, rec_quality
, LANG_RECORDING_QUALITY
, 5,
1272 "rec quality", UNIT_INT
, 0, 7, 1, NULL
, NULL
, NULL
),
1273 OFFON_SETTING(F_RECSETTING
, rec_editable
, LANG_RECORDING_EDITABLE
, false,
1274 "editable recordings", NULL
),
1275 #endif /* CONFIG_CODEC == MAS3587F */
1276 #if CONFIG_CODEC == SWCODEC
1277 {F_T_INT
|F_RECSETTING
,&global_settings
.rec_frequency
,
1278 LANG_RECORDING_FREQUENCY
,INT(REC_FREQ_DEFAULT
),
1279 "rec frequency",REC_FREQ_CFG_VAL_LIST
,UNUSED
},
1280 {F_T_INT
|F_RECSETTING
,&global_settings
.rec_format
,
1281 LANG_RECORDING_FORMAT
,INT(REC_FORMAT_DEFAULT
),
1282 "rec format",REC_FORMAT_CFG_VAL_LIST
,UNUSED
},
1283 /** Encoder settings start - keep these together **/
1285 /* (no settings yet) */
1287 {F_T_INT
|F_RECSETTING
, &global_settings
.mp3_enc_config
.bitrate
,-1,
1288 INT(MP3_ENC_BITRATE_CFG_DEFAULT
),
1289 "mp3_enc bitrate",MP3_ENC_BITRATE_CFG_VALUE_LIST
,UNUSED
},
1291 /* (no settings yet) */
1293 /* (no settings yet) */
1294 /** Encoder settings end **/
1295 #endif /* CONFIG_CODEC == SWCODEC */
1296 /* values for the trigger */
1297 INT_SETTING(F_RECSETTING
, rec_start_thres_db
, LANG_RECORD_START_THRESHOLD
, -35,
1298 "trigger start threshold dB", UNIT_DB
, VOLUME_MIN
/10, 0, 1, NULL
, NULL
, NULL
),
1299 INT_SETTING(F_RECSETTING
, rec_start_thres_linear
, LANG_RECORD_START_THRESHOLD
, 5,
1300 "trigger start threshold linear", UNIT_PERCENT
, 0, 100, 1, NULL
, NULL
, NULL
),
1301 INT_SETTING(F_RECSETTING
, rec_stop_thres_db
, LANG_RECORD_STOP_THRESHOLD
, -45,
1302 "trigger stop threshold dB", UNIT_DB
, VOLUME_MIN
/10, 0, 1, NULL
, NULL
, NULL
),
1303 INT_SETTING(F_RECSETTING
, rec_stop_thres_linear
, LANG_RECORD_STOP_THRESHOLD
, 10,
1304 "trigger stop threshold linear", UNIT_PERCENT
, 0, 100, 1, NULL
, NULL
, NULL
),
1305 TABLE_SETTING(F_RECSETTING
, rec_start_duration
, LANG_MIN_DURATION
, 0,
1306 "trigger start duration",
1307 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1308 UNIT_SEC
, NULL
, NULL
, NULL
, 13,
1309 0,1,2,5,10,15,20,25,30,60,120,300,600),
1310 TABLE_SETTING(F_RECSETTING
, rec_stop_postrec
, LANG_MIN_DURATION
, 0,
1311 "trigger stop duration",
1312 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1313 UNIT_SEC
, NULL
, NULL
, NULL
, 13,
1314 0,1,2,5,10,15,20,25,30,60,120,300,600),
1315 TABLE_SETTING(F_RECSETTING
, rec_stop_gap
, LANG_RECORD_STOP_GAP
, 1,
1317 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1318 UNIT_SEC
, NULL
, NULL
, NULL
, 13,
1319 0,1,2,5,10,15,20,25,30,60,120,300,600),
1320 CHOICE_SETTING(F_RECSETTING
, rec_trigger_mode
, LANG_RECORD_TRIGGER
, TRIG_MODE_OFF
,
1321 "trigger mode","off,once,repeat", NULL
,3,
1322 ID2P(LANG_OFF
), ID2P(LANG_RECORD_TRIG_NOREARM
), ID2P(LANG_REPEAT
)),
1323 CHOICE_SETTING(F_RECSETTING
, rec_trigger_type
, LANG_RECORD_TRIGGER_TYPE
, TRIG_TYPE_STOP
,
1324 "trigger type","stop,pause,nf stp", NULL
,3,
1325 ID2P(LANG_RECORD_TRIGGER_STOP
), ID2P(LANG_PAUSE
), ID2P(LANG_RECORD_TRIGGER_NEWFILESTP
)),
1326 #endif /* HAVE_RECORDING */
1328 #ifdef HAVE_HISTOGRAM
1329 /* TO DO: additional restictions of following REP items? */
1330 TABLE_SETTING(F_RECSETTING
, histogram_interval
, LANG_HISTOGRAM_INTERVAL
, 0,
1331 "histogram interval","0s,1s,2s,4s",
1332 UNIT_SEC
, NULL
, NULL
, NULL
, 4, 0,1,2,4),
1333 #endif /* HAVE_HISTOGRAM */
1335 #ifdef HAVE_SPDIF_POWER
1336 OFFON_SETTING(F_SOUNDSETTING
, spdif_enable
, LANG_SPDIF_ENABLE
, false,
1337 "spdif enable", spdif_power_enable
),
1339 CHOICE_SETTING(0, next_folder
, LANG_NEXT_FOLDER
, FOLDER_ADVANCE_OFF
,
1340 "folder navigation", "off,on,random",NULL
,3,
1341 ID2P(LANG_SET_BOOL_NO
), ID2P(LANG_SET_BOOL_YES
),
1343 BOOL_SETTING(0, constrain_next_folder
, LANG_CONSTRAIN_NEXT_FOLDER
, false,
1344 "constrain next folder", off_on
,
1345 LANG_SET_BOOL_YES
, LANG_SET_BOOL_NO
, NULL
),
1347 #ifdef HAVE_TAGCACHE
1348 #if CONFIG_CODEC == SWCODEC
1349 BOOL_SETTING(0, autoresume_enable
, LANG_AUTORESUME
, false,
1350 "autoresume enable", off_on
,
1351 LANG_SET_BOOL_YES
, LANG_SET_BOOL_NO
, NULL
),
1352 CHOICE_SETTING(0, autoresume_automatic
, LANG_AUTORESUME_AUTOMATIC
,
1353 AUTORESUME_NEXTTRACK_NEVER
,
1354 "autoresume next track", "never,all,custom",
1356 ID2P(LANG_SET_BOOL_NO
),
1358 ID2P(LANG_AUTORESUME_CUSTOM
)),
1359 TEXT_SETTING(0, autoresume_paths
, "autoresume next track paths",
1360 "/podcast:/podcasts", NULL
, NULL
),
1363 OFFON_SETTING(0, runtimedb
, LANG_RUNTIMEDB_ACTIVE
, false,
1364 "gather runtime data", NULL
),
1365 TEXT_SETTING(0, tagcache_scan_paths
, "database scan paths",
1366 DEFAULT_TAGCACHE_SCAN_PATHS
, NULL
, NULL
),
1369 #if CONFIG_CODEC == SWCODEC
1371 CHOICE_SETTING(F_SOUNDSETTING
, replaygain_settings
.type
,
1372 LANG_REPLAYGAIN_MODE
, REPLAYGAIN_SHUFFLE
, "replaygain type",
1373 "track,album,track shuffle,off", NULL
, 4, ID2P(LANG_TRACK_GAIN
),
1374 ID2P(LANG_ALBUM_GAIN
), ID2P(LANG_SHUFFLE_GAIN
), ID2P(LANG_OFF
)),
1375 OFFON_SETTING(F_SOUNDSETTING
, replaygain_settings
.noclip
,
1376 LANG_REPLAYGAIN_NOCLIP
, false, "replaygain noclip", NULL
),
1377 INT_SETTING_NOWRAP(F_SOUNDSETTING
, replaygain_settings
.preamp
,
1378 LANG_REPLAYGAIN_PREAMP
, 0, "replaygain preamp",
1379 UNIT_DB
, -120, 120, 5, db_format
, get_dec_talkid
, NULL
),
1381 CHOICE_SETTING(0, beep
, LANG_BEEP
, 0, "beep", "off,weak,moderate,strong",
1382 NULL
, 4, ID2P(LANG_OFF
), ID2P(LANG_WEAK
),
1383 ID2P(LANG_MODERATE
), ID2P(LANG_STRONG
)),
1385 #ifdef HAVE_CROSSFADE
1387 CHOICE_SETTING(F_SOUNDSETTING
, crossfade
, LANG_CROSSFADE_ENABLE
, 0,
1389 "off,auto track change,man track skip,shuffle,shuffle or man track skip,always",
1390 NULL
, 6, ID2P(LANG_OFF
), ID2P(LANG_AUTOTRACKSKIP
),
1391 ID2P(LANG_MANTRACKSKIP
), ID2P(LANG_SHUFFLE
),
1392 ID2P(LANG_SHUFFLE_TRACKSKIP
), ID2P(LANG_ALWAYS
)),
1393 INT_SETTING(F_SOUNDSETTING
, crossfade_fade_in_delay
,
1394 LANG_CROSSFADE_FADE_IN_DELAY
, 0,
1395 "crossfade fade in delay", UNIT_SEC
, 0, 7, 1, NULL
, NULL
, NULL
),
1396 INT_SETTING(F_SOUNDSETTING
, crossfade_fade_out_delay
,
1397 LANG_CROSSFADE_FADE_OUT_DELAY
, 0,
1398 "crossfade fade out delay", UNIT_SEC
, 0, 7, 1, NULL
, NULL
,NULL
),
1399 INT_SETTING(F_SOUNDSETTING
, crossfade_fade_in_duration
,
1400 LANG_CROSSFADE_FADE_IN_DURATION
, 2,
1401 "crossfade fade in duration", UNIT_SEC
, 0, 15, 1, NULL
, NULL
,
1403 INT_SETTING(F_SOUNDSETTING
, crossfade_fade_out_duration
,
1404 LANG_CROSSFADE_FADE_OUT_DURATION
, 2,
1405 "crossfade fade out duration", UNIT_SEC
, 0, 15, 1, NULL
, NULL
,
1407 CHOICE_SETTING(F_SOUNDSETTING
, crossfade_fade_out_mixmode
,
1408 LANG_CROSSFADE_FADE_OUT_MODE
, 0,
1409 "crossfade fade out mode", "crossfade,mix", NULL
, 2,
1410 ID2P(LANG_CROSSFADE
), ID2P(LANG_MIX
)),
1414 CHOICE_SETTING(F_SOUNDSETTING
, crossfeed
, LANG_CROSSFEED
, 0,"crossfeed",
1415 "off,meier,custom", dsp_set_crossfeed_type
, 3,
1416 ID2P(LANG_OFF
), ID2P(LANG_CROSSFEED_MEIER
),
1417 ID2P(LANG_CROSSFEED_CUSTOM
)),
1418 INT_SETTING_NOWRAP(F_SOUNDSETTING
, crossfeed_direct_gain
,
1419 LANG_CROSSFEED_DIRECT_GAIN
, -15,
1420 "crossfeed direct gain", UNIT_DB
, -60, 0, 5,
1421 db_format
, get_dec_talkid
,dsp_set_crossfeed_direct_gain
),
1422 INT_SETTING_NOWRAP(F_SOUNDSETTING
, crossfeed_cross_gain
,
1423 LANG_CROSSFEED_CROSS_GAIN
, -60,
1424 "crossfeed cross gain", UNIT_DB
, -120, -30, 5,
1425 db_format
, get_dec_talkid
, crossfeed_cross_set
),
1426 INT_SETTING_NOWRAP(F_SOUNDSETTING
, crossfeed_hf_attenuation
,
1427 LANG_CROSSFEED_HF_ATTENUATION
, -160,
1428 "crossfeed hf attenuation", UNIT_DB
, -240, -60, 5,
1429 db_format
, get_dec_talkid
, crossfeed_cross_set
),
1430 INT_SETTING_NOWRAP(F_SOUNDSETTING
, crossfeed_hf_cutoff
,
1431 LANG_CROSSFEED_HF_CUTOFF
, 700,
1432 "crossfeed hf cutoff", UNIT_HERTZ
, 500, 2000, 100,
1433 NULL
, NULL
, crossfeed_cross_set
),
1436 OFFON_SETTING(F_EQSETTING
, eq_enabled
, LANG_EQUALIZER_ENABLED
, false,
1437 "eq enabled", NULL
),
1438 INT_SETTING_NOWRAP(F_EQSETTING
, eq_precut
, LANG_EQUALIZER_PRECUT
, 0,
1439 "eq precut", UNIT_DB
, 0, 240, 5, eq_precut_format
,
1440 get_precut_talkid
, dsp_set_eq_precut
),
1442 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[0].cutoff
, LANG_EQUALIZER_BAND_CUTOFF
,
1443 60, "eq band 0 cutoff", UNIT_HERTZ
, EQ_CUTOFF_MIN
,
1444 EQ_CUTOFF_MAX
, EQ_CUTOFF_STEP
, NULL
, NULL
, NULL
),
1445 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[1].cutoff
, LANG_EQUALIZER_BAND_CENTER
,
1446 200, "eq band 1 cutoff", UNIT_HERTZ
, EQ_CUTOFF_MIN
,
1447 EQ_CUTOFF_MAX
, EQ_CUTOFF_STEP
, NULL
, NULL
, NULL
),
1448 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[2].cutoff
, LANG_EQUALIZER_BAND_CENTER
,
1449 800, "eq band 2 cutoff", UNIT_HERTZ
, EQ_CUTOFF_MIN
,
1450 EQ_CUTOFF_MAX
, EQ_CUTOFF_STEP
, NULL
, NULL
, NULL
),
1451 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[3].cutoff
, LANG_EQUALIZER_BAND_CENTER
,
1452 4000, "eq band 3 cutoff", UNIT_HERTZ
, EQ_CUTOFF_MIN
,
1453 EQ_CUTOFF_MAX
, EQ_CUTOFF_STEP
, NULL
, NULL
, NULL
),
1454 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[4].cutoff
, LANG_EQUALIZER_BAND_CUTOFF
,
1455 12000, "eq band 4 cutoff", UNIT_HERTZ
, EQ_CUTOFF_MIN
,
1456 EQ_CUTOFF_MAX
, EQ_CUTOFF_STEP
, NULL
, NULL
, NULL
),
1457 /* 0..64 (or 0.0 to 6.4) */
1458 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[0].q
, LANG_EQUALIZER_BAND_Q
, 7,
1459 "eq band 0 q", UNIT_INT
, EQ_Q_MIN
, EQ_Q_MAX
, EQ_Q_STEP
,
1460 eq_q_format
, get_dec_talkid
, NULL
),
1461 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[1].q
, LANG_EQUALIZER_BAND_Q
, 10,
1462 "eq band 1 q", UNIT_INT
, EQ_Q_MIN
, EQ_Q_MAX
, EQ_Q_STEP
,
1463 eq_q_format
, get_dec_talkid
, NULL
),
1464 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[2].q
, LANG_EQUALIZER_BAND_Q
, 10,
1465 "eq band 2 q", UNIT_INT
, EQ_Q_MIN
, EQ_Q_MAX
, EQ_Q_STEP
,
1466 eq_q_format
, get_dec_talkid
, NULL
),
1467 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[3].q
, LANG_EQUALIZER_BAND_Q
, 10,
1468 "eq band 3 q", UNIT_INT
, EQ_Q_MIN
, EQ_Q_MAX
, EQ_Q_STEP
,
1469 eq_q_format
, get_dec_talkid
, NULL
),
1470 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[4].q
, LANG_EQUALIZER_BAND_Q
, 7,
1471 "eq band 4 q", UNIT_INT
, EQ_Q_MIN
, EQ_Q_MAX
, EQ_Q_STEP
,
1472 eq_q_format
, get_dec_talkid
, NULL
),
1473 /* -240..240 (or -24db to +24db) */
1474 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[0].gain
, LANG_GAIN
, 0,
1475 "eq band 0 gain", UNIT_DB
, EQ_GAIN_MIN
, EQ_GAIN_MAX
,
1476 EQ_GAIN_STEP
, db_format
, get_dec_talkid
, NULL
),
1477 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[1].gain
, LANG_GAIN
, 0,
1478 "eq band 1 gain", UNIT_DB
, EQ_GAIN_MIN
, EQ_GAIN_MAX
,
1479 EQ_GAIN_STEP
, db_format
, get_dec_talkid
, NULL
),
1480 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[2].gain
, LANG_GAIN
, 0,
1481 "eq band 2 gain", UNIT_DB
, EQ_GAIN_MIN
, EQ_GAIN_MAX
,
1482 EQ_GAIN_STEP
, db_format
, get_dec_talkid
, NULL
),
1483 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[3].gain
, LANG_GAIN
, 0,
1484 "eq band 3 gain", UNIT_DB
, EQ_GAIN_MIN
, EQ_GAIN_MAX
,
1485 EQ_GAIN_STEP
, db_format
, get_dec_talkid
, NULL
),
1486 INT_SETTING_NOWRAP(F_EQSETTING
, eq_band_settings
[4].gain
, LANG_GAIN
, 0,
1487 "eq band 4 gain", UNIT_DB
, EQ_GAIN_MIN
, EQ_GAIN_MAX
,
1488 EQ_GAIN_STEP
, db_format
, get_dec_talkid
, NULL
),
1491 OFFON_SETTING(F_SOUNDSETTING
, dithering_enabled
, LANG_DITHERING
, false,
1492 "dithering enabled", dsp_dither_enable
),
1494 #ifdef HAVE_PITCHCONTROL
1496 OFFON_SETTING(F_SOUNDSETTING
, timestretch_enabled
, LANG_TIMESTRETCH
, false,
1497 "timestretch enabled", dsp_timestretch_enable
),
1501 INT_SETTING_NOWRAP(F_SOUNDSETTING
, compressor_settings
.threshold
,
1502 LANG_COMPRESSOR_THRESHOLD
, 0,
1503 "compressor threshold", UNIT_DB
, 0, -24,
1504 -3, formatter_unit_0_is_off
, getlang_unit_0_is_off
,
1506 CHOICE_SETTING(F_SOUNDSETTING
|F_NO_WRAP
, compressor_settings
.makeup_gain
,
1507 LANG_COMPRESSOR_GAIN
, 1, "compressor makeup gain",
1508 "off,auto", compressor_set
, 2,
1509 ID2P(LANG_OFF
), ID2P(LANG_AUTO
)),
1510 CHOICE_SETTING(F_SOUNDSETTING
|F_NO_WRAP
, compressor_settings
.ratio
,
1511 LANG_COMPRESSOR_RATIO
, 1, "compressor ratio",
1512 "2:1,4:1,6:1,10:1,limit", compressor_set
, 5,
1513 ID2P(LANG_COMPRESSOR_RATIO_2
), ID2P(LANG_COMPRESSOR_RATIO_4
),
1514 ID2P(LANG_COMPRESSOR_RATIO_6
), ID2P(LANG_COMPRESSOR_RATIO_10
),
1515 ID2P(LANG_COMPRESSOR_RATIO_LIMIT
)),
1516 CHOICE_SETTING(F_SOUNDSETTING
|F_NO_WRAP
, compressor_settings
.knee
,
1517 LANG_COMPRESSOR_KNEE
, 1, "compressor knee",
1518 "hard knee,soft knee", compressor_set
, 2,
1519 ID2P(LANG_COMPRESSOR_HARD_KNEE
), ID2P(LANG_COMPRESSOR_SOFT_KNEE
)),
1520 INT_SETTING_NOWRAP(F_SOUNDSETTING
, compressor_settings
.release_time
,
1521 LANG_COMPRESSOR_RELEASE
, 500,
1522 "compressor release time", UNIT_MS
, 100, 1000,
1523 100, NULL
, NULL
, compressor_set
),
1525 #ifdef AUDIOHW_HAVE_BASS_CUTOFF
1526 SOUND_SETTING(F_NO_WRAP
, bass_cutoff
, LANG_BASS_CUTOFF
,
1527 "bass cutoff", SOUND_BASS_CUTOFF
),
1529 #ifdef AUDIOHW_HAVE_TREBLE_CUTOFF
1530 SOUND_SETTING(F_NO_WRAP
, treble_cutoff
, LANG_TREBLE_CUTOFF
,
1531 "treble cutoff", SOUND_TREBLE_CUTOFF
),
1533 #ifdef HAVE_DIRCACHE
1534 /*enable dircache for all targets > 2MB of RAM by default*/
1535 OFFON_SETTING(F_BANFROMQS
,dircache
,LANG_DIRCACHE_ENABLE
,true,"dircache",NULL
),
1536 SYSTEM_SETTING(NVRAM(4),dircache_size
,0),
1539 #ifdef HAVE_TAGCACHE
1540 #ifdef HAVE_TC_RAMCACHE
1541 OFFON_SETTING(F_BANFROMQS
,tagcache_ram
,LANG_TAGCACHE_RAM
,false,"tagcache_ram",NULL
),
1543 OFFON_SETTING(F_BANFROMQS
, tagcache_autoupdate
, LANG_TAGCACHE_AUTOUPDATE
, false,
1544 "tagcache_autoupdate", NULL
),
1546 CHOICE_SETTING(0, default_codepage
, LANG_DEFAULT_CODEPAGE
, 0,
1548 #ifdef HAVE_LCD_BITMAP
1549 /* The order must match with that in unicode.c */
1550 "iso8859-1,iso8859-7,iso8859-8,cp1251,iso8859-11,cp1256,"
1551 "iso8859-9,iso8859-2,cp1250,cp1252,sjis,gb2312,ksx1001,big5,utf-8",
1553 ID2P(LANG_CODEPAGE_LATIN1
),
1554 ID2P(LANG_CODEPAGE_GREEK
),
1555 ID2P(LANG_CODEPAGE_HEBREW
), ID2P(LANG_CODEPAGE_CYRILLIC
),
1556 ID2P(LANG_CODEPAGE_THAI
), ID2P(LANG_CODEPAGE_ARABIC
),
1557 ID2P(LANG_CODEPAGE_TURKISH
),
1558 ID2P(LANG_CODEPAGE_LATIN_EXTENDED
),
1559 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN
),
1560 ID2P(LANG_CODEPAGE_WESTERN_EUROPEAN
),
1561 ID2P(LANG_CODEPAGE_JAPANESE
),
1562 ID2P(LANG_CODEPAGE_SIMPLIFIED
), ID2P(LANG_CODEPAGE_KOREAN
),
1563 ID2P(LANG_CODEPAGE_TRADITIONAL
), ID2P(LANG_CODEPAGE_UTF8
)),
1564 #else /* !HAVE_LCD_BITMAP */
1565 /* The order must match with that in unicode.c */
1566 "iso8859-1,iso8859-7,cp1251,iso8859-9,iso8859-2,cp1250,cp1252,utf-8",
1568 ID2P(LANG_CODEPAGE_LATIN1
), ID2P(LANG_CODEPAGE_GREEK
),
1569 ID2P(LANG_CODEPAGE_CYRILLIC
), ID2P(LANG_CODEPAGE_TURKISH
),
1570 ID2P(LANG_CODEPAGE_LATIN_EXTENDED
),
1571 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN
),
1572 ID2P(LANG_CODEPAGE_WESTERN_EUROPEAN
),
1573 ID2P(LANG_CODEPAGE_UTF8
)),
1575 OFFON_SETTING(0, warnon_erase_dynplaylist
, LANG_WARN_ERASEDYNPLAYLIST_MENU
,
1576 true, "warn when erasing dynamic playlist",NULL
),
1578 #ifdef HAVE_BACKLIGHT
1579 #ifdef HAS_BUTTON_HOLD
1580 CHOICE_SETTING(0, backlight_on_button_hold
, LANG_BACKLIGHT_ON_BUTTON_HOLD
,
1581 1, "backlight on button hold", "normal,off,on",
1582 backlight_set_on_button_hold
, 3,
1583 ID2P(LANG_NORMAL
), ID2P(LANG_OFF
), ID2P(LANG_ON
)),
1586 #ifdef HAVE_LCD_SLEEP_SETTING
1587 STRINGCHOICE_SETTING(0, lcd_sleep_after_backlight_off
,
1588 LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF
, 3,
1589 "lcd sleep after backlight off",
1590 "always,never,5,10,15,20,30,45,60,90",
1591 lcd_set_sleep_after_backlight_off
, 10,
1592 LANG_ALWAYS
, LANG_NEVER
, TALK_ID(5, UNIT_SEC
),
1593 TALK_ID(10, UNIT_SEC
), TALK_ID(15, UNIT_SEC
),
1594 TALK_ID(20, UNIT_SEC
), TALK_ID(30, UNIT_SEC
),
1595 TALK_ID(45, UNIT_SEC
),TALK_ID(60, UNIT_SEC
),
1596 TALK_ID(90, UNIT_SEC
)),
1597 #endif /* HAVE_LCD_SLEEP_SETTING */
1598 #endif /* HAVE_BACKLIGHT */
1600 OFFON_SETTING(0, hold_lr_for_scroll_in_list
, -1, true,
1601 "hold_lr_for_scroll_in_list",NULL
),
1602 #ifdef HAVE_LCD_BITMAP
1603 CHOICE_SETTING(0, show_path_in_browser
, LANG_SHOW_PATH
, SHOW_PATH_CURRENT
,
1604 "show path in browser", "off,current directory,full path",
1605 NULL
, 3, ID2P(LANG_OFF
), ID2P(LANG_SHOW_PATH_CURRENT
),
1606 ID2P(LANG_DISPLAY_FULL_PATH
)),
1610 {F_T_INT
,&global_settings
.rec_agc_preset_mic
,LANG_RECORDING_AGC_PRESET
,
1611 INT(1),"agc mic preset",NULL
,UNUSED
},
1612 {F_T_INT
,&global_settings
.rec_agc_preset_line
,LANG_RECORDING_AGC_PRESET
,
1613 INT(1),"agc line preset",NULL
,UNUSED
},
1614 {F_T_INT
,&global_settings
.rec_agc_maxgain_mic
,-1,INT(104),
1615 "agc maximum mic gain",NULL
,UNUSED
},
1616 {F_T_INT
,&global_settings
.rec_agc_maxgain_line
,-1,INT(96),
1617 "agc maximum line gain",NULL
,UNUSED
},
1618 {F_T_INT
,&global_settings
.rec_agc_cliptime
,LANG_RECORDING_AGC_CLIPTIME
,
1619 INT(1),"agc cliptime","0.2s,0.4s,0.6s,0.8,1s",UNUSED
},
1622 #ifdef HAVE_REMOTE_LCD
1623 #ifdef HAS_REMOTE_BUTTON_HOLD
1624 CHOICE_SETTING(0, remote_backlight_on_button_hold
,
1625 LANG_BACKLIGHT_ON_BUTTON_HOLD
, 0,
1626 "remote backlight on button hold",
1627 "normal,off,on", remote_backlight_set_on_button_hold
, 3,
1628 ID2P(LANG_NORMAL
), ID2P(LANG_OFF
), ID2P(LANG_ON
)),
1631 #ifdef HAVE_HEADPHONE_DETECTION
1632 CHOICE_SETTING(0, unplug_mode
, LANG_HEADPHONE_UNPLUG
, 0,
1633 "pause on headphone unplug", "off,pause,pause and resume",
1634 NULL
, 3, ID2P(LANG_OFF
), ID2P(LANG_PAUSE
),
1635 ID2P(LANG_HEADPHONE_UNPLUG_RESUME
)),
1636 OFFON_SETTING(0, unplug_autoresume
,
1637 LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME
, false,
1638 "disable autoresume if phones not present",NULL
),
1640 INT_SETTING(0, pause_rewind
, LANG_PAUSE_REWIND
, 0,
1641 "rewind duration on pause", UNIT_SEC
, 0, 15, 1, NULL
, NULL
,
1644 CHOICE_SETTING(0, fm_region
, LANG_FM_REGION
, 0,
1645 "fm_region", "eu,us,jp,kr,it,wo", set_radio_region
, 6,
1646 ID2P(LANG_FM_EUROPE
), ID2P(LANG_FM_US
),
1647 ID2P(LANG_FM_JAPAN
), ID2P(LANG_FM_KOREA
),
1648 ID2P(LANG_FM_ITALY
), ID2P(LANG_FM_OTHER
)),
1651 OFFON_SETTING(F_BANFROMQS
, audioscrobbler
, LANG_AUDIOSCROBBLER
, false,
1652 "Last.fm Logging", NULL
),
1654 TEXT_SETTING(0, fmr_file
, "fmr", "-",
1655 FMPRESET_PATH
"/", ".fmr"),
1656 TEXT_SETTING(F_THEMESETTING
,fms_file
, "fms",
1657 DEFAULT_FMS_NAME
, SBS_DIR
"/", ".fms"),
1658 #ifdef HAVE_REMOTE_LCD
1659 TEXT_SETTING(F_THEMESETTING
,rfms_file
, "rfms",
1660 DEFAULT_FMS_NAME
, SBS_DIR
"/", ".rfms"),
1662 #endif /* CONFIG_TUNER */
1663 #ifdef HAVE_LCD_BITMAP
1664 TEXT_SETTING(F_THEMESETTING
, font_file
, "font",
1665 DEFAULT_FONTNAME
, FONT_DIR
"/", ".fnt"),
1666 INT_SETTING(0, glyphs_to_cache
, LANG_GLYPHS
, DEFAULT_GLYPHS
,
1667 "glyphs", UNIT_INT
, MIN_GLYPHS
, MAX_GLYPHS
, 10,
1670 #ifdef HAVE_REMOTE_LCD
1671 TEXT_SETTING(F_THEMESETTING
, remote_font_file
, "remote font",
1672 DEFAULT_REMOTE_FONTNAME
, FONT_DIR
"/", ".fnt"),
1674 TEXT_SETTING(F_THEMESETTING
,wps_file
, "wps",
1675 DEFAULT_WPSNAME
, WPS_DIR
"/", ".wps"),
1676 #ifdef HAVE_LCD_BITMAP
1677 TEXT_SETTING(F_THEMESETTING
,sbs_file
, "sbs",
1678 DEFAULT_SBSNAME
, SBS_DIR
"/", ".sbs"),
1680 #ifdef HAVE_REMOTE_LCD
1681 TEXT_SETTING(F_THEMESETTING
,rwps_file
,"rwps",
1682 DEFAULT_WPSNAME
, WPS_DIR
"/", ".rwps"),
1683 TEXT_SETTING(F_THEMESETTING
,rsbs_file
, "rsbs",
1684 DEFAULT_SBSNAME
, SBS_DIR
"/", ".rsbs"),
1686 TEXT_SETTING(0,lang_file
,"lang","",LANG_DIR
"/",".lng"),
1688 TEXT_SETTING(F_THEMESETTING
,backdrop_file
,"backdrop",
1689 DEFAULT_BACKDROP
, NULL
, NULL
),
1691 #ifdef HAVE_LCD_BITMAP
1692 TEXT_SETTING(0,kbd_file
,"kbd","-",ROCKBOX_DIR
"/",".kbd"),
1694 #ifdef HAVE_USB_CHARGING_ENABLE
1695 CHOICE_SETTING(0, usb_charging
, LANG_USB_CHARGING
, 1, "usb charging",
1696 "off,on,force", NULL
, 3, ID2P(LANG_SET_BOOL_NO
),
1697 ID2P(LANG_SET_BOOL_YES
), ID2P(LANG_FORCE
)),
1699 OFFON_SETTING(F_BANFROMQS
,cuesheet
,LANG_CUESHEET_ENABLE
,false,"cuesheet support",
1701 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, skip_length
,
1702 LANG_SKIP_LENGTH
, 0, "skip length",
1703 "outro,track,1s,2s,3s,5s,7s,10s,15s,20s,30s,45s,1min,90s,2min,3min,5min,10min,15min",
1704 UNIT_SEC
, formatter_unit_0_is_skip_track
,
1705 getlang_unit_0_is_skip_track
, NULL
,
1706 19, -1,0,1,2,3,5,7,10,15,20,30,45,60,90,120,180,300,600,900),
1707 CHOICE_SETTING(0, start_in_screen
, LANG_START_SCREEN
, 1,
1708 "start in screen", "previous,root,files,"
1709 #ifdef HAVE_TAGCACHE
1710 #define START_DB_COUNT 1
1713 #define START_DB_COUNT 0
1716 #ifdef HAVE_RECORDING
1717 #define START_REC_COUNT 1
1720 #define START_REC_COUNT 0
1723 #define START_TUNER_COUNT 1
1726 #define START_TUNER_COUNT 0
1729 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1730 #define START_PF_COUNT 1
1733 #define START_PF_COUNT 0
1736 (6 + START_DB_COUNT
+ START_REC_COUNT
+ START_TUNER_COUNT
+ START_PF_COUNT
),
1737 ID2P(LANG_PREVIOUS_SCREEN
), ID2P(LANG_MAIN_MENU
),
1738 ID2P(LANG_DIR_BROWSER
),
1739 #ifdef HAVE_TAGCACHE
1740 ID2P(LANG_TAGCACHE
),
1742 ID2P(LANG_RESUME_PLAYBACK
), ID2P(LANG_SETTINGS
),
1743 #ifdef HAVE_RECORDING
1744 ID2P(LANG_RECORDING
),
1747 ID2P(LANG_FM_RADIO
),
1749 ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS
)
1750 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1751 ,ID2P(LANG_ONPLAY_PICTUREFLOW
)
1754 SYSTEM_SETTING(NVRAM(1),last_screen
,-1),
1755 #if defined(HAVE_RTC_ALARM) && \
1756 (defined(HAVE_RECORDING) || CONFIG_TUNER)
1757 {F_T_INT
, &global_settings
.alarm_wake_up_screen
, LANG_ALARM_WAKEUP_SCREEN
,
1758 INT(ALARM_START_WPS
), "alarm wakeup screen", ALARM_SETTING_TEXT
,UNUSED
},
1759 #endif /* HAVE_RTC_ALARM */
1761 /* Customizable icons */
1762 #ifdef HAVE_LCD_BITMAP
1763 TEXT_SETTING(F_THEMESETTING
, icon_file
, "iconset", DEFAULT_ICONSET
,
1764 ICON_DIR
"/", ".bmp"),
1765 TEXT_SETTING(F_THEMESETTING
, viewers_icon_file
, "viewers iconset",
1766 DEFAULT_VIEWERS_ICONSET
,
1767 ICON_DIR
"/", ".bmp"),
1769 #ifdef HAVE_REMOTE_LCD
1770 TEXT_SETTING(F_THEMESETTING
, remote_icon_file
, "remote iconset", "-",
1771 ICON_DIR
"/", ".bmp"),
1772 TEXT_SETTING(F_THEMESETTING
, remote_viewers_icon_file
,
1773 "remote viewers iconset", "-",
1774 ICON_DIR
"/", ".bmp"),
1775 #endif /* HAVE_REMOTE_LCD */
1776 #ifdef HAVE_LCD_COLOR
1777 TEXT_SETTING(F_THEMESETTING
, colors_file
, "filetype colours", "-",
1778 THEME_DIR
"/", ".colours"),
1780 #ifdef HAVE_BUTTON_LIGHT
1781 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, buttonlight_timeout
,
1782 LANG_BUTTONLIGHT_TIMEOUT
, 5, "button light timeout", off_on
,
1783 UNIT_SEC
, backlight_formatter
, backlight_getlang
,
1784 buttonlight_set_timeout
, 20,
1785 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
1787 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
1788 INT_SETTING(F_NO_WRAP
, buttonlight_brightness
, LANG_BUTTONLIGHT_BRIGHTNESS
,
1789 DEFAULT_BRIGHTNESS_SETTING
,
1790 "button light brightness",UNIT_INT
, MIN_BRIGHTNESS_SETTING
,
1791 MAX_BRIGHTNESS_SETTING
, 1, NULL
, NULL
,
1792 buttonlight_set_brightness
),
1794 #ifndef HAVE_WHEEL_ACCELERATION
1795 INT_SETTING(0, list_accel_start_delay
, LANG_LISTACCEL_START_DELAY
,
1796 2, "list_accel_start_delay", UNIT_SEC
, 0, 10, 1,
1797 formatter_unit_0_is_off
, getlang_unit_0_is_off
, NULL
),
1798 INT_SETTING(0, list_accel_wait
, LANG_LISTACCEL_ACCEL_SPEED
,
1799 3, "list_accel_wait", UNIT_SEC
, 1, 10, 1,
1800 scanaccel_formatter
, getlang_unit_0_is_off
, NULL
),
1801 #endif /* HAVE_WHEEL_ACCELERATION */
1802 #if CONFIG_CODEC == SWCODEC
1804 #ifdef HAVE_HARDWARE_CLICK
1805 CHOICE_SETTING(0, keyclick
, LANG_KEYCLICK_SOFTWARE
, 0,
1806 "keyclick", "off,weak,moderate,strong", NULL
, 4,
1807 ID2P(LANG_OFF
), ID2P(LANG_WEAK
), ID2P(LANG_MODERATE
),
1809 OFFON_SETTING(0, keyclick_repeats
, LANG_KEYCLICK_REPEATS
, false,
1810 "keyclick repeats", NULL
),
1811 OFFON_SETTING(0, keyclick_hardware
, LANG_KEYCLICK_HARDWARE
, false,
1812 "hardware keyclick", NULL
),
1814 CHOICE_SETTING(0, keyclick
, LANG_KEYCLICK
, 0,
1815 "keyclick", "off,weak,moderate,strong", NULL
, 4,
1816 ID2P(LANG_OFF
), ID2P(LANG_WEAK
), ID2P(LANG_MODERATE
),
1818 OFFON_SETTING(0, keyclick_repeats
, LANG_KEYCLICK_REPEATS
, false,
1819 "keyclick repeats", NULL
),
1821 #endif /* CONFIG_CODEC == SWCODEC */
1822 TEXT_SETTING(0, playlist_catalog_dir
, "playlist catalog directory",
1823 PLAYLIST_CATALOG_DEFAULT_DIR
, NULL
, NULL
),
1824 INT_SETTING(0, sleeptimer_duration
, LANG_SLEEP_TIMER_DURATION
, 30,
1825 "sleeptimer duration",
1826 UNIT_MIN
, 5, 300, 5, NULL
, NULL
, NULL
),
1827 OFFON_SETTING(0, sleeptimer_on_startup
, LANG_SLEEP_TIMER_ON_POWER_UP
, false,
1828 "sleeptimer on startup", NULL
),
1829 OFFON_SETTING(0, keypress_restarts_sleeptimer
, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER
, false,
1830 "keypress restarts sleeptimer", set_keypress_restarts_sleep_timer
),
1831 #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
1832 CHOICE_SETTING(0, touchpad_sensitivity
, LANG_TOUCHPAD_SENSITIVITY
, 0,
1833 "touchpad sensitivity", "normal,high", touchpad_set_sensitivity
, 2,
1834 ID2P(LANG_NORMAL
), ID2P(LANG_HIGH
)),
1836 #ifdef HAVE_QUICKSCREEN
1837 CUSTOM_SETTING(0, qs_items
[QUICKSCREEN_TOP
], LANG_TOP_QS_ITEM
,
1839 qs_load_from_cfg
, qs_write_to_cfg
,
1840 qs_is_changed
, qs_set_default
),
1841 CUSTOM_SETTING(0, qs_items
[QUICKSCREEN_LEFT
], LANG_LEFT_QS_ITEM
,
1842 &global_settings
.playlist_shuffle
, "qs left",
1843 qs_load_from_cfg
, qs_write_to_cfg
,
1844 qs_is_changed
, qs_set_default
),
1845 CUSTOM_SETTING(0, qs_items
[QUICKSCREEN_RIGHT
], LANG_RIGHT_QS_ITEM
,
1846 &global_settings
.repeat_mode
, "qs right",
1847 qs_load_from_cfg
, qs_write_to_cfg
,
1848 qs_is_changed
, qs_set_default
),
1849 CUSTOM_SETTING(0, qs_items
[QUICKSCREEN_BOTTOM
], LANG_BOTTOM_QS_ITEM
,
1851 qs_load_from_cfg
, qs_write_to_cfg
,
1852 qs_is_changed
, qs_set_default
),
1853 OFFON_SETTING(0, shortcuts_replaces_qs
, LANG_USE_SHORTCUTS_INSTEAD_OF_QS
,
1854 false, "shortcuts instead of quickscreen", NULL
),
1857 OFFON_SETTING(0, speaker_enabled
, LANG_ENABLE_SPEAKER
, false, "speaker",
1858 audiohw_enable_speaker
),
1860 #ifdef HAVE_TOUCHSCREEN
1861 CHOICE_SETTING(0, touch_mode
, LANG_TOUCHSCREEN_MODE
, DEFAULT_TOUCHSCREEN_MODE
,
1862 "touchscreen mode", "point,grid", NULL
, 2,
1863 ID2P(LANG_TOUCHSCREEN_POINT
), ID2P(LANG_TOUCHSCREEN_GRID
)),
1864 CUSTOM_SETTING(0, ts_calibration_data
, -1,
1865 &default_calibration_parameters
, "touchscreen calibration",
1866 tsc_load_from_cfg
, tsc_write_to_cfg
,
1867 tsc_is_changed
, tsc_set_default
),
1869 OFFON_SETTING(0, prevent_skip
, LANG_PREVENT_SKIPPING
, false, "prevent track skip", NULL
),
1871 #ifdef HAVE_PITCHCONTROL
1872 OFFON_SETTING(0, pitch_mode_semitone
, LANG_SEMITONE
, false,
1873 "Semitone pitch change", NULL
),
1874 #if CONFIG_CODEC == SWCODEC
1875 OFFON_SETTING(0, pitch_mode_timestretch
, LANG_TIMESTRETCH
, false,
1876 "Timestretch mode", NULL
),
1880 #ifdef USB_ENABLE_HID
1881 OFFON_SETTING(0, usb_hid
, LANG_USB_HID
, true, "usb hid", usb_set_hid
),
1882 CHOICE_SETTING(0, usb_keypad_mode
, LANG_USB_KEYPAD_MODE
, 0,
1883 "usb keypad mode", "multimedia,presentation,browser"
1884 #ifdef HAVE_USB_HID_MOUSE
1888 #ifdef HAVE_USB_HID_MOUSE
1893 ID2P(LANG_MULTIMEDIA_MODE
), ID2P(LANG_PRESENTATION_MODE
),
1894 ID2P(LANG_BROWSER_MODE
)
1895 #ifdef HAVE_USB_HID_MOUSE
1896 , ID2P(LANG_MOUSE_MODE
)
1898 ), /* CHOICE_SETTING( usb_keypad_mode ) */
1901 #if defined(USB_ENABLE_STORAGE) && defined(HAVE_MULTIDRIVE)
1902 OFFON_SETTING(0, usb_skip_first_drive
, LANG_USB_SKIP_FIRST_DRIVE
, false, "usb skip first drive", usb_set_skip_first_drive
),
1905 /* Customizable list */
1906 #ifdef HAVE_LCD_BITMAP
1907 VIEWPORT_SETTING(ui_vp_config
, "ui viewport"),
1908 #ifdef HAVE_REMOTE_LCD
1909 VIEWPORT_SETTING(remote_ui_vp_config
, "remote ui viewport"),
1913 #ifdef HAVE_MORSE_INPUT
1914 OFFON_SETTING(0, morse_input
, LANG_MORSE_INPUT
, false, "morse input", NULL
),
1918 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, hotkey_wps
,
1919 LANG_HOTKEY_WPS
, HOTKEY_VIEW_PLAYLIST
, "hotkey wps",
1920 "off,view playlist,show track info,pitchscreen,open with,delete"
1921 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1924 ,UNIT_INT
, hotkey_formatter
, hotkey_getlang
, NULL
,
1925 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1931 HOTKEY_VIEW_PLAYLIST
, HOTKEY_SHOW_TRACK_INFO
, HOTKEY_PITCHSCREEN
,
1932 HOTKEY_OPEN_WITH
, HOTKEY_DELETE
1933 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1934 , HOTKEY_PICTUREFLOW
1937 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS
, hotkey_tree
,
1938 LANG_HOTKEY_FILE_BROWSER
, HOTKEY_OFF
, "hotkey tree",
1939 "off,open with,delete,insert,insert shuffled",
1940 UNIT_INT
, hotkey_formatter
, hotkey_getlang
, NULL
, 5, HOTKEY_OFF
,
1941 HOTKEY_OPEN_WITH
, HOTKEY_DELETE
, HOTKEY_INSERT
, HOTKEY_INSERT_SHUFFLED
),
1944 #if CONFIG_CODEC == SWCODEC
1945 INT_SETTING(0, resume_rewind
, LANG_RESUME_REWIND
, 0,
1946 "resume rewind", UNIT_SEC
, 0, 60, 5,
1949 CUSTOM_SETTING(0, root_menu_customized
,
1950 LANG_ROCKBOX_TITLE
, /* lang string here is never actually used */
1951 NULL
, "root menu order",
1952 root_menu_load_from_cfg
, root_menu_write_to_cfg
,
1953 root_menu_is_changed
, root_menu_set_default
),
1956 const int nb_settings
= sizeof(settings
)/sizeof(*settings
);
1958 const struct settings_list
* get_settings_list(int*count
)
1960 *count
= nb_settings
;