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