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