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