summaryrefslogtreecommitdiff
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
1381desc: in system_settings_menu() 1381desc: in system_settings_menu()
1382eng: "Power Saving" 1382eng: "Power Saving"
1383new: 1383new:
1384
1385id: LANG_SETTINGS_LOADED1
1386desc: Feedback shown when a .cfg file is loaded
1387eng: "Settings"
1388new:
1389
1390id: LANG_SETTINGS_LOADED2
1391desc: Feedback shown when a .cfg file is loaded
1392eng: "loaded"
1393new:
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)
519 cpu_sleep(global_settings.cpu_sleep); 519 cpu_sleep(global_settings.cpu_sleep);
520} 520}
521 521
522static void set_cfg_bool(bool* variable, char* value);
523
522/* 524/*
523 * load settings from disk or RTC RAM 525 * load settings from disk or RTC RAM
524 */ 526 */
@@ -527,6 +529,8 @@ void settings_load(void)
527 529
528 DEBUGF( "reload_all_settings()\n" ); 530 DEBUGF( "reload_all_settings()\n" );
529 531
532 // set_cfg_bool(&global_settings.playlist_shuffle, "off");
533
530 /* populate settings with default values */ 534 /* populate settings with default values */
531 settings_reset(); 535 settings_reset();
532 536
@@ -776,6 +780,39 @@ static void set_sound(char* value, int type, int* setting)
776#endif 780#endif
777} 781}
778 782
783static void set_cfg_bool(bool* variable, char* value)
784{
785 /* look for the 'n' in 'on' */
786 if ((value[1] & 0xdf) == 'N')
787 *variable = true;
788 else
789 *variable = false;
790}
791
792static void set_cfg_int(int* variable, char* value, int min, int max )
793{
794 *variable = atoi(value);
795
796 if (*variable < min)
797 *variable = min;
798 else
799 if (*variable > max)
800 *variable = max;
801}
802
803static void set_cfg_option(int* variable, char* value,
804 char* options[], int numoptions )
805{
806 int i;
807
808 for (i=0; i<numoptions; i++) {
809 if (!strcasecmp(options[i], value)) {
810 *variable = i;
811 break;
812 }
813 }
814}
815
779bool settings_load_config(char* file) 816bool settings_load_config(char* file)
780{ 817{
781 int fd; 818 int fd;
@@ -803,6 +840,111 @@ bool settings_load_config(char* file)
803 set_sound(value, SOUND_BALANCE, &global_settings.balance); 840 set_sound(value, SOUND_BALANCE, &global_settings.balance);
804 else if (!strcasecmp(name, "channels")) 841 else if (!strcasecmp(name, "channels"))
805 set_sound(value, SOUND_CHANNELS, &global_settings.channel_config); 842 set_sound(value, SOUND_CHANNELS, &global_settings.channel_config);
843 else if (!strcasecmp(name, "wps"))
844 strncpy(global_settings.wps_file, value, MAX_FILENAME);
845 else if (!strcasecmp(name, "lang"))
846 strncpy(global_settings.lang_file, value, MAX_FILENAME);
847#ifdef HAVE_LCD_BITMAP
848 else if (!strcasecmp(name, "font"))
849 strncpy(global_settings.font_file, value, MAX_FILENAME);
850 else if (!strcasecmp(name, "scroll step"))
851 set_cfg_int(&global_settings.scroll_step, value, 1, LCD_WIDTH);
852 else if (!strcasecmp(name, "bidir limit"))
853 set_cfg_int(&global_settings.bidir_limit, value, 0, 200);
854 else if (!strcasecmp(name, "statusbar"))
855 set_cfg_bool(&global_settings.statusbar, value);
856 else if (!strcasecmp(name, "peak meter release"))
857 set_cfg_int(&global_settings.peak_meter_release, value, 1, 0x7e);
858 else if (!strcasecmp(name, "peak meter hold")) {
859 static char* options[] = {
860 "off","200ms","300ms","500ms",
861 "1","2","3","4","5","6","7","8","9","10",
862 "15","20","25","30","45","60","90",
863 "2min","3min","5min","10min","20min","45min","90min"};
864 set_cfg_option(&global_settings.peak_meter_hold, value,
865 options, 28);
866 }
867 else if (!strcasecmp(name, "peak meter clip hold")) {
868 static char* options[] = {
869 "on","1","2","3","4","5","6","7","8","9","10",
870 "15","20","25","30","45","60","90",
871 "2min","3min","5min","10min","20min","45min","90min"};
872 set_cfg_option(&global_settings.peak_meter_clip_hold, value,
873 options, 25);
874 }
875 else if (!strcasecmp(name, "peak meter dbfs"))
876 set_cfg_bool(&global_settings.peak_meter_dbfs, value);
877 else if (!strcasecmp(name, "peak meter min"))
878 set_cfg_int(&global_settings.peak_meter_min, value, 0, 100);
879 else if (!strcasecmp(name, "peak meter max"))
880 set_cfg_int(&global_settings.peak_meter_max, value, 0, 100);
881 else if (!strcasecmp(name, "peak meter busy"))
882 set_cfg_bool(&global_settings.peak_meter_performance, value);
883#endif
884 else if (!strcasecmp(name, "shuffle"))
885 set_cfg_bool(&global_settings.playlist_shuffle, value);
886 else if (!strcasecmp(name, "repeat")) {
887 static char* options[] = {"off", "all", "one"};
888 set_cfg_option(&global_settings.repeat_mode, value, options, 3);
889 }
890 else if (!strcasecmp(name, "resume"))
891 set_cfg_int(&global_settings.resume, value, 0, 3);
892 else if (!strcasecmp(name, "sort case"))
893 set_cfg_bool(&global_settings.sort_case, value);
894 else if (!strcasecmp(name, "show files")) {
895 static char* options[] = {"all", "supported","music"};
896 set_cfg_option(&global_settings.dirfilter, value, options, 3);
897 }
898 else if (!strcasecmp(name, "follow playlist"))
899 set_cfg_bool(&global_settings.browse_current, value);
900 else if (!strcasecmp(name, "play selected"))
901 set_cfg_bool(&global_settings.play_selected, value);
902 else if (!strcasecmp(name, "volume display")) {
903 static char* options[] = {"numeric", "graphic"};
904 set_cfg_option(&global_settings.volume_type, value, options, 2);
905 }
906 else if (!strcasecmp(name, "battery display")) {
907 static char* options[] = {"numeric", "graphic"};
908 set_cfg_option(&global_settings.battery_type, value, options, 2);
909 }
910 else if (!strcasecmp(name, "time format")) {
911 static char* options[] = {"24hour", "12hour"};
912 set_cfg_option(&global_settings.timeformat, value, options, 2);
913 }
914 else if (!strcasecmp(name, "contrast"))
915 set_cfg_int(&global_settings.contrast, value,
916 0, MAX_CONTRAST_SETTING);
917 else if (!strcasecmp(name, "scrollbar"))
918 set_cfg_bool(&global_settings.scrollbar, value);
919 else if (!strcasecmp(name, "scroll speed"))
920 set_cfg_int(&global_settings.scroll_speed, value, 1, 10);
921 else if (!strcasecmp(name, "scan min step")) {
922 static char* options[] =
923 {"1","2","3","4","5","6","8","10","15","20","25"};
924 set_cfg_option(&global_settings.ff_rewind_min_step, value,
925 options, 11);
926 }
927 else if (!strcasecmp(name, "scan accel"))
928 set_cfg_int(&global_settings.ff_rewind_min_step, value, 0, 15);
929 else if (!strcasecmp(name, "scroll delay"))
930 set_cfg_int(&global_settings.scroll_delay, value, 0, 250);
931 else if (!strcasecmp(name, "backlight timeout")) {
932 static char* options[] = {
933 "off","on","1","2","3","4","5","6","7","8","9",
934 "10","15","20","30","45","60","90"};
935 set_cfg_option(&global_settings.backlight_timeout, value,
936 options, 18);
937 }
938 else if (!strcasecmp(name, "backlight when plugged"))
939 set_cfg_bool(&global_settings.backlight_on_when_charging, value);
940 else if (!strcasecmp(name, "antiskip"))
941 set_cfg_int(&global_settings.buffer_margin, value, 0, 7);
942 else if (!strcasecmp(name, "disk spindown"))
943 set_cfg_int(&global_settings.disk_spindown, value, 3, 254);
944#ifdef HAVE_ATA_POWER_OFF
945 else if (!strcasecmp(name, "disk poweroff"))
946 set_cfg_bool(&global_settings.disk_poweroff, value);
947#endif
806#ifdef HAVE_MAS3587F 948#ifdef HAVE_MAS3587F
807 else if (!strcasecmp(name, "loudness")) 949 else if (!strcasecmp(name, "loudness"))
808 set_sound(value, SOUND_LOUDNESS, &global_settings.loudness); 950 set_sound(value, SOUND_LOUDNESS, &global_settings.loudness);
@@ -810,10 +952,42 @@ bool settings_load_config(char* file)
810 set_sound(value, SOUND_SUPERBASS, &global_settings.bass_boost); 952 set_sound(value, SOUND_SUPERBASS, &global_settings.bass_boost);
811 else if (!strcasecmp(name, "auto volume")) 953 else if (!strcasecmp(name, "auto volume"))
812 set_sound(value, SOUND_AVC, &global_settings.avc); 954 set_sound(value, SOUND_AVC, &global_settings.avc);
955 else if (!strcasecmp(name, "rec mic gain"))
956 set_sound(value, SOUND_MIC_GAIN, &global_settings.rec_mic_gain);
957 else if (!strcasecmp(name, "rec left gain"))
958 set_sound(value, SOUND_LEFT_GAIN, &global_settings.rec_left_gain);
959 else if (!strcasecmp(name, "rec right gain"))
960 set_sound(value, SOUND_RIGHT_GAIN, &global_settings.rec_right_gain);
961 else if (!strcasecmp(name, "rec quality"))
962 set_cfg_int(&global_settings.rec_quality, value, 0, 7);
963 else if (!strcasecmp(name, "rec source")) {
964 static char* options[] = {"mic", "line", "spdif"};
965 set_cfg_option(&global_settings.rec_source, value, options, 3);
966 }
967 else if (!strcasecmp(name, "rec frequency")) {
968 static char* options[] = {"44", "48", "32", "22", "24", "16"};
969 set_cfg_option(&global_settings.rec_frequency, value, options, 6);
970 }
971 else if (!strcasecmp(name, "rec channels")) {
972 static char* options[] = {"stereo", "mono"};
973 set_cfg_option(&global_settings.rec_channels, value, options, 2);
974 }
975#endif
976 else if (!strcasecmp(name, "poweroff"))
977 set_cfg_int(&global_settings.poweroff, value, 0, 15);
978 else if (!strcasecmp(name, "battery capacity"))
979 set_cfg_int(&global_settings.battery_capacity, value,
980 1500, BATTERY_CAPACITY_MAX);
981#ifdef HAVE_CHARGE_CTRL
982 else if (!strcasecmp(name, "deep discharge"))
983 set_cfg_bool(&global_settings.discharge, value);
984 else if (!strcasecmp(name, "trickle charge"))
985 set_cfg_bool(&global_settings.trickle_charge, value);
813#endif 986#endif
814 } 987 }
815 988
816 close(fd); 989 close(fd);
990 settings_apply();
817 settings_save(); 991 settings_save();
818 return true; 992 return true;
819} 993}
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
128 int peak_meter_clip_hold; /* hold time for clips */ 128 int peak_meter_clip_hold; /* hold time for clips */
129 bool peak_meter_dbfs; /* show linear or dbfs values */ 129 bool peak_meter_dbfs; /* show linear or dbfs values */
130 bool peak_meter_performance; /* true: high performance, else save energy*/ 130 bool peak_meter_performance; /* true: high performance, else save energy*/
131 unsigned char peak_meter_min; /* range minimum */ 131 int peak_meter_min; /* range minimum */
132 unsigned char peak_meter_max; /* range maximum */ 132 int peak_meter_max; /* range maximum */
133 133
134 /* show status bar */ 134 /* show status bar */
135 bool statusbar; /* 0=hide, 1=show */ 135 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)
1114 1114
1115 /* wps config file */ 1115 /* wps config file */
1116 case TREE_ATTR_WPS: 1116 case TREE_ATTR_WPS:
1117 snprintf(buf, sizeof buf, "%s/%s",
1118 currdir, file->name);
1119 wps_load(buf,true); 1117 wps_load(buf,true);
1120 storefile(file->name, global_settings.wps_file, 1118 storefile(file->name, global_settings.wps_file,
1121 MAX_FILENAME); 1119 MAX_FILENAME);
@@ -1123,22 +1121,34 @@ bool dirbrowse(char *root)
1123 break; 1121 break;
1124 1122
1125 case TREE_ATTR_CFG: 1123 case TREE_ATTR_CFG:
1126 snprintf(buf, sizeof buf, "%s/%s", 1124 if (!settings_load_config(buf))
1127 currdir, file->name); 1125 break;
1128 settings_load_config(buf); 1126 lcd_clear_display();
1127 lcd_puts(0,0,str(LANG_SETTINGS_LOADED1));
1128 lcd_puts(0,1,str(LANG_SETTINGS_LOADED2));
1129#ifdef HAVE_LCD_BITMAP
1130 lcd_update();
1131
1132 /* maybe we have a new font */
1133 lcd_getstringsize("A", &fw, &fh);
1134 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
1135 /* make sure cursor is on screen */
1136 while ( dircursor > tree_max_on_screen )
1137 {
1138 dircursor--;
1139 dirstart++;
1140 }
1141#endif
1142 sleep(HZ/2);
1129 restore = true; 1143 restore = true;
1130 break; 1144 break;
1131 1145
1132 case TREE_ATTR_TXT: 1146 case TREE_ATTR_TXT:
1133 snprintf(buf, sizeof buf, "%s/%s",
1134 currdir, file->name);
1135 viewer_run(buf); 1147 viewer_run(buf);
1136 restore = true; 1148 restore = true;
1137 break; 1149 break;
1138 1150
1139 case TREE_ATTR_LNG: 1151 case TREE_ATTR_LNG:
1140 snprintf(buf, sizeof buf, "%s/%s",
1141 currdir, file->name);
1142 if(!lang_load(buf)) { 1152 if(!lang_load(buf)) {
1143 storefile(file->name, 1153 storefile(file->name,
1144 global_settings.lang_file, 1154 global_settings.lang_file,
@@ -1166,8 +1176,6 @@ bool dirbrowse(char *root)
1166 1176
1167#ifdef HAVE_LCD_BITMAP 1177#ifdef HAVE_LCD_BITMAP
1168 case TREE_ATTR_FONT: 1178 case TREE_ATTR_FONT:
1169 snprintf(buf, sizeof buf, "%s/%s",
1170 currdir, file->name);
1171 font_load(buf); 1179 font_load(buf);
1172 storefile(file->name, global_settings.font_file, 1180 storefile(file->name, global_settings.font_file,
1173 MAX_FILENAME); 1181 MAX_FILENAME);
@@ -1186,8 +1194,6 @@ bool dirbrowse(char *root)
1186#ifndef SIMULATOR 1194#ifndef SIMULATOR
1187 /* firmware file */ 1195 /* firmware file */
1188 case TREE_ATTR_MOD: 1196 case TREE_ATTR_MOD:
1189 snprintf(buf, sizeof buf, "%s/%s",
1190 currdir, file->name);
1191 rolo_load(buf); 1197 rolo_load(buf);
1192 break; 1198 break;
1193#endif 1199#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 @@
1Custom CFG 1Custom CFG File Format Specification
2File Format Specifications
3 2
4Description / General Info 3General Info
5-------------------------- 4------------
6* The .cfg file is used on both the Rockbox Player and Recorder, in order to 5The .cfg file is used to load settings from a plain text file. A .cfg file may
7 load custom settings. 6reside anywhere on the hard disk. The only restriction is that the filename
8* Currently, only sound settings are supported but this will change in the 7must end in .cfg
9 future.
10
11File Location
12-------------
13The files may reside anywhere on the hard disk. The only restriction is that
14the filename must end in .cfg
15 8
16Format Rules 9Format Rules
17------------ 10------------
18* Each setting must have it's own line. 11* Format: setting: value
12* Each setting must be on a separate line.
19* Lines starting with # are ignored. 13* Lines starting with # are ignored.
20* If a value is out of the acceptable range for the device, which can vary 14
21 depending on the model, the value will be set to its default value. 15Settings (allowed values) [unit]
16--------------------------------
17volume (0 - 100)
18bass (-15 - 15)
19treble (-15 - 15)
20balance (-100 - 100)
21
22shuffle (on, off)
23repeat (off, all, one)
24play selected (on, off)
25resume (off, ask, on)
26scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25) [seconds]
27scan accel (0 - 15) [double scan speed every X seconds]
28antiskip (0 - 7) [seconds]
29
30sort case (on, off)
31show files (all, supported, music)
32follow playlist (on, off)
33
34scroll speed (1 - 10) [Hz]
35start delay (0 - 250) [1/10s]
36scroll step (1 - 112) [pixel]
37bidir limit (0 - 200) [% of screen width]
38contrast (0 - 63)
39backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
40 15, 20, 30, 45, 60, 90) [seconds]
41backlight when plugged (on, off)
42
43disk spindown (3 - 254) [seconds]
44disk poweroff (on, off)
45battery capacity (1500 - 2400) [mAh]
46idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9,
47 10, 15, 30, 45, 60) [minutes]
48
49Recorder-specific settings (allowed values) [unit]
50---------------------------------------------------
51loudness (0 - 17)
52bass boost (0 - 100)
53auto volume (0=off, 1=2s, 2=4s, 3=8s)
54
55peak meter release (1 - 126)
56peak meter hold (off, 200ms, 300ms, 500ms,
57 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
58 15, 20, 25, 30, 45, 90,
59 2min, 3min, 5min, 10min, 20min, 45min, 90min)
60peak meter clip hold (on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
61 15, 20, 25, 30, 45, 60, 90,
62 2min, 3min, 5min, 10min, 20min, 45min, 90min)
63peak meter busy (on, off)
64peak meter dbfs (on, off) (on = dbfs, off = linear)
65peak meter min (0 - 89) [dB] or (0 - 100) [%]
66peak meter max (0 - 89) [dB] or (0 - 100) [%]
67
68volume display (graphic, numeric)
69battery display (graphic, numeric)
70time format (12hour, 24hour)
71
72deep discharge (on, off)
73trickle charge (on, off)
74
75rec quality (0 - 7) (0=smallest size, 7=highest quality)
76rec frequency (48, 44, 32, 24, 22, 16) [kHz]
77rec source (mic, line, spdif)
78rec channels (mono, stereo)
79rec mic gain (0 to 15)
80rec left gain (0 to 15)
81rec right gain (0 to 15)
82
22 83
23Example File 84Example File
24------------ 85------------
@@ -26,20 +87,9 @@ volume: 70
26bass: 11 87bass: 11
27treble: 12 88treble: 12
28balance: 0 89balance: 0
29channels: 0 90time format: 12hour
30loudness: 5 91volume display: numeric
31bass boost: 30 92show files: supported
32auto volume: 0 93wps: car
33 94lang: afrikaans
34This sets each line to the respective values after it.
35 95
36Value ranges
37------------
38volume: 0 to 100
39bass: player: -15 to 15, recorder: -12 to 12
40treble: player: -15 to 15, recorder: -12 to 12
41balance: -100 to 100
42channels: 0=Stereo, 1=Mono, 2=Mono Left, 3=Mono Right
43loudness: 0 to 17 (recorder only)
44bass boost: 0 to 100 (recorder only)
45auto volume: 0=off, 1=2s, 2=4s, 3=8s (recorder only)