diff options
-rw-r--r-- | apps/settings.c | 101 | ||||
-rw-r--r-- | apps/settings.h | 1 | ||||
-rw-r--r-- | apps/tree.c | 36 | ||||
-rw-r--r-- | docs/CUSTOM_CFG_FORMAT | 16 |
4 files changed, 92 insertions, 62 deletions
diff --git a/apps/settings.c b/apps/settings.c index 0a00fc71ad..40513bf4b3 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -762,6 +762,35 @@ static bool settings_parseline(char* line, char** name, char** value) | |||
762 | return true; | 762 | return true; |
763 | } | 763 | } |
764 | 764 | ||
765 | void set_file(char* filename, char* setting, int maxlen) | ||
766 | { | ||
767 | char* fptr = strrchr(filename,'/'); | ||
768 | int len; | ||
769 | int extlen = 0; | ||
770 | char* ptr; | ||
771 | |||
772 | if (!fptr) | ||
773 | return; | ||
774 | |||
775 | *fptr = 0; | ||
776 | fptr++; | ||
777 | |||
778 | len = strlen(fptr); | ||
779 | ptr = fptr + len; | ||
780 | while (*ptr != '.') { | ||
781 | extlen++; | ||
782 | ptr--; | ||
783 | } | ||
784 | |||
785 | if (strcmp(ROCKBOX_DIR, filename) || (len-extlen > maxlen)) | ||
786 | return; | ||
787 | |||
788 | strncpy(setting, fptr, len-extlen); | ||
789 | setting[len-extlen]=0; | ||
790 | |||
791 | settings_save(); | ||
792 | } | ||
793 | |||
765 | static void set_sound(char* value, int type, int* setting) | 794 | static void set_sound(char* value, int type, int* setting) |
766 | { | 795 | { |
767 | int num = atoi(value); | 796 | int num = atoi(value); |
@@ -842,12 +871,20 @@ bool settings_load_config(char* file) | |||
842 | set_sound(value, SOUND_TREBLE, &global_settings.treble); | 871 | set_sound(value, SOUND_TREBLE, &global_settings.treble); |
843 | else if (!strcasecmp(name, "balance")) | 872 | else if (!strcasecmp(name, "balance")) |
844 | set_sound(value, SOUND_BALANCE, &global_settings.balance); | 873 | set_sound(value, SOUND_BALANCE, &global_settings.balance); |
845 | else if (!strcasecmp(name, "channels")) | 874 | else if (!strcasecmp(name, "channels")) { |
846 | set_sound(value, SOUND_CHANNELS, &global_settings.channel_config); | 875 | static char* options[] = { |
847 | else if (!strcasecmp(name, "wps")) | 876 | "stereo","mono","mono left","mono right"}; |
848 | strncpy(global_settings.wps_file, value, MAX_FILENAME); | 877 | set_cfg_option(&global_settings.channel_config, value, |
849 | else if (!strcasecmp(name, "lang")) | 878 | options, 4); |
850 | strncpy(global_settings.lang_file, value, MAX_FILENAME); | 879 | } |
880 | else if (!strcasecmp(name, "wps")) { | ||
881 | if (wps_load(value,true)) | ||
882 | set_file(value, global_settings.wps_file, MAX_FILENAME); | ||
883 | } | ||
884 | else if (!strcasecmp(name, "lang")) { | ||
885 | if (!lang_load(value)) | ||
886 | set_file(value, global_settings.lang_file, MAX_FILENAME); | ||
887 | } | ||
851 | #ifdef HAVE_LCD_BITMAP | 888 | #ifdef HAVE_LCD_BITMAP |
852 | else if (!strcasecmp(name, "font")) | 889 | else if (!strcasecmp(name, "font")) |
853 | strncpy(global_settings.font_file, value, MAX_FILENAME); | 890 | strncpy(global_settings.font_file, value, MAX_FILENAME); |
@@ -884,6 +921,20 @@ bool settings_load_config(char* file) | |||
884 | set_cfg_int(&global_settings.peak_meter_max, value, 0, 100); | 921 | set_cfg_int(&global_settings.peak_meter_max, value, 0, 100); |
885 | else if (!strcasecmp(name, "peak meter busy")) | 922 | else if (!strcasecmp(name, "peak meter busy")) |
886 | set_cfg_bool(&global_settings.peak_meter_performance, value); | 923 | set_cfg_bool(&global_settings.peak_meter_performance, value); |
924 | else if (!strcasecmp(name, "volume display")) { | ||
925 | static char* options[] = {"graphic", "numeric"}; | ||
926 | set_cfg_option(&global_settings.volume_type, value, options, 2); | ||
927 | } | ||
928 | else if (!strcasecmp(name, "battery display")) { | ||
929 | static char* options[] = {"graphic", "numeric"}; | ||
930 | set_cfg_option(&global_settings.battery_type, value, options, 2); | ||
931 | } | ||
932 | else if (!strcasecmp(name, "time format")) { | ||
933 | static char* options[] = {"24hour", "12hour"}; | ||
934 | set_cfg_option(&global_settings.timeformat, value, options, 2); | ||
935 | } | ||
936 | else if (!strcasecmp(name, "scrollbar")) | ||
937 | set_cfg_bool(&global_settings.scrollbar, value); | ||
887 | #endif | 938 | #endif |
888 | else if (!strcasecmp(name, "shuffle")) | 939 | else if (!strcasecmp(name, "shuffle")) |
889 | set_cfg_bool(&global_settings.playlist_shuffle, value); | 940 | set_cfg_bool(&global_settings.playlist_shuffle, value); |
@@ -891,45 +942,34 @@ bool settings_load_config(char* file) | |||
891 | static char* options[] = {"off", "all", "one"}; | 942 | static char* options[] = {"off", "all", "one"}; |
892 | set_cfg_option(&global_settings.repeat_mode, value, options, 3); | 943 | set_cfg_option(&global_settings.repeat_mode, value, options, 3); |
893 | } | 944 | } |
894 | else if (!strcasecmp(name, "resume")) | 945 | else if (!strcasecmp(name, "resume")) { |
895 | set_cfg_int(&global_settings.resume, value, 0, 3); | 946 | static char* options[] = {"off", "ask", "ask once", "on"}; |
947 | set_cfg_option(&global_settings.resume, value, options, 4); | ||
948 | } | ||
896 | else if (!strcasecmp(name, "sort case")) | 949 | else if (!strcasecmp(name, "sort case")) |
897 | set_cfg_bool(&global_settings.sort_case, value); | 950 | set_cfg_bool(&global_settings.sort_case, value); |
898 | else if (!strcasecmp(name, "show files")) { | 951 | else if (!strcasecmp(name, "show files")) { |
899 | static char* options[] = {"all", "supported","music"}; | 952 | static char* options[] = {"all", "supported","music", "playlists"}; |
900 | set_cfg_option(&global_settings.dirfilter, value, options, 3); | 953 | set_cfg_option(&global_settings.dirfilter, value, options, 4); |
901 | } | 954 | } |
902 | else if (!strcasecmp(name, "follow playlist")) | 955 | else if (!strcasecmp(name, "follow playlist")) |
903 | set_cfg_bool(&global_settings.browse_current, value); | 956 | set_cfg_bool(&global_settings.browse_current, value); |
904 | else if (!strcasecmp(name, "play selected")) | 957 | else if (!strcasecmp(name, "play selected")) |
905 | set_cfg_bool(&global_settings.play_selected, value); | 958 | set_cfg_bool(&global_settings.play_selected, value); |
906 | else if (!strcasecmp(name, "volume display")) { | ||
907 | static char* options[] = {"graphic", "numeric"}; | ||
908 | set_cfg_option(&global_settings.volume_type, value, options, 2); | ||
909 | } | ||
910 | else if (!strcasecmp(name, "battery display")) { | ||
911 | static char* options[] = {"graphic", "numeric"}; | ||
912 | set_cfg_option(&global_settings.battery_type, value, options, 2); | ||
913 | } | ||
914 | else if (!strcasecmp(name, "time format")) { | ||
915 | static char* options[] = {"24hour", "12hour"}; | ||
916 | set_cfg_option(&global_settings.timeformat, value, options, 2); | ||
917 | } | ||
918 | else if (!strcasecmp(name, "contrast")) | 959 | else if (!strcasecmp(name, "contrast")) |
919 | set_cfg_int(&global_settings.contrast, value, | 960 | set_cfg_int(&global_settings.contrast, value, |
920 | 0, MAX_CONTRAST_SETTING); | 961 | 0, MAX_CONTRAST_SETTING); |
921 | else if (!strcasecmp(name, "scrollbar")) | ||
922 | set_cfg_bool(&global_settings.scrollbar, value); | ||
923 | else if (!strcasecmp(name, "scroll speed")) | 962 | else if (!strcasecmp(name, "scroll speed")) |
924 | set_cfg_int(&global_settings.scroll_speed, value, 1, 10); | 963 | set_cfg_int(&global_settings.scroll_speed, value, 1, 10); |
925 | else if (!strcasecmp(name, "scan min step")) { | 964 | else if (!strcasecmp(name, "scan min step")) { |
926 | static char* options[] = | 965 | static char* options[] = |
927 | {"1","2","3","4","5","6","8","10","15","20","25"}; | 966 | {"1","2","3","4","5","6","8","10", |
967 | "15","20","25","30","45","60"}; | ||
928 | set_cfg_option(&global_settings.ff_rewind_min_step, value, | 968 | set_cfg_option(&global_settings.ff_rewind_min_step, value, |
929 | options, 11); | 969 | options, 14); |
930 | } | 970 | } |
931 | else if (!strcasecmp(name, "scan accel")) | 971 | else if (!strcasecmp(name, "scan accel")) |
932 | set_cfg_int(&global_settings.ff_rewind_min_step, value, 0, 15); | 972 | set_cfg_int(&global_settings.ff_rewind_accel, value, 0, 15); |
933 | else if (!strcasecmp(name, "scroll delay")) | 973 | else if (!strcasecmp(name, "scroll delay")) |
934 | set_cfg_int(&global_settings.scroll_delay, value, 0, 250); | 974 | set_cfg_int(&global_settings.scroll_delay, value, 0, 250); |
935 | else if (!strcasecmp(name, "backlight timeout")) { | 975 | else if (!strcasecmp(name, "backlight timeout")) { |
@@ -977,8 +1017,11 @@ bool settings_load_config(char* file) | |||
977 | set_cfg_option(&global_settings.rec_channels, value, options, 2); | 1017 | set_cfg_option(&global_settings.rec_channels, value, options, 2); |
978 | } | 1018 | } |
979 | #endif | 1019 | #endif |
980 | else if (!strcasecmp(name, "poweroff")) | 1020 | else if (!strcasecmp(name, "idle poweroff")) { |
981 | set_cfg_int(&global_settings.poweroff, value, 0, 15); | 1021 | static char* options[] = {"off","1","2","3","4","5","6","7","8", |
1022 | "9","10","15","30","45","60"}; | ||
1023 | set_cfg_option(&global_settings.poweroff, value, options, 15); | ||
1024 | } | ||
982 | else if (!strcasecmp(name, "battery capacity")) | 1025 | else if (!strcasecmp(name, "battery capacity")) |
983 | set_cfg_int(&global_settings.battery_capacity, value, | 1026 | set_cfg_int(&global_settings.battery_capacity, value, |
984 | 1500, BATTERY_CAPACITY_MAX); | 1027 | 1500, BATTERY_CAPACITY_MAX); |
diff --git a/apps/settings.h b/apps/settings.h index bfdf12b593..6f127e05dc 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -171,6 +171,7 @@ bool set_option(char* string, int* variable, char* options[], | |||
171 | bool set_int(char* string, char* unit, int* variable, | 171 | bool set_int(char* string, char* unit, int* variable, |
172 | void (*function)(int), int step, int min, int max ); | 172 | void (*function)(int), int step, int min, int max ); |
173 | bool set_time(char* string, int timedate[]); | 173 | bool set_time(char* string, int timedate[]); |
174 | void set_file(char* filename, char* setting, int maxlen); | ||
174 | 175 | ||
175 | /* global settings */ | 176 | /* global settings */ |
176 | extern struct user_settings global_settings; | 177 | extern struct user_settings global_settings; |
diff --git a/apps/tree.c b/apps/tree.c index d39c279763..d8ecfb243e 100644 --- a/apps/tree.c +++ b/apps/tree.c | |||
@@ -947,26 +947,6 @@ static bool handle_on(int* ds, int* dc, int numentries, int tree_max_on_screen) | |||
947 | return used; | 947 | return used; |
948 | } | 948 | } |
949 | 949 | ||
950 | static void storefile(char* filename, char* setting, int maxlen) | ||
951 | { | ||
952 | int len = strlen(filename); | ||
953 | int extlen = 0; | ||
954 | char* ptr = filename + len; | ||
955 | |||
956 | while (*ptr != '.') { | ||
957 | extlen++; | ||
958 | ptr--; | ||
959 | } | ||
960 | |||
961 | if (strcmp(ROCKBOX_DIR, currdir) || (len-extlen > maxlen)) | ||
962 | return; | ||
963 | |||
964 | strncpy(setting, filename, len-extlen); | ||
965 | setting[len-extlen]=0; | ||
966 | |||
967 | settings_save(); | ||
968 | } | ||
969 | |||
970 | bool dirbrowse(char *root) | 950 | bool dirbrowse(char *root) |
971 | { | 951 | { |
972 | int numentries=0; | 952 | int numentries=0; |
@@ -1117,8 +1097,8 @@ bool dirbrowse(char *root) | |||
1117 | /* wps config file */ | 1097 | /* wps config file */ |
1118 | case TREE_ATTR_WPS: | 1098 | case TREE_ATTR_WPS: |
1119 | wps_load(buf,true); | 1099 | wps_load(buf,true); |
1120 | storefile(file->name, global_settings.wps_file, | 1100 | set_file(buf, global_settings.wps_file, |
1121 | MAX_FILENAME); | 1101 | MAX_FILENAME); |
1122 | restore = true; | 1102 | restore = true; |
1123 | break; | 1103 | break; |
1124 | 1104 | ||
@@ -1152,10 +1132,10 @@ bool dirbrowse(char *root) | |||
1152 | 1132 | ||
1153 | case TREE_ATTR_LNG: | 1133 | case TREE_ATTR_LNG: |
1154 | if(!lang_load(buf)) { | 1134 | if(!lang_load(buf)) { |
1155 | storefile(file->name, | 1135 | set_file(file->name, |
1156 | global_settings.lang_file, | 1136 | global_settings.lang_file, |
1157 | MAX_FILENAME); | 1137 | MAX_FILENAME); |
1158 | 1138 | ||
1159 | lcd_clear_display(); | 1139 | lcd_clear_display(); |
1160 | #ifdef HAVE_LCD_CHARCELLS | 1140 | #ifdef HAVE_LCD_CHARCELLS |
1161 | lcd_puts(0, 0, str(LANG_LANGUAGE_LOADED)); | 1141 | lcd_puts(0, 0, str(LANG_LANGUAGE_LOADED)); |
@@ -1179,8 +1159,8 @@ bool dirbrowse(char *root) | |||
1179 | #ifdef HAVE_LCD_BITMAP | 1159 | #ifdef HAVE_LCD_BITMAP |
1180 | case TREE_ATTR_FONT: | 1160 | case TREE_ATTR_FONT: |
1181 | font_load(buf); | 1161 | font_load(buf); |
1182 | storefile(file->name, global_settings.font_file, | 1162 | set_file(file->name, global_settings.font_file, |
1183 | MAX_FILENAME); | 1163 | MAX_FILENAME); |
1184 | 1164 | ||
1185 | lcd_getstringsize("A", &fw, &fh); | 1165 | lcd_getstringsize("A", &fw, &fh); |
1186 | tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; | 1166 | tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; |
diff --git a/docs/CUSTOM_CFG_FORMAT b/docs/CUSTOM_CFG_FORMAT index 3bb599f1e2..845a9df8c4 100644 --- a/docs/CUSTOM_CFG_FORMAT +++ b/docs/CUSTOM_CFG_FORMAT | |||
@@ -18,23 +18,24 @@ volume (0 - 100) | |||
18 | bass (-15 - 15) | 18 | bass (-15 - 15) |
19 | treble (-15 - 15) | 19 | treble (-15 - 15) |
20 | balance (-100 - 100) | 20 | balance (-100 - 100) |
21 | channels (stereo, mono, mono left, mono right) | ||
21 | 22 | ||
22 | shuffle (on, off) | 23 | shuffle (on, off) |
23 | repeat (off, all, one) | 24 | repeat (off, all, one) |
24 | play selected (on, off) | 25 | play selected (on, off) |
25 | resume (off, ask, on) | 26 | resume (off, ask, ask once, on) |
26 | scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25) [seconds] | 27 | scan min step (1, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25, 30, 45, 60) [seconds] |
27 | scan accel (0 - 15) [double scan speed every X seconds] | 28 | scan accel (0 - 15) [double scan speed every X seconds] |
28 | antiskip (0 - 7) [seconds] | 29 | antiskip (0 - 7) [seconds] |
29 | volume fade (on, off) | 30 | volume fade (on, off) |
30 | 31 | ||
31 | sort case (on, off) | 32 | sort case (on, off) |
32 | show files (all, supported, music) | 33 | show files (all, supported, music, playlists) |
33 | follow playlist (on, off) | 34 | follow playlist (on, off) |
34 | 35 | ||
35 | scroll speed (1 - 10) [Hz] | 36 | scroll speed (1 - 10) [Hz] |
36 | start delay (0 - 250) [1/10s] | 37 | start delay (0 - 250) [1/10s] |
37 | scroll step (1 - 112) [pixel] | 38 | scroll step (1 - 112) [pixels] |
38 | bidir limit (0 - 200) [% of screen width] | 39 | bidir limit (0 - 200) [% of screen width] |
39 | contrast (0 - 63) | 40 | contrast (0 - 63) |
40 | backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, | 41 | backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, |
@@ -42,11 +43,13 @@ backlight timeout (off, on, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, | |||
42 | backlight when plugged (on, off) | 43 | backlight when plugged (on, off) |
43 | 44 | ||
44 | disk spindown (3 - 254) [seconds] | 45 | disk spindown (3 - 254) [seconds] |
45 | disk poweroff (on, off) | ||
46 | battery capacity (1500 - 2400) [mAh] | 46 | battery capacity (1500 - 2400) [mAh] |
47 | idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9, | 47 | idle poweroff (off, 1, 2, 3, 4, 5, 6, 7, 8, 9, |
48 | 10, 15, 30, 45, 60) [minutes] | 48 | 10, 15, 30, 45, 60) [minutes] |
49 | 49 | ||
50 | lang (/path/filename.lng) | ||
51 | wps (/path/filename.wps) | ||
52 | |||
50 | Recorder-specific settings (allowed values) [unit] | 53 | Recorder-specific settings (allowed values) [unit] |
51 | --------------------------------------------------- | 54 | --------------------------------------------------- |
52 | loudness (0 - 17) | 55 | loudness (0 - 17) |
@@ -66,12 +69,15 @@ peak meter dbfs (on, off) (on = dbfs, off = linear) | |||
66 | peak meter min (0 - 89) [dB] or (0 - 100) [%] | 69 | peak meter min (0 - 89) [dB] or (0 - 100) [%] |
67 | peak meter max (0 - 89) [dB] or (0 - 100) [%] | 70 | peak meter max (0 - 89) [dB] or (0 - 100) [%] |
68 | 71 | ||
72 | statusbar (on, off) | ||
73 | scrollbar (on, off) | ||
69 | volume display (graphic, numeric) | 74 | volume display (graphic, numeric) |
70 | battery display (graphic, numeric) | 75 | battery display (graphic, numeric) |
71 | time format (12hour, 24hour) | 76 | time format (12hour, 24hour) |
72 | 77 | ||
73 | deep discharge (on, off) | 78 | deep discharge (on, off) |
74 | trickle charge (on, off) | 79 | trickle charge (on, off) |
80 | disk poweroff (on, off) | ||
75 | 81 | ||
76 | rec quality (0 - 7) (0=smallest size, 7=highest quality) | 82 | rec quality (0 - 7) (0=smallest size, 7=highest quality) |
77 | rec frequency (48, 44, 32, 24, 22, 16) [kHz] | 83 | rec frequency (48, 44, 32, 24, 22, 16) [kHz] |