summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2003-02-14 14:14:55 +0000
committerBjörn Stenberg <bjorn@haxx.se>2003-02-14 14:14:55 +0000
commit9c16e12390fa78fe7acd1ebbb2454f31221cce8a (patch)
tree5316bae501231d517ad96fe23d1f2a14abb89707
parentc4d8d970f6602c80d7362a41da8851dbbf59ae1b (diff)
downloadrockbox-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.lang10
-rw-r--r--apps/settings.c174
-rw-r--r--apps/settings.h4
-rw-r--r--apps/tree.c32
-rw-r--r--docs/CUSTOM_CFG_FORMAT114
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)