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