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