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