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