blob: 7f0ae6484f1610333187f4ca2dedddc4419b83ff [file] [log] [blame]
Jonathan Gordonb2e50902007-01-23 13:40:44 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
Jonathan Gordon4e73b532007-02-13 00:32:17 +00008 * $Id$
Jonathan Gordonb2e50902007-01-23 13:40:44 +00009 *
10 * Copyright (C) 2007 Jonathan Gordon
11 *
Daniel Stenberg2acc0ac2008-06-28 18:10:04 +000012 * 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.
Jonathan Gordonb2e50902007-01-23 13:40:44 +000016 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
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"
28
Jonathan Gordon0c337562007-01-24 03:14:07 +000029typedef int (*_isfunc_type)(void);
30
Jonathan Gordonb2e50902007-01-23 13:40:44 +000031union storage_type {
32 int int_;
33 unsigned int uint_;
34 bool bool_;
35 char *charptr;
36 unsigned char *ucharptr;
Jonathan Gordon0c337562007-01-24 03:14:07 +000037 _isfunc_type func;
Jonathan Gordon53959572008-11-03 10:43:37 +000038 void* custom;
Jonathan Gordonb2e50902007-01-23 13:40:44 +000039};
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
Jonathan Gordon53959572008-11-03 10:43:37 +000046#define F_T_CUSTOM 6 /* MUST use struct custom_setting below */
Jonathan Gordonb2e50902007-01-23 13:40:44 +000047#define F_T_MASK 0x7
48
49struct sound_setting {
50 int setting; /* from the enum in firmware/sound.h */
51};
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); */
55struct bool_setting {
56 void (*option_callback)(bool);
57 int lang_yes;
58 int lang_no;
59};
Jonathan Gordon4718a1e2007-02-08 04:33:41 +000060#define F_BOOL_SETTING (F_T_BOOL|0x10)
Jonathan Gordonb2e50902007-01-23 13:40:44 +000061#define F_RGB 0x20
62
Jonathan Gordon0c337562007-01-24 03:14:07 +000063struct filename_setting {
64 const char* prefix;
65 const char* suffix;
66 int max_len;
67};
68#define F_FILENAME 0x40
69
Jonathan Gordonb2e50902007-01-23 13:40:44 +000070struct int_setting {
Jonathan Gordonfe3cfcc2007-02-08 10:28:42 +000071 void (*option_callback)(int);
72 int unit;
73 int min;
74 int max;
75 int step;
Nils Wallménius3200d042009-08-20 16:47:44 +000076 const char* (*formatter)(char*, size_t, int, const char*);
Jens Arnold09a78612007-11-26 23:10:20 +000077 int32_t (*get_talk_id)(int, int);
Jonathan Gordonb2e50902007-01-23 13:40:44 +000078};
Jonathan Gordon4718a1e2007-02-08 04:33:41 +000079#define F_INT_SETTING 0x80
80
81struct choice_setting {
Jonathan Gordonfe3cfcc2007-02-08 10:28:42 +000082 void (*option_callback)(int);
83 int count;
84 union {
Jens Arnoldd490f442007-11-25 17:36:21 +000085 const unsigned char **desc;
86 const int *talks;
Jonathan Gordonfe3cfcc2007-02-08 10:28:42 +000087 };
Jonathan Gordon4718a1e2007-02-08 04:33:41 +000088};
89#define F_CHOICE_SETTING 0x100
Jonathan Gordonfe3cfcc2007-02-08 10:28:42 +000090#define F_CHOICETALKS 0x200 /* uses .talks in the above struct for the talks */
91 /* and cfg_vals for the strings to display */
William Wilgusdc87e9e2016-11-22 06:21:31 +010092
Jens Arnoldd490f442007-11-25 17:36:21 +000093struct table_setting {
94 void (*option_callback)(int);
Nils Wallménius3200d042009-08-20 16:47:44 +000095 const char* (*formatter)(char*, size_t, int, const char*);
Jens Arnold09a78612007-11-26 23:10:20 +000096 int32_t (*get_talk_id)(int, int);
Jens Arnoldd490f442007-11-25 17:36:21 +000097 int unit;
98 int count;
99 const int * values;
100};
101#define F_TABLE_SETTING 0x2000
102#define F_ALLOW_ARBITRARY_VALS 0x4000
Jonathan Gordon0c337562007-01-24 03:14:07 +0000103/* 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 */
108
Jonathan Gordon53959572008-11-03 10:43:37 +0000109/* 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
113struct custom_setting {
114 /* load the saved value from the .cfg
115 setting: pointer into global_settings
William Wilgusdc87e9e2016-11-22 06:21:31 +0100116 value: the text from the .cfg
Jonathan Gordon53959572008-11-03 10:43:37 +0000117 */
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.
123 */
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
129 */
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
134 */
135 void (*set_default)(void* setting, void* defaultval);
136};
137
William Wilgusa06d9c82018-12-17 22:27:55 -0600138#define F_TIME_SETTING 0x10000 /* int,table format hh:mm:ss.mss auto ranged */
Jonathan Gordon9adf0562007-05-29 04:39:11 +0000139#define F_THEMESETTING 0x0800000
140#define F_RECSETTING 0x1000000
Dan Everton5886efa2007-12-07 10:59:07 +0000141#define F_EQSETTING 0x2000000
Jonathan Gordonb8bc45d2007-12-24 22:35:31 +0000142#define F_SOUNDSETTING 0x4000000
Jonathan Gordon4718a1e2007-02-08 04:33:41 +0000143
Jens Arnoldd490f442007-11-25 17:36:21 +0000144#define F_NVRAM_BYTES_MASK 0xE0000 /*0-4 bytes can be stored */
145#define F_NVRAM_MASK_SHIFT 17
Michael Sevakis31b71222013-07-14 07:59:39 -0400146#define NVRAM_CONFIG_VERSION 8
Jonathan Gordonb2e50902007-01-23 13:40:44 +0000147/* Above define should be bumped if
148- a new NVRAM setting is added between 2 other NVRAM settings
149- number of bytes for a NVRAM setting is changed
150- a NVRAM setting is removed
151*/
Nils Wallménius12a957b2007-09-15 17:29:15 +0000152#define F_TEMPVAR 0x0400 /* used if the setting should be set using a temp var */
Jonathan Gordon91ccc012007-11-05 13:15:35 +0000153#define F_PADTITLE 0x800 /* pad the title with spaces to force it to scroll */
Nils Wallménius12a957b2007-09-15 17:29:15 +0000154#define F_NO_WRAP 0x1000 /* used if the list should not wrap */
Jonathan Gordon0c337562007-01-24 03:14:07 +0000155
Jonathan Gordon1eb17dc2013-02-05 23:20:17 +1100156#define F_BANFROMQS 0x80000000 /* ban the setting from the quickscreen items */
157#define F_DEPRECATED 0x40000000 /* DEPRECATED setting, don't write to .cfg */
Jonathan Gordonb2e50902007-01-23 13:40:44 +0000158struct settings_list {
Jonathan Gordon1eb17dc2013-02-05 23:20:17 +1100159 uint32_t flags; /* BD__ _SER TFFF NNN_ _ATW PTVC IFRB STTT */
Jonathan Gordonb2e50902007-01-23 13:40:44 +0000160 void *setting;
Jonathan Gordon4ca8a432007-01-26 05:45:06 +0000161 int lang_id; /* -1 for none */
Jonathan Gordonb2e50902007-01-23 13:40:44 +0000162 union storage_type default_val;
163 const char *cfg_name; /* this settings name in the cfg file */
164 const char *cfg_vals; /*comma seperated legal values, or NULL */
165 /* used with F_T_UCHARPTR this is the folder prefix */
166 union {
Jens Arnoldd490f442007-11-25 17:36:21 +0000167 const void *RESERVED; /* to stop compile errors, will be removed */
168 const struct sound_setting *sound_setting; /* use F_T_SOUND for this */
169 const struct bool_setting *bool_setting; /* F_BOOL_SETTING */
170 const struct filename_setting *filename_setting; /* use F_FILENAME */
171 const struct int_setting *int_setting; /* use F_INT_SETTING */
172 const struct choice_setting *choice_setting; /* F_CHOICE_SETTING */
173 const struct table_setting *table_setting; /* F_TABLE_SETTING */
Jonathan Gordon53959572008-11-03 10:43:37 +0000174 const struct custom_setting *custom_setting; /* F_CUSTOM_SETTING */
Jonathan Gordonb2e50902007-01-23 13:40:44 +0000175 };
176};
Jonathan Gordon9e2807f2008-10-26 11:44:21 +0000177const struct settings_list* get_settings_list(int*count);
Jonathan Gordonb2e50902007-01-23 13:40:44 +0000178#ifndef PLUGIN
179/* not needed for plugins and just causes compile error,
180 possibly fix proberly later */
181extern const struct settings_list settings[];
182extern const int nb_settings;
183
184#endif
185
186#endif