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