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