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 | |
parent | c4d8d970f6602c80d7362a41da8851dbbf59ae1b (diff) | |
download | rockbox-9c16e12390fa78fe7acd1ebbb2454f31221cce8a.tar.gz rockbox-9c16e12390fa78fe7acd1ebbb2454f31221cce8a.zip |
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
-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 | ||||
-rw-r--r-- | docs/CUSTOM_CFG_FORMAT | 114 |
5 files changed, 287 insertions, 47 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index f272bea888..4539e21aca 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 c7ab9e411c..946286dc75 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 529797ced3..d1679cee10 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 fcab64f49d..bd2f8c2a2b 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 diff --git a/docs/CUSTOM_CFG_FORMAT b/docs/CUSTOM_CFG_FORMAT index 87bc18162a..06b11b8241 100644 --- a/docs/CUSTOM_CFG_FORMAT +++ b/docs/CUSTOM_CFG_FORMAT @@ -1,24 +1,85 @@ -Custom CFG -File Format Specifications +Custom CFG File Format Specification -Description / General Info --------------------------- -* The .cfg file is used on both the Rockbox Player and Recorder, in order to - load custom settings. -* Currently, only sound settings are supported but this will change in the - future. - -File Location -------------- -The files may reside anywhere on the hard disk. The only restriction is that -the filename must end in .cfg +General Info +------------ +The .cfg file is used to load settings from a plain text file. A .cfg file may +reside anywhere on the hard disk. The only restriction is that the filename +must end in .cfg Format Rules ------------ -* Each setting must have it's own line. +* Format: setting: value +* Each setting must be on a separate line. * Lines starting with # are ignored. -* If a value is out of the acceptable range for the device, which can vary - depending on the model, the value will be set to its default value. + +Settings (allowed values) [unit] +-------------------------------- +volume (0 - 100) +bass (-15 - 15) +treble (-15 - 15) +balance (-100 - 100) + +shuffle (on, off) +repeat (off, all, one) +play selected (on, off) +resume (off, ask, on) +scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25) [seconds] +scan accel (0 - 15) [double scan speed every X seconds] +antiskip (0 - 7) [seconds] + +sort case (on, off) +show files (all, supported, music) +follow playlist (on, off) + +scroll speed (1 - 10) [Hz] +start delay (0 - 250) [1/10s] +scroll step (1 - 112) [pixel] +bidir limit (0 - 200) [% of screen width] +contrast (0 - 63) +backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 15, 20, 30, 45, 60, 90) [seconds] +backlight when plugged (on, off) + +disk spindown (3 - 254) [seconds] +disk poweroff (on, off) +battery capacity (1500 - 2400) [mAh] +idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 15, 30, 45, 60) [minutes] + +Recorder-specific settings (allowed values) [unit] +--------------------------------------------------- +loudness (0 - 17) +bass boost (0 - 100) +auto volume (0=off, 1=2s, 2=4s, 3=8s) + +peak meter release (1 - 126) +peak meter hold (off, 200ms, 300ms, 500ms, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 15, 20, 25, 30, 45, 90, + 2min, 3min, 5min, 10min, 20min, 45min, 90min) +peak meter clip hold (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) +peak meter busy (on, off) +peak meter dbfs (on, off) (on = dbfs, off = linear) +peak meter min (0 - 89) [dB] or (0 - 100) [%] +peak meter max (0 - 89) [dB] or (0 - 100) [%] + +volume display (graphic, numeric) +battery display (graphic, numeric) +time format (12hour, 24hour) + +deep discharge (on, off) +trickle charge (on, off) + +rec quality (0 - 7) (0=smallest size, 7=highest quality) +rec frequency (48, 44, 32, 24, 22, 16) [kHz] +rec source (mic, line, spdif) +rec channels (mono, stereo) +rec mic gain (0 to 15) +rec left gain (0 to 15) +rec right gain (0 to 15) + Example File ------------ @@ -26,20 +87,9 @@ volume: 70 bass: 11 treble: 12 balance: 0 -channels: 0 -loudness: 5 -bass boost: 30 -auto volume: 0 - -This sets each line to the respective values after it. +time format: 12hour +volume display: numeric +show files: supported +wps: car +lang: afrikaans -Value ranges ------------- -volume: 0 to 100 -bass: player: -15 to 15, recorder: -12 to 12 -treble: player: -15 to 15, recorder: -12 to 12 -balance: -100 to 100 -channels: 0=Stereo, 1=Mono, 2=Mono Left, 3=Mono Right -loudness: 0 to 17 (recorder only) -bass boost: 0 to 100 (recorder only) -auto volume: 0=off, 1=2s, 2=4s, 3=8s (recorder only) |