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