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