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