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