diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-01-24 03:14:07 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-01-24 03:14:07 +0000 |
commit | 0c3375648cdd22c341cfb632b66ae673a82aa52c (patch) | |
tree | 5fbf21d08bc616a63759f265b4f5365c85ea6b42 | |
parent | 228d62dd18906eaef814ec63cf888b30a94cd1c8 (diff) | |
download | rockbox-0c3375648cdd22c341cfb632b66ae673a82aa52c.tar.gz rockbox-0c3375648cdd22c341cfb632b66ae673a82aa52c.zip |
allow int settings to call a function to get the default value (Fixes the contrast problem on archos)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12102 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/settings.c | 4 | ||||
-rw-r--r-- | apps/settings_list.c | 3 | ||||
-rw-r--r-- | apps/settings_list.h | 25 |
3 files changed, 23 insertions, 9 deletions
diff --git a/apps/settings.c b/apps/settings.c index 4280ff9f7a..45e2a4e99f 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -851,7 +851,9 @@ void settings_reset(void) { | |||
851 | { | 851 | { |
852 | case F_T_INT: | 852 | case F_T_INT: |
853 | case F_T_UINT: | 853 | case F_T_UINT: |
854 | if (settings[i].flags&F_T_SOUND) | 854 | if (settings[i].flags&F_DEF_ISFUNC) |
855 | *(int*)settings[i].setting = settings[i].default_val.func(); | ||
856 | else if (settings[i].flags&F_T_SOUND) | ||
855 | *(int*)settings[i].setting = | 857 | *(int*)settings[i].setting = |
856 | sound_default(settings[i].sound_setting->setting); | 858 | sound_default(settings[i].sound_setting->setting); |
857 | else *(int*)settings[i].setting = settings[i].default_val.int_; | 859 | else *(int*)settings[i].setting = settings[i].default_val.int_; |
diff --git a/apps/settings_list.c b/apps/settings_list.c index 861c3df6ff..939eb31405 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c | |||
@@ -88,6 +88,7 @@ static const char backlight_times_conf [] = | |||
88 | #define BOOL(a) {.bool_ = a} | 88 | #define BOOL(a) {.bool_ = a} |
89 | #define CHARPTR(a) {.charptr = a} | 89 | #define CHARPTR(a) {.charptr = a} |
90 | #define UCHARPTR(a) {.ucharptr = a} | 90 | #define UCHARPTR(a) {.ucharptr = a} |
91 | #define FUNCTYPE(a) {.func = a} | ||
91 | #define NODEFAULT INT(0) | 92 | #define NODEFAULT INT(0) |
92 | 93 | ||
93 | #define SOUND_SETTING(flags,var,setting) \ | 94 | #define SOUND_SETTING(flags,var,setting) \ |
@@ -134,7 +135,7 @@ const struct settings_list settings[] = { | |||
134 | "off,all,one,shuffle,ab" , UNUSED}, | 135 | "off,all,one,shuffle,ab" , UNUSED}, |
135 | /* LCD */ | 136 | /* LCD */ |
136 | #ifdef HAVE_LCD_CONTRAST | 137 | #ifdef HAVE_LCD_CONTRAST |
137 | {F_T_INT, GS(contrast), INT(DEFAULT_CONTRAST_SETTING), | 138 | {F_T_INT|F_DEF_ISFUNC, GS(contrast), FUNCTYPE(lcd_default_contrast), |
138 | "contrast", NULL , UNUSED}, | 139 | "contrast", NULL , UNUSED}, |
139 | #endif | 140 | #endif |
140 | #ifdef CONFIG_BACKLIGHT | 141 | #ifdef CONFIG_BACKLIGHT |
diff --git a/apps/settings_list.h b/apps/settings_list.h index d76d10aea1..d9ad20077a 100644 --- a/apps/settings_list.h +++ b/apps/settings_list.h | |||
@@ -24,12 +24,15 @@ | |||
24 | #include <limits.h> | 24 | #include <limits.h> |
25 | #include "inttypes.h" | 25 | #include "inttypes.h" |
26 | 26 | ||
27 | typedef int (*_isfunc_type)(void); | ||
28 | |||
27 | union storage_type { | 29 | union storage_type { |
28 | int int_; | 30 | int int_; |
29 | unsigned int uint_; | 31 | unsigned int uint_; |
30 | bool bool_; | 32 | bool bool_; |
31 | char *charptr; | 33 | char *charptr; |
32 | unsigned char *ucharptr; | 34 | unsigned char *ucharptr; |
35 | _isfunc_type func; | ||
33 | }; | 36 | }; |
34 | /* the variable type for the setting */ | 37 | /* the variable type for the setting */ |
35 | #define F_T_INT 1 | 38 | #define F_T_INT 1 |
@@ -53,12 +56,25 @@ struct bool_setting { | |||
53 | #define F_BOOL_SETTING F_T_BOOL|0x10 | 56 | #define F_BOOL_SETTING F_T_BOOL|0x10 |
54 | #define F_RGB 0x20 | 57 | #define F_RGB 0x20 |
55 | 58 | ||
59 | struct filename_setting { | ||
60 | const char* prefix; | ||
61 | const char* suffix; | ||
62 | int max_len; | ||
63 | }; | ||
64 | #define F_FILENAME 0x40 | ||
65 | |||
56 | struct int_setting { | 66 | struct int_setting { |
57 | void (*option_callback)(int); | 67 | void (*option_callback)(int); |
58 | int min; | 68 | int min; |
59 | int max; | 69 | int max; |
60 | int step; | 70 | int step; |
61 | }; | 71 | }; |
72 | /* these use the _isfunc_type type for the function */ | ||
73 | /* typedef int (*_isfunc_type)(void); */ | ||
74 | #define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */ | ||
75 | #define F_MAX_ISFUNC 0x200000 /* max(above) is function pointer to above type */ | ||
76 | #define F_DEF_ISFUNC 0x400000 /* default_val is function pointer to above type */ | ||
77 | |||
62 | #define F_NVRAM_BYTES_MASK 0xE00 /*0-4 bytes can be stored */ | 78 | #define F_NVRAM_BYTES_MASK 0xE00 /*0-4 bytes can be stored */ |
63 | #define F_NVRAM_MASK_SHIFT 9 | 79 | #define F_NVRAM_MASK_SHIFT 9 |
64 | #define NVRAM_CONFIG_VERSION 2 | 80 | #define NVRAM_CONFIG_VERSION 2 |
@@ -68,14 +84,9 @@ struct int_setting { | |||
68 | - a NVRAM setting is removed | 84 | - a NVRAM setting is removed |
69 | */ | 85 | */ |
70 | 86 | ||
71 | struct filename_setting { | 87 | |
72 | const char* prefix; | ||
73 | const char* suffix; | ||
74 | int max_len; | ||
75 | }; | ||
76 | #define F_FILENAME 0x40 | ||
77 | struct settings_list { | 88 | struct settings_list { |
78 | uint32_t flags; /* ____ ____ ____ ____ ____ NNN_ _FRB STTT */ | 89 | uint32_t flags; /* ____ ____ _FFF ____ ____ NNN_ IFRB STTT */ |
79 | void *setting; | 90 | void *setting; |
80 | union storage_type default_val; | 91 | union storage_type default_val; |
81 | const char *cfg_name; /* this settings name in the cfg file */ | 92 | const char *cfg_name; /* this settings name in the cfg file */ |