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