summaryrefslogtreecommitdiff
path: root/apps/settings_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/settings_list.c')
-rw-r--r--apps/settings_list.c396
1 files changed, 208 insertions, 188 deletions
diff --git a/apps/settings_list.c b/apps/settings_list.c
index d4ad6f64dc..a5a1c53dc0 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -187,6 +187,13 @@
187 {cb, formatter, get_talk_id, unit, count, \ 187 {cb, formatter, get_talk_id, unit, count, \
188 (const int[]){__VA_ARGS__}}}}} 188 (const int[]){__VA_ARGS__}}}}}
189 189
190#define TABLE_SETTING_LIST(flags, var, lang_id, default, name, cfg_vals, \
191 unit, formatter, get_talk_id, cb, count, list) \
192 {flags|F_TABLE_SETTING|F_T_INT, &global_settings.var, \
193 lang_id, INT(default), name, cfg_vals, \
194 {.table_setting = (struct table_setting[]) { \
195 {cb, formatter, get_talk_id, unit, count, list}}}}
196
190#define CUSTOM_SETTING(flags, var, lang_id, default, name, \ 197#define CUSTOM_SETTING(flags, var, lang_id, default, name, \
191 load_from_cfg, write_to_cfg, \ 198 load_from_cfg, write_to_cfg, \
192 is_change, set_default) \ 199 is_change, set_default) \
@@ -200,9 +207,18 @@
200 TEXT_SETTING(F_THEMESETTING,var,name,"-", NULL, NULL) 207 TEXT_SETTING(F_THEMESETTING,var,name,"-", NULL, NULL)
201 208
202/* some sets of values which are used more than once, to save memory */ 209/* some sets of values which are used more than once, to save memory */
210static const char off[] = "off";
203static const char off_on[] = "off,on"; 211static const char off_on[] = "off,on";
204static const char off_on_ask[] = "off,on,ask"; 212static const char off_on_ask[] = "off,on,ask";
205static const char off_number_spell[] = "off,number,spell"; 213static const char off_number_spell[] = "off,number,spell";
214static const int timeout_sec_common[] = {-1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,
215 45,60,90,120,180,240,300,600,900,1200,
216 1500,1800,2700,3600,4500,5400,6300,7200};
217static const int time_recording_trigger[] = {0,1,2,5,10,15,20,25,30,60,120,300,600};
218#if defined(HAVE_BACKLIGHT_FADING_INT_SETTING)
219static const int backlight_fade[] = {0,100,200,300,500,1000,2000,3000,5000,10000};
220#endif
221
206#ifdef HAVE_LCD_BITMAP 222#ifdef HAVE_LCD_BITMAP
207static const char graphic_numeric[] = "graphic,numeric"; 223static const char graphic_numeric[] = "graphic,numeric";
208#endif 224#endif
@@ -330,6 +346,14 @@ static const char graphic_numeric[] = "graphic,numeric";
330#define DEFAULT_TAGCACHE_SCAN_PATHS "/" 346#define DEFAULT_TAGCACHE_SCAN_PATHS "/"
331#endif 347#endif
332 348
349#ifdef HAVE_BACKLIGHT
350#ifdef SIMULATOR
351#define DEFAULT_BACKLIGHT_TIMEOUT 0
352#else
353#define DEFAULT_BACKLIGHT_TIMEOUT 15
354#endif
355#endif /* HAVE_BACKLIGHT */
356
333#if LCD_DEPTH > 1 357#if LCD_DEPTH > 1
334static const char* list_pad_formatter(char *buffer, size_t buffer_size, 358static const char* list_pad_formatter(char *buffer, size_t buffer_size,
335 int val, const char *unit) 359 int val, const char *unit)
@@ -373,61 +397,89 @@ static int32_t getlang_unit_0_is_off(int value, int unit)
373 return TALK_ID(value,unit); 397 return TALK_ID(value,unit);
374} 398}
375 399
376static const char* formatter_unit_0_is_skip_track(char *buffer, size_t buffer_size, 400static const char* formatter_time_unit_0_is_off(char *buffer, size_t buffer_size,
377 int val, const char *unit) 401 int val, const char *unit)
402{
403 (void) buffer_size;
404 (void) unit;
405 if (val == 0)
406 return str(LANG_OFF);
407 return buffer;
408}
409
410static int32_t getlang_time_unit_0_is_off(int value, int unit)
411{
412 if (value == 0)
413 return LANG_OFF;
414 else
415 return talk_time_intervals(value, unit, false);
416}
417
418#if defined(HAVE_BACKLIGHT) || defined(HAVE_LCD_SLEEP_SETTING)
419static const char* formatter_time_unit_0_is_always(char *buffer, size_t buffer_size,
420 int val, const char *unit)
421{
422 (void) buffer_size;
423 (void) unit;
424 if (val == -1)
425 return str(LANG__NEVER);
426 else if (val == 0)
427 return str(LANG_ALWAYS);
428 return buffer;
429}
430
431static int32_t getlang_time_unit_0_is_always(int value, int unit)
432{
433 if (value == -1)
434 return LANG__NEVER;
435 else if (value == 0)
436 return LANG_ALWAYS;
437 else
438 return talk_time_intervals(value, unit, false);
439}
440#endif /* HAVE_BACKLIGHT || HAVE_LCD_SLEEP_SETTING */
441
442static const char* formatter_time_unit_0_is_skip_track(char *buffer,
443 size_t buffer_size, int val, const char *unit)
378{ 444{
379 (void)unit; 445 (void)unit;
446 (void)buffer_size;
380 if (val == -1) 447 if (val == -1)
381 return str(LANG_SKIP_OUTRO); 448 return str(LANG_SKIP_OUTRO);
382 else if (val == 0) 449 else if (val == 0)
383 return str(LANG_SKIP_TRACK); 450 return str(LANG_SKIP_TRACK);
384 else if (val % 60 == 0)
385 snprintf(buffer, buffer_size, "%d min", val/60);
386 else
387 snprintf(buffer, buffer_size, "%d s", val);
388 return buffer; 451 return buffer;
389} 452}
390 453
391static int32_t getlang_unit_0_is_skip_track(int value, int unit) 454static int32_t getlang_time_unit_0_is_skip_track(int value, int unit)
392{ 455{
393 (void)unit; 456 (void)unit;
394 if (value == -1) 457 if (value == -1)
395 return LANG_SKIP_OUTRO; 458 return LANG_SKIP_OUTRO;
396 else if (value == 0) 459 else if (value == 0)
397 return LANG_SKIP_TRACK; 460 return LANG_SKIP_TRACK;
398 else if (value % 60 == 0)
399 return TALK_ID(value/60, UNIT_MIN);
400 else 461 else
401 return TALK_ID(value, UNIT_SEC); 462 return talk_time_intervals(value, unit, false);
402} 463}
403 464
404#ifdef HAVE_BACKLIGHT 465#ifdef HAVE_LCD_BITMAP
405#ifdef SIMULATOR 466static const char* formatter_time_unit_0_is_eternal(char *buffer,
406#define DEFAULT_BACKLIGHT_TIMEOUT 0 467 size_t buffer_size, int val, const char *unit)
407#else
408#define DEFAULT_BACKLIGHT_TIMEOUT 15
409#endif
410static const char* backlight_formatter(char *buffer, size_t buffer_size,
411 int val, const char *unit)
412{ 468{
413 if (val == -1) 469 (void) buffer_size;
414 return str(LANG_OFF); 470 (void) unit;
415 else if (val == 0) 471 if (val == 0)
416 return str(LANG_ON); 472 return str(LANG_PM_ETERNAL);
417 else
418 snprintf(buffer, buffer_size, "%d %s", val, unit);
419 return buffer; 473 return buffer;
420} 474}
421static int32_t backlight_getlang(int value, int unit) 475static int32_t getlang_time_unit_0_is_eternal(int value, int unit)
422{ 476{
423 if (value == -1) 477 if (value == 0)
424 return LANG_OFF; 478 return LANG_PM_ETERNAL;
425 else if (value == 0)
426 return LANG_ON;
427 else 479 else
428 return TALK_ID(value, unit); 480 return talk_time_intervals(value, unit, false);
429} 481}
430#endif 482#endif /* HAVE_LCD_BITMAP */
431 483
432#ifndef HAVE_WHEEL_ACCELERATION 484#ifndef HAVE_WHEEL_ACCELERATION
433static const char* scanaccel_formatter(char *buffer, size_t buffer_size, 485static const char* scanaccel_formatter(char *buffer, size_t buffer_size,
@@ -437,7 +489,7 @@ static const char* scanaccel_formatter(char *buffer, size_t buffer_size,
437 if (val == 0) 489 if (val == 0)
438 return str(LANG_OFF); 490 return str(LANG_OFF);
439 else 491 else
440 snprintf(buffer, buffer_size, "Speed up every %ds", val); 492 snprintf(buffer, buffer_size, "Speed up every %d s", val);
441 return buffer; 493 return buffer;
442} 494}
443#endif 495#endif
@@ -798,8 +850,9 @@ const struct settings_list settings[] = {
798/* 3-d enhancement effect */ 850/* 3-d enhancement effect */
799#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 851#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
800 SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS), 852 SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS),
853 /* requires index, uses table defined by driver */
801 STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume", 854 STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume",
802 "off,20ms,2,4,8,", sound_set_avc, 5, 855 "off,20 ms,2 s,4 s,8 s,", sound_set_avc, 5,
803 LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC), 856 LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC),
804 TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)), 857 TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)),
805 OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass", 858 OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass",
@@ -864,18 +917,19 @@ const struct settings_list settings[] = {
864 MAX_CONTRAST_SETTING, 1, NULL, NULL }}}}, 917 MAX_CONTRAST_SETTING, 1, NULL, NULL }}}},
865#endif 918#endif
866#ifdef HAVE_BACKLIGHT 919#ifdef HAVE_BACKLIGHT
867 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout, LANG_BACKLIGHT, 920 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS,
868 DEFAULT_BACKLIGHT_TIMEOUT, 921 backlight_timeout, LANG_BACKLIGHT,
869 "backlight timeout", off_on, UNIT_SEC, backlight_formatter, 922 DEFAULT_BACKLIGHT_TIMEOUT, "backlight timeout",
870 backlight_getlang, backlight_set_timeout, 20, 923 off_on, UNIT_SEC, formatter_time_unit_0_is_always,
871 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120), 924 getlang_time_unit_0_is_always, backlight_set_timeout,
925 23, timeout_sec_common),
872#if CONFIG_CHARGING 926#if CONFIG_CHARGING
873 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_timeout_plugged, 927 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS,
874 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10, 928 backlight_timeout_plugged, LANG_BACKLIGHT_ON_WHEN_CHARGING,
875 "backlight timeout plugged", off_on, UNIT_SEC, 929 DEFAULT_BACKLIGHT_TIMEOUT, "backlight timeout plugged",
876 backlight_formatter, backlight_getlang, 930 off_on, UNIT_SEC, formatter_time_unit_0_is_always,
877 backlight_set_timeout_plugged, 20, 931 getlang_time_unit_0_is_always, backlight_set_timeout_plugged,
878 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120), 932 23, timeout_sec_common),
879#endif 933#endif
880#endif /* HAVE_BACKLIGHT */ 934#endif /* HAVE_BACKLIGHT */
881#ifdef HAVE_LCD_BITMAP 935#ifdef HAVE_LCD_BITMAP
@@ -951,10 +1005,10 @@ const struct settings_list settings[] = {
951#endif /* HAVE_LCD_BITMAP */ 1005#endif /* HAVE_LCD_BITMAP */
952 OFFON_SETTING(0,show_icons, LANG_SHOW_ICONS ,true,"show icons", NULL), 1006 OFFON_SETTING(0,show_icons, LANG_SHOW_ICONS ,true,"show icons", NULL),
953 /* system */ 1007 /* system */
954 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, poweroff, LANG_POWEROFF_IDLE, 10, 1008 INT_SETTING(F_TIME_SETTING, poweroff, LANG_POWEROFF_IDLE, 10,
955 "idle poweroff", "off", UNIT_MIN, formatter_unit_0_is_off, 1009 "idle poweroff", UNIT_MIN, 0,60,1,
956 getlang_unit_0_is_off, set_poweroff_timeout, 15, 1010 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off,
957 0,1,2,3,4,5,6,7,8,9,10,15,30,45,60), 1011 set_poweroff_timeout),
958 SYSTEM_SETTING(NVRAM(4), runtime, 0), 1012 SYSTEM_SETTING(NVRAM(4), runtime, 0),
959 SYSTEM_SETTING(NVRAM(4), topruntime, 0), 1013 SYSTEM_SETTING(NVRAM(4), topruntime, 0),
960 INT_SETTING(F_BANFROMQS, max_files_in_playlist, 1014 INT_SETTING(F_BANFROMQS, max_files_in_playlist,
@@ -1039,18 +1093,17 @@ const struct settings_list settings[] = {
1039 lcd_remote_set_invert_display), 1093 lcd_remote_set_invert_display),
1040 OFFON_SETTING(0,remote_flip_display, LANG_FLIP_DISPLAY, 1094 OFFON_SETTING(0,remote_flip_display, LANG_FLIP_DISPLAY,
1041 false,"remote flip display", NULL), 1095 false,"remote flip display", NULL),
1042 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout, 1096 TABLE_SETTING_LIST(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout,
1043 LANG_BACKLIGHT, 5, "remote backlight timeout", off_on, 1097 LANG_BACKLIGHT, 5,
1044 UNIT_SEC, backlight_formatter, backlight_getlang, 1098 "remote backlight timeout", off_on, UNIT_SEC,
1045 remote_backlight_set_timeout, 20, 1099 formatter_time_unit_0_is_always, getlang_time_unit_0_is_always,
1046 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120), 1100 remote_backlight_set_timeout, 23, timeout_sec_common),
1047#if CONFIG_CHARGING 1101#if CONFIG_CHARGING
1048 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout_plugged, 1102 TABLE_SETTING_LIST(F_ALLOW_ARBITRARY_VALS, remote_backlight_timeout_plugged,
1049 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10, 1103 LANG_BACKLIGHT_ON_WHEN_CHARGING, 10,
1050 "remote backlight timeout plugged", off_on, UNIT_SEC, 1104 "remote backlight timeout plugged", off_on, UNIT_SEC,
1051 backlight_formatter, backlight_getlang, 1105 formatter_time_unit_0_is_always, getlang_time_unit_0_is_always,
1052 remote_backlight_set_timeout_plugged, 20, 1106 remote_backlight_set_timeout_plugged, 23, timeout_sec_common),
1053 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120),
1054#endif 1107#endif
1055#ifdef HAVE_REMOTE_LCD_TICKING 1108#ifdef HAVE_REMOTE_LCD_TICKING
1056 OFFON_SETTING(0, remote_reduce_ticking, LANG_REDUCE_TICKING, 1109 OFFON_SETTING(0, remote_reduce_ticking, LANG_REDUCE_TICKING,
@@ -1103,15 +1156,15 @@ const struct settings_list settings[] = {
1103#endif 1156#endif
1104 /* backlight fading */ 1157 /* backlight fading */
1105#if defined(HAVE_BACKLIGHT_FADING_INT_SETTING) 1158#if defined(HAVE_BACKLIGHT_FADING_INT_SETTING)
1106 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_in, 1159 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, backlight_fade_in,
1107 LANG_BACKLIGHT_FADE_IN, 300, "backlight fade in", "off", 1160 LANG_BACKLIGHT_FADE_IN, 300, "backlight fade in", "off",
1108 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off, 1161 UNIT_MS, formatter_time_unit_0_is_off, getlang_unit_0_is_off,
1109 backlight_set_fade_in, 7, 0,100,200,300,500,1000,2000), 1162 backlight_set_fade_in, 7, backlight_fade),
1110 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, backlight_fade_out, 1163 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, backlight_fade_out,
1111 LANG_BACKLIGHT_FADE_OUT, 2000, "backlight fade out", "off", 1164 LANG_BACKLIGHT_FADE_OUT, 2000, "backlight fade out", "off",
1112 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off, 1165 UNIT_MS, formatter_time_unit_0_is_off,
1113 backlight_set_fade_out, 10, 1166 getlang_time_unit_0_is_off,
1114 0,100,200,300,500,1000,2000,3000,5000,10000), 1167 backlight_set_fade_out, 10, backlight_fade),
1115#elif defined(HAVE_BACKLIGHT_FADING_BOOL_SETTING) 1168#elif defined(HAVE_BACKLIGHT_FADING_BOOL_SETTING)
1116 OFFON_SETTING(0, backlight_fade_in, LANG_BACKLIGHT_FADE_IN, 1169 OFFON_SETTING(0, backlight_fade_in, LANG_BACKLIGHT_FADE_IN,
1117 true, "backlight fade in", backlight_set_fade_in), 1170 true, "backlight fade in", backlight_set_fade_in),
@@ -1121,9 +1174,10 @@ const struct settings_list settings[] = {
1121#endif /* HAVE_BACKLIGHT */ 1174#endif /* HAVE_BACKLIGHT */
1122 INT_SETTING(F_PADTITLE, scroll_speed, LANG_SCROLL_SPEED, 9,"scroll speed", 1175 INT_SETTING(F_PADTITLE, scroll_speed, LANG_SCROLL_SPEED, 9,"scroll speed",
1123 UNIT_INT, 0, 17, 1, NULL, NULL, lcd_scroll_speed), 1176 UNIT_INT, 0, 17, 1, NULL, NULL, lcd_scroll_speed),
1124 INT_SETTING(F_PADTITLE, scroll_delay, LANG_SCROLL_DELAY, 1000, 1177 INT_SETTING(F_TIME_SETTING | F_PADTITLE, scroll_delay, LANG_SCROLL_DELAY,
1125 "scroll delay", UNIT_MS, 0, 2500, 100, NULL, 1178 1000, "scroll delay", UNIT_MS, 0, 3000, 100,
1126 NULL, lcd_scroll_delay), 1179 formatter_time_unit_0_is_off,
1180 getlang_time_unit_0_is_off, lcd_scroll_delay),
1127 INT_SETTING(0, bidir_limit, LANG_BIDIR_SCROLL, 50, "bidir limit", 1181 INT_SETTING(0, bidir_limit, LANG_BIDIR_SCROLL, 50, "bidir limit",
1128 UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_bidir_scroll), 1182 UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_bidir_scroll),
1129#ifdef HAVE_REMOTE_LCD 1183#ifdef HAVE_REMOTE_LCD
@@ -1133,8 +1187,9 @@ const struct settings_list settings[] = {
1133 INT_SETTING(0, remote_scroll_step, LANG_SCROLL_STEP, 6, 1187 INT_SETTING(0, remote_scroll_step, LANG_SCROLL_STEP, 6,
1134 "remote scroll step", UNIT_PIXEL, 1, LCD_REMOTE_WIDTH, 1, NULL, 1188 "remote scroll step", UNIT_PIXEL, 1, LCD_REMOTE_WIDTH, 1, NULL,
1135 NULL, lcd_remote_scroll_step), 1189 NULL, lcd_remote_scroll_step),
1136 INT_SETTING(0, remote_scroll_delay, LANG_SCROLL_DELAY, 1000, 1190 INT_SETTING(F_TIME_SETTING, remote_scroll_delay, LANG_SCROLL_DELAY, 1000,
1137 "remote scroll delay", UNIT_MS, 0, 2500, 100, NULL, NULL, 1191 "remote scroll delay", UNIT_MS, 0, 3000, 100,
1192 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off,
1138 lcd_remote_scroll_delay), 1193 lcd_remote_scroll_delay),
1139 INT_SETTING(0, remote_bidir_limit, LANG_BIDIR_SCROLL, 50, 1194 INT_SETTING(0, remote_bidir_limit, LANG_BIDIR_SCROLL, 50,
1140 "remote bidir limit", UNIT_PERCENT, 0, 200, 25, NULL, NULL, 1195 "remote bidir limit", UNIT_PERCENT, 0, 200, 25, NULL, NULL,
@@ -1172,27 +1227,25 @@ const struct settings_list settings[] = {
1172 OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL), 1227 OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL),
1173 OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL), 1228 OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL),
1174 OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL), 1229 OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL),
1175 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, ff_rewind_min_step, 1230 INT_SETTING(F_TIME_SETTING, ff_rewind_min_step, LANG_FFRW_STEP, 1,
1176 LANG_FFRW_STEP, 1, "scan min step", NULL, UNIT_SEC, 1231 "scan min step", UNIT_SEC, 1, 60, 1, NULL, NULL, NULL),
1177 NULL, NULL, NULL, 14, 1,2,3,4,5,6,8,10,15,20,25,30,45,60),
1178 CHOICE_SETTING(0, ff_rewind_accel, LANG_FFRW_ACCEL, 2, 1232 CHOICE_SETTING(0, ff_rewind_accel, LANG_FFRW_ACCEL, 2,
1179 "seek acceleration", "very fast,fast,normal,slow,very slow", NULL, 5, 1233 "seek acceleration", "very fast,fast,normal,slow,very slow", NULL, 5,
1180 ID2P(LANG_VERY_FAST), ID2P(LANG_FAST), ID2P(LANG_NORMAL), 1234 ID2P(LANG_VERY_FAST), ID2P(LANG_FAST), ID2P(LANG_NORMAL),
1181 ID2P(LANG_SLOW) , ID2P(LANG_VERY_SLOW)), 1235 ID2P(LANG_SLOW) , ID2P(LANG_VERY_SLOW)),
1182#if (CONFIG_CODEC == SWCODEC) && defined(HAVE_DISK_STORAGE) 1236#if (CONFIG_CODEC == SWCODEC) && defined(HAVE_DISK_STORAGE)
1183 STRINGCHOICE_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0,"antiskip", 1237 TABLE_SETTING(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, buffer_margin,
1184 "5s,15s,30s,1min,2min,3min,5min,10min", NULL, 8, 1238 LANG_MP3BUFFER_MARGIN, 5, "antiskip", NULL, UNIT_SEC,
1185 TALK_ID(5, UNIT_SEC), TALK_ID(15, UNIT_SEC), 1239 NULL, NULL,
1186 TALK_ID(30, UNIT_SEC), TALK_ID(1, UNIT_MIN), 1240 NULL,8, 5,15,30,60,120,180,300,600),
1187 TALK_ID(2, UNIT_MIN), TALK_ID(3, UNIT_MIN),
1188 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN)),
1189#elif defined(HAVE_DISK_STORAGE) 1241#elif defined(HAVE_DISK_STORAGE)
1190 INT_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0, "antiskip", 1242 INT_SETTING(F_TIME_SETTING, buffer_margin, LANG_MP3BUFFER_MARGIN, 0,
1191 UNIT_SEC, 0, 7, 1, NULL, NULL, audio_set_buffer_margin), 1243 "antiskip", UNIT_SEC, 0, 7, 1, formatter_time_unit_0_is_off,
1244 getlang_time_unit_0_is_off, audio_set_buffer_margin),
1192#endif 1245#endif
1193 /* disk */ 1246 /* disk */
1194#ifdef HAVE_DISK_STORAGE 1247#ifdef HAVE_DISK_STORAGE
1195 INT_SETTING(0, disk_spindown, LANG_SPINDOWN, 5, "disk spindown", 1248 INT_SETTING(F_TIME_SETTING, disk_spindown, LANG_SPINDOWN, 5, "disk spindown",
1196 UNIT_SEC, 3, 254, 1, NULL, NULL, storage_spindown), 1249 UNIT_SEC, 3, 254, 1, NULL, NULL, storage_spindown),
1197#endif /* HAVE_DISK_STORAGE */ 1250#endif /* HAVE_DISK_STORAGE */
1198 /* browser */ 1251 /* browser */
@@ -1252,35 +1305,16 @@ const struct settings_list settings[] = {
1252 ID2P(LANG_BOOKMARK_SETTINGS_ONE_PER_TRACK)), 1305 ID2P(LANG_BOOKMARK_SETTINGS_ONE_PER_TRACK)),
1253#ifdef HAVE_LCD_BITMAP 1306#ifdef HAVE_LCD_BITMAP
1254 /* peak meter */ 1307 /* peak meter */
1255 STRINGCHOICE_SETTING(0, peak_meter_clip_hold, LANG_PM_CLIP_HOLD, 16, 1308 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, peak_meter_clip_hold,
1256 "peak meter clip hold", 1309 LANG_PM_CLIP_HOLD, 60, "peak meter clip hold", "eternal",
1257 "on,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,2min" 1310 UNIT_SEC, formatter_time_unit_0_is_eternal,
1258 ",3min,5min,10min,20min,45min,90min", 1311 getlang_time_unit_0_is_eternal, peak_meter_set_clip_hold,
1259 peak_meter_set_clip_hold, 25, LANG_PM_ETERNAL, 1312 31, &timeout_sec_common[1]), /* skip -1 entry */
1260 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC), 1313 TABLE_SETTING(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, peak_meter_hold,
1261 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC), 1314 LANG_PM_PEAK_HOLD, 500, "peak meter hold", off, UNIT_MS,
1262 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC), 1315 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off,NULL,
1263 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC), 1316 18, 0,200,300,500,1000,2000,3000,4000,5000,6000,7000,8000,
1264 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC), 1317 9000,10000,15000,20000,30000,60000),
1265 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
1266 TALK_ID(25, UNIT_SEC), TALK_ID(30, UNIT_SEC),
1267 TALK_ID(45, UNIT_SEC), TALK_ID(60, UNIT_SEC),
1268 TALK_ID(90, UNIT_SEC), TALK_ID(2, UNIT_MIN),
1269 TALK_ID(3, UNIT_MIN), TALK_ID(5, UNIT_MIN),
1270 TALK_ID(10, UNIT_MIN), TALK_ID(20, UNIT_MIN),
1271 TALK_ID(45, UNIT_MIN), TALK_ID(90, UNIT_MIN)),
1272 STRINGCHOICE_SETTING(0, peak_meter_hold, LANG_PM_PEAK_HOLD, 3,
1273 "peak meter hold",
1274 "off,200ms,300ms,500ms,1,2,3,4,5,6,7,8,9,10,15,20,30,1min",
1275 NULL, 18, LANG_OFF, TALK_ID(200, UNIT_MS),
1276 TALK_ID(300, UNIT_MS), TALK_ID(500, UNIT_MS),
1277 TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC),
1278 TALK_ID(3, UNIT_SEC), TALK_ID(4, UNIT_SEC),
1279 TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC),
1280 TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC),
1281 TALK_ID(9, UNIT_SEC), TALK_ID(10, UNIT_SEC),
1282 TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC),
1283 TALK_ID(30, UNIT_SEC), TALK_ID(60, UNIT_SEC)),
1284 INT_SETTING(0, peak_meter_release, LANG_PM_RELEASE, 8, "peak meter release", 1318 INT_SETTING(0, peak_meter_release, LANG_PM_RELEASE, 8, "peak meter release",
1285 UNIT_PM_TICK, 1, 0x7e, 1, NULL, NULL,NULL), 1319 UNIT_PM_TICK, 1, 0x7e, 1, NULL, NULL,NULL),
1286 OFFON_SETTING(0,peak_meter_dbfs,LANG_PM_DBFS,true,"peak meter dbfs",NULL), 1320 OFFON_SETTING(0,peak_meter_dbfs,LANG_PM_DBFS,true,"peak meter dbfs",NULL),
@@ -1328,20 +1362,12 @@ const struct settings_list settings[] = {
1328 "Announce Battery Level", NULL), 1362 "Announce Battery Level", NULL),
1329 1363
1330#ifdef HAVE_RECORDING 1364#ifdef HAVE_RECORDING
1331 /* recording */ 1365 /* recording */
1332 STRINGCHOICE_SETTING(F_RECSETTING, rec_timesplit, LANG_SPLIT_TIME, 0, 1366 TABLE_SETTING(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS | F_RECSETTING,
1333 "rec timesplit", 1367 rec_timesplit,
1334 "off,00:05,00:10,00:15,00:30,01:00,01:14,01:20,02:00," 1368 LANG_SPLIT_TIME, 0, "rec timesplit", off, UNIT_MIN,
1335 "04:00,06:00,08:00,10:00,12:00,18:00,24:00", 1369 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off,NULL,
1336 NULL, 16, LANG_OFF, 1370 16, 0,5,10,15,30,60,74,80,120,240,360,480,600,720,1080,1440),
1337 TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN),
1338 TALK_ID(15, UNIT_MIN), TALK_ID(30, UNIT_MIN),
1339 TALK_ID(60, UNIT_MIN), TALK_ID(74, UNIT_MIN),
1340 TALK_ID(80, UNIT_MIN), TALK_ID(2, UNIT_HOUR),
1341 TALK_ID(4, UNIT_HOUR), TALK_ID(6, UNIT_HOUR),
1342 TALK_ID(8, UNIT_HOUR), TALK_ID(10, UNIT_HOUR),
1343 TALK_ID(12, UNIT_HOUR), TALK_ID(18, UNIT_HOUR),
1344 TALK_ID(20, UNIT_HOUR), TALK_ID(24, UNIT_HOUR)),
1345 STRINGCHOICE_SETTING(F_RECSETTING, rec_sizesplit, LANG_SPLIT_SIZE, 0, 1371 STRINGCHOICE_SETTING(F_RECSETTING, rec_sizesplit, LANG_SPLIT_SIZE, 0,
1346 "rec sizesplit", 1372 "rec sizesplit",
1347 "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB," 1373 "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB,"
@@ -1374,9 +1400,10 @@ const struct settings_list settings[] = {
1374 HAVE_SPDIF_REC_(",spdif") 1400 HAVE_SPDIF_REC_(",spdif")
1375 HAVE_FMRADIO_REC_(",fmradio")[1], 1401 HAVE_FMRADIO_REC_(",fmradio")[1],
1376 UNUSED}, 1402 UNUSED},
1377 INT_SETTING(F_RECSETTING, rec_prerecord_time, LANG_RECORD_PRERECORD_TIME, 0, 1403 INT_SETTING(F_TIME_SETTING | F_RECSETTING, rec_prerecord_time,
1404 LANG_RECORD_PRERECORD_TIME, 0,
1378 "prerecording time", UNIT_SEC, 0, 30, 1, 1405 "prerecording time", UNIT_SEC, 0, 30, 1,
1379 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL), 1406 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off, NULL),
1380 1407
1381 TEXT_SETTING(F_RECSETTING, rec_directory, "rec path", 1408 TEXT_SETTING(F_RECSETTING, rec_directory, "rec path",
1382 REC_BASE_DIR, NULL, NULL), 1409 REC_BASE_DIR, NULL, NULL),
@@ -1444,21 +1471,15 @@ const struct settings_list settings[] = {
1444 "trigger stop threshold dB", UNIT_DB, -89, 0, 1, NULL, NULL, NULL), 1471 "trigger stop threshold dB", UNIT_DB, -89, 0, 1, NULL, NULL, NULL),
1445 INT_SETTING(F_RECSETTING, rec_stop_thres_linear, LANG_RECORD_STOP_THRESHOLD, 10, 1472 INT_SETTING(F_RECSETTING, rec_stop_thres_linear, LANG_RECORD_STOP_THRESHOLD, 10,
1446 "trigger stop threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL), 1473 "trigger stop threshold linear", UNIT_PERCENT, 0, 100, 1, NULL, NULL, NULL),
1447 TABLE_SETTING(F_RECSETTING, rec_start_duration, LANG_MIN_DURATION, 0, 1474 TABLE_SETTING_LIST(F_TIME_SETTING | F_RECSETTING, rec_start_duration,
1448 "trigger start duration", 1475 LANG_MIN_DURATION, 0, "trigger start duration",
1449 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min", 1476 off, UNIT_SEC, NULL, NULL, NULL, 13, time_recording_trigger),
1450 UNIT_SEC, NULL, NULL, NULL, 13, 1477 TABLE_SETTING_LIST(F_TIME_SETTING | F_RECSETTING, rec_stop_postrec,
1451 0,1,2,5,10,15,20,25,30,60,120,300,600), 1478 LANG_MIN_DURATION, 0, "trigger stop duration",
1452 TABLE_SETTING(F_RECSETTING, rec_stop_postrec, LANG_MIN_DURATION, 0, 1479 off, UNIT_SEC, NULL, NULL, NULL, 13, time_recording_trigger),
1453 "trigger stop duration", 1480 TABLE_SETTING_LIST(F_TIME_SETTING | F_RECSETTING, rec_stop_gap,
1454 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min", 1481 LANG_RECORD_STOP_GAP, 1, "trigger min gap",
1455 UNIT_SEC, NULL, NULL, NULL, 13, 1482 off, UNIT_SEC, NULL, NULL, NULL, 13, time_recording_trigger),
1456 0,1,2,5,10,15,20,25,30,60,120,300,600),
1457 TABLE_SETTING(F_RECSETTING, rec_stop_gap, LANG_RECORD_STOP_GAP, 1,
1458 "trigger min gap",
1459 "0s,1s,2s,5s,10s,15s,20s,25s,30s,1min,2min,5min,10min",
1460 UNIT_SEC, NULL, NULL, NULL, 13,
1461 0,1,2,5,10,15,20,25,30,60,120,300,600),
1462 CHOICE_SETTING(F_RECSETTING, rec_trigger_mode, LANG_RECORD_TRIGGER, TRIG_MODE_OFF, 1483 CHOICE_SETTING(F_RECSETTING, rec_trigger_mode, LANG_RECORD_TRIGGER, TRIG_MODE_OFF,
1463 "trigger mode","off,once,repeat", NULL ,3, 1484 "trigger mode","off,once,repeat", NULL ,3,
1464 ID2P(LANG_OFF), ID2P(LANG_RECORD_TRIG_NOREARM), ID2P(LANG_REPEAT)), 1485 ID2P(LANG_OFF), ID2P(LANG_RECORD_TRIG_NOREARM), ID2P(LANG_REPEAT)),
@@ -1469,9 +1490,10 @@ const struct settings_list settings[] = {
1469 1490
1470#ifdef HAVE_HISTOGRAM 1491#ifdef HAVE_HISTOGRAM
1471 /* TO DO: additional restictions of following REP items? */ 1492 /* TO DO: additional restictions of following REP items? */
1472 TABLE_SETTING(F_RECSETTING, histogram_interval, LANG_HISTOGRAM_INTERVAL, 0, 1493 INT_SETTING(F_TIME_SETTING | F_RECSETTING, histogram_interval,
1473 "histogram interval","0s,1s,2s,4s", 1494 LANG_HISTOGRAM_INTERVAL, 0,
1474 UNIT_SEC, NULL, NULL, NULL, 4, 0,1,2,4), 1495 "histogram interval", UNIT_SEC, 0,4,1,
1496 NULL, NULL, NULL),
1475#endif /* HAVE_HISTOGRAM */ 1497#endif /* HAVE_HISTOGRAM */
1476 1498
1477#ifdef HAVE_SPDIF_POWER 1499#ifdef HAVE_SPDIF_POWER
@@ -1532,20 +1554,18 @@ const struct settings_list settings[] = {
1532 NULL, 6, ID2P(LANG_OFF), ID2P(LANG_AUTOTRACKSKIP), 1554 NULL, 6, ID2P(LANG_OFF), ID2P(LANG_AUTOTRACKSKIP),
1533 ID2P(LANG_MANTRACKSKIP), ID2P(LANG_SHUFFLE), 1555 ID2P(LANG_MANTRACKSKIP), ID2P(LANG_SHUFFLE),
1534 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)), 1556 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)),
1535 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_delay, 1557 INT_SETTING(F_TIME_SETTING | F_SOUNDSETTING, crossfade_fade_in_delay,
1536 LANG_CROSSFADE_FADE_IN_DELAY, 0, 1558 LANG_CROSSFADE_FADE_IN_DELAY, 0,
1537 "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL), 1559 "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL),
1538 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_delay, 1560 INT_SETTING(F_TIME_SETTING | F_SOUNDSETTING, crossfade_fade_out_delay,
1539 LANG_CROSSFADE_FADE_OUT_DELAY, 0, 1561 LANG_CROSSFADE_FADE_OUT_DELAY, 0,
1540 "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL,NULL), 1562 "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL,NULL),
1541 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_duration, 1563 INT_SETTING(F_TIME_SETTING | F_SOUNDSETTING, crossfade_fade_in_duration,
1542 LANG_CROSSFADE_FADE_IN_DURATION, 2, 1564 LANG_CROSSFADE_FADE_IN_DURATION, 2,
1543 "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL, 1565 "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL),
1544 NULL), 1566 INT_SETTING(F_TIME_SETTING | F_SOUNDSETTING, crossfade_fade_out_duration,
1545 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_duration,
1546 LANG_CROSSFADE_FADE_OUT_DURATION, 2, 1567 LANG_CROSSFADE_FADE_OUT_DURATION, 2,
1547 "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL, 1568 "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL),
1548 NULL),
1549 CHOICE_SETTING(F_SOUNDSETTING, crossfade_fade_out_mixmode, 1569 CHOICE_SETTING(F_SOUNDSETTING, crossfade_fade_out_mixmode,
1550 LANG_CROSSFADE_FADE_OUT_MODE, 0, 1570 LANG_CROSSFADE_FADE_OUT_MODE, 0,
1551 "crossfade fade out mode", "crossfade,mix", NULL, 2, 1571 "crossfade fade out mode", "crossfade,mix", NULL, 2,
@@ -1697,9 +1717,10 @@ const struct settings_list settings[] = {
1697 OFFON_SETTING(F_SOUNDSETTING, dithering_enabled, LANG_DITHERING, false, 1717 OFFON_SETTING(F_SOUNDSETTING, dithering_enabled, LANG_DITHERING, false,
1698 "dithering enabled", dsp_dither_enable), 1718 "dithering enabled", dsp_dither_enable),
1699 /* surround */ 1719 /* surround */
1700 TABLE_SETTING(F_SOUNDSETTING, surround_enabled, 1720 TABLE_SETTING(F_TIME_SETTING | F_SOUNDSETTING, surround_enabled,
1701 LANG_SURROUND, 0, "surround enabled", "off", 1721 LANG_SURROUND, 0, "surround enabled", off,
1702 UNIT_MS, formatter_unit_0_is_off, getlang_unit_0_is_off, 1722 UNIT_MS, formatter_time_unit_0_is_off,
1723 getlang_time_unit_0_is_off,
1703 dsp_surround_enable, 6, 1724 dsp_surround_enable, 6,
1704 0,5,8,10,15,30), 1725 0,5,8,10,15,30),
1705 INT_SETTING_NOWRAP(F_SOUNDSETTING, surround_balance, 1726 INT_SETTING_NOWRAP(F_SOUNDSETTING, surround_balance,
@@ -1760,11 +1781,13 @@ const struct settings_list settings[] = {
1760 LANG_COMPRESSOR_KNEE, 1, "compressor knee", 1781 LANG_COMPRESSOR_KNEE, 1, "compressor knee",
1761 "hard knee,soft knee", compressor_set, 2, 1782 "hard knee,soft knee", compressor_set, 2,
1762 ID2P(LANG_COMPRESSOR_HARD_KNEE), ID2P(LANG_COMPRESSOR_SOFT_KNEE)), 1783 ID2P(LANG_COMPRESSOR_HARD_KNEE), ID2P(LANG_COMPRESSOR_SOFT_KNEE)),
1763 INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_settings.attack_time, 1784 INT_SETTING_NOWRAP(F_TIME_SETTING | F_SOUNDSETTING,
1785 compressor_settings.attack_time,
1764 LANG_COMPRESSOR_ATTACK, 5, 1786 LANG_COMPRESSOR_ATTACK, 5,
1765 "compressor attack time", UNIT_MS, 0, 30, 1787 "compressor attack time", UNIT_MS, 0, 30,
1766 5, NULL, NULL, compressor_set), 1788 5, NULL, NULL, compressor_set),
1767 INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_settings.release_time, 1789 INT_SETTING_NOWRAP(F_TIME_SETTING | F_SOUNDSETTING,
1790 compressor_settings.release_time,
1768 LANG_COMPRESSOR_RELEASE, 500, 1791 LANG_COMPRESSOR_RELEASE, 500,
1769 "compressor release time", UNIT_MS, 100, 1000, 1792 "compressor release time", UNIT_MS, 100, 1000,
1770 100, NULL, NULL, compressor_set), 1793 100, NULL, NULL, compressor_set),
@@ -1831,16 +1854,12 @@ const struct settings_list settings[] = {
1831#endif 1854#endif
1832 1855
1833#ifdef HAVE_LCD_SLEEP_SETTING 1856#ifdef HAVE_LCD_SLEEP_SETTING
1834 STRINGCHOICE_SETTING(0, lcd_sleep_after_backlight_off, 1857 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS,
1835 LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF, 3, 1858 lcd_sleep_after_backlight_off, LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF,
1836 "lcd sleep after backlight off", 1859 5, "lcd sleep after backlight off",
1837 "always,never,5,10,15,20,30,45,60,90", 1860 off_on, UNIT_SEC, formatter_time_unit_0_is_always,
1838 lcd_set_sleep_after_backlight_off, 10, 1861 getlang_time_unit_0_is_always, lcd_set_sleep_after_backlight_off,
1839 LANG_ALWAYS, LANG_NEVER, TALK_ID(5, UNIT_SEC), 1862 23, timeout_sec_common),
1840 TALK_ID(10, UNIT_SEC), TALK_ID(15, UNIT_SEC),
1841 TALK_ID(20, UNIT_SEC), TALK_ID(30, UNIT_SEC),
1842 TALK_ID(45, UNIT_SEC),TALK_ID(60, UNIT_SEC),
1843 TALK_ID(90, UNIT_SEC)),
1844#endif /* HAVE_LCD_SLEEP_SETTING */ 1863#endif /* HAVE_LCD_SLEEP_SETTING */
1845#endif /* HAVE_BACKLIGHT */ 1864#endif /* HAVE_BACKLIGHT */
1846 1865
@@ -1863,7 +1882,7 @@ const struct settings_list settings[] = {
1863 {F_T_INT,&global_settings.rec_agc_maxgain_line,-1,INT(96), 1882 {F_T_INT,&global_settings.rec_agc_maxgain_line,-1,INT(96),
1864 "agc maximum line gain",NULL,UNUSED}, 1883 "agc maximum line gain",NULL,UNUSED},
1865 {F_T_INT,&global_settings.rec_agc_cliptime,LANG_RECORDING_AGC_CLIPTIME, 1884 {F_T_INT,&global_settings.rec_agc_cliptime,LANG_RECORDING_AGC_CLIPTIME,
1866 INT(1),"agc cliptime","0.2s,0.4s,0.6s,0.8,1s",UNUSED}, 1885 INT(1),"agc cliptime","0.2 s,0.4 s,0.6 s,0.8 s,1 s",UNUSED},
1867#endif 1886#endif
1868 1887
1869#ifdef HAVE_REMOTE_LCD 1888#ifdef HAVE_REMOTE_LCD
@@ -1884,9 +1903,9 @@ const struct settings_list settings[] = {
1884 LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME, false, 1903 LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME, false,
1885 "disable autoresume if phones not present",NULL), 1904 "disable autoresume if phones not present",NULL),
1886#endif 1905#endif
1887 INT_SETTING(0, pause_rewind, LANG_PAUSE_REWIND, 0, 1906 INT_SETTING(F_TIME_SETTING, pause_rewind, LANG_PAUSE_REWIND, 0,
1888 "rewind duration on pause", UNIT_SEC, 0, 15, 1, NULL, NULL, 1907 "rewind duration on pause", UNIT_SEC, 0, 15, 1,
1889 NULL), 1908 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off, NULL),
1890#if CONFIG_TUNER 1909#if CONFIG_TUNER
1891 CHOICE_SETTING(0, fm_region, LANG_FM_REGION, 0, 1910 CHOICE_SETTING(0, fm_region, LANG_FM_REGION, 0,
1892 "fm_region", "eu,us,jp,kr,it,wo", set_radio_region, 6, 1911 "fm_region", "eu,us,jp,kr,it,wo", set_radio_region, 6,
@@ -1945,12 +1964,12 @@ const struct settings_list settings[] = {
1945#endif 1964#endif
1946 OFFON_SETTING(F_BANFROMQS,cuesheet,LANG_CUESHEET_ENABLE,false,"cuesheet support", 1965 OFFON_SETTING(F_BANFROMQS,cuesheet,LANG_CUESHEET_ENABLE,false,"cuesheet support",
1947 NULL), 1966 NULL),
1948 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, skip_length, 1967 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, skip_length,
1949 LANG_SKIP_LENGTH, 0, "skip length", 1968 LANG_SKIP_LENGTH, 0, "skip length",
1950 "outro,track,1s,2s,3s,5s,7s,10s,15s,20s,30s,45s,1min,90s,2min,3min,5min,10min,15min", 1969 "outro,track",
1951 UNIT_SEC, formatter_unit_0_is_skip_track, 1970 UNIT_SEC, formatter_time_unit_0_is_skip_track,
1952 getlang_unit_0_is_skip_track, NULL, 1971 getlang_time_unit_0_is_skip_track, NULL,
1953 19, -1,0,1,2,3,5,7,10,15,20,30,45,60,90,120,180,300,600,900), 1972 25, timeout_sec_common),
1954 CHOICE_SETTING(0, start_in_screen, LANG_START_SCREEN, 1, 1973 CHOICE_SETTING(0, start_in_screen, LANG_START_SCREEN, 1,
1955 "start in screen", "previous,root,files," 1974 "start in screen", "previous,root,files,"
1956#ifdef HAVE_TAGCACHE 1975#ifdef HAVE_TAGCACHE
@@ -2025,11 +2044,12 @@ const struct settings_list settings[] = {
2025 THEME_DIR "/", ".colours"), 2044 THEME_DIR "/", ".colours"),
2026#endif 2045#endif
2027#ifdef HAVE_BUTTON_LIGHT 2046#ifdef HAVE_BUTTON_LIGHT
2028 TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, buttonlight_timeout, 2047 TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS,
2029 LANG_BUTTONLIGHT_TIMEOUT, 5, "button light timeout", off_on, 2048 buttonlight_timeout, LANG_BUTTONLIGHT_TIMEOUT,
2030 UNIT_SEC, backlight_formatter, backlight_getlang, 2049 DEFAULT_BACKLIGHT_TIMEOUT, "button light timeout",
2031 buttonlight_set_timeout, 20, 2050 off_on, UNIT_SEC, formatter_time_unit_0_is_always,
2032 -1,0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,120), 2051 getlang_time_unit_0_is_always, buttonlight_set_timeout,
2052 23, timeout_sec_common),
2033#endif 2053#endif
2034#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS 2054#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
2035 INT_SETTING(F_NO_WRAP, buttonlight_brightness, LANG_BUTTONLIGHT_BRIGHTNESS, 2055 INT_SETTING(F_NO_WRAP, buttonlight_brightness, LANG_BUTTONLIGHT_BRIGHTNESS,
@@ -2039,9 +2059,9 @@ const struct settings_list settings[] = {
2039 buttonlight_set_brightness), 2059 buttonlight_set_brightness),
2040#endif 2060#endif
2041#ifndef HAVE_WHEEL_ACCELERATION 2061#ifndef HAVE_WHEEL_ACCELERATION
2042 INT_SETTING(0, list_accel_start_delay, LANG_LISTACCEL_START_DELAY, 2062 INT_SETTING(F_TIME_SETTING, list_accel_start_delay, LANG_LISTACCEL_START_DELAY,
2043 2, "list_accel_start_delay", UNIT_SEC, 0, 10, 1, 2063 2, "list_accel_start_delay", UNIT_SEC, 0, 10, 1,
2044 formatter_unit_0_is_off, getlang_unit_0_is_off, NULL), 2064 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off, NULL),
2045 INT_SETTING(0, list_accel_wait, LANG_LISTACCEL_ACCEL_SPEED, 2065 INT_SETTING(0, list_accel_wait, LANG_LISTACCEL_ACCEL_SPEED,
2046 3, "list_accel_wait", UNIT_SEC, 1, 10, 1, 2066 3, "list_accel_wait", UNIT_SEC, 1, 10, 1,
2047 scanaccel_formatter, getlang_unit_0_is_off, NULL), 2067 scanaccel_formatter, getlang_unit_0_is_off, NULL),
@@ -2068,9 +2088,9 @@ const struct settings_list settings[] = {
2068#endif /* CONFIG_CODEC == SWCODEC */ 2088#endif /* CONFIG_CODEC == SWCODEC */
2069 TEXT_SETTING(0, playlist_catalog_dir, "playlist catalog directory", 2089 TEXT_SETTING(0, playlist_catalog_dir, "playlist catalog directory",
2070 PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL), 2090 PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL),
2071 INT_SETTING(0, sleeptimer_duration, LANG_SLEEP_TIMER_DURATION, 30, 2091 INT_SETTING(F_TIME_SETTING, sleeptimer_duration, LANG_SLEEP_TIMER_DURATION,
2072 "sleeptimer duration", 2092 30, "sleeptimer duration", UNIT_MIN, 5, 300, 5,
2073 UNIT_MIN, 5, 300, 5, NULL, NULL, NULL), 2093 NULL, NULL, NULL),
2074 OFFON_SETTING(0, sleeptimer_on_startup, LANG_SLEEP_TIMER_ON_POWER_UP, false, 2094 OFFON_SETTING(0, sleeptimer_on_startup, LANG_SLEEP_TIMER_ON_POWER_UP, false,
2075 "sleeptimer on startup", NULL), 2095 "sleeptimer on startup", NULL),
2076 OFFON_SETTING(0, keypress_restarts_sleeptimer, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER, false, 2096 OFFON_SETTING(0, keypress_restarts_sleeptimer, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER, false,
@@ -2211,9 +2231,9 @@ const struct settings_list settings[] = {
2211#endif 2231#endif
2212 2232
2213#if CONFIG_CODEC == SWCODEC 2233#if CONFIG_CODEC == SWCODEC
2214 INT_SETTING(0, resume_rewind, LANG_RESUME_REWIND, 0, 2234 INT_SETTING(F_TIME_SETTING, resume_rewind, LANG_RESUME_REWIND, 0,
2215 "resume rewind", UNIT_SEC, 0, 60, 5, 2235 "resume rewind", UNIT_SEC, 0, 60, 5,
2216 NULL, NULL, NULL), 2236 formatter_time_unit_0_is_off, getlang_time_unit_0_is_off, NULL),
2217#endif 2237#endif
2218 CUSTOM_SETTING(0, root_menu_customized, 2238 CUSTOM_SETTING(0, root_menu_customized,
2219 LANG_ROCKBOX_TITLE, /* lang string here is never actually used */ 2239 LANG_ROCKBOX_TITLE, /* lang string here is never actually used */