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