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