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