Move c/h files implementing/defining standard library stuff into a new libc directory...
[kugel-rb.git] / apps / settings_list.h
blob9f1805f1695830fdeaf466031d29e1683c86e0bd
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2007 Jonathan Gordon
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
21 #ifndef __SETTINGSLIST_H
22 #define __SETTINGSLIST_H
23 #include <stdio.h>
24 #include <stddef.h>
25 #include <stdbool.h>
26 #include <limits.h>
27 #include "inttypes.h"
29 typedef int (*_isfunc_type)(void);
31 union storage_type {
32 int int_;
33 unsigned int uint_;
34 bool bool_;
35 char *charptr;
36 unsigned char *ucharptr;
37 _isfunc_type func;
38 void* custom;
40 /* the variable type for the setting */
41 #define F_T_INT 1
42 #define F_T_UINT 2
43 #define F_T_BOOL 3
44 #define F_T_CHARPTR 4
45 #define F_T_UCHARPTR 5
46 #define F_T_CUSTOM 6 /* MUST use struct custom_setting below */
47 #define F_T_MASK 0x7
49 struct sound_setting {
50 int setting; /* from the enum in firmware/sound.h */
52 #define F_T_SOUND 0x8 /* this variable uses the set_sound stuff, \
53 | with one of the above types (usually F_T_INT) \
54 These settings get the default from sound_default(setting); */
55 struct bool_setting {
56 void (*option_callback)(bool);
57 int lang_yes;
58 int lang_no;
60 #define F_BOOL_SETTING (F_T_BOOL|0x10)
61 #define F_RGB 0x20
63 struct filename_setting {
64 const char* prefix;
65 const char* suffix;
66 int max_len;
68 #define F_FILENAME 0x40
70 struct int_setting {
71 void (*option_callback)(int);
72 int unit;
73 int min;
74 int max;
75 int step;
76 const char* (*formatter)(char*, size_t, int, const char*);
77 int32_t (*get_talk_id)(int, int);
79 #define F_INT_SETTING 0x80
81 struct choice_setting {
82 void (*option_callback)(int);
83 int count;
84 union {
85 const unsigned char **desc;
86 const int *talks;
89 #define F_CHOICE_SETTING 0x100
90 #define F_CHOICETALKS 0x200 /* uses .talks in the above struct for the talks */
91 /* and cfg_vals for the strings to display */
93 struct table_setting {
94 void (*option_callback)(int);
95 const char* (*formatter)(char*, size_t, int, const char*);
96 int32_t (*get_talk_id)(int, int);
97 int unit;
98 int count;
99 const int * values;
101 #define F_TABLE_SETTING 0x2000
102 #define F_ALLOW_ARBITRARY_VALS 0x4000
103 /* these use the _isfunc_type type for the function */
104 /* typedef int (*_isfunc_type)(void); */
105 #define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */
106 #define F_MAX_ISFUNC 0x200000 /* max(above) is function pointer to above type */
107 #define F_DEF_ISFUNC 0x400000 /* default_val is function pointer to above type */
109 /* The next stuff is used when none of the other types work.
110 Should really only be used if the value you want to store in global_settings
111 is very different to the string you want to use in the config. */
112 #define F_CUSTOM_SETTING 0x8000
113 struct custom_setting {
114 /* load the saved value from the .cfg
115 setting: pointer into global_settings
116 value: the text from the .cfg
118 void (*load_from_cfg)(void* setting, char*value);
119 /* store the value into a .cfg
120 setting: pointer into global_settings
121 buf/buf_len: buffer and length to write the string into.
122 Returns the string.
124 char* (*write_to_cfg)(void* setting, char*buf, int buf_len);
125 /* Check if the setting has been changed from the default.
126 setting: pointer into global_settings
127 defaultval: the value given in the settings_list.c macro
128 Return true if the setting was changed
130 bool (*is_changed)(void* setting, void* defaultval);
131 /* Set the setting back to its default value.
132 setting: pointer into global_settings
133 defaultval: the value given in the settings_list.c macro
135 void (*set_default)(void* setting, void* defaultval);
138 #define F_THEMESETTING 0x0800000
139 #define F_RECSETTING 0x1000000
140 #define F_EQSETTING 0x2000000
141 #define F_SOUNDSETTING 0x4000000
143 #define F_NVRAM_BYTES_MASK 0xE0000 /*0-4 bytes can be stored */
144 #define F_NVRAM_MASK_SHIFT 17
145 #define NVRAM_CONFIG_VERSION 6
146 /* Above define should be bumped if
147 - a new NVRAM setting is added between 2 other NVRAM settings
148 - number of bytes for a NVRAM setting is changed
149 - a NVRAM setting is removed
151 #define F_TEMPVAR 0x0400 /* used if the setting should be set using a temp var */
152 #define F_PADTITLE 0x800 /* pad the title with spaces to force it to scroll */
153 #define F_NO_WRAP 0x1000 /* used if the list should not wrap */
155 #define F_BANFROMQS 0x80000000 /* ban the setting from the quickscreen items */
157 struct settings_list {
158 uint32_t flags; /* B___ _SER TFFF NNN_ _ATW PTVC IFRB STTT */
159 void *setting;
160 int lang_id; /* -1 for none */
161 union storage_type default_val;
162 const char *cfg_name; /* this settings name in the cfg file */
163 const char *cfg_vals; /*comma seperated legal values, or NULL */
164 /* used with F_T_UCHARPTR this is the folder prefix */
165 union {
166 const void *RESERVED; /* to stop compile errors, will be removed */
167 const struct sound_setting *sound_setting; /* use F_T_SOUND for this */
168 const struct bool_setting *bool_setting; /* F_BOOL_SETTING */
169 const struct filename_setting *filename_setting; /* use F_FILENAME */
170 const struct int_setting *int_setting; /* use F_INT_SETTING */
171 const struct choice_setting *choice_setting; /* F_CHOICE_SETTING */
172 const struct table_setting *table_setting; /* F_TABLE_SETTING */
173 const struct custom_setting *custom_setting; /* F_CUSTOM_SETTING */
176 const struct settings_list* get_settings_list(int*count);
177 #ifndef PLUGIN
178 /* not needed for plugins and just causes compile error,
179 possibly fix proberly later */
180 extern const struct settings_list settings[];
181 extern const int nb_settings;
183 #endif
185 #endif