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