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