summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-01-24 03:14:07 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-01-24 03:14:07 +0000
commit0c3375648cdd22c341cfb632b66ae673a82aa52c (patch)
tree5fbf21d08bc616a63759f265b4f5365c85ea6b42
parent228d62dd18906eaef814ec63cf888b30a94cd1c8 (diff)
downloadrockbox-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.c4
-rw-r--r--apps/settings_list.c3
-rw-r--r--apps/settings_list.h25
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
27typedef int (*_isfunc_type)(void);
28
27union storage_type { 29union 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
59struct filename_setting {
60 const char* prefix;
61 const char* suffix;
62 int max_len;
63};
64#define F_FILENAME 0x40
65
56struct int_setting { 66struct 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
71struct filename_setting { 87
72 const char* prefix;
73 const char* suffix;
74 int max_len;
75};
76#define F_FILENAME 0x40
77struct settings_list { 88struct 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 */