Bump version numbers for 3.13
[maemo-rb.git] / apps / settings_list.c
blobcc4012ec1417c931f317c7ce5ed5283aa95e5ab8
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-extra.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 "sound.h"
33 #include "settings.h"
34 #include "settings_list.h"
35 #include "usb.h"
36 #include "audio.h"
37 #include "power.h"
38 #include "powermgmt.h"
39 #include "kernel.h"
40 #ifdef HAVE_REMOTE_LCD
41 #include "lcd-remote.h"
42 #endif
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
60 #ifdef HAVE_HOTKEY
61 #include "onplay.h"
62 #endif
64 #define NVRAM(bytes) (bytes<<F_NVRAM_MASK_SHIFT)
65 /** NOTE: NVRAM_CONFIG_VERSION is in settings_list.h
66 and you may need to update it if you edit this file */
68 #define UNUSED {.RESERVED=NULL}
69 #define INT(a) {.int_ = a}
70 #define UINT(a) {.uint_ = a}
71 #define BOOL(a) {.bool_ = a}
72 #define CHARPTR(a) {.charptr = a}
73 #define UCHARPTR(a) {.ucharptr = a}
74 #define FUNCTYPE(a) {.func = a}
75 #define NODEFAULT INT(0)
77 /* in all the following macros the args are:
78 - flags: bitwise | or the F_ bits in settings_list.h
79 - var: pointer to the variable being changed (usually in global_settings)
80 - lang_id: LANG_* id to display in menus and setting screens for the setting
81 - default: the default value for the variable, set if settings are reset
82 - name: the name of the setting in config files
83 - cfg_vals: comma separated list of legal values to write to cfg files.
84 The values correspond to the values 0,1,2,etc. of the setting.
85 NULL if just the number itself should be written to the file.
86 No spaces between the values and the commas!
87 - cb: the callback used by the setting screen.
90 /* Use for int settings which use the set_sound() function to set them */
91 #define SOUND_SETTING(flags,var,lang_id,name,setting) \
92 {flags|F_T_INT|F_T_SOUND|F_SOUNDSETTING, &global_settings.var, \
93 lang_id, NODEFAULT,name,NULL, \
94 {.sound_setting=(struct sound_setting[]){{setting}}} }
96 /* Use for bool variables which don't use LANG_SET_BOOL_YES and LANG_SET_BOOL_NO
97 or dont save as "off" or "on" in the cfg.
98 cfgvals are comma separated values (without spaces after the comma!) to write
99 for 'false' and 'true' (in this order)
100 yes_id is the lang_id for the 'yes' (or 'on') option in the menu
101 no_id is the lang_id for the 'no' (or 'off') option in the menu
103 #define BOOL_SETTING(flags,var,lang_id,default,name,cfgvals,yes_id,no_id,cb)\
104 {flags|F_BOOL_SETTING, &global_settings.var, \
105 lang_id, BOOL(default),name,cfgvals, \
106 {.bool_setting=(struct bool_setting[]){{cb,yes_id,no_id}}} }
108 /* bool setting which does use LANG_YES and _NO and save as "off,on" */
109 #define OFFON_SETTING(flags,var,lang_id,default,name,cb) \
110 BOOL_SETTING(flags,var,lang_id,default,name,off_on, \
111 LANG_SET_BOOL_YES,LANG_SET_BOOL_NO,cb)
113 /* int variable which is NOT saved to .cfg files,
114 (Use NVRAM() in the flags to save to the nvram (or nvram.bin file) */
115 #define SYSTEM_SETTING(flags,var,default) \
116 {flags|F_T_INT, &global_status.var,-1, INT(default), \
117 NULL, NULL, UNUSED}
119 /* setting which stores as a filename (or another string) in the .cfgvals
120 The string must be a char array (which all of our string settings are),
121 not just a char pointer.
122 prefix: The absolute path to not save in the variable, ex /.rockbox/wps_file
123 suffix: The file extention (usually...) e.g .wps_file
124 If the prefix is set (not NULL), then the suffix must be set as well.
126 #define TEXT_SETTING(flags,var,name,default,prefix,suffix) \
127 {flags|F_T_UCHARPTR, &global_settings.var,-1, \
128 CHARPTR(default),name,NULL, \
129 {.filename_setting= \
130 (struct filename_setting[]){ \
131 {prefix,suffix,sizeof(global_settings.var)}}} }
133 /* Used for settings which use the set_option() setting screen.
134 The ... arg is a list of pointers to strings to display in the setting
135 screen. These can either be literal strings, or ID2P(LANG_*) */
136 #define CHOICE_SETTING(flags,var,lang_id,default,name,cfg_vals,cb,count,...) \
137 {flags|F_CHOICE_SETTING|F_T_INT, &global_settings.var, lang_id, \
138 INT(default), name, cfg_vals, \
139 {.choice_setting = (struct choice_setting[]){ \
140 {cb, count, {.desc = (const unsigned char*[]) \
141 {__VA_ARGS__}}}}}}
143 /* Similar to above, except the strings to display are taken from cfg_vals,
144 the ... arg is a list of ID's to talk for the strings, can use TALK_ID()'s */
145 #define STRINGCHOICE_SETTING(flags,var,lang_id,default,name,cfg_vals, \
146 cb,count,...) \
147 {flags|F_CHOICE_SETTING|F_T_INT|F_CHOICETALKS, \
148 &global_settings.var, lang_id, \
149 INT(default), name, cfg_vals, \
150 {.choice_setting = (struct choice_setting[]){ \
151 {cb, count, {.talks = (const int[]){__VA_ARGS__}}}}}}
153 /* for settings which use the set_int() setting screen.
154 unit is the UNIT_ define to display/talk.
155 the first one saves a string to the config file,
156 the second one saves the variable value to the config file */
157 #define INT_SETTING_W_CFGVALS(flags, var, lang_id, default, name, cfg_vals, \
158 unit, min, max, step, formatter, get_talk_id, cb) \
159 {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \
160 lang_id, INT(default), name, cfg_vals, \
161 {.int_setting = (struct int_setting[]){ \
162 {cb, unit, min, max, step, formatter, get_talk_id}}}}
163 #define INT_SETTING(flags, var, lang_id, default, name, \
164 unit, min, max, step, formatter, get_talk_id, cb) \
165 {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \
166 lang_id, INT(default), name, NULL, \
167 {.int_setting = (struct int_setting[]){ \
168 {cb, unit, min, max, step, formatter, get_talk_id}}}}
169 #define INT_SETTING_NOWRAP(flags, var, lang_id, default, name, \
170 unit, min, max, step, formatter, get_talk_id, cb) \
171 {flags|F_INT_SETTING|F_T_INT|F_NO_WRAP, &global_settings.var, \
172 lang_id, INT(default), name, NULL, \
173 {.int_setting = (struct int_setting[]){ \
174 {cb, unit, min, max, step, formatter, get_talk_id}}}}
176 #define TABLE_SETTING(flags, var, lang_id, default, name, cfg_vals, \
177 unit, formatter, get_talk_id, cb, count, ...) \
178 {flags|F_TABLE_SETTING|F_T_INT, &global_settings.var, \
179 lang_id, INT(default), name, cfg_vals, \
180 {.table_setting = (struct table_setting[]) { \
181 {cb, formatter, get_talk_id, unit, count, \
182 (const int[]){__VA_ARGS__}}}}}
184 #define CUSTOM_SETTING(flags, var, lang_id, default, name, \
185 load_from_cfg, write_to_cfg, \
186 is_change, set_default) \
187 {flags|F_CUSTOM_SETTING|F_T_CUSTOM|F_BANFROMQS, \
188 &global_settings.var, lang_id, \
189 {.custom = (void*)default}, name, NULL, \
190 {.custom_setting = (struct custom_setting[]){ \
191 {load_from_cfg, write_to_cfg, is_change, set_default}}}}
193 #define VIEWPORT_SETTING(var,name) \
194 TEXT_SETTING(F_THEMESETTING,var,name,"-", NULL, NULL)
196 /* some sets of values which are used more than once, to save memory */
197 static const char off_on[] = "off,on";
198 static const char off_on_ask[] = "off,on,ask";
199 static const char off_number_spell[] = "off,number,spell";
200 #ifdef HAVE_LCD_BITMAP
201 static const char graphic_numeric[] = "graphic,numeric";
202 #endif
204 /* Default theme settings */
205 #define DEFAULT_WPSNAME "cabbiev2"
206 #define DEFAULT_SBSNAME "-"
207 #define DEFAULT_FMS_NAME "cabbiev2"
209 #ifdef HAVE_LCD_BITMAP
211 #if LCD_HEIGHT <= 64
212 #define DEFAULT_FONT_HEIGHT 8
213 #define DEFAULT_FONTNAME "08-Rockfont"
214 #elif LCD_HEIGHT <= 80
215 #define DEFAULT_FONT_HEIGHT 11
216 #define DEFAULT_FONTNAME "11-Sazanami-Mincho"
217 #elif (LCD_HEIGHT == 96) && (LCD_WIDTH == 96) /* sandisk sansa clip zip */
218 #define DEFAULT_FONT_HEIGHT 8
219 #define DEFAULT_FONTNAME "08-Rockfont"
220 #elif LCD_HEIGHT <= 220
221 #define DEFAULT_FONT_HEIGHT 12
222 #elif LCD_HEIGHT <= 320
223 #define DEFAULT_FONT_HEIGHT 15
224 #elif LCD_HEIGHT <= 400
225 #define DEFAULT_FONT_HEIGHT 16
226 #elif LCD_HEIGHT <= 480 && LCD_WIDTH < 800
227 #define DEFAULT_FONT_HEIGHT 27
228 #else
229 #define DEFAULT_FONT_HEIGHT 35
230 #endif
231 #define DEFAULT_GLYPHS 250
232 #define MIN_GLYPHS 50
233 #define MAX_GLYPHS 65540
235 #else
236 #define DEFAULT_FONT_HEIGHT 12
237 #endif
239 #ifndef DEFAULT_FONTNAME
240 /* ugly expansion needed */
241 #define _EXPAND2(x) #x
242 #define _EXPAND(x) _EXPAND2(x)
243 #define DEFAULT_FONTNAME _EXPAND(DEFAULT_FONT_HEIGHT) "-Adobe-Helvetica"
244 #endif
246 #ifdef HAVE_LCD_COLOR
247 #if DEFAULT_FONT_HEIGHT >= 31
248 #define DEFAULT_ICONSET "tango_icons.32x32"
249 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.32x32"
250 #elif DEFAULT_FONT_HEIGHT >= 23
251 #define DEFAULT_ICONSET "tango_icons.24x24"
252 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.24x24"
253 #elif DEFAULT_FONT_HEIGHT >= 15
254 #define DEFAULT_ICONSET "tango_icons.16x16"
255 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.16x16"
256 #elif DEFAULT_FONT_HEIGHT >= 11
257 #define DEFAULT_ICONSET "tango_icons.12x12"
258 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.12x12"
259 #elif DEFAULT_FONT_HEIGHT >= 7
260 #define DEFAULT_ICONSET "tango_icons.8x8"
261 #define DEFAULT_VIEWERS_ICONSET "tango_icons_viewers.8x8"
262 #endif
263 #elif LCD_DEPTH > 1 /* greyscale */
264 #define DEFAULT_ICONSET "tango_small_mono"
265 #define DEFAULT_VIEWERS_ICONSET "tango_small_viewers_mono"
266 #else /* monochrome */
267 #define DEFAULT_ICONSET ""
268 #define DEFAULT_VIEWERS_ICONSET ""
269 #endif
271 #ifdef HAVE_REMOTE_LCD
272 #if LCD_REMOTE_HEIGHT <= 64
273 #define DEFAULT_REMOTE_FONTNAME "08-Rockfont"
274 #else
275 #define DEFAULT_REMOTE_FONTNAME "-"
276 #endif
277 #endif /* HAVE_REMOTE_LCD */
279 #define DEFAULT_THEME_FOREGROUND LCD_RGBPACK(0xce, 0xcf, 0xce)
280 #define DEFAULT_THEME_BACKGROUND LCD_RGBPACK(0x00, 0x00, 0x00)
281 #define DEFAULT_THEME_SELECTOR_START LCD_RGBPACK(0xff, 0xeb, 0x9c)
282 #define DEFAULT_THEME_SELECTOR_END LCD_RGBPACK(0xb5, 0x8e, 0x00)
283 #define DEFAULT_THEME_SELECTOR_TEXT LCD_RGBPACK(0x00, 0x00, 0x00)
285 #define DEFAULT_BACKDROP BACKDROP_DIR "/cabbiev2.bmp"
287 #ifdef HAVE_RECORDING
288 /* these should be in the config.h files */
289 #if CONFIG_CODEC == MAS3587F
290 # define DEFAULT_REC_MIC_GAIN 8
291 # define DEFAULT_REC_LEFT_GAIN 2
292 # define DEFAULT_REC_RIGHT_GAIN 2
293 #elif CONFIG_CODEC == SWCODEC
294 # ifdef HAVE_UDA1380
295 # define DEFAULT_REC_MIC_GAIN 16
296 # define DEFAULT_REC_LEFT_GAIN 0
297 # define DEFAULT_REC_RIGHT_GAIN 0
298 # elif defined(HAVE_TLV320)
299 # define DEFAULT_REC_MIC_GAIN 0
300 # define DEFAULT_REC_LEFT_GAIN 0
301 # define DEFAULT_REC_RIGHT_GAIN 0
302 # elif defined(HAVE_WM8975)
303 # define DEFAULT_REC_MIC_GAIN 16
304 # define DEFAULT_REC_LEFT_GAIN 0
305 # define DEFAULT_REC_RIGHT_GAIN 0
306 # elif defined(HAVE_WM8758)
307 # define DEFAULT_REC_MIC_GAIN 16
308 # define DEFAULT_REC_LEFT_GAIN 0
309 # define DEFAULT_REC_RIGHT_GAIN 0
310 # elif defined(HAVE_WM8731)
311 # define DEFAULT_REC_MIC_GAIN 16
312 # define DEFAULT_REC_LEFT_GAIN 0
313 # define DEFAULT_REC_RIGHT_GAIN 0
314 # endif
315 #endif
317 #endif /* HAVE_RECORDING */
319 #if (CONFIG_PLATFORM & PLATFORM_ANDROID)
320 #define DEFAULT_TAGCACHE_SCAN_PATHS "/sdcard"
321 #else
322 #define DEFAULT_TAGCACHE_SCAN_PATHS "/"
323 #endif
325 #ifdef HAVE_TOUCHSCREEN
327 static const char* list_pad_formatter(char *buffer, size_t buffer_size,
328 int val, const char *unit)
330 switch (val)
332 case -1: return str(LANG_AUTOMATIC);
333 case 0: return str(LANG_OFF);
334 default: break;
336 snprintf(buffer, buffer_size, "%d %s", val, unit);
337 return buffer;
340 static int32_t list_pad_getlang(int value, int unit)
342 switch (value)
344 case -1: return LANG_AUTOMATIC;
345 case 0: return LANG_OFF;
346 default: return TALK_ID(value, unit);
350 #endif /* HAVE_TOUCHSCREEN */
351 static const char* formatter_unit_0_is_off(char *buffer, size_t buffer_size,
352 int val, const char *unit)
354 if (val == 0)
355 return str(LANG_OFF);
356 else
357 snprintf(buffer, buffer_size, "%d %s", val, unit);
358 return buffer;
361 static int32_t getlang_unit_0_is_off(int value, int unit)
363 if (value == 0)
364 return LANG_OFF;
365 else
366 return TALK_ID(value,unit);
369 static const char* formatter_unit_0_is_skip_track(char *buffer, size_t buffer_size,
370 int val, const char *unit)
372 (void)unit;
373 if (val == -1)
374 return str(LANG_SKIP_OUTRO);
375 else if (val == 0)
376 return str(LANG_SKIP_TRACK);
377 else if (val % 60 == 0)
378 snprintf(buffer, buffer_size, "%d min", val/60);
379 else
380 snprintf(buffer, buffer_size, "%d s", val);
381 return buffer;
384 static int32_t getlang_unit_0_is_skip_track(int value, int unit)
386 (void)unit;
387 if (value == -1)
388 return LANG_SKIP_OUTRO;
389 else if (value == 0)
390 return LANG_SKIP_TRACK;
391 else if (value % 60 == 0)
392 return TALK_ID(value/60, UNIT_MIN);
393 else
394 return TALK_ID(value, UNIT_SEC);
397 #ifdef HAVE_BACKLIGHT
398 #ifdef SIMULATOR
399 #define DEFAULT_BACKLIGHT_TIMEOUT 0
400 #else
401 #define DEFAULT_BACKLIGHT_TIMEOUT 15
402 #endif
403 static const char* backlight_formatter(char *buffer, size_t buffer_size,
404 int val, const char *unit)
406 if (val == -1)
407 return str(LANG_OFF);
408 else if (val == 0)
409 return str(LANG_ON);
410 else
411 snprintf(buffer, buffer_size, "%d %s", val, unit);
412 return buffer;
414 static int32_t backlight_getlang(int value, int unit)
416 if (value == -1)
417 return LANG_OFF;
418 else if (value == 0)
419 return LANG_ON;
420 else
421 return TALK_ID(value, unit);
423 #endif
425 #ifndef HAVE_WHEEL_ACCELERATION
426 static const char* scanaccel_formatter(char *buffer, size_t buffer_size,
427 int val, const char *unit)
429 (void)unit;
430 if (val == 0)
431 return str(LANG_OFF);
432 else
433 snprintf(buffer, buffer_size, "Speed up every %ds", val);
434 return buffer;
436 #endif
438 #if CONFIG_CODEC == SWCODEC
439 static void crossfeed_cross_set(int val)
441 (void)val;
442 dsp_set_crossfeed_cross_params(global_settings.crossfeed_cross_gain,
443 global_settings.crossfeed_hf_attenuation,
444 global_settings.crossfeed_hf_cutoff);
447 static void compressor_set(int val)
449 (void)val;
450 dsp_set_compressor(&global_settings.compressor_settings);
453 static const char* db_format(char* buffer, size_t buffer_size, int value,
454 const char* unit)
456 int v = abs(value);
458 snprintf(buffer, buffer_size, "%s%d.%d %s", value < 0 ? "-" : "",
459 v / 10, v % 10, unit);
460 return buffer;
463 static int32_t get_dec_talkid(int value, int unit)
465 return TALK_ID_DECIMAL(value, 1, unit);
468 static int32_t get_precut_talkid(int value, int unit)
470 return TALK_ID_DECIMAL(-value, 1, unit);
473 struct eq_band_setting eq_defaults[EQ_NUM_BANDS] = {
474 { 32, 7, 0 },
475 { 64, 10, 0 },
476 { 125, 10, 0 },
477 { 250, 10, 0 },
478 { 500, 10, 0 },
479 { 1000, 10, 0 },
480 { 2000, 10, 0 },
481 { 4000, 10, 0 },
482 { 8000, 10, 0 },
483 { 16000, 7, 0 },
486 static void eq_load_from_cfg(void *setting, char *value)
488 struct eq_band_setting *eq = setting;
489 char *val_end, *end;
491 val_end = value + strlen(value);
493 /* cutoff/center */
494 end = strchr(value, ',');
495 if (!end) return;
496 *end = '\0';
497 eq->cutoff = atoi(value);
499 /* q */
500 value = end + 1;
501 if (value > val_end) return;
502 end = strchr(value, ',');
503 if (!end) return;
504 *end = '\0';
505 eq->q = atoi(value);
507 /* gain */
508 value = end + 1;
509 if (value > val_end) return;
510 eq->gain = atoi(value);
513 static char* eq_write_to_cfg(void *setting, char *buf, int buf_len)
515 struct eq_band_setting *eq = setting;
517 snprintf(buf, buf_len, "%d, %d, %d", eq->cutoff, eq->q, eq->gain);
518 return buf;
521 static bool eq_is_changed(void *setting, void *defaultval)
523 struct eq_band_setting *eq = setting;
525 return memcmp(eq, defaultval, sizeof(struct eq_band_setting));
528 static void eq_set_default(void* setting, void* defaultval)
530 memcpy(setting, defaultval, sizeof(struct eq_band_setting));
533 #endif
534 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
535 static void set_mdb_enable(bool value)
537 sound_set_mdb_enable((int)value);
539 static void set_superbass(bool value)
541 sound_set_superbass((int)value);
543 #endif
545 #ifdef HAVE_QUICKSCREEN
546 static int find_setting_by_name(char*name)
548 int i = 0;
549 const struct settings_list *setting;
550 if (!strcmp(name, "-"))
551 return -1;
552 while (i<nb_settings)
554 setting = &settings[i];
555 if (setting->cfg_name && !strcmp(setting->cfg_name, name))
557 return i;
559 i++;
561 return -1;
563 static void qs_load_from_cfg(void* var, char*value)
565 *(int*)var = find_setting_by_name(value);
567 static char* qs_write_to_cfg(void* setting, char*buf, int buf_len)
569 int index = *(int*)setting;
570 if (index < 0 || index >= nb_settings - 1)
572 strlcpy(buf, "-", buf_len);
573 return buf;
575 const struct settings_list *var = &settings[index];
576 strlcpy(buf, var->cfg_name, buf_len);
577 return buf;
579 static bool qs_is_changed(void* setting, void* defaultval)
581 int i = *(int*)setting;
582 if (i < 0 || i >= nb_settings)
583 return false;
584 const struct settings_list *var = &settings[i];
585 return var != find_setting(defaultval, NULL);
587 static void qs_set_default(void* setting, void* defaultval)
589 if (defaultval == NULL)
590 *(int*)setting = -1;
591 find_setting(defaultval, (int*)setting);
593 #endif
594 #ifdef HAVE_TOUCHSCREEN
596 #if defined(APPLICATION) \
597 || defined(ONDA_VX747) \
598 || defined(ONDA_VX767) \
599 || defined(ONDA_VX747P) \
600 || defined(ONDA_VX777)
602 #define DEFAULT_TOUCHSCREEN_MODE TOUCHSCREEN_POINT
603 #else
604 #define DEFAULT_TOUCHSCREEN_MODE TOUCHSCREEN_BUTTON
605 #endif
607 static void tsc_load_from_cfg(void* setting, char*value)
609 struct touchscreen_parameter *var = (struct touchscreen_parameter*) setting;
611 /* Replacement for sscanf(value, "%d ..., &var->A, ...); */
612 int vals[7], count = 0;
613 while(*value != 0 && count < 7)
615 if(isspace(*value))
616 value++;
617 else
619 vals[count++] = atoi(value);
620 while(!isspace(*value))
621 value++;
624 var->A = vals[0];
625 var->B = vals[1];
626 var->C = vals[2];
627 var->D = vals[3];
628 var->E = vals[4];
629 var->F = vals[5];
630 var->divider = vals[6];
633 static char* tsc_write_to_cfg(void* setting, char*buf, int buf_len)
635 const struct touchscreen_parameter *var = (const struct touchscreen_parameter*) setting;
636 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);
637 return buf;
639 static bool tsc_is_changed(void* setting, void* defaultval)
641 return memcmp(setting, defaultval, sizeof(struct touchscreen_parameter)) != 0;
643 static void tsc_set_default(void* setting, void* defaultval)
645 memcpy(setting, defaultval, sizeof(struct touchscreen_parameter));
647 #endif
648 #ifdef HAVE_HOTKEY
649 static const char* hotkey_formatter(char* buffer, size_t buffer_size, int value,
650 const char* unit)
652 (void)buffer;
653 (void)buffer_size;
654 (void)unit;
655 return str(get_hotkey_lang_id(value));
657 static int32_t hotkey_getlang(int value, int unit)
659 (void)unit;
660 return get_hotkey_lang_id(value);
662 #endif /* HAVE_HOTKEY */
663 const struct settings_list settings[] = {
664 /* sound settings */
665 SOUND_SETTING(F_NO_WRAP,volume, LANG_VOLUME, "volume", SOUND_VOLUME),
666 SOUND_SETTING(0, balance, LANG_BALANCE, "balance", SOUND_BALANCE),
667 /* Tone controls */
668 #ifdef AUDIOHW_HAVE_BASS
669 SOUND_SETTING(F_NO_WRAP,bass, LANG_BASS, "bass", SOUND_BASS),
670 #endif
671 #ifdef AUDIOHW_HAVE_TREBLE
672 SOUND_SETTING(F_NO_WRAP,treble, LANG_TREBLE, "treble", SOUND_TREBLE),
673 #endif
674 /* Hardware EQ tone controls */
675 #ifdef AUDIOHW_HAVE_EQ
676 /* Band gain is generic */
677 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND1].gain,
678 LANG_HW_EQ_GAIN, "tone band1 gain", SOUND_EQ_BAND1_GAIN),
679 #ifdef AUDIOHW_HAVE_EQ_BAND2
680 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND2].gain,
681 LANG_HW_EQ_GAIN, "tone band2 gain", SOUND_EQ_BAND2_GAIN),
682 #endif /* AUDIOHW_HAVE_EQ_BAND2 */
683 #ifdef AUDIOHW_HAVE_EQ_BAND3
684 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND3].gain,
685 LANG_HW_EQ_GAIN, "tone band3 gain", SOUND_EQ_BAND3_GAIN),
686 #endif /* AUDIOHW_HAVE_EQ_BAND3 */
687 #ifdef AUDIOHW_HAVE_EQ_BAND4
688 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND4].gain,
689 LANG_HW_EQ_GAIN, "tone band4 gain", SOUND_EQ_BAND4_GAIN),
690 #endif /* AUDIOHW_HAVE_EQ_BAND4 */
691 #ifdef AUDIOHW_HAVE_EQ_BAND5
692 SOUND_SETTING(F_NO_WRAP, hw_eq_bands[AUDIOHW_EQ_BAND5].gain,
693 LANG_HW_EQ_GAIN, "tone band5 gain", SOUND_EQ_BAND5_GAIN),
694 #endif /* AUDIOHW_HAVE_EQ_BAND5 */
695 #ifdef HAVE_WM8978
696 /* Frequencies vary with samplerate but at least the user has an idea
697 * about the bands and it will be correct with normal playback rates. */
698 /* Band 1 */
699 STRINGCHOICE_SETTING(F_SOUNDSETTING,
700 hw_eq_bands[AUDIOHW_EQ_BAND1].frequency,
701 LANG_HW_EQ_FREQUENCY, 0,"tone band1 frequency",
702 "80 Hz,105 Hz,135 Hz,175 Hz",
703 sound_set_hw_eq_band1_frequency, 4,
704 TALK_ID(80, UNIT_HERTZ), TALK_ID(105, UNIT_HERTZ),
705 TALK_ID(135, UNIT_HERTZ), TALK_ID(175, UNIT_HERTZ)),
706 /* Band 2 */
707 STRINGCHOICE_SETTING(F_SOUNDSETTING,
708 hw_eq_bands[AUDIOHW_EQ_BAND2].frequency,
709 LANG_HW_EQ_FREQUENCY, 0,"tone band2 frequency",
710 "230 Hz,300 Hz,385 Hz,500 Hz",
711 sound_set_hw_eq_band2_frequency, 4,
712 TALK_ID(230, UNIT_HERTZ), TALK_ID(300, UNIT_HERTZ),
713 TALK_ID(385, UNIT_HERTZ), TALK_ID(500, UNIT_HERTZ)),
714 CHOICE_SETTING(F_SOUNDSETTING, hw_eq_bands[AUDIOHW_EQ_BAND2].width,
715 LANG_HW_EQ_WIDTH, 0, "tone band2 width", "narrow,wide",
716 sound_set_hw_eq_band2_width, 2,
717 ID2P(LANG_HW_EQ_WIDTH_NARROW), ID2P(LANG_HW_EQ_WIDTH_WIDE)),
718 /* Band 3 */
719 STRINGCHOICE_SETTING(F_SOUNDSETTING,
720 hw_eq_bands[AUDIOHW_EQ_BAND3].frequency,
721 LANG_HW_EQ_FREQUENCY, 0, "tone band3 frequency",
722 "650 Hz,850 Hz,1.1 kHz,1.4 kHz",
723 sound_set_hw_eq_band3_frequency, 4,
724 TALK_ID(650, UNIT_HERTZ), TALK_ID(850, UNIT_HERTZ),
725 TALK_ID_DECIMAL(11, 1, UNIT_KHZ),
726 TALK_ID_DECIMAL(14, 1, UNIT_KHZ)),
727 CHOICE_SETTING(F_SOUNDSETTING,hw_eq_bands[AUDIOHW_EQ_BAND3].width,
728 LANG_HW_EQ_WIDTH, 0, "tone band3 width", "narrow,wide",
729 sound_set_hw_eq_band3_width, 2,
730 ID2P(LANG_HW_EQ_WIDTH_NARROW), ID2P(LANG_HW_EQ_WIDTH_WIDE)),
731 /* Band 4 */
732 STRINGCHOICE_SETTING(F_SOUNDSETTING,
733 hw_eq_bands[AUDIOHW_EQ_BAND4].frequency,
734 LANG_HW_EQ_FREQUENCY, 0, "tone band4 frequency",
735 "1.8 kHz,2.4 kHz,3.2 kHz,4.1 kHz",
736 sound_set_hw_eq_band4_frequency, 4,
737 TALK_ID_DECIMAL(18, 1, UNIT_KHZ),
738 TALK_ID_DECIMAL(24, 1, UNIT_KHZ),
739 TALK_ID_DECIMAL(32, 1, UNIT_KHZ),
740 TALK_ID_DECIMAL(41, 1, UNIT_KHZ)),
741 CHOICE_SETTING(F_SOUNDSETTING, hw_eq_bands[AUDIOHW_EQ_BAND4].width,
742 LANG_HW_EQ_WIDTH, 0, "tone band4 width", "narrow,wide",
743 sound_set_hw_eq_band4_width, 2,
744 ID2P(LANG_HW_EQ_WIDTH_NARROW), ID2P(LANG_HW_EQ_WIDTH_WIDE)),
745 /* Band 5 */
746 STRINGCHOICE_SETTING(F_SOUNDSETTING,
747 hw_eq_bands[AUDIOHW_EQ_BAND5].frequency,
748 LANG_HW_EQ_FREQUENCY, 0, "tone band5 frequency",
749 "5.3 kHz,6.9 kHz,9.0 kHz,11.7 kHz",
750 sound_set_hw_eq_band5_frequency, 4,
751 TALK_ID_DECIMAL(53, 1, UNIT_KHZ),
752 TALK_ID_DECIMAL(69, 1, UNIT_KHZ),
753 TALK_ID_DECIMAL(90, 1, UNIT_KHZ),
754 TALK_ID_DECIMAL(117, 1, UNIT_KHZ)),
755 #endif /* HAVE_WM8978 */
756 #endif /* AUDIOHW_HAVE_EQ */
757 /* 3-d enhancement effect */
758 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
759 SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS),
760 STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume",
761 "off,20ms,2,4,8,", sound_set_avc, 5,
762 LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC),
763 TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)),
764 OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass",
765 set_superbass),
766 #endif
768 CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION,
769 0,"channels",
770 "stereo,mono,custom,mono left,mono right,karaoke",
771 sound_set_channels, 6,
772 ID2P(LANG_CHANNEL_STEREO), ID2P(LANG_CHANNEL_MONO),
773 ID2P(LANG_CHANNEL_CUSTOM), ID2P(LANG_CHANNEL_LEFT),
774 ID2P(LANG_CHANNEL_RIGHT), ID2P(LANG_CHANNEL_KARAOKE)),
775 SOUND_SETTING(F_SOUNDSETTING, stereo_width, LANG_STEREO_WIDTH,
776 "stereo_width", SOUND_STEREO_WIDTH),
777 #ifdef AUDIOHW_HAVE_DEPTH_3D
778 SOUND_SETTING(0,depth_3d, LANG_DEPTH_3D, "3-d enhancement",
779 SOUND_DEPTH_3D),
780 #endif
781 /* playback */
782 OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL),
783 SYSTEM_SETTING(NVRAM(4), resume_index, -1),
784 SYSTEM_SETTING(NVRAM(4), resume_crc32, -1),
785 SYSTEM_SETTING(NVRAM(4), resume_offset, -1),
786 CHOICE_SETTING(0, repeat_mode, LANG_REPEAT, REPEAT_OFF, "repeat",
787 "off,all,one,shuffle"
788 #ifdef AB_REPEAT_ENABLE
789 ",ab"
790 #endif
791 , NULL,
792 #ifdef AB_REPEAT_ENABLE
794 #else
796 #endif
797 ID2P(LANG_OFF), ID2P(LANG_ALL), ID2P(LANG_REPEAT_ONE),
798 ID2P(LANG_SHUFFLE)
799 #ifdef AB_REPEAT_ENABLE
800 ,ID2P(LANG_REPEAT_AB)
801 #endif
802 ), /* CHOICE_SETTING( repeat_mode ) */
803 /* LCD */
804 #ifdef HAVE_LCD_CONTRAST
805 /* its easier to leave this one un-macro()ed for the time being */
806 { F_T_INT|F_DEF_ISFUNC|F_INT_SETTING, &global_settings.contrast,
807 LANG_CONTRAST, FUNCTYPE(lcd_default_contrast), "contrast", NULL , {
808 .int_setting = (struct int_setting[]) {
809 { lcd_set_contrast, UNIT_INT, MIN_CONTRAST_SETTING,
810 MAX_CONTRAST_SETTING, 1, NULL, NULL }}}},
811 #endif
812 #ifdef HAVE_BACKLIGHT
813 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout, LANG_BACKLIGHT,
814 DEFAULT_BACKLIGHT_TIMEOUT,
815 "backlight timeout", off_on, UNIT_SEC, backlight_formatter,
816 backlight_getlang, backlight_set_timeout, 20,
817 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
818 #if CONFIG_CHARGING
819 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout_plugged,
820 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10,
821 "backlight timeout plugged", off_on, UNIT_SEC,
822 backlight_formatter, backlight_getlang,
823 backlight_set_timeout_plugged, 20,
824 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
825 #endif
826 #endif /* HAVE_BACKLIGHT */
827 #ifdef HAVE_LCD_BITMAP
828 #ifdef HAVE_LCD_INVERT
829 BOOL_SETTING(0, invert, LANG_INVERT, false ,"invert", off_on,
830 LANG_INVERT_LCD_INVERSE, LANG_NORMAL, lcd_set_invert_display),
831 #endif
832 #ifdef HAVE_LCD_FLIP
833 OFFON_SETTING(0, flip_display, LANG_FLIP_DISPLAY, false, "flip display",
834 NULL),
835 #endif
836 /* display */
837 CHOICE_SETTING(F_TEMPVAR|F_THEMESETTING, cursor_style, LANG_INVERT_CURSOR,
838 #ifdef HAVE_LCD_COLOR
839 3, "selector type",
840 "pointer,bar (inverse),bar (color),bar (gradient)", NULL, 4,
841 ID2P(LANG_INVERT_CURSOR_POINTER),
842 ID2P(LANG_INVERT_CURSOR_BAR),
843 ID2P(LANG_INVERT_CURSOR_COLOR),
844 ID2P(LANG_INVERT_CURSOR_GRADIENT)),
845 #else
846 1, "selector type", "pointer,bar (inverse)", NULL, 2,
847 ID2P(LANG_INVERT_CURSOR_POINTER),
848 ID2P(LANG_INVERT_CURSOR_BAR)),
849 #endif
850 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar,
851 LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom",
852 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
853 ID2P(LANG_STATUSBAR_BOTTOM)),
854 #ifdef HAVE_REMOTE_LCD
855 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, remote_statusbar,
856 LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom",
857 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
858 ID2P(LANG_STATUSBAR_BOTTOM)),
859 #endif
860 CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, scrollbar,
861 LANG_SCROLL_BAR, SCROLLBAR_LEFT, "scrollbar","off,left,right",
862 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_LEFT), ID2P(LANG_RIGHT)),
863 INT_SETTING(F_THEMESETTING, scrollbar_width, LANG_SCROLLBAR_WIDTH, 6,
864 "scrollbar width",UNIT_INT, 3, MAX(LCD_WIDTH/10,25), 1,
865 NULL, NULL, NULL),
866 #ifdef HAVE_TOUCHSCREEN
867 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, list_line_padding, LANG_LIST_LINE_PADDING,
868 -1, "list padding", "auto,off", UNIT_PIXEL, list_pad_formatter,
869 list_pad_getlang, NULL, 16,
870 -1,0,2,4,6,8,10,12,16,20,24,28,32,38,44,50),
871 #endif
872 #if CONFIG_KEYPAD == RECORDER_PAD
873 OFFON_SETTING(F_THEMESETTING,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL),
874 #endif
875 CHOICE_SETTING(F_THEMESETTING, volume_type, LANG_VOLUME_DISPLAY, 0,
876 "volume display", graphic_numeric, NULL, 2,
877 ID2P(LANG_DISPLAY_GRAPHIC),
878 ID2P(LANG_DISPLAY_NUMERIC)),
879 CHOICE_SETTING(F_THEMESETTING, battery_display, LANG_BATTERY_DISPLAY, 0,
880 "battery display", graphic_numeric, NULL, 2,
881 ID2P(LANG_DISPLAY_GRAPHIC), ID2P(LANG_DISPLAY_NUMERIC)),
882 #if CONFIG_RTC
883 CHOICE_SETTING(0, timeformat, LANG_TIMEFORMAT, 0,
884 "time format", "24hour,12hour", NULL, 2,
885 ID2P(LANG_24_HOUR_CLOCK), ID2P(LANG_12_HOUR_CLOCK)),
886 #endif
887 #endif /* HAVE_LCD_BITMAP */
888 OFFON_SETTING(0,show_icons, LANG_SHOW_ICONS ,true,"show icons", NULL),
889 /* system */
890 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, poweroff, LANG_POWEROFF_IDLE, 10,
891 "idle poweroff", "off", UNIT_MIN, formatter_unit_0_is_off,
892 getlang_unit_0_is_off, set_poweroff_timeout, 15,
893 0,1,2,3,4,5,6,7,8,9,10,15,30,45,60),
894 SYSTEM_SETTING(NVRAM(4), runtime, 0),
895 SYSTEM_SETTING(NVRAM(4), topruntime, 0),
896 INT_SETTING(F_BANFROMQS, max_files_in_playlist,
897 LANG_MAX_FILES_IN_PLAYLIST,
898 #if MEMORYSIZE > 1
899 10000,
900 #else
901 400,
902 #endif
903 "max files in playlist", UNIT_INT, 1000, 32000, 1000,
904 NULL, NULL, NULL),
905 INT_SETTING(F_BANFROMQS, max_files_in_dir, LANG_MAX_FILES_IN_DIR,
906 #if MEMORYSIZE > 1
907 1000,
908 #else
909 200,
910 #endif
911 "max files in dir", UNIT_INT, 50, 10000, 50,
912 NULL, NULL, NULL),
913 /* use this setting for user code even if there's no exchangable battery
914 * support enabled */
915 #if BATTERY_CAPACITY_DEFAULT > 0
916 /* define min/max/inc for this file if there's only one battery */
917 #ifndef BATTERY_CAPACITY_MIN
918 #define BATTERY_CAPACITY_MIN BATTERY_CAPACITY_DEFAULT
919 #define BATTERY_CAPACITY_MAX BATTERY_CAPACITY_DEFAULT
920 #define BATTERY_CAPACITY_INC 0
921 #endif
922 #if defined(IPOD_VIDEO) && !defined(SIMULATOR)
923 /* its easier to leave this one un-macro()ed for the time being */
924 { F_T_INT|F_DEF_ISFUNC|F_INT_SETTING, &global_settings.battery_capacity,
925 LANG_BATTERY_CAPACITY, FUNCTYPE(battery_default_capacity),
926 "battery capacity", NULL , {
927 .int_setting = (struct int_setting[]) {
928 { set_battery_capacity, UNIT_MAH, BATTERY_CAPACITY_MIN,
929 BATTERY_CAPACITY_MAX, BATTERY_CAPACITY_INC, NULL, NULL }}}},
930 #else /* IPOD_VIDEO */
931 INT_SETTING(0, battery_capacity, LANG_BATTERY_CAPACITY,
932 BATTERY_CAPACITY_DEFAULT, "battery capacity", UNIT_MAH,
933 BATTERY_CAPACITY_MIN, BATTERY_CAPACITY_MAX,
934 BATTERY_CAPACITY_INC, NULL, NULL, set_battery_capacity),
935 #endif /* IPOD_VIDEO */
936 #endif
937 #if CONFIG_CHARGING
938 OFFON_SETTING(NVRAM(1), car_adapter_mode,
939 LANG_CAR_ADAPTER_MODE, false, "car adapter mode", NULL),
940 #endif
941 #ifdef IPOD_ACCESSORY_PROTOCOL
942 CHOICE_SETTING(0, serial_bitrate, LANG_SERIAL_BITRATE, 0, "serial bitrate",
943 "auto,9600,19200,38400,57600", iap_bitrate_set, 5, ID2P(LANG_SERIAL_BITRATE_AUTO),
944 ID2P(LANG_SERIAL_BITRATE_9600),ID2P(LANG_SERIAL_BITRATE_19200),
945 ID2P(LANG_SERIAL_BITRATE_38400),ID2P(LANG_SERIAL_BITRATE_57600)),
946 #endif
947 #ifdef HAVE_ACCESSORY_SUPPLY
948 OFFON_SETTING(0, accessory_supply, LANG_ACCESSORY_SUPPLY,
949 true, "accessory power supply", accessory_supply_set),
950 #endif
951 #ifdef HAVE_LINEOUT_POWEROFF
952 OFFON_SETTING(0, lineout_active, LANG_LINEOUT_ONOFF,
953 true, "lineout", lineout_set),
954 #endif
955 /* tuner */
956 #if CONFIG_TUNER
957 OFFON_SETTING(0,fm_force_mono, LANG_FM_MONO_MODE,
958 false, "force fm mono", toggle_mono_mode),
959 SYSTEM_SETTING(NVRAM(4),last_frequency,0),
960 #endif
962 #if BATTERY_TYPES_COUNT > 1
963 CHOICE_SETTING(0, battery_type, LANG_BATTERY_TYPE, 0, "battery type",
964 "alkaline,nimh", NULL, 2, ID2P(LANG_BATTERY_TYPE_ALKALINE),
965 ID2P(LANG_BATTERY_TYPE_NIMH)),
966 #endif
967 #ifdef HAVE_REMOTE_LCD
968 /* remote lcd */
969 INT_SETTING(0, remote_contrast, LANG_CONTRAST,
970 DEFAULT_REMOTE_CONTRAST_SETTING, "remote contrast", UNIT_INT,
971 MIN_REMOTE_CONTRAST_SETTING, MAX_REMOTE_CONTRAST_SETTING, 1,
972 NULL, NULL, lcd_remote_set_contrast),
973 BOOL_SETTING(0, remote_invert, LANG_INVERT, false ,"remote invert", off_on,
974 LANG_INVERT_LCD_INVERSE, LANG_NORMAL,
975 lcd_remote_set_invert_display),
976 OFFON_SETTING(0,remote_flip_display, LANG_FLIP_DISPLAY,
977 false,"remote flip display", NULL),
978 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout,
979 LANG_BACKLIGHT, 5, "remote backlight timeout", off_on,
980 UNIT_SEC, backlight_formatter, backlight_getlang,
981 remote_backlight_set_timeout, 20,
982 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
983 #if CONFIG_CHARGING
984 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout_plugged,
985 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10,
986 "remote backlight timeout plugged", off_on, UNIT_SEC,
987 backlight_formatter, backlight_getlang,
988 remote_backlight_set_timeout_plugged, 20,
989 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
990 #endif
991 #ifdef HAVE_REMOTE_LCD_TICKING
992 OFFON_SETTING(0, remote_reduce_ticking, LANG_REDUCE_TICKING,
993 false,"remote reduce ticking", NULL),
994 #endif
995 #endif
997 #ifdef HAVE_BACKLIGHT
998 OFFON_SETTING(0, bl_filter_first_keypress,
999 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
1000 "backlight filters first keypress", NULL),
1001 #ifdef HAVE_REMOTE_LCD
1002 OFFON_SETTING(0, remote_bl_filter_first_keypress,
1003 LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
1004 "backlight filters first remote keypress", NULL),
1005 #endif
1006 #endif /* HAVE_BACKLIGHT */
1008 /** End of old RTC config block **/
1010 #ifdef HAVE_BACKLIGHT
1011 OFFON_SETTING(0, caption_backlight, LANG_CAPTION_BACKLIGHT,
1012 false, "caption backlight", NULL),
1013 #ifdef HAVE_REMOTE_LCD
1014 OFFON_SETTING(0, remote_caption_backlight, LANG_CAPTION_BACKLIGHT,
1015 false, "remote caption backlight", NULL),
1016 #endif
1017 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
1018 INT_SETTING(F_NO_WRAP, brightness, LANG_BRIGHTNESS,
1019 DEFAULT_BRIGHTNESS_SETTING, "brightness",UNIT_INT,
1020 MIN_BRIGHTNESS_SETTING, MAX_BRIGHTNESS_SETTING, 1,
1021 NULL, NULL, backlight_set_brightness),
1022 #endif
1023 /* backlight fading */
1024 #if defined(HAVE_BACKLIGHT_FADING_INT_SETTING)
1025 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_in,
1026 LANG_BACKLIGHT_FADE_IN, 300, "backlight fade in", "off",
1027 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off,
1028 backlight_set_fade_in, 7, 0,100,200,300,500,1000,2000),
1029 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_out,
1030 LANG_BACKLIGHT_FADE_OUT, 2000, "backlight fade out", "off",
1031 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off,
1032 backlight_set_fade_out, 10,
1033 0,100,200,300,500,1000,2000,3000,5000,10000),
1034 #elif defined(HAVE_BACKLIGHT_FADING_BOOL_SETTING)
1035 OFFON_SETTING(0, backlight_fade_in, LANG_BACKLIGHT_FADE_IN,
1036 true, "backlight fade in", backlight_set_fade_in),
1037 OFFON_SETTING(0, backlight_fade_out, LANG_BACKLIGHT_FADE_OUT,
1038 true, "backlight fade out", backlight_set_fade_out),
1039 #endif
1040 #endif /* HAVE_BACKLIGHT */
1041 INT_SETTING(F_PADTITLE, scroll_speed, LANG_SCROLL_SPEED, 9,"scroll speed",
1042 UNIT_INT, 0, 17, 1, NULL, NULL, lcd_scroll_speed),
1043 INT_SETTING(F_PADTITLE, scroll_delay, LANG_SCROLL_DELAY, 1000,
1044 "scroll delay", UNIT_MS, 0, 2500, 100, NULL,
1045 NULL, lcd_scroll_delay),
1046 INT_SETTING(0, bidir_limit, LANG_BIDIR_SCROLL, 50, "bidir limit",
1047 UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_bidir_scroll),
1048 #ifdef HAVE_REMOTE_LCD
1049 INT_SETTING(0, remote_scroll_speed, LANG_SCROLL_SPEED, 9,
1050 "remote scroll speed", UNIT_INT, 0,17, 1,
1051 NULL, NULL, lcd_remote_scroll_speed),
1052 INT_SETTING(0, remote_scroll_step, LANG_SCROLL_STEP, 6,
1053 "remote scroll step", UNIT_PIXEL, 1, LCD_REMOTE_WIDTH, 1, NULL,
1054 NULL, lcd_remote_scroll_step),
1055 INT_SETTING(0, remote_scroll_delay, LANG_SCROLL_DELAY, 1000,
1056 "remote scroll delay", UNIT_MS, 0, 2500, 100, NULL, NULL,
1057 lcd_remote_scroll_delay),
1058 INT_SETTING(0, remote_bidir_limit, LANG_BIDIR_SCROLL, 50,
1059 "remote bidir limit", UNIT_PERCENT, 0, 200, 25, NULL, NULL,
1060 lcd_remote_bidir_scroll),
1061 #endif
1062 #ifdef HAVE_LCD_BITMAP
1063 OFFON_SETTING(0, offset_out_of_view, LANG_SCREEN_SCROLL_VIEW,
1064 false, "Screen Scrolls Out Of View",
1065 gui_list_screen_scroll_out_of_view),
1066 INT_SETTING(F_PADTITLE, scroll_step, LANG_SCROLL_STEP, 6, "scroll step",
1067 UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, lcd_scroll_step),
1068 INT_SETTING(F_PADTITLE, screen_scroll_step, LANG_SCREEN_SCROLL_STEP, 16,
1069 "screen scroll step", UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL,
1070 gui_list_screen_scroll_step),
1071 #endif /* HAVE_LCD_BITMAP */
1072 OFFON_SETTING(0,scroll_paginated,LANG_SCROLL_PAGINATED,
1073 false,"scroll paginated",NULL),
1074 #ifdef HAVE_LCD_COLOR
1076 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.fg_color,-1,
1077 INT(DEFAULT_THEME_FOREGROUND),"foreground color",NULL,UNUSED},
1078 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.bg_color,-1,
1079 INT(DEFAULT_THEME_BACKGROUND),"background color",NULL,UNUSED},
1080 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lss_color,-1,
1081 INT(DEFAULT_THEME_SELECTOR_START),"line selector start color",NULL,
1082 UNUSED},
1083 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lse_color,-1,
1084 INT(DEFAULT_THEME_SELECTOR_END),"line selector end color",NULL,UNUSED},
1085 {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lst_color,-1,
1086 INT(DEFAULT_THEME_SELECTOR_TEXT),"line selector text color",NULL,
1087 UNUSED},
1089 #endif
1090 /* more playback */
1091 OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL),
1092 OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL),
1093 OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL),
1094 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, ff_rewind_min_step,
1095 LANG_FFRW_STEP, 1, "scan min step", NULL, UNIT_SEC,
1096 NULL, NULL, NULL, 14, 1,2,3,4,5,6,8,10,15,20,25,30,45,60),
1097 CHOICE_SETTING(0, ff_rewind_accel, LANG_FFRW_ACCEL, 2,
1098 "seek acceleration", "very fast,fast,normal,slow,very slow", NULL, 5,
1099 ID2P(LANG_VERY_FAST), ID2P(LANG_FAST), ID2P(LANG_NORMAL),
1100 ID2P(LANG_SLOW) , ID2P(LANG_VERY_SLOW)),
1101 #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_DISK_STORAGE)
1102 STRINGCHOICE_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0,"antiskip",
1103 "5s,15s,30s,1min,2min,3min,5min,10min", NULL, 8,
1104 TALK_ID(5, UNIT_SEC), TALK_ID(15, UNIT_SEC),
1105 TALK_ID(30, UNIT_SEC), TALK_ID(1, UNIT_MIN),
1106 TALK_ID(2, UNIT_MIN), TALK_ID(3, UNIT_MIN),
1107 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN)),
1108 #elif defined(HAVE_DISK_STORAGE)
1109 INT_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0, "antiskip",
1110 UNIT_SEC, 0, 7, 1, NULL, NULL, audio_set_buffer_margin),
1111 #endif
1112 /* disk */
1113 #ifdef HAVE_DISK_STORAGE
1114 INT_SETTING(0, disk_spindown, LANG_SPINDOWN, 5, "disk spindown",
1115 UNIT_SEC, 3, 254, 1, NULL, NULL, storage_spindown),
1116 #endif /* HAVE_DISK_STORAGE */
1117 /* browser */
1118 TEXT_SETTING(0, start_directory, "start directory", "/", NULL, NULL),
1119 CHOICE_SETTING(0, dirfilter, LANG_FILTER, SHOW_SUPPORTED, "show files",
1120 "all,supported,music,playlists", NULL, 4, ID2P(LANG_ALL),
1121 ID2P(LANG_FILTER_SUPPORTED), ID2P(LANG_FILTER_MUSIC),
1122 ID2P(LANG_PLAYLISTS)),
1123 /* file sorting */
1124 OFFON_SETTING(0, sort_case, LANG_SORT_CASE, false, "sort case", NULL),
1125 CHOICE_SETTING(0, sort_dir, LANG_SORT_DIR, 0 ,
1126 "sort dirs", "alpha,oldest,newest", NULL, 3,
1127 ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE),
1128 ID2P(LANG_SORT_DATE_REVERSE)),
1129 CHOICE_SETTING(0, sort_file, LANG_SORT_FILE, 0 ,
1130 "sort files", "alpha,oldest,newest,type", NULL, 4,
1131 ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE),
1132 ID2P(LANG_SORT_DATE_REVERSE) , ID2P(LANG_SORT_TYPE)),
1133 CHOICE_SETTING(0, interpret_numbers, LANG_SORT_INTERPRET_NUMBERS, 1,
1134 "sort interpret number", "digits,numbers",NULL, 2,
1135 ID2P(LANG_SORT_INTERPRET_AS_DIGIT),
1136 ID2P(LANG_SORT_INTERPRET_AS_NUMBERS)),
1137 CHOICE_SETTING(0, show_filename_ext, LANG_SHOW_FILENAME_EXT, 3,
1138 "show filename exts", "off,on,unknown,view_all", NULL , 4 ,
1139 ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_UNKNOWN_TYPES),
1140 ID2P(LANG_EXT_ONLY_VIEW_ALL)),
1141 OFFON_SETTING(0,browse_current,LANG_FOLLOW,false,"follow playlist",NULL),
1142 OFFON_SETTING(0,playlist_viewer_icons,LANG_SHOW_ICONS,true,
1143 "playlist viewer icons",NULL),
1144 OFFON_SETTING(0,playlist_viewer_indices,LANG_SHOW_INDICES,true,
1145 "playlist viewer indices",NULL),
1146 CHOICE_SETTING(0, playlist_viewer_track_display, LANG_TRACK_DISPLAY, 0,
1147 "playlist viewer track display","track name,full path",
1148 NULL, 2, ID2P(LANG_DISPLAY_TRACK_NAME_ONLY),
1149 ID2P(LANG_DISPLAY_FULL_PATH)),
1150 CHOICE_SETTING(0, recursive_dir_insert, LANG_RECURSE_DIRECTORY , RECURSE_ON,
1151 "recursive directory insert", off_on_ask, NULL , 3 ,
1152 ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_ASK)),
1153 /* bookmarks */
1154 CHOICE_SETTING(0, autocreatebookmark, LANG_BOOKMARK_SETTINGS_AUTOCREATE,
1155 BOOKMARK_NO, "autocreate bookmarks",
1156 "off,on,ask,recent only - on,recent only - ask", NULL, 5,
1157 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
1158 ID2P(LANG_ASK), ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES),
1159 ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK)),
1160 OFFON_SETTING(0, autoupdatebookmark, LANG_BOOKMARK_SETTINGS_AUTOUPDATE,
1161 false, "autoupdate bookmarks", NULL),
1162 CHOICE_SETTING(0, autoloadbookmark, LANG_BOOKMARK_SETTINGS_AUTOLOAD,
1163 BOOKMARK_NO, "autoload bookmarks", off_on_ask, NULL, 3,
1164 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
1165 ID2P(LANG_ASK)),
1166 CHOICE_SETTING(0, usemrb, LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS,
1167 BOOKMARK_NO, "use most-recent-bookmarks",
1168 "off,on,unique only", NULL, 3, ID2P(LANG_SET_BOOL_NO),
1169 ID2P(LANG_SET_BOOL_YES),
1170 ID2P(LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY)),
1171 #ifdef HAVE_LCD_BITMAP
1172 /* peak meter */
1173 STRINGCHOICE_SETTING(0, peak_meter_clip_hold, LANG_PM_CLIP_HOLD, 16,
1174 "peak meter clip hold",
1175 "on,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,2min"
1176 ",3min,5min,10min,20min,45min,90min",
1177 peak_meter_set_clip_hold, 25, LANG_PM_ETERNAL,
1178 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC),
1179 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC),
1180 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC),
1181 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC),
1182 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC),
1183 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
1184 TALK_ID(25, UNIT_SEC), TALK_ID(30, UNIT_SEC),
1185 TALK_ID(45, UNIT_SEC), TALK_ID(60, UNIT_SEC),
1186 TALK_ID(90, UNIT_SEC), TALK_ID(2, UNIT_MIN),
1187 TALK_ID(3, UNIT_MIN), TALK_ID(5, UNIT_MIN),
1188 TALK_ID(10, UNIT_MIN), TALK_ID(20, UNIT_MIN),
1189 TALK_ID(45, UNIT_MIN), TALK_ID(90, UNIT_MIN)),
1190 STRINGCHOICE_SETTING(0, peak_meter_hold, LANG_PM_PEAK_HOLD, 3,
1191 "peak meter hold",
1192 "off,200ms,300ms,500ms,1,2,3,4,5,6,7,8,9,10,15,20,30,1min",
1193 NULL, 18, LANG_OFF, TALK_ID(200, UNIT_MS),
1194 TALK_ID(300, UNIT_MS), TALK_ID(500, UNIT_MS),
1195 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC),
1196 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC),
1197 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC),
1198 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC),
1199 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC),
1200 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
1201 TALK_ID(30, UNIT_SEC), TALK_ID(60, UNIT_SEC)),
1202 INT_SETTING(0, peak_meter_release, LANG_PM_RELEASE, 8, "peak meter release",
1203 UNIT_PM_TICK, 1, 0x7e, 1, NULL, NULL,NULL),
1204 OFFON_SETTING(0,peak_meter_dbfs,LANG_PM_DBFS,true,"peak meter dbfs",NULL),
1205 {F_T_INT, &global_settings.peak_meter_min, LANG_PM_MIN,INT(60),
1206 "peak meter min", NULL, UNUSED},
1207 {F_T_INT, &global_settings.peak_meter_max, LANG_PM_MAX,INT(0),
1208 "peak meter max", NULL, UNUSED},
1209 #ifdef HAVE_RECORDING
1210 OFFON_SETTING(0, peak_meter_clipcounter, LANG_PM_CLIPCOUNTER, false,
1211 "peak meter clipcounter", NULL),
1212 #endif /* HAVE_RECORDING */
1213 #endif /* HAVE_LCD_BITMAP */
1214 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
1215 SOUND_SETTING(F_SOUNDSETTING, mdb_strength, LANG_MDB_STRENGTH,
1216 "mdb strength", SOUND_MDB_STRENGTH),
1217 SOUND_SETTING(F_SOUNDSETTING, mdb_harmonics, LANG_MDB_HARMONICS,
1218 "mdb harmonics", SOUND_MDB_HARMONICS),
1219 SOUND_SETTING(F_SOUNDSETTING, mdb_center, LANG_MDB_CENTER,
1220 "mdb center", SOUND_MDB_CENTER),
1221 SOUND_SETTING(F_SOUNDSETTING, mdb_shape, LANG_MDB_SHAPE,
1222 "mdb shape", SOUND_MDB_SHAPE),
1223 OFFON_SETTING(F_SOUNDSETTING, mdb_enable, LANG_MDB_ENABLE,
1224 false, "mdb enable", set_mdb_enable),
1225 #endif
1226 #if CONFIG_CODEC == MAS3507D
1227 OFFON_SETTING(F_SOUNDSETTING, line_in,LANG_LINE_IN,false,"line in",NULL),
1228 #endif
1229 /* voice */
1230 OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL),
1231 CHOICE_SETTING(0, talk_dir, LANG_VOICE_DIR, 0,
1232 "talk dir", off_number_spell, NULL, 3,
1233 ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
1234 ID2P(LANG_VOICE_SPELL)),
1235 OFFON_SETTING(F_TEMPVAR, talk_dir_clip, LANG_VOICE_DIR_TALK, false,
1236 "talk dir clip", NULL),
1237 CHOICE_SETTING(0, talk_file, LANG_VOICE_FILE, 0,
1238 "talk file", off_number_spell, NULL, 3,
1239 ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
1240 ID2P(LANG_VOICE_SPELL)),
1241 OFFON_SETTING(F_TEMPVAR, talk_file_clip, LANG_VOICE_FILE_TALK, false,
1242 "talk file clip", NULL),
1243 OFFON_SETTING(F_TEMPVAR, talk_filetype, LANG_VOICE_FILETYPE, false,
1244 "talk filetype", NULL),
1245 OFFON_SETTING(F_TEMPVAR, talk_battery_level, LANG_TALK_BATTERY_LEVEL, false,
1246 "Announce Battery Level", NULL),
1248 #ifdef HAVE_RECORDING
1249 /* recording */
1250 STRINGCHOICE_SETTING(F_RECSETTING, rec_timesplit, LANG_SPLIT_TIME, 0,
1251 "rec timesplit",
1252 "off,00:05,00:10,00:15,00:30,01:00,01:14,01:20,02:00,"
1253 "04:00,06:00,08:00,10:00,12:00,18:00,24:00",
1254 NULL, 16, LANG_OFF,
1255 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN),
1256 TALK_ID(15, UNIT_MIN), TALK_ID(30, UNIT_MIN),
1257 TALK_ID(60, UNIT_MIN), TALK_ID(74, UNIT_MIN),
1258 TALK_ID(80, UNIT_MIN), TALK_ID(2, UNIT_HOUR),
1259 TALK_ID(4, UNIT_HOUR), TALK_ID(6, UNIT_HOUR),
1260 TALK_ID(8, UNIT_HOUR), TALK_ID(10, UNIT_HOUR),
1261 TALK_ID(12, UNIT_HOUR), TALK_ID(18, UNIT_HOUR),
1262 TALK_ID(20, UNIT_HOUR), TALK_ID(24, UNIT_HOUR)),
1263 STRINGCHOICE_SETTING(F_RECSETTING, rec_sizesplit, LANG_SPLIT_SIZE, 0,
1264 "rec sizesplit",
1265 "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB,"
1266 "256MB,512MB,650MB,700MB,1GB,1.5GB,1.75GB",
1267 NULL, 16, LANG_OFF,
1268 TALK_ID(5, UNIT_MB), TALK_ID(10, UNIT_MB),
1269 TALK_ID(15, UNIT_MB), TALK_ID(32, UNIT_MB),
1270 TALK_ID(64, UNIT_MB), TALK_ID(75, UNIT_MB),
1271 TALK_ID(100, UNIT_MB), TALK_ID(128, UNIT_MB),
1272 TALK_ID(256, UNIT_MB), TALK_ID(512, UNIT_MB),
1273 TALK_ID(650, UNIT_MB), TALK_ID(700, UNIT_MB),
1274 TALK_ID(1024, UNIT_MB), TALK_ID(1536, UNIT_MB),
1275 TALK_ID(1792, UNIT_MB)),
1276 {F_T_INT|F_RECSETTING, &global_settings.rec_channels, LANG_CHANNELS, INT(0),
1277 "rec channels","stereo,mono",UNUSED},
1278 #if CONFIG_CODEC == SWCODEC
1279 {F_T_INT|F_RECSETTING, &global_settings.rec_mono_mode,
1280 LANG_RECORDING_MONO_MODE, INT(0), "rec mono mode","L+R,L,R",UNUSED},
1281 #endif
1282 CHOICE_SETTING(F_RECSETTING, rec_split_type, LANG_SPLIT_TYPE, 0,
1283 "rec split type", "Split,Stop,Shutdown", NULL, 3,
1284 ID2P(LANG_START_NEW_FILE), ID2P(LANG_STOP_RECORDING),ID2P(LANG_STOP_RECORDING_AND_SHUTDOWN)),
1285 CHOICE_SETTING(F_RECSETTING, rec_split_method, LANG_SPLIT_MEASURE, 0,
1286 "rec split method", "Time,Filesize", NULL, 2,
1287 ID2P(LANG_TIME), ID2P(LANG_FILESIZE)),
1288 {F_T_INT|F_RECSETTING, &global_settings.rec_source, LANG_RECORDING_SOURCE,
1289 INT(0), "rec source",
1290 &HAVE_MIC_REC_(",mic")
1291 HAVE_LINE_REC_(",line")
1292 HAVE_SPDIF_REC_(",spdif")
1293 HAVE_FMRADIO_REC_(",fmradio")[1],
1294 UNUSED},
1295 INT_SETTING(F_RECSETTING, rec_prerecord_time, LANG_RECORD_PRERECORD_TIME, 0,
1296 "prerecording time", UNIT_SEC, 0, 30, 1,
1297 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL),
1299 TEXT_SETTING(F_RECSETTING, rec_directory, "rec path",
1300 REC_BASE_DIR, NULL, NULL),
1301 #ifdef HAVE_BACKLIGHT
1302 CHOICE_SETTING(F_RECSETTING, cliplight, LANG_CLIP_LIGHT, 0,
1303 "cliplight", "off,main,both,remote", NULL,
1304 #ifdef HAVE_REMOTE_LCD
1305 4, ID2P(LANG_OFF), ID2P(LANG_MAIN_UNIT),
1306 ID2P(LANG_REMOTE_MAIN), ID2P(LANG_REMOTE_UNIT)
1307 #else
1308 2, ID2P(LANG_OFF), ID2P(LANG_ON)
1309 #endif
1311 #endif
1312 #ifdef DEFAULT_REC_MIC_GAIN
1313 {F_T_INT|F_RECSETTING,&global_settings.rec_mic_gain,
1314 LANG_GAIN,INT(DEFAULT_REC_MIC_GAIN),
1315 "rec mic gain",NULL,UNUSED},
1316 #endif /* DEFAULT_REC_MIC_GAIN */
1317 #ifdef DEFAULT_REC_LEFT_GAIN
1318 {F_T_INT|F_RECSETTING,&global_settings.rec_left_gain,
1319 LANG_GAIN_LEFT,INT(DEFAULT_REC_LEFT_GAIN),
1320 "rec left gain",NULL,UNUSED},
1321 #endif /* DEFAULT_REC_LEFT_GAIN */
1322 #ifdef DEFAULT_REC_RIGHT_GAIN
1323 {F_T_INT|F_RECSETTING,&global_settings.rec_right_gain,LANG_GAIN_RIGHT,
1324 INT(DEFAULT_REC_RIGHT_GAIN),
1325 "rec right gain",NULL,UNUSED},
1326 #endif /* DEFAULT_REC_RIGHT_GAIN */
1327 #if CONFIG_CODEC == MAS3587F
1328 {F_T_INT|F_RECSETTING,&global_settings.rec_frequency,
1329 LANG_RECORDING_FREQUENCY, INT(0),
1330 "rec frequency","44,48,32,22,24,16", UNUSED},
1331 INT_SETTING(F_RECSETTING, rec_quality, LANG_RECORDING_QUALITY, 5,
1332 "rec quality", UNIT_INT, 0, 7, 1, NULL, NULL, NULL),
1333 OFFON_SETTING(F_RECSETTING, rec_editable, LANG_RECORDING_EDITABLE, false,
1334 "editable recordings", NULL),
1335 #endif /* CONFIG_CODEC == MAS3587F */
1336 #if CONFIG_CODEC == SWCODEC
1337 {F_T_INT|F_RECSETTING,&global_settings.rec_frequency,
1338 LANG_RECORDING_FREQUENCY,INT(REC_FREQ_DEFAULT),
1339 "rec frequency",REC_FREQ_CFG_VAL_LIST,UNUSED},
1340 {F_T_INT|F_RECSETTING,&global_settings.rec_format,
1341 LANG_RECORDING_FORMAT,INT(REC_FORMAT_DEFAULT),
1342 "rec format",REC_FORMAT_CFG_VAL_LIST,UNUSED},
1343 /** Encoder settings start - keep these together **/
1344 /* aiff_enc */
1345 /* (no settings yet) */
1346 /* mp3_enc */
1347 {F_T_INT|F_RECSETTING, &global_settings.mp3_enc_config.bitrate,-1,
1348 INT(MP3_ENC_BITRATE_CFG_DEFAULT),
1349 "mp3_enc bitrate",MP3_ENC_BITRATE_CFG_VALUE_LIST,UNUSED},
1350 /* wav_enc */
1351 /* (no settings yet) */
1352 /* wavpack_enc */
1353 /* (no settings yet) */
1354 /** Encoder settings end **/
1355 #endif /* CONFIG_CODEC == SWCODEC */
1356 /* values for the trigger */
1357 INT_SETTING(F_RECSETTING, rec_start_thres_db, LANG_RECORD_START_THRESHOLD, -35,
1358 "trigger start threshold dB", UNIT_DB, VOLUME_MIN/10, 0, 1, NULL, NULL, NULL),
1359 INT_SETTING(F_RECSETTING, rec_start_thres_linear, LANG_RECORD_START_THRESHOLD, 5,
1360 "trigger start threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL),
1361 INT_SETTING(F_RECSETTING, rec_stop_thres_db, LANG_RECORD_STOP_THRESHOLD, -45,
1362 "trigger stop threshold dB", UNIT_DB, VOLUME_MIN/10, 0, 1, NULL, NULL, NULL),
1363 INT_SETTING(F_RECSETTING, rec_stop_thres_linear, LANG_RECORD_STOP_THRESHOLD, 10,
1364 "trigger stop threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL),
1365 TABLE_SETTING(F_RECSETTING, rec_start_duration, LANG_MIN_DURATION, 0,
1366 "trigger start duration",
1367 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1368 UNIT_SEC, NULL, NULL, NULL, 13,
1369 0,1,2,5,10,15,20,25,30,60,120,300,600),
1370 TABLE_SETTING(F_RECSETTING, rec_stop_postrec, LANG_MIN_DURATION, 0,
1371 "trigger stop duration",
1372 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1373 UNIT_SEC, NULL, NULL, NULL, 13,
1374 0,1,2,5,10,15,20,25,30,60,120,300,600),
1375 TABLE_SETTING(F_RECSETTING, rec_stop_gap, LANG_RECORD_STOP_GAP, 1,
1376 "trigger min gap",
1377 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1378 UNIT_SEC, NULL, NULL, NULL, 13,
1379 0,1,2,5,10,15,20,25,30,60,120,300,600),
1380 CHOICE_SETTING(F_RECSETTING, rec_trigger_mode, LANG_RECORD_TRIGGER, TRIG_MODE_OFF,
1381 "trigger mode","off,once,repeat", NULL ,3,
1382 ID2P(LANG_OFF), ID2P(LANG_RECORD_TRIG_NOREARM), ID2P(LANG_REPEAT)),
1383 CHOICE_SETTING(F_RECSETTING, rec_trigger_type, LANG_RECORD_TRIGGER_TYPE, TRIG_TYPE_STOP,
1384 "trigger type","stop,pause,nf stp", NULL ,3,
1385 ID2P(LANG_RECORD_TRIGGER_STOP), ID2P(LANG_PAUSE), ID2P(LANG_RECORD_TRIGGER_NEWFILESTP)),
1386 #endif /* HAVE_RECORDING */
1388 #ifdef HAVE_HISTOGRAM
1389 /* TO DO: additional restictions of following REP items? */
1390 TABLE_SETTING(F_RECSETTING, histogram_interval, LANG_HISTOGRAM_INTERVAL, 0,
1391 "histogram interval","0s,1s,2s,4s",
1392 UNIT_SEC, NULL, NULL, NULL, 4, 0,1,2,4),
1393 #endif /* HAVE_HISTOGRAM */
1395 #ifdef HAVE_SPDIF_POWER
1396 OFFON_SETTING(F_SOUNDSETTING, spdif_enable, LANG_SPDIF_ENABLE, false,
1397 "spdif enable", spdif_power_enable),
1398 #endif
1399 CHOICE_SETTING(0, next_folder, LANG_NEXT_FOLDER, FOLDER_ADVANCE_OFF,
1400 "folder navigation", "off,on,random",NULL ,3,
1401 ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES),
1402 ID2P(LANG_RANDOM)),
1403 BOOL_SETTING(0, constrain_next_folder, LANG_CONSTRAIN_NEXT_FOLDER, false,
1404 "constrain next folder", off_on,
1405 LANG_SET_BOOL_YES, LANG_SET_BOOL_NO, NULL),
1407 #ifdef HAVE_TAGCACHE
1408 #if CONFIG_CODEC == SWCODEC
1409 BOOL_SETTING(0, autoresume_enable, LANG_AUTORESUME, false,
1410 "autoresume enable", off_on,
1411 LANG_SET_BOOL_YES, LANG_SET_BOOL_NO, NULL),
1412 CHOICE_SETTING(0, autoresume_automatic, LANG_AUTORESUME_AUTOMATIC,
1413 AUTORESUME_NEXTTRACK_NEVER,
1414 "autoresume next track", "never,all,custom",
1415 NULL, 3,
1416 ID2P(LANG_SET_BOOL_NO),
1417 ID2P(LANG_ALWAYS),
1418 ID2P(LANG_AUTORESUME_CUSTOM)),
1419 TEXT_SETTING(0, autoresume_paths, "autoresume next track paths",
1420 "/podcast:/podcasts", NULL, NULL),
1421 #endif
1423 OFFON_SETTING(0, runtimedb, LANG_RUNTIMEDB_ACTIVE, false,
1424 "gather runtime data", NULL),
1425 TEXT_SETTING(0, tagcache_scan_paths, "database scan paths",
1426 DEFAULT_TAGCACHE_SCAN_PATHS, NULL, NULL),
1427 #endif
1429 #if CONFIG_CODEC == SWCODEC
1430 /* replay gain */
1431 CHOICE_SETTING(F_SOUNDSETTING, replaygain_settings.type,
1432 LANG_REPLAYGAIN_MODE, REPLAYGAIN_SHUFFLE, "replaygain type",
1433 "track,album,track shuffle,off", NULL, 4, ID2P(LANG_TRACK_GAIN),
1434 ID2P(LANG_ALBUM_GAIN), ID2P(LANG_SHUFFLE_GAIN), ID2P(LANG_OFF)),
1435 OFFON_SETTING(F_SOUNDSETTING, replaygain_settings.noclip,
1436 LANG_REPLAYGAIN_NOCLIP, false, "replaygain noclip", NULL),
1437 INT_SETTING_NOWRAP(F_SOUNDSETTING, replaygain_settings.preamp,
1438 LANG_REPLAYGAIN_PREAMP, 0, "replaygain preamp",
1439 UNIT_DB, -120, 120, 5, db_format, get_dec_talkid, NULL),
1441 CHOICE_SETTING(0, beep, LANG_BEEP, 0, "beep", "off,weak,moderate,strong",
1442 NULL, 4, ID2P(LANG_OFF), ID2P(LANG_WEAK),
1443 ID2P(LANG_MODERATE), ID2P(LANG_STRONG)),
1445 #ifdef HAVE_CROSSFADE
1446 /* crossfade */
1447 CHOICE_SETTING(F_SOUNDSETTING, crossfade, LANG_CROSSFADE_ENABLE, 0,
1448 "crossfade",
1449 "off,auto track change,man track skip,shuffle,shuffle or man track skip,always",
1450 NULL, 6, ID2P(LANG_OFF), ID2P(LANG_AUTOTRACKSKIP),
1451 ID2P(LANG_MANTRACKSKIP), ID2P(LANG_SHUFFLE),
1452 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)),
1453 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_delay,
1454 LANG_CROSSFADE_FADE_IN_DELAY, 0,
1455 "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL),
1456 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_delay,
1457 LANG_CROSSFADE_FADE_OUT_DELAY, 0,
1458 "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL,NULL),
1459 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_duration,
1460 LANG_CROSSFADE_FADE_IN_DURATION, 2,
1461 "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL,
1462 NULL),
1463 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_duration,
1464 LANG_CROSSFADE_FADE_OUT_DURATION, 2,
1465 "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL,
1466 NULL),
1467 CHOICE_SETTING(F_SOUNDSETTING, crossfade_fade_out_mixmode,
1468 LANG_CROSSFADE_FADE_OUT_MODE, 0,
1469 "crossfade fade out mode", "crossfade,mix", NULL, 2,
1470 ID2P(LANG_CROSSFADE), ID2P(LANG_MIX)),
1471 #endif
1473 /* crossfeed */
1474 CHOICE_SETTING(F_SOUNDSETTING, crossfeed, LANG_CROSSFEED, 0,"crossfeed",
1475 "off,meier,custom", dsp_set_crossfeed_type, 3,
1476 ID2P(LANG_OFF), ID2P(LANG_CROSSFEED_MEIER),
1477 ID2P(LANG_CROSSFEED_CUSTOM)),
1478 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_direct_gain,
1479 LANG_CROSSFEED_DIRECT_GAIN, -15,
1480 "crossfeed direct gain", UNIT_DB, -60, 0, 5,
1481 db_format, get_dec_talkid,dsp_set_crossfeed_direct_gain),
1482 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_cross_gain,
1483 LANG_CROSSFEED_CROSS_GAIN, -60,
1484 "crossfeed cross gain", UNIT_DB, -120, -30, 5,
1485 db_format, get_dec_talkid, crossfeed_cross_set),
1486 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_attenuation,
1487 LANG_CROSSFEED_HF_ATTENUATION, -160,
1488 "crossfeed hf attenuation", UNIT_DB, -240, -60, 5,
1489 db_format, get_dec_talkid, crossfeed_cross_set),
1490 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_cutoff,
1491 LANG_CROSSFEED_HF_CUTOFF, 700,
1492 "crossfeed hf cutoff", UNIT_HERTZ, 500, 2000, 100,
1493 NULL, NULL, crossfeed_cross_set),
1495 /* equalizer */
1496 OFFON_SETTING(F_EQSETTING, eq_enabled, LANG_EQUALIZER_ENABLED, false,
1497 "eq enabled", NULL),
1499 INT_SETTING_NOWRAP(F_EQSETTING, eq_precut, LANG_EQUALIZER_PRECUT, 0,
1500 "eq precut", UNIT_DB, 0, 240, 5, eq_precut_format,
1501 get_precut_talkid, dsp_set_eq_precut),
1503 /* 0..32768 Hz */
1504 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[0].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
1505 32, "eq band 0 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1506 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1507 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[1].cutoff, LANG_EQUALIZER_BAND_CENTER,
1508 64, "eq band 1 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1509 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1510 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[2].cutoff, LANG_EQUALIZER_BAND_CENTER,
1511 125, "eq band 2 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1512 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1513 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[3].cutoff, LANG_EQUALIZER_BAND_CENTER,
1514 250, "eq band 3 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1515 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1516 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[4].cutoff, LANG_EQUALIZER_BAND_CENTER,
1517 500, "eq band 4 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1518 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1519 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[5].cutoff, LANG_EQUALIZER_BAND_CENTER,
1520 1000, "eq band 5 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1521 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1522 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[6].cutoff, LANG_EQUALIZER_BAND_CENTER,
1523 2000, "eq band 6 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1524 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1525 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[7].cutoff, LANG_EQUALIZER_BAND_CENTER,
1526 4000, "eq band 7 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1527 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1528 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[8].cutoff, LANG_EQUALIZER_BAND_CENTER,
1529 8000, "eq band 8 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1530 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1531 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[9].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
1532 16000, "eq band 9 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
1533 EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
1534 /* 0..64 (or 0.0 to 6.4) */
1535 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[0].q, LANG_EQUALIZER_BAND_Q, 7,
1536 "eq band 0 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1537 eq_q_format, get_dec_talkid, NULL),
1538 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[1].q, LANG_EQUALIZER_BAND_Q, 10,
1539 "eq band 1 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1540 eq_q_format, get_dec_talkid, NULL),
1541 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[2].q, LANG_EQUALIZER_BAND_Q, 10,
1542 "eq band 2 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1543 eq_q_format, get_dec_talkid, NULL),
1544 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[3].q, LANG_EQUALIZER_BAND_Q, 10,
1545 "eq band 3 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1546 eq_q_format, get_dec_talkid, NULL),
1547 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[4].q, LANG_EQUALIZER_BAND_Q, 10,
1548 "eq band 4 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1549 eq_q_format, get_dec_talkid, NULL),
1550 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[5].q, LANG_EQUALIZER_BAND_Q, 10,
1551 "eq band 5 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1552 eq_q_format, get_dec_talkid, NULL),
1553 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[6].q, LANG_EQUALIZER_BAND_Q, 10,
1554 "eq band 6 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1555 eq_q_format, get_dec_talkid, NULL),
1556 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[7].q, LANG_EQUALIZER_BAND_Q, 10,
1557 "eq band 7 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1558 eq_q_format, get_dec_talkid, NULL),
1559 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[8].q, LANG_EQUALIZER_BAND_Q, 10,
1560 "eq band 8 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1561 eq_q_format, get_dec_talkid, NULL),
1562 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[9].q, LANG_EQUALIZER_BAND_Q, 7,
1563 "eq band 9 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
1564 eq_q_format, get_dec_talkid, NULL),
1565 /* -240..240 (or -24db to +24db) */
1566 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[0].gain, LANG_GAIN, 0,
1567 "eq band 0 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1568 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1569 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[1].gain, LANG_GAIN, 0,
1570 "eq band 1 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1571 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1572 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[2].gain, LANG_GAIN, 0,
1573 "eq band 2 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1574 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1575 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[3].gain, LANG_GAIN, 0,
1576 "eq band 3 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1577 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1578 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[4].gain, LANG_GAIN, 0,
1579 "eq band 4 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1580 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1581 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[5].gain, LANG_GAIN, 0,
1582 "eq band 5 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1583 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1584 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[6].gain, LANG_GAIN, 0,
1585 "eq band 6 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1586 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1587 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[7].gain, LANG_GAIN, 0,
1588 "eq band 7 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1589 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1590 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[8].gain, LANG_GAIN, 0,
1591 "eq band 8 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1592 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1593 INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[9].gain, LANG_GAIN, 0,
1594 "eq band 9 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
1595 EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
1597 #define EQ_BAND(id, string) \
1598 CUSTOM_SETTING(F_EQSETTING, eq_band_settings[id], -1, \
1599 &eq_defaults[id], string, \
1600 eq_load_from_cfg, eq_write_to_cfg, \
1601 eq_is_changed, eq_set_default)
1602 EQ_BAND(0, "eq low shelf filter"),
1603 EQ_BAND(1, "eq peak filter 1"),
1604 EQ_BAND(2, "eq peak filter 2"),
1605 EQ_BAND(3, "eq peak filter 3"),
1606 EQ_BAND(4, "eq peak filter 4"),
1607 EQ_BAND(5, "eq peak filter 5"),
1608 EQ_BAND(6, "eq peak filter 6"),
1609 EQ_BAND(7, "eq peak filter 7"),
1610 EQ_BAND(8, "eq peak filter 8"),
1611 EQ_BAND(9, "eq high shelf filter"),
1612 #undef EQ_BAND
1614 /* dithering */
1615 OFFON_SETTING(F_SOUNDSETTING, dithering_enabled, LANG_DITHERING, false,
1616 "dithering enabled", dsp_dither_enable),
1618 #ifdef HAVE_PITCHCONTROL
1619 /* timestretch */
1620 OFFON_SETTING(F_SOUNDSETTING, timestretch_enabled, LANG_TIMESTRETCH, false,
1621 "timestretch enabled", dsp_timestretch_enable),
1622 #endif
1624 /* compressor */
1625 INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_settings.threshold,
1626 LANG_COMPRESSOR_THRESHOLD, 0,
1627 "compressor threshold", UNIT_DB, 0, -24,
1628 -3, formatter_unit_0_is_off, getlang_unit_0_is_off,
1629 compressor_set),
1630 CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_settings.makeup_gain,
1631 LANG_COMPRESSOR_GAIN, 1, "compressor makeup gain",
1632 "off,auto", compressor_set, 2,
1633 ID2P(LANG_OFF), ID2P(LANG_AUTO)),
1634 CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_settings.ratio,
1635 LANG_COMPRESSOR_RATIO, 1, "compressor ratio",
1636 "2:1,4:1,6:1,10:1,limit", compressor_set, 5,
1637 ID2P(LANG_COMPRESSOR_RATIO_2), ID2P(LANG_COMPRESSOR_RATIO_4),
1638 ID2P(LANG_COMPRESSOR_RATIO_6), ID2P(LANG_COMPRESSOR_RATIO_10),
1639 ID2P(LANG_COMPRESSOR_RATIO_LIMIT)),
1640 CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_settings.knee,
1641 LANG_COMPRESSOR_KNEE, 1, "compressor knee",
1642 "hard knee,soft knee", compressor_set, 2,
1643 ID2P(LANG_COMPRESSOR_HARD_KNEE), ID2P(LANG_COMPRESSOR_SOFT_KNEE)),
1644 INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_settings.release_time,
1645 LANG_COMPRESSOR_RELEASE, 500,
1646 "compressor release time", UNIT_MS, 100, 1000,
1647 100, NULL, NULL, compressor_set),
1648 #endif
1649 #ifdef AUDIOHW_HAVE_BASS_CUTOFF
1650 SOUND_SETTING(F_NO_WRAP, bass_cutoff, LANG_BASS_CUTOFF,
1651 "bass cutoff", SOUND_BASS_CUTOFF),
1652 #endif
1653 #ifdef AUDIOHW_HAVE_TREBLE_CUTOFF
1654 SOUND_SETTING(F_NO_WRAP, treble_cutoff, LANG_TREBLE_CUTOFF,
1655 "treble cutoff", SOUND_TREBLE_CUTOFF),
1656 #endif
1657 #ifdef HAVE_DIRCACHE
1658 /*enable dircache for all targets > 2MB of RAM by default*/
1659 OFFON_SETTING(F_BANFROMQS,dircache,LANG_DIRCACHE_ENABLE,true,"dircache",NULL),
1660 SYSTEM_SETTING(NVRAM(4),dircache_size,0),
1661 #endif
1663 #ifdef HAVE_TAGCACHE
1664 #ifdef HAVE_TC_RAMCACHE
1665 OFFON_SETTING(F_BANFROMQS,tagcache_ram,LANG_TAGCACHE_RAM,false,"tagcache_ram",NULL),
1666 #endif
1667 OFFON_SETTING(F_BANFROMQS, tagcache_autoupdate, LANG_TAGCACHE_AUTOUPDATE, false,
1668 "tagcache_autoupdate", NULL),
1669 #endif
1670 CHOICE_SETTING(0, default_codepage, LANG_DEFAULT_CODEPAGE, 0,
1671 "default codepage",
1672 #ifdef HAVE_LCD_BITMAP
1673 /* The order must match with that in unicode.c */
1674 "iso8859-1,iso8859-7,iso8859-8,cp1251,iso8859-11,cp1256,"
1675 "iso8859-9,iso8859-2,cp1250,cp1252,sjis,gb2312,ksx1001,big5,utf-8",
1676 set_codepage, 14,
1677 ID2P(LANG_CODEPAGE_LATIN1),
1678 ID2P(LANG_CODEPAGE_GREEK),
1679 ID2P(LANG_CODEPAGE_HEBREW), ID2P(LANG_CODEPAGE_CYRILLIC),
1680 ID2P(LANG_CODEPAGE_THAI), ID2P(LANG_CODEPAGE_ARABIC),
1681 ID2P(LANG_CODEPAGE_TURKISH),
1682 ID2P(LANG_CODEPAGE_LATIN_EXTENDED),
1683 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN),
1684 ID2P(LANG_CODEPAGE_WESTERN_EUROPEAN),
1685 ID2P(LANG_CODEPAGE_JAPANESE),
1686 ID2P(LANG_CODEPAGE_SIMPLIFIED), ID2P(LANG_CODEPAGE_KOREAN),
1687 ID2P(LANG_CODEPAGE_TRADITIONAL), ID2P(LANG_CODEPAGE_UTF8)),
1688 #else /* !HAVE_LCD_BITMAP */
1689 /* The order must match with that in unicode.c */
1690 "iso8859-1,iso8859-7,cp1251,iso8859-9,iso8859-2,cp1250,cp1252,utf-8",
1691 set_codepage, 7,
1692 ID2P(LANG_CODEPAGE_LATIN1), ID2P(LANG_CODEPAGE_GREEK),
1693 ID2P(LANG_CODEPAGE_CYRILLIC), ID2P(LANG_CODEPAGE_TURKISH),
1694 ID2P(LANG_CODEPAGE_LATIN_EXTENDED),
1695 ID2P(LANG_CODEPAGE_CENTRAL_EUROPEAN),
1696 ID2P(LANG_CODEPAGE_WESTERN_EUROPEAN),
1697 ID2P(LANG_CODEPAGE_UTF8)),
1698 #endif
1699 OFFON_SETTING(0, warnon_erase_dynplaylist, LANG_WARN_ERASEDYNPLAYLIST_MENU,
1700 true, "warn when erasing dynamic playlist",NULL),
1702 #ifdef HAVE_BACKLIGHT
1703 #ifdef HAS_BUTTON_HOLD
1704 CHOICE_SETTING(0, backlight_on_button_hold, LANG_BACKLIGHT_ON_BUTTON_HOLD,
1705 1, "backlight on button hold", "normal,off,on",
1706 backlight_set_on_button_hold, 3,
1707 ID2P(LANG_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)),
1708 #endif
1710 #ifdef HAVE_LCD_SLEEP_SETTING
1711 STRINGCHOICE_SETTING(0, lcd_sleep_after_backlight_off,
1712 LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF, 3,
1713 "lcd sleep after backlight off",
1714 "always,never,5,10,15,20,30,45,60,90",
1715 lcd_set_sleep_after_backlight_off, 10,
1716 LANG_ALWAYS, LANG_NEVER, TALK_ID(5, UNIT_SEC),
1717 TALK_ID(10, UNIT_SEC), TALK_ID(15, UNIT_SEC),
1718 TALK_ID(20, UNIT_SEC), TALK_ID(30, UNIT_SEC),
1719 TALK_ID(45, UNIT_SEC),TALK_ID(60, UNIT_SEC),
1720 TALK_ID(90, UNIT_SEC)),
1721 #endif /* HAVE_LCD_SLEEP_SETTING */
1722 #endif /* HAVE_BACKLIGHT */
1724 OFFON_SETTING(0, hold_lr_for_scroll_in_list, -1, true,
1725 "hold_lr_for_scroll_in_list",NULL),
1726 #ifdef HAVE_LCD_BITMAP
1727 CHOICE_SETTING(0, show_path_in_browser, LANG_SHOW_PATH, SHOW_PATH_CURRENT,
1728 "show path in browser", "off,current directory,full path",
1729 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_SHOW_PATH_CURRENT),
1730 ID2P(LANG_DISPLAY_FULL_PATH)),
1731 #endif
1733 #ifdef HAVE_AGC
1734 {F_T_INT,&global_settings.rec_agc_preset_mic,LANG_RECORDING_AGC_PRESET,
1735 INT(1),"agc mic preset",NULL,UNUSED},
1736 {F_T_INT,&global_settings.rec_agc_preset_line,LANG_RECORDING_AGC_PRESET,
1737 INT(1),"agc line preset",NULL,UNUSED},
1738 {F_T_INT,&global_settings.rec_agc_maxgain_mic,-1,INT(104),
1739 "agc maximum mic gain",NULL,UNUSED},
1740 {F_T_INT,&global_settings.rec_agc_maxgain_line,-1,INT(96),
1741 "agc maximum line gain",NULL,UNUSED},
1742 {F_T_INT,&global_settings.rec_agc_cliptime,LANG_RECORDING_AGC_CLIPTIME,
1743 INT(1),"agc cliptime","0.2s,0.4s,0.6s,0.8,1s",UNUSED},
1744 #endif
1746 #ifdef HAVE_REMOTE_LCD
1747 #ifdef HAS_REMOTE_BUTTON_HOLD
1748 CHOICE_SETTING(0, remote_backlight_on_button_hold,
1749 LANG_BACKLIGHT_ON_BUTTON_HOLD, 0,
1750 "remote backlight on button hold",
1751 "normal,off,on", remote_backlight_set_on_button_hold, 3,
1752 ID2P(LANG_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)),
1753 #endif
1754 #endif
1755 #ifdef HAVE_HEADPHONE_DETECTION
1756 CHOICE_SETTING(0, unplug_mode, LANG_HEADPHONE_UNPLUG, 0,
1757 "pause on headphone unplug", "off,pause,pause and resume",
1758 NULL, 3, ID2P(LANG_OFF), ID2P(LANG_PAUSE),
1759 ID2P(LANG_HEADPHONE_UNPLUG_RESUME)),
1760 OFFON_SETTING(0, unplug_autoresume,
1761 LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME, false,
1762 "disable autoresume if phones not present",NULL),
1763 #endif
1764 INT_SETTING(0, pause_rewind, LANG_PAUSE_REWIND, 0,
1765 "rewind duration on pause", UNIT_SEC, 0, 15, 1, NULL, NULL,
1766 NULL),
1767 #if CONFIG_TUNER
1768 CHOICE_SETTING(0, fm_region, LANG_FM_REGION, 0,
1769 "fm_region", "eu,us,jp,kr,it,wo", set_radio_region, 6,
1770 ID2P(LANG_FM_EUROPE), ID2P(LANG_FM_US),
1771 ID2P(LANG_FM_JAPAN), ID2P(LANG_FM_KOREA),
1772 ID2P(LANG_FM_ITALY), ID2P(LANG_FM_OTHER)),
1773 #endif
1775 OFFON_SETTING(F_BANFROMQS, audioscrobbler, LANG_AUDIOSCROBBLER, false,
1776 "Last.fm Logging", NULL),
1777 #if CONFIG_TUNER
1778 TEXT_SETTING(0, fmr_file, "fmr", "-",
1779 FMPRESET_PATH "/", ".fmr"),
1780 TEXT_SETTING(F_THEMESETTING,fms_file, "fms",
1781 DEFAULT_FMS_NAME, SBS_DIR "/", ".fms"),
1782 #ifdef HAVE_REMOTE_LCD
1783 TEXT_SETTING(F_THEMESETTING,rfms_file, "rfms",
1784 DEFAULT_FMS_NAME, SBS_DIR "/", ".rfms"),
1785 #endif
1786 #endif /* CONFIG_TUNER */
1787 #ifdef HAVE_LCD_BITMAP
1788 TEXT_SETTING(F_THEMESETTING, font_file, "font",
1789 DEFAULT_FONTNAME, FONT_DIR "/", ".fnt"),
1790 INT_SETTING(0, glyphs_to_cache, LANG_GLYPHS, DEFAULT_GLYPHS,
1791 "glyphs", UNIT_INT, MIN_GLYPHS, MAX_GLYPHS, 10,
1792 NULL, NULL, NULL),
1793 #endif
1794 #ifdef HAVE_REMOTE_LCD
1795 TEXT_SETTING(F_THEMESETTING, remote_font_file, "remote font",
1796 DEFAULT_REMOTE_FONTNAME, FONT_DIR "/", ".fnt"),
1797 #endif
1798 TEXT_SETTING(F_THEMESETTING,wps_file, "wps",
1799 DEFAULT_WPSNAME, WPS_DIR "/", ".wps"),
1800 #ifdef HAVE_LCD_BITMAP
1801 TEXT_SETTING(F_THEMESETTING,sbs_file, "sbs",
1802 DEFAULT_SBSNAME, SBS_DIR "/", ".sbs"),
1803 #endif
1804 #ifdef HAVE_REMOTE_LCD
1805 TEXT_SETTING(F_THEMESETTING,rwps_file,"rwps",
1806 DEFAULT_WPSNAME, WPS_DIR "/", ".rwps"),
1807 TEXT_SETTING(F_THEMESETTING,rsbs_file, "rsbs",
1808 DEFAULT_SBSNAME, SBS_DIR "/", ".rsbs"),
1809 #endif
1810 TEXT_SETTING(0,lang_file,"lang","",LANG_DIR "/",".lng"),
1811 #if LCD_DEPTH > 1
1812 TEXT_SETTING(F_THEMESETTING,backdrop_file,"backdrop",
1813 DEFAULT_BACKDROP, NULL, NULL),
1814 #endif
1815 #ifdef HAVE_LCD_BITMAP
1816 TEXT_SETTING(0,kbd_file,"kbd","-",ROCKBOX_DIR "/",".kbd"),
1817 #endif
1818 #ifdef HAVE_USB_CHARGING_ENABLE
1819 CHOICE_SETTING(0, usb_charging, LANG_USB_CHARGING, 1, "usb charging",
1820 "off,on,force", NULL, 3, ID2P(LANG_SET_BOOL_NO),
1821 ID2P(LANG_SET_BOOL_YES), ID2P(LANG_FORCE)),
1822 #endif
1823 OFFON_SETTING(F_BANFROMQS,cuesheet,LANG_CUESHEET_ENABLE,false,"cuesheet support",
1824 NULL),
1825 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, skip_length,
1826 LANG_SKIP_LENGTH, 0, "skip length",
1827 "outro,track,1s,2s,3s,5s,7s,10s,15s,20s,30s,45s,1min,90s,2min,3min,5min,10min,15min",
1828 UNIT_SEC, formatter_unit_0_is_skip_track,
1829 getlang_unit_0_is_skip_track, NULL,
1830 19, -1,0,1,2,3,5,7,10,15,20,30,45,60,90,120,180,300,600,900),
1831 CHOICE_SETTING(0, start_in_screen, LANG_START_SCREEN, 1,
1832 "start in screen", "previous,root,files,"
1833 #ifdef HAVE_TAGCACHE
1834 #define START_DB_COUNT 1
1835 "db,"
1836 #else
1837 #define START_DB_COUNT 0
1838 #endif
1839 "wps,menu,"
1840 #ifdef HAVE_RECORDING
1841 #define START_REC_COUNT 1
1842 "recording,"
1843 #else
1844 #define START_REC_COUNT 0
1845 #endif
1846 #if CONFIG_TUNER
1847 #define START_TUNER_COUNT 1
1848 "radio,"
1849 #else
1850 #define START_TUNER_COUNT 0
1851 #endif
1852 "bookmarks"
1853 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1854 #define START_PF_COUNT 1
1855 ",pictureflow"
1856 #else
1857 #define START_PF_COUNT 0
1858 #endif
1859 , NULL,
1860 (6 + START_DB_COUNT + START_REC_COUNT + START_TUNER_COUNT + START_PF_COUNT),
1861 ID2P(LANG_PREVIOUS_SCREEN), ID2P(LANG_MAIN_MENU),
1862 ID2P(LANG_DIR_BROWSER),
1863 #ifdef HAVE_TAGCACHE
1864 ID2P(LANG_TAGCACHE),
1865 #endif
1866 ID2P(LANG_RESUME_PLAYBACK), ID2P(LANG_SETTINGS),
1867 #ifdef HAVE_RECORDING
1868 ID2P(LANG_RECORDING),
1869 #endif
1870 #if CONFIG_TUNER
1871 ID2P(LANG_FM_RADIO),
1872 #endif
1873 ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS)
1874 #ifdef HAVE_PICTUREFLOW_INTEGRATION
1875 ,ID2P(LANG_ONPLAY_PICTUREFLOW)
1876 #endif
1878 SYSTEM_SETTING(NVRAM(1),last_screen,-1),
1879 #if defined(HAVE_RTC_ALARM) && \
1880 (defined(HAVE_RECORDING) || CONFIG_TUNER)
1881 {F_T_INT, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN,
1882 INT(ALARM_START_WPS), "alarm wakeup screen", ALARM_SETTING_TEXT,UNUSED},
1883 #endif /* HAVE_RTC_ALARM */
1885 /* Customizable icons */
1886 #ifdef HAVE_LCD_BITMAP
1887 TEXT_SETTING(F_THEMESETTING, icon_file, "iconset", DEFAULT_ICONSET,
1888 ICON_DIR "/", ".bmp"),
1889 TEXT_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset",
1890 DEFAULT_VIEWERS_ICONSET,
1891 ICON_DIR "/", ".bmp"),
1892 #endif
1893 #ifdef HAVE_REMOTE_LCD
1894 TEXT_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "-",
1895 ICON_DIR "/", ".bmp"),
1896 TEXT_SETTING(F_THEMESETTING, remote_viewers_icon_file,
1897 "remote viewers iconset", "-",
1898 ICON_DIR "/", ".bmp"),
1899 #endif /* HAVE_REMOTE_LCD */
1900 #ifdef HAVE_LCD_COLOR
1901 TEXT_SETTING(F_THEMESETTING, colors_file, "filetype colours", "-",
1902 THEME_DIR "/", ".colours"),
1903 #endif
1904 #ifdef HAVE_BUTTON_LIGHT
1905 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, buttonlight_timeout,
1906 LANG_BUTTONLIGHT_TIMEOUT, 5, "button light timeout", off_on,
1907 UNIT_SEC, backlight_formatter, backlight_getlang,
1908 buttonlight_set_timeout, 20,
1909 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
1910 #endif
1911 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
1912 INT_SETTING(F_NO_WRAP, buttonlight_brightness, LANG_BUTTONLIGHT_BRIGHTNESS,
1913 DEFAULT_BRIGHTNESS_SETTING,
1914 "button light brightness",UNIT_INT, MIN_BRIGHTNESS_SETTING,
1915 MAX_BRIGHTNESS_SETTING, 1, NULL, NULL,
1916 buttonlight_set_brightness),
1917 #endif
1918 #ifndef HAVE_WHEEL_ACCELERATION
1919 INT_SETTING(0, list_accel_start_delay, LANG_LISTACCEL_START_DELAY,
1920 2, "list_accel_start_delay", UNIT_SEC, 0, 10, 1,
1921 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL),
1922 INT_SETTING(0, list_accel_wait, LANG_LISTACCEL_ACCEL_SPEED,
1923 3, "list_accel_wait", UNIT_SEC, 1, 10, 1,
1924 scanaccel_formatter, getlang_unit_0_is_off, NULL),
1925 #endif /* HAVE_WHEEL_ACCELERATION */
1926 #if CONFIG_CODEC == SWCODEC
1927 /* keyclick */
1928 #ifdef HAVE_HARDWARE_CLICK
1929 CHOICE_SETTING(0, keyclick, LANG_KEYCLICK_SOFTWARE, 0,
1930 "keyclick", "off,weak,moderate,strong", NULL, 4,
1931 ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE),
1932 ID2P(LANG_STRONG)),
1933 OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false,
1934 "keyclick repeats", NULL),
1935 OFFON_SETTING(0, keyclick_hardware, LANG_KEYCLICK_HARDWARE, false,
1936 "hardware keyclick", NULL),
1937 #else
1938 CHOICE_SETTING(0, keyclick, LANG_KEYCLICK, 0,
1939 "keyclick", "off,weak,moderate,strong", NULL, 4,
1940 ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE),
1941 ID2P(LANG_STRONG)),
1942 OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false,
1943 "keyclick repeats", NULL),
1944 #endif
1945 #endif /* CONFIG_CODEC == SWCODEC */
1946 TEXT_SETTING(0, playlist_catalog_dir, "playlist catalog directory",
1947 PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL),
1948 INT_SETTING(0, sleeptimer_duration, LANG_SLEEP_TIMER_DURATION, 30,
1949 "sleeptimer duration",
1950 UNIT_MIN, 5, 300, 5, NULL, NULL, NULL),
1951 OFFON_SETTING(0, sleeptimer_on_startup, LANG_SLEEP_TIMER_ON_POWER_UP, false,
1952 "sleeptimer on startup", NULL),
1953 OFFON_SETTING(0, keypress_restarts_sleeptimer, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER, false,
1954 "keypress restarts sleeptimer", set_keypress_restarts_sleep_timer),
1955 #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
1956 CHOICE_SETTING(0, touchpad_sensitivity, LANG_TOUCHPAD_SENSITIVITY, 0,
1957 "touchpad sensitivity", "normal,high", touchpad_set_sensitivity, 2,
1958 ID2P(LANG_NORMAL), ID2P(LANG_HIGH)),
1959 #endif
1960 #ifdef HAVE_QUICKSCREEN
1961 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_TOP], LANG_TOP_QS_ITEM,
1962 NULL, "qs top",
1963 qs_load_from_cfg, qs_write_to_cfg,
1964 qs_is_changed, qs_set_default),
1965 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_LEFT], LANG_LEFT_QS_ITEM,
1966 &global_settings.playlist_shuffle, "qs left",
1967 qs_load_from_cfg, qs_write_to_cfg,
1968 qs_is_changed, qs_set_default),
1969 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_RIGHT], LANG_RIGHT_QS_ITEM,
1970 &global_settings.repeat_mode, "qs right",
1971 qs_load_from_cfg, qs_write_to_cfg,
1972 qs_is_changed, qs_set_default),
1973 CUSTOM_SETTING(0, qs_items[QUICKSCREEN_BOTTOM], LANG_BOTTOM_QS_ITEM,
1974 NULL, "qs bottom",
1975 qs_load_from_cfg, qs_write_to_cfg,
1976 qs_is_changed, qs_set_default),
1977 OFFON_SETTING(0, shortcuts_replaces_qs, LANG_USE_SHORTCUTS_INSTEAD_OF_QS,
1978 false, "shortcuts instead of quickscreen", NULL),
1979 #endif
1980 #ifdef HAVE_SPEAKER
1981 OFFON_SETTING(0, speaker_enabled, LANG_ENABLE_SPEAKER, false, "speaker",
1982 audiohw_enable_speaker),
1983 #endif
1984 #ifdef HAVE_TOUCHSCREEN
1985 CHOICE_SETTING(0, touch_mode, LANG_TOUCHSCREEN_MODE, DEFAULT_TOUCHSCREEN_MODE,
1986 "touchscreen mode", "point,grid", NULL, 2,
1987 ID2P(LANG_TOUCHSCREEN_POINT), ID2P(LANG_TOUCHSCREEN_GRID)),
1988 CUSTOM_SETTING(0, ts_calibration_data, -1,
1989 &default_calibration_parameters, "touchscreen calibration",
1990 tsc_load_from_cfg, tsc_write_to_cfg,
1991 tsc_is_changed, tsc_set_default),
1992 #endif
1993 OFFON_SETTING(0, prevent_skip, LANG_PREVENT_SKIPPING, false, "prevent track skip", NULL),
1995 #ifdef HAVE_PITCHCONTROL
1996 OFFON_SETTING(0, pitch_mode_semitone, LANG_SEMITONE, false,
1997 "Semitone pitch change", NULL),
1998 #if CONFIG_CODEC == SWCODEC
1999 OFFON_SETTING(0, pitch_mode_timestretch, LANG_TIMESTRETCH, false,
2000 "Timestretch mode", NULL),
2001 #endif
2002 #endif
2004 #ifdef USB_ENABLE_HID
2005 OFFON_SETTING(0, usb_hid, LANG_USB_HID, true, "usb hid", usb_set_hid),
2006 CHOICE_SETTING(0, usb_keypad_mode, LANG_USB_KEYPAD_MODE, 0,
2007 "usb keypad mode", "multimedia,presentation,browser"
2008 #ifdef HAVE_USB_HID_MOUSE
2009 ",mouse"
2010 #endif
2011 , NULL,
2012 #ifdef HAVE_USB_HID_MOUSE
2014 #else
2016 #endif
2017 ID2P(LANG_MULTIMEDIA_MODE), ID2P(LANG_PRESENTATION_MODE),
2018 ID2P(LANG_BROWSER_MODE)
2019 #ifdef HAVE_USB_HID_MOUSE
2020 , ID2P(LANG_MOUSE_MODE)
2021 #endif
2022 ), /* CHOICE_SETTING( usb_keypad_mode ) */
2023 #endif
2025 #if defined(USB_ENABLE_STORAGE) && defined(HAVE_MULTIDRIVE)
2026 OFFON_SETTING(0, usb_skip_first_drive, LANG_USB_SKIP_FIRST_DRIVE, false, "usb skip first drive", usb_set_skip_first_drive),
2027 #endif
2029 /* Customizable list */
2030 #ifdef HAVE_LCD_BITMAP
2031 VIEWPORT_SETTING(ui_vp_config, "ui viewport"),
2032 #ifdef HAVE_REMOTE_LCD
2033 VIEWPORT_SETTING(remote_ui_vp_config, "remote ui viewport"),
2034 #endif
2035 #endif
2037 #ifdef HAVE_MORSE_INPUT
2038 OFFON_SETTING(0, morse_input, LANG_MORSE_INPUT, false, "morse input", NULL),
2039 #endif
2041 #ifdef HAVE_HOTKEY
2042 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, hotkey_wps,
2043 LANG_HOTKEY_WPS, HOTKEY_VIEW_PLAYLIST, "hotkey wps",
2044 "off,view playlist,show track info,pitchscreen,open with,delete"
2045 #ifdef HAVE_PICTUREFLOW_INTEGRATION
2046 ",pictureflow"
2047 #endif
2048 ,UNIT_INT, hotkey_formatter, hotkey_getlang, NULL,
2049 #ifdef HAVE_PICTUREFLOW_INTEGRATION
2051 #else
2053 #endif
2054 HOTKEY_OFF,
2055 HOTKEY_VIEW_PLAYLIST, HOTKEY_SHOW_TRACK_INFO, HOTKEY_PITCHSCREEN,
2056 HOTKEY_OPEN_WITH, HOTKEY_DELETE
2057 #ifdef HAVE_PICTUREFLOW_INTEGRATION
2058 , HOTKEY_PICTUREFLOW
2059 #endif
2061 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, hotkey_tree,
2062 LANG_HOTKEY_FILE_BROWSER, HOTKEY_OFF, "hotkey tree",
2063 "off,open with,delete,insert,insert shuffled",
2064 UNIT_INT, hotkey_formatter, hotkey_getlang, NULL, 5, HOTKEY_OFF,
2065 HOTKEY_OPEN_WITH, HOTKEY_DELETE, HOTKEY_INSERT, HOTKEY_INSERT_SHUFFLED),
2066 #endif
2068 #if CONFIG_CODEC == SWCODEC
2069 INT_SETTING(0, resume_rewind, LANG_RESUME_REWIND, 0,
2070 "resume rewind", UNIT_SEC, 0, 60, 5,
2071 NULL, NULL, NULL),
2072 #endif
2073 CUSTOM_SETTING(0, root_menu_customized,
2074 LANG_ROCKBOX_TITLE, /* lang string here is never actually used */
2075 NULL, "root menu order",
2076 root_menu_load_from_cfg, root_menu_write_to_cfg,
2077 root_menu_is_changed, root_menu_set_default),
2080 const int nb_settings = sizeof(settings)/sizeof(*settings);
2082 const struct settings_list* get_settings_list(int*count)
2084 *count = nb_settings;
2085 return settings;