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