diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2003-02-14 14:14:55 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2003-02-14 14:14:55 +0000 |
| commit | 9c16e12390fa78fe7acd1ebbb2454f31221cce8a (patch) | |
| tree | 5316bae501231d517ad96fe23d1f2a14abb89707 /apps | |
| parent | c4d8d970f6602c80d7362a41da8851dbbf59ae1b (diff) | |
| download | rockbox-9c16e12390fa78fe7acd1ebbb2454f31221cce8a.zip rockbox-9c16e12390fa78fe7acd1ebbb2454f31221cce8a.tar.gz rockbox-9c16e12390fa78fe7acd1ebbb2454f31221cce8a.tar.bz2 rockbox-9c16e12390fa78fe7acd1ebbb2454f31221cce8a.tar.xz | |
Expanded .cfg loader to include most settings. Based on Christian Determann's patch.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3260 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/lang/english.lang | 10 | ||||
| -rw-r--r-- | apps/settings.c | 174 | ||||
| -rw-r--r-- | apps/settings.h | 4 | ||||
| -rw-r--r-- | apps/tree.c | 32 |
4 files changed, 205 insertions, 15 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index f272bea..4539e21 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -1381,3 +1381,13 @@ id: LANG_CPU_SLEEP desc: in system_settings_menu() eng: "Power Saving" new: + +id: LANG_SETTINGS_LOADED1 +desc: Feedback shown when a .cfg file is loaded +eng: "Settings" +new: + +id: LANG_SETTINGS_LOADED2 +desc: Feedback shown when a .cfg file is loaded +eng: "loaded" +new: diff --git a/apps/settings.c b/apps/settings.c index c7ab9e4..946286d 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -519,6 +519,8 @@ void settings_apply(void) cpu_sleep(global_settings.cpu_sleep); } +static void set_cfg_bool(bool* variable, char* value); + /* * load settings from disk or RTC RAM */ @@ -527,6 +529,8 @@ void settings_load(void) DEBUGF( "reload_all_settings()\n" ); + // set_cfg_bool(&global_settings.playlist_shuffle, "off"); + /* populate settings with default values */ settings_reset(); @@ -776,6 +780,39 @@ static void set_sound(char* value, int type, int* setting) #endif } +static void set_cfg_bool(bool* variable, char* value) +{ + /* look for the 'n' in 'on' */ + if ((value[1] & 0xdf) == 'N') + *variable = true; + else + *variable = false; +} + +static void set_cfg_int(int* variable, char* value, int min, int max ) +{ + *variable = atoi(value); + + if (*variable < min) + *variable = min; + else + if (*variable > max) + *variable = max; +} + +static void set_cfg_option(int* variable, char* value, + char* options[], int numoptions ) +{ + int i; + + for (i=0; i<numoptions; i++) { + if (!strcasecmp(options[i], value)) { + *variable = i; + break; + } + } +} + bool settings_load_config(char* file) { int fd; @@ -803,6 +840,111 @@ bool settings_load_config(char* file) set_sound(value, SOUND_BALANCE, &global_settings.balance); else if (!strcasecmp(name, "channels")) set_sound(value, SOUND_CHANNELS, &global_settings.channel_config); + else if (!strcasecmp(name, "wps")) + strncpy(global_settings.wps_file, value, MAX_FILENAME); + else if (!strcasecmp(name, "lang")) + strncpy(global_settings.lang_file, value, MAX_FILENAME); +#ifdef HAVE_LCD_BITMAP + else if (!strcasecmp(name, "font")) + strncpy(global_settings.font_file, value, MAX_FILENAME); + else if (!strcasecmp(name, "scroll step")) + set_cfg_int(&global_settings.scroll_step, value, 1, LCD_WIDTH); + else if (!strcasecmp(name, "bidir limit")) + set_cfg_int(&global_settings.bidir_limit, value, 0, 200); + else if (!strcasecmp(name, "statusbar")) + set_cfg_bool(&global_settings.statusbar, value); + else if (!strcasecmp(name, "peak meter release")) + set_cfg_int(&global_settings.peak_meter_release, value, 1, 0x7e); + else if (!strcasecmp(name, "peak meter hold")) { + static char* options[] = { + "off","200ms","300ms","500ms", + "1","2","3","4","5","6","7","8","9","10", + "15","20","25","30","45","60","90", + "2min","3min","5min","10min","20min","45min","90min"}; + set_cfg_option(&global_settings.peak_meter_hold, value, + options, 28); + } + else if (!strcasecmp(name, "peak meter clip hold")) { + static char* options[] = { + "on","1","2","3","4","5","6","7","8","9","10", + "15","20","25","30","45","60","90", + "2min","3min","5min","10min","20min","45min","90min"}; + set_cfg_option(&global_settings.peak_meter_clip_hold, value, + options, 25); + } + else if (!strcasecmp(name, "peak meter dbfs")) + set_cfg_bool(&global_settings.peak_meter_dbfs, value); + else if (!strcasecmp(name, "peak meter min")) + set_cfg_int(&global_settings.peak_meter_min, value, 0, 100); + else if (!strcasecmp(name, "peak meter max")) + set_cfg_int(&global_settings.peak_meter_max, value, 0, 100); + else if (!strcasecmp(name, "peak meter busy")) + set_cfg_bool(&global_settings.peak_meter_performance, value); +#endif + else if (!strcasecmp(name, "shuffle")) + set_cfg_bool(&global_settings.playlist_shuffle, value); + else if (!strcasecmp(name, "repeat")) { + static char* options[] = {"off", "all", "one"}; + set_cfg_option(&global_settings.repeat_mode, value, options, 3); + } + else if (!strcasecmp(name, "resume")) + set_cfg_int(&global_settings.resume, value, 0, 3); + else if (!strcasecmp(name, "sort case")) + set_cfg_bool(&global_settings.sort_case, value); + else if (!strcasecmp(name, "show files")) { + static char* options[] = {"all", "supported","music"}; + set_cfg_option(&global_settings.dirfilter, value, options, 3); + } + else if (!strcasecmp(name, "follow playlist")) + set_cfg_bool(&global_settings.browse_current, value); + else if (!strcasecmp(name, "play selected")) + set_cfg_bool(&global_settings.play_selected, value); + else if (!strcasecmp(name, "volume display")) { + static char* options[] = {"numeric", "graphic"}; + set_cfg_option(&global_settings.volume_type, value, options, 2); + } + else if (!strcasecmp(name, "battery display")) { + static char* options[] = {"numeric", "graphic"}; + set_cfg_option(&global_settings.battery_type, value, options, 2); + } + else if (!strcasecmp(name, "time format")) { + static char* options[] = {"24hour", "12hour"}; + set_cfg_option(&global_settings.timeformat, value, options, 2); + } + else if (!strcasecmp(name, "contrast")) + set_cfg_int(&global_settings.contrast, value, + 0, MAX_CONTRAST_SETTING); + else if (!strcasecmp(name, "scrollbar")) + set_cfg_bool(&global_settings.scrollbar, value); + else if (!strcasecmp(name, "scroll speed")) + set_cfg_int(&global_settings.scroll_speed, value, 1, 10); + else if (!strcasecmp(name, "scan min step")) { + static char* options[] = + {"1","2","3","4","5","6","8","10","15","20","25"}; + set_cfg_option(&global_settings.ff_rewind_min_step, value, + options, 11); + } + else if (!strcasecmp(name, "scan accel")) + set_cfg_int(&global_settings.ff_rewind_min_step, value, 0, 15); + else if (!strcasecmp(name, "scroll delay")) + set_cfg_int(&global_settings.scroll_delay, value, 0, 250); + else if (!strcasecmp(name, "backlight timeout")) { + static char* options[] = { + "off","on","1","2","3","4","5","6","7","8","9", + "10","15","20","30","45","60","90"}; + set_cfg_option(&global_settings.backlight_timeout, value, + options, 18); + } + else if (!strcasecmp(name, "backlight when plugged")) + set_cfg_bool(&global_settings.backlight_on_when_charging, value); + else if (!strcasecmp(name, "antiskip")) + set_cfg_int(&global_settings.buffer_margin, value, 0, 7); + else if (!strcasecmp(name, "disk spindown")) + set_cfg_int(&global_settings.disk_spindown, value, 3, 254); +#ifdef HAVE_ATA_POWER_OFF + else if (!strcasecmp(name, "disk poweroff")) + set_cfg_bool(&global_settings.disk_poweroff, value); +#endif #ifdef HAVE_MAS3587F else if (!strcasecmp(name, "loudness")) set_sound(value, SOUND_LOUDNESS, &global_settings.loudness); @@ -810,10 +952,42 @@ bool settings_load_config(char* file) set_sound(value, SOUND_SUPERBASS, &global_settings.bass_boost); else if (!strcasecmp(name, "auto volume")) set_sound(value, SOUND_AVC, &global_settings.avc); + else if (!strcasecmp(name, "rec mic gain")) + set_sound(value, SOUND_MIC_GAIN, &global_settings.rec_mic_gain); + else if (!strcasecmp(name, "rec left gain")) + set_sound(value, SOUND_LEFT_GAIN, &global_settings.rec_left_gain); + else if (!strcasecmp(name, "rec right gain")) + set_sound(value, SOUND_RIGHT_GAIN, &global_settings.rec_right_gain); + else if (!strcasecmp(name, "rec quality")) + set_cfg_int(&global_settings.rec_quality, value, 0, 7); + else if (!strcasecmp(name, "rec source")) { + static char* options[] = {"mic", "line", "spdif"}; + set_cfg_option(&global_settings.rec_source, value, options, 3); + } + else if (!strcasecmp(name, "rec frequency")) { + static char* options[] = {"44", "48", "32", "22", "24", "16"}; + set_cfg_option(&global_settings.rec_frequency, value, options, 6); + } + else if (!strcasecmp(name, "rec channels")) { + static char* options[] = {"stereo", "mono"}; + set_cfg_option(&global_settings.rec_channels, value, options, 2); + } +#endif + else if (!strcasecmp(name, "poweroff")) + set_cfg_int(&global_settings.poweroff, value, 0, 15); + else if (!strcasecmp(name, "battery capacity")) + set_cfg_int(&global_settings.battery_capacity, value, + 1500, BATTERY_CAPACITY_MAX); +#ifdef HAVE_CHARGE_CTRL + else if (!strcasecmp(name, "deep discharge")) + set_cfg_bool(&global_settings.discharge, value); + else if (!strcasecmp(name, "trickle charge")) + set_cfg_bool(&global_settings.trickle_charge, value); #endif } close(fd); + settings_apply(); settings_save(); return true; } diff --git a/apps/settings.h b/apps/settings.h index 529797c..d1679ce 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -128,8 +128,8 @@ struct user_settings int peak_meter_clip_hold; /* hold time for clips */ bool peak_meter_dbfs; /* show linear or dbfs values */ bool peak_meter_performance; /* true: high performance, else save energy*/ - unsigned char peak_meter_min; /* range minimum */ - unsigned char peak_meter_max; /* range maximum */ + int peak_meter_min; /* range minimum */ + int peak_meter_max; /* range maximum */ /* show status bar */ bool statusbar; /* 0=hide, 1=show */ diff --git a/apps/tree.c b/apps/tree.c index fcab64f..bd2f8c2 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -1114,8 +1114,6 @@ bool dirbrowse(char *root) /* wps config file */ case TREE_ATTR_WPS: - snprintf(buf, sizeof buf, "%s/%s", - currdir, file->name); wps_load(buf,true); storefile(file->name, global_settings.wps_file, MAX_FILENAME); @@ -1123,22 +1121,34 @@ bool dirbrowse(char *root) break; case TREE_ATTR_CFG: - snprintf(buf, sizeof buf, "%s/%s", - currdir, file->name); - settings_load_config(buf); + if (!settings_load_config(buf)) + break; + lcd_clear_display(); + lcd_puts(0,0,str(LANG_SETTINGS_LOADED1)); + lcd_puts(0,1,str(LANG_SETTINGS_LOADED2)); +#ifdef HAVE_LCD_BITMAP + lcd_update(); + + /* maybe we have a new font */ + lcd_getstringsize("A", &fw, &fh); + tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; + /* make sure cursor is on screen */ + while ( dircursor > tree_max_on_screen ) + { + dircursor--; + dirstart++; + } +#endif + sleep(HZ/2); restore = true; break; case TREE_ATTR_TXT: - snprintf(buf, sizeof buf, "%s/%s", - currdir, file->name); viewer_run(buf); restore = true; break; case TREE_ATTR_LNG: - snprintf(buf, sizeof buf, "%s/%s", - currdir, file->name); if(!lang_load(buf)) { storefile(file->name, global_settings.lang_file, @@ -1166,8 +1176,6 @@ bool dirbrowse(char *root) #ifdef HAVE_LCD_BITMAP case TREE_ATTR_FONT: - snprintf(buf, sizeof buf, "%s/%s", - currdir, file->name); font_load(buf); storefile(file->name, global_settings.font_file, MAX_FILENAME); @@ -1186,8 +1194,6 @@ bool dirbrowse(char *root) #ifndef SIMULATOR /* firmware file */ case TREE_ATTR_MOD: - snprintf(buf, sizeof buf, "%s/%s", - currdir, file->name); rolo_load(buf); break; #endif |