mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 10:07:38 -04:00
Move cfg_vals from settings_list, expand settings_dumper
cfg_vals aren't needed for most settings F_TABLE_SETTING, F_CHOICE_SETTING, F_BOOL_SETTING can use cfg_vals but only a few custom settings use it otherwise for these settings we define F_HAS_CFGVALS and use the setting union instead (as these all use UNUSED) noticed that settings_dumper missed most cfg values so didn't show text setting values saves ~300 bytes Change-Id: Ie504c8cfe2a6cf471117c3afe5cf9a770a7f1784
This commit is contained in:
parent
3e95b13b7a
commit
7288d9e5d2
10 changed files with 128 additions and 79 deletions
|
@ -477,7 +477,7 @@ static void val_to_selection(const struct settings_list *setting, int oldvalue,
|
|||
|
||||
bool option_screen(const struct settings_list *setting,
|
||||
struct viewport parent[NB_SCREENS],
|
||||
bool use_temp_var, unsigned char* option_title)
|
||||
bool use_temp_var, const unsigned char* option_title)
|
||||
{
|
||||
int action;
|
||||
bool done = false;
|
||||
|
@ -490,7 +490,7 @@ bool option_screen(const struct settings_list *setting,
|
|||
|
||||
int var_type = setting->flags&F_T_MASK;
|
||||
void (*function)(int) = NULL;
|
||||
char *title;
|
||||
const char *title = NULL;
|
||||
if (var_type == F_T_INT || var_type == F_T_UINT)
|
||||
{
|
||||
variable = use_temp_var ? &temp_var: (int*)setting->setting;
|
||||
|
@ -508,8 +508,11 @@ bool option_screen(const struct settings_list *setting,
|
|||
gui_synclist_init(&lists, value_setting_get_name_cb,
|
||||
(void*)setting, false, 1, parent);
|
||||
if (setting->lang_id == -1)
|
||||
title = (char*)setting->cfg_vals;
|
||||
else
|
||||
{
|
||||
title = setting_get_cfgvals(setting);
|
||||
}
|
||||
|
||||
if (!title)
|
||||
title = P2STR(option_title);
|
||||
|
||||
gui_synclist_set_title(&lists, title, Icon_Questionmark);
|
||||
|
|
|
@ -32,7 +32,7 @@ enum {
|
|||
|
||||
bool option_screen(const struct settings_list *setting,
|
||||
struct viewport parent[NB_SCREENS],
|
||||
bool use_temp_var, unsigned char* option_title);
|
||||
bool use_temp_var, const unsigned char* option_title);
|
||||
|
||||
#if defined(HAVE_QUICKSCREEN) || defined(HAVE_RECORDING) || defined(HAVE_TOUCHSCREEN)
|
||||
void option_select_next_val(const struct settings_list *setting,
|
||||
|
|
|
@ -1606,7 +1606,7 @@ static int touchregion_setup_setting(struct skin_element *element, int param_no,
|
|||
break;
|
||||
case F_T_INT:
|
||||
case F_T_UINT:
|
||||
if (setting->cfg_vals == NULL)
|
||||
if (setting_get_cfgvals(s->setting) == NULL)
|
||||
{
|
||||
touchsetting->value.number = atoi(text);
|
||||
}
|
||||
|
|
|
@ -1447,7 +1447,7 @@ const char *get_token_value(struct gui_wps *gwps,
|
|||
* on 16 bits ...
|
||||
* but this is pretty useless anyway */
|
||||
numeric_ret = *(int*)s->setting + 1;
|
||||
else if (s->cfg_vals == NULL)
|
||||
else if (setting_get_cfgvals(s->setting) == NULL)
|
||||
/* %?St|name|<1st choice|2nd choice|...> */
|
||||
numeric_ret = (*(int*)s->setting-s->int_setting->min)
|
||||
/s->int_setting->step + 1;
|
||||
|
|
|
@ -858,7 +858,7 @@ struct plugin_api {
|
|||
int (*settings_save)(void);
|
||||
bool (*option_screen)(const struct settings_list *setting,
|
||||
struct viewport parent[NB_SCREENS],
|
||||
bool use_temp_var, unsigned char* option_title);
|
||||
bool use_temp_var, const unsigned char* option_title);
|
||||
bool (*set_option)(const char* string, const void* variable,
|
||||
enum optiontype type, const struct opt_items* options,
|
||||
int numoptions, void (*function)(int));
|
||||
|
|
|
@ -42,6 +42,8 @@ static void write_setting(const struct settings_list *setting, int fd, unsigned
|
|||
setting_count++;
|
||||
if (setting_count%10 == 0)
|
||||
rb->fdprintf(fd, "\r\n");
|
||||
text[0] = '\0';
|
||||
|
||||
switch (setting->flags&F_T_MASK)
|
||||
{
|
||||
case F_T_CUSTOM:
|
||||
|
@ -77,7 +79,7 @@ static void write_setting(const struct settings_list *setting, int fd, unsigned
|
|||
min, max, step);
|
||||
}
|
||||
else if (setting->flags&F_CHOICE_SETTING &&
|
||||
(setting->cfg_vals == NULL))
|
||||
(setting->choice_setting->cfg_vals == NULL))
|
||||
{
|
||||
char temp[64];
|
||||
int i;
|
||||
|
@ -89,9 +91,29 @@ static void write_setting(const struct settings_list *setting, int fd, unsigned
|
|||
rb->strcat(text, temp);
|
||||
}
|
||||
}
|
||||
else if (setting->cfg_vals != NULL)
|
||||
|
||||
const char *cfgvals = NULL;
|
||||
if ((setting->flags & F_CHOICE_SETTING) == F_CHOICE_SETTING)
|
||||
{
|
||||
rb->snprintf(text, sizeof(text), "%s", setting->cfg_vals);
|
||||
cfgvals = setting->choice_setting->cfg_vals;
|
||||
}
|
||||
else if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING)
|
||||
{
|
||||
cfgvals = setting->bool_setting->cfg_vals;
|
||||
}
|
||||
else if ((setting->flags & F_TABLE_SETTING) == F_TABLE_SETTING)
|
||||
{
|
||||
cfgvals = setting->table_setting->cfg_vals;
|
||||
}
|
||||
else if ((setting->flags & F_HAS_CFGVALS) == F_HAS_CFGVALS)
|
||||
{
|
||||
cfgvals = setting->cfg_vals;
|
||||
}
|
||||
|
||||
if (cfgvals != NULL)
|
||||
{
|
||||
size_t len = rb->strlen(text);
|
||||
rb->snprintf(text + len, sizeof(text) - len, "[%s]", cfgvals);
|
||||
}
|
||||
break; /* F_T_*INT */
|
||||
case F_T_BOOL:
|
||||
|
|
|
@ -234,6 +234,22 @@ static void write_nvram_data(void)
|
|||
close(fd);
|
||||
}
|
||||
|
||||
const char* setting_get_cfgvals(const struct settings_list *setting)
|
||||
{
|
||||
if ((setting->flags & F_TABLE_SETTING) == F_TABLE_SETTING)
|
||||
return setting->table_setting->cfg_vals;
|
||||
else if ((setting->flags & F_CHOICE_SETTING) == F_CHOICE_SETTING)
|
||||
return setting->choice_setting->cfg_vals;
|
||||
else if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING)
|
||||
{
|
||||
DEBUGF("Setting: %s \n", setting->cfg_name);
|
||||
return setting->bool_setting->cfg_vals;
|
||||
}
|
||||
else if ((setting->flags & F_HAS_CFGVALS) == F_HAS_CFGVALS)
|
||||
return setting->cfg_vals;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** Reading from a config file **/
|
||||
/*
|
||||
* load settings from disk or RTC RAM
|
||||
|
@ -255,7 +271,7 @@ void settings_load(int which)
|
|||
|
||||
bool cfg_string_to_int(const struct settings_list *setting, int* out, const char* str)
|
||||
{
|
||||
const char* ptr = setting->cfg_vals;
|
||||
const char* ptr = setting_get_cfgvals(setting);
|
||||
size_t len = strlen(str);
|
||||
int index = 0;
|
||||
|
||||
|
@ -375,7 +391,7 @@ bool settings_load_config(const char* file, bool apply)
|
|||
}
|
||||
else
|
||||
#endif
|
||||
if (setting->cfg_vals == NULL)
|
||||
if (setting_get_cfgvals(setting) == NULL)
|
||||
{
|
||||
*(int*)setting->setting = atoi(value);
|
||||
logf("Val: %s\r\n",value);
|
||||
|
@ -466,7 +482,7 @@ bool settings_load_config(const char* file, bool apply)
|
|||
|
||||
bool cfg_int_to_string(const struct settings_list *setting, int val, char* buf, int buf_len)
|
||||
{
|
||||
const char* ptr = setting->cfg_vals;
|
||||
const char* ptr = setting_get_cfgvals(setting);
|
||||
const int *values = NULL;
|
||||
int index = 0;
|
||||
|
||||
|
@ -520,7 +536,7 @@ void cfg_to_string(const struct settings_list *setting, char* buf, int buf_len)
|
|||
}
|
||||
else
|
||||
#endif
|
||||
if (setting->cfg_vals == NULL)
|
||||
if (setting_get_cfgvals(setting) == NULL)
|
||||
{
|
||||
snprintf(buf, buf_len, "%d", *(int*)setting->setting);
|
||||
}
|
||||
|
@ -1249,9 +1265,8 @@ bool set_int_ex(const unsigned char* string,
|
|||
item.int_setting = &data;
|
||||
item.flags = F_INT_SETTING|F_T_INT;
|
||||
item.lang_id = -1;
|
||||
item.cfg_vals = (char*)string;
|
||||
item.setting = (void *)variable;
|
||||
return option_screen(&item, NULL, false, NULL);
|
||||
return option_screen(&item, NULL, false, string);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1288,13 +1303,12 @@ bool set_option(const char* string, const void* variable, enum optiontype type,
|
|||
item.int_setting = &data;
|
||||
item.flags = F_INT_SETTING|F_T_INT;
|
||||
item.lang_id = -1;
|
||||
item.cfg_vals = (char*)string;
|
||||
item.setting = &temp;
|
||||
if (type == RB_BOOL)
|
||||
temp = *(bool*)variable? 1: 0;
|
||||
else
|
||||
temp = *(int*)variable;
|
||||
if (!option_screen(&item, NULL, false, NULL))
|
||||
if (!option_screen(&item, NULL, false, string))
|
||||
{
|
||||
if (type == RB_BOOL)
|
||||
|
||||
|
|
|
@ -316,7 +316,7 @@ void set_file(const char* filename, char* setting, const int maxlen);
|
|||
bool set_option(const char* string, const void* variable, enum optiontype type,
|
||||
const struct opt_items* options, int numoptions, void (*function)(int));
|
||||
|
||||
|
||||
const char* setting_get_cfgvals(const struct settings_list *setting);
|
||||
|
||||
/** global_settings and global_status struct definitions **/
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
/* Use for int settings which use the set_sound() function to set them */
|
||||
#define SOUND_SETTING(flags,var,lang_id,name,setting) \
|
||||
{flags|F_T_INT|F_T_SOUND|F_SOUNDSETTING|F_ALLOW_ARBITRARY_VALS, &global_settings.var, \
|
||||
lang_id, NODEFAULT,name,NULL, \
|
||||
lang_id, NODEFAULT,name, \
|
||||
{.sound_setting=(struct sound_setting[]){{setting}}} }
|
||||
|
||||
/* Use for bool variables which don't use LANG_SET_BOOL_YES and LANG_SET_BOOL_NO
|
||||
|
@ -114,8 +114,8 @@
|
|||
*/
|
||||
#define BOOL_SETTING(flags,var,lang_id,default,name,cfgvals,yes_id,no_id,cb)\
|
||||
{flags|F_BOOL_SETTING, &global_settings.var, \
|
||||
lang_id, BOOL(default),name,cfgvals, \
|
||||
{.bool_setting=(struct bool_setting[]){{cb,yes_id,no_id}}} }
|
||||
lang_id, BOOL(default),name, \
|
||||
{.bool_setting=(struct bool_setting[]){{cb,yes_id,no_id,cfgvals}}} }
|
||||
|
||||
/* bool setting which does use LANG_YES and _NO and save as "off,on" */
|
||||
#define OFFON_SETTING(flags,var,lang_id,default,name,cb) \
|
||||
|
@ -126,7 +126,7 @@
|
|||
(Use NVRAM() in the flags to save to the nvram (or nvram.bin file) */
|
||||
#define SYSTEM_SETTING(flags,var,default) \
|
||||
{flags|F_T_INT, &global_status.var,-1, INT(default), \
|
||||
NULL, NULL, UNUSED}
|
||||
NULL, UNUSED}
|
||||
|
||||
/* setting which stores as a filename (or another string) in the .cfgvals
|
||||
The string must be a char array (which all of our string settings are),
|
||||
|
@ -137,14 +137,14 @@
|
|||
*/
|
||||
#define TEXT_SETTING(flags,var,name,default,prefix,suffix) \
|
||||
{flags|F_T_UCHARPTR, &global_settings.var,-1, \
|
||||
CHARPTR(default),name,NULL, \
|
||||
CHARPTR(default),name, \
|
||||
{.filename_setting= \
|
||||
(struct filename_setting[]){ \
|
||||
{prefix,suffix,sizeof(global_settings.var)}}} }
|
||||
|
||||
#define DIRECTORY_SETTING(flags,var,lang_id,name,default) \
|
||||
{flags|F_DIRNAME|F_T_UCHARPTR, &global_settings.var, lang_id, \
|
||||
CHARPTR(default), name, NULL, \
|
||||
CHARPTR(default), name, \
|
||||
{.filename_setting=(struct filename_setting[]){ \
|
||||
{NULL, NULL, sizeof(global_settings.var)}}}}
|
||||
|
||||
|
@ -153,9 +153,9 @@
|
|||
screen. These can either be literal strings, or ID2P(LANG_*) */
|
||||
#define CHOICE_SETTING(flags,var,lang_id,default,name,cfg_vals,cb,count,...) \
|
||||
{flags|F_CHOICE_SETTING|F_T_INT, &global_settings.var, lang_id, \
|
||||
INT(default), name, cfg_vals, \
|
||||
INT(default), name, \
|
||||
{.choice_setting = (struct choice_setting[]){ \
|
||||
{cb, count, {.desc = (const unsigned char*[]) \
|
||||
{cb, count, cfg_vals, {.desc = (const unsigned char*[]) \
|
||||
{__VA_ARGS__}}}}}}
|
||||
|
||||
/* Similar to above, except the strings to display are taken from cfg_vals,
|
||||
|
@ -164,9 +164,9 @@
|
|||
cb,count,...) \
|
||||
{flags|F_CHOICE_SETTING|F_T_INT|F_CHOICETALKS, \
|
||||
&global_settings.var, lang_id, \
|
||||
INT(default), name, cfg_vals, \
|
||||
INT(default), name, \
|
||||
{.choice_setting = (struct choice_setting[]){ \
|
||||
{cb, count, {.talks = (const int[]){__VA_ARGS__}}}}}}
|
||||
{cb, count, cfg_vals, {.talks = (const int[]){__VA_ARGS__}}}}}}
|
||||
|
||||
/* for settings which use the set_int() setting screen.
|
||||
unit is the UNIT_ define to display/talk.
|
||||
|
@ -175,37 +175,37 @@
|
|||
#define INT_SETTING(flags, var, lang_id, default, name, \
|
||||
unit, min, max, step, formatter, get_talk_id, cb) \
|
||||
{flags|F_INT_SETTING|F_T_INT, &global_settings.var, \
|
||||
lang_id, INT(default), name, NULL, \
|
||||
lang_id, INT(default), name, \
|
||||
{.int_setting = (struct int_setting[]){ \
|
||||
{cb, unit, step, min, max, formatter, get_talk_id}}}}
|
||||
#define INT_SETTING_NOWRAP(flags, var, lang_id, default, name, \
|
||||
unit, min, max, step, formatter, get_talk_id, cb) \
|
||||
{flags|F_INT_SETTING|F_T_INT|F_NO_WRAP, &global_settings.var, \
|
||||
lang_id, INT(default), name, NULL, \
|
||||
lang_id, INT(default), name, \
|
||||
{.int_setting = (struct int_setting[]){ \
|
||||
{cb, unit, step, min, max, formatter, get_talk_id}}}}
|
||||
|
||||
#define TABLE_SETTING(flags, var, lang_id, default, name, cfg_vals, \
|
||||
unit, formatter, get_talk_id, cb, count, ...) \
|
||||
{flags|F_TABLE_SETTING|F_T_INT, &global_settings.var, \
|
||||
lang_id, INT(default), name, cfg_vals, \
|
||||
lang_id, INT(default), name, \
|
||||
{.table_setting = (struct table_setting[]) { \
|
||||
{cb, formatter, get_talk_id, unit, count, \
|
||||
(const int[]){__VA_ARGS__}}}}}
|
||||
cfg_vals, (const int[]){__VA_ARGS__}}}}}
|
||||
|
||||
#define TABLE_SETTING_LIST(flags, var, lang_id, default, name, cfg_vals, \
|
||||
unit, formatter, get_talk_id, cb, count, list) \
|
||||
{flags|F_TABLE_SETTING|F_T_INT, &global_settings.var, \
|
||||
lang_id, INT(default), name, cfg_vals, \
|
||||
lang_id, INT(default), name, \
|
||||
{.table_setting = (struct table_setting[]) { \
|
||||
{cb, formatter, get_talk_id, unit, count, list}}}}
|
||||
{cb, formatter, get_talk_id, unit, count, cfg_vals, list}}}}
|
||||
|
||||
#define CUSTOM_SETTING(flags, var, lang_id, default, name, \
|
||||
load_from_cfg, write_to_cfg, \
|
||||
is_change, set_default) \
|
||||
{flags|F_CUSTOM_SETTING|F_T_CUSTOM|F_BANFROMQS, \
|
||||
&global_settings.var, lang_id, \
|
||||
{.custom = (void*)default}, name, NULL, \
|
||||
{.custom = (void*)default}, name, \
|
||||
{.custom_setting = (struct custom_setting[]){ \
|
||||
{load_from_cfg, write_to_cfg, is_change, set_default}}}}
|
||||
|
||||
|
@ -1097,7 +1097,7 @@ const struct settings_list settings[] = {
|
|||
-1,0,1,2,3,4,5,7,9,11,13,16,20,25,30),
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
{F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.list_separator_color,-1,
|
||||
INT(DEFAULT_THEME_SEPARATOR),"list separator color",NULL,UNUSED},
|
||||
INT(DEFAULT_THEME_SEPARATOR),"list separator color",UNUSED},
|
||||
#endif
|
||||
#endif
|
||||
CHOICE_SETTING(F_THEMESETTING, volume_type, LANG_VOLUME_DISPLAY, 0,
|
||||
|
@ -1345,17 +1345,15 @@ const struct settings_list settings[] = {
|
|||
#ifdef HAVE_LCD_COLOR
|
||||
|
||||
{F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.fg_color,-1,
|
||||
INT(DEFAULT_THEME_FOREGROUND),"foreground color",NULL,UNUSED},
|
||||
INT(DEFAULT_THEME_FOREGROUND),"foreground color",UNUSED},
|
||||
{F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.bg_color,-1,
|
||||
INT(DEFAULT_THEME_BACKGROUND),"background color",NULL,UNUSED},
|
||||
INT(DEFAULT_THEME_BACKGROUND),"background color",UNUSED},
|
||||
{F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lss_color,-1,
|
||||
INT(DEFAULT_THEME_SELECTOR_START),"line selector start color",NULL,
|
||||
UNUSED},
|
||||
INT(DEFAULT_THEME_SELECTOR_START),"line selector start color",UNUSED},
|
||||
{F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lse_color,-1,
|
||||
INT(DEFAULT_THEME_SELECTOR_END),"line selector end color",NULL,UNUSED},
|
||||
INT(DEFAULT_THEME_SELECTOR_END),"line selector end color",UNUSED},
|
||||
{F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.lst_color,-1,
|
||||
INT(DEFAULT_THEME_SELECTOR_TEXT),"line selector text color",NULL,
|
||||
UNUSED},
|
||||
INT(DEFAULT_THEME_SELECTOR_TEXT),"line selector text color",UNUSED},
|
||||
|
||||
#endif
|
||||
/* more playback */
|
||||
|
@ -1463,9 +1461,9 @@ const struct settings_list settings[] = {
|
|||
UNIT_PM_TICK, 1, 0x7e, 1, NULL, NULL,NULL),
|
||||
OFFON_SETTING(0,peak_meter_dbfs,LANG_PM_DBFS,true,"peak meter dbfs",NULL),
|
||||
{F_T_INT, &global_settings.peak_meter_min, LANG_PM_MIN,INT(60),
|
||||
"peak meter min", NULL, UNUSED},
|
||||
"peak meter min", UNUSED},
|
||||
{F_T_INT, &global_settings.peak_meter_max, LANG_PM_MAX,INT(0),
|
||||
"peak meter max", NULL, UNUSED},
|
||||
"peak meter max", UNUSED},
|
||||
#ifdef HAVE_RECORDING
|
||||
OFFON_SETTING(0, peak_meter_clipcounter, LANG_PM_CLIPCOUNTER, false,
|
||||
"peak meter clipcounter", NULL),
|
||||
|
@ -1511,23 +1509,22 @@ const struct settings_list settings[] = {
|
|||
TALK_ID(650, UNIT_MB), TALK_ID(700, UNIT_MB),
|
||||
TALK_ID(1024, UNIT_MB), TALK_ID(1536, UNIT_MB),
|
||||
TALK_ID(1792, UNIT_MB)),
|
||||
{F_T_INT|F_RECSETTING, &global_settings.rec_channels, LANG_CHANNELS, INT(0),
|
||||
"rec channels","stereo,mono",UNUSED},
|
||||
{F_T_INT|F_RECSETTING, &global_settings.rec_mono_mode,
|
||||
LANG_RECORDING_MONO_MODE, INT(0), "rec mono mode","L+R,L,R",UNUSED},
|
||||
{F_T_INT|F_RECSETTING|F_HAS_CFGVALS, &global_settings.rec_channels, LANG_CHANNELS, INT(0),
|
||||
"rec channels",{.cfg_vals="stereo,mono"}},
|
||||
{F_T_INT|F_RECSETTING|F_HAS_CFGVALS, &global_settings.rec_mono_mode,
|
||||
LANG_RECORDING_MONO_MODE, INT(0), "rec mono mode",{.cfg_vals="L+R,L,R"}},
|
||||
CHOICE_SETTING(F_RECSETTING, rec_split_type, LANG_SPLIT_TYPE, 0,
|
||||
"rec split type", "Split,Stop,Shutdown", NULL, 3,
|
||||
ID2P(LANG_START_NEW_FILE), ID2P(LANG_STOP_RECORDING),ID2P(LANG_STOP_RECORDING_AND_SHUTDOWN)),
|
||||
CHOICE_SETTING(F_RECSETTING, rec_split_method, LANG_SPLIT_MEASURE, 0,
|
||||
"rec split method", "Time,Filesize", NULL, 2,
|
||||
ID2P(LANG_TIME), ID2P(LANG_FILESIZE)),
|
||||
{F_T_INT|F_RECSETTING, &global_settings.rec_source, LANG_RECORDING_SOURCE,
|
||||
{F_T_INT|F_RECSETTING|F_HAS_CFGVALS, &global_settings.rec_source, LANG_RECORDING_SOURCE,
|
||||
INT(0), "rec source",
|
||||
&HAVE_MIC_REC_(",mic")
|
||||
{.cfg_vals=&HAVE_MIC_REC_(",mic")
|
||||
HAVE_LINE_REC_(",line")
|
||||
HAVE_SPDIF_REC_(",spdif")
|
||||
HAVE_FMRADIO_REC_(",fmradio")[1],
|
||||
UNUSED},
|
||||
HAVE_FMRADIO_REC_(",fmradio")[1]}},
|
||||
INT_SETTING(F_TIME_SETTING | F_RECSETTING, rec_prerecord_time,
|
||||
LANG_RECORD_PRERECORD_TIME, 0,
|
||||
"prerecording time", UNIT_SEC, 0, 30, 1,
|
||||
|
@ -1549,31 +1546,31 @@ const struct settings_list settings[] = {
|
|||
#ifdef DEFAULT_REC_MIC_GAIN
|
||||
{F_T_INT|F_RECSETTING,&global_settings.rec_mic_gain,
|
||||
LANG_GAIN,INT(DEFAULT_REC_MIC_GAIN),
|
||||
"rec mic gain",NULL,UNUSED},
|
||||
"rec mic gain",UNUSED},
|
||||
#endif /* DEFAULT_REC_MIC_GAIN */
|
||||
#ifdef DEFAULT_REC_LEFT_GAIN
|
||||
{F_T_INT|F_RECSETTING,&global_settings.rec_left_gain,
|
||||
LANG_GAIN_LEFT,INT(DEFAULT_REC_LEFT_GAIN),
|
||||
"rec left gain",NULL,UNUSED},
|
||||
"rec left gain",UNUSED},
|
||||
#endif /* DEFAULT_REC_LEFT_GAIN */
|
||||
#ifdef DEFAULT_REC_RIGHT_GAIN
|
||||
{F_T_INT|F_RECSETTING,&global_settings.rec_right_gain,LANG_GAIN_RIGHT,
|
||||
INT(DEFAULT_REC_RIGHT_GAIN),
|
||||
"rec right gain",NULL,UNUSED},
|
||||
"rec right gain",UNUSED},
|
||||
#endif /* DEFAULT_REC_RIGHT_GAIN */
|
||||
{F_T_INT|F_RECSETTING,&global_settings.rec_frequency,
|
||||
{F_T_INT|F_RECSETTING|F_HAS_CFGVALS,&global_settings.rec_frequency,
|
||||
LANG_FREQUENCY,INT(REC_FREQ_DEFAULT),
|
||||
"rec frequency",REC_FREQ_CFG_VAL_LIST,UNUSED},
|
||||
{F_T_INT|F_RECSETTING,&global_settings.rec_format,
|
||||
"rec frequency",{.cfg_vals=REC_FREQ_CFG_VAL_LIST}},
|
||||
{F_T_INT|F_RECSETTING|F_HAS_CFGVALS,&global_settings.rec_format,
|
||||
LANG_FORMAT,INT(REC_FORMAT_DEFAULT),
|
||||
"rec format",REC_FORMAT_CFG_VAL_LIST,UNUSED},
|
||||
"rec format",{.cfg_vals=REC_FORMAT_CFG_VAL_LIST}},
|
||||
/** Encoder settings start - keep these together **/
|
||||
/* aiff_enc */
|
||||
/* (no settings yet) */
|
||||
/* mp3_enc */
|
||||
{F_T_INT|F_RECSETTING, &global_settings.mp3_enc_config.bitrate,-1,
|
||||
{F_T_INT|F_RECSETTING|F_HAS_CFGVALS, &global_settings.mp3_enc_config.bitrate,-1,
|
||||
INT(MP3_ENC_BITRATE_CFG_DEFAULT),
|
||||
"mp3_enc bitrate",MP3_ENC_BITRATE_CFG_VALUE_LIST,UNUSED},
|
||||
"mp3_enc bitrate",{.cfg_vals=MP3_ENC_BITRATE_CFG_VALUE_LIST}},
|
||||
/* wav_enc */
|
||||
/* (no settings yet) */
|
||||
/* wavpack_enc */
|
||||
|
@ -2050,8 +2047,8 @@ const struct settings_list settings[] = {
|
|||
SYSTEM_SETTING(NVRAM(1),last_screen,-1),
|
||||
#if defined(HAVE_RTC_ALARM) && \
|
||||
(defined(HAVE_RECORDING) || CONFIG_TUNER)
|
||||
{F_T_INT, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN,
|
||||
INT(ALARM_START_WPS), "alarm wakeup screen", ALARM_SETTING_TEXT,UNUSED},
|
||||
{F_T_INT|F_HAS_CFGVALS, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN,
|
||||
INT(ALARM_START_WPS), "alarm wakeup screen", {.cfg_vals=ALARM_SETTING_TEXT}},
|
||||
#endif /* HAVE_RTC_ALARM */
|
||||
|
||||
/* Customizable icons */
|
||||
|
|
|
@ -56,6 +56,9 @@ struct bool_setting {
|
|||
void (*option_callback)(bool);
|
||||
int lang_yes;
|
||||
int lang_no;
|
||||
const char *cfg_vals; /* comma separated symbolic values for bool
|
||||
* or choice/table settings -- the i'th value
|
||||
* maps to the integer i */
|
||||
};
|
||||
#define F_BOOL_SETTING (F_T_BOOL|0x10)
|
||||
#define F_RGB 0x20
|
||||
|
@ -82,6 +85,9 @@ struct int_setting {
|
|||
struct choice_setting {
|
||||
void (*option_callback)(int);
|
||||
int count;
|
||||
const char *cfg_vals; /* comma separated symbolic values for bool
|
||||
* or choice/table settings -- the i'th value
|
||||
* maps to the integer i */
|
||||
union {
|
||||
const unsigned char **desc;
|
||||
const int *talks;
|
||||
|
@ -91,23 +97,24 @@ struct choice_setting {
|
|||
#define F_CHOICETALKS 0x200 /* uses .talks in the above struct for the talks */
|
||||
/* and cfg_vals for the strings to display */
|
||||
|
||||
#define F_TEMPVAR 0x400 /* used if the setting should be set using a temp var */
|
||||
#define F_PADTITLE 0x800 /* pad the title with spaces to force it to scroll */
|
||||
#define F_NO_WRAP 0x1000 /* used if the list should not wrap */
|
||||
|
||||
struct table_setting {
|
||||
void (*option_callback)(int);
|
||||
const char* (*formatter)(char*, size_t, int, const char*);
|
||||
int32_t (*get_talk_id)(int, int);
|
||||
int unit;
|
||||
int count;
|
||||
const char *cfg_vals; /* comma separated symbolic values for bool
|
||||
* or choice/table settings -- the i'th value
|
||||
* maps to the integer i */
|
||||
const int * values;
|
||||
};
|
||||
#define F_TABLE_SETTING 0x2000
|
||||
#define F_ALLOW_ARBITRARY_VALS 0x4000
|
||||
|
||||
/* these use the _isfunc_type type for the function */
|
||||
/* typedef int (*_isfunc_type)(void); */
|
||||
#define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */
|
||||
#define F_MAX_ISFUNC 0x200000 /* max(above) is function pointer to above type */
|
||||
#define F_DEF_ISFUNC 0x400000 /* default_val is function pointer to above type */
|
||||
|
||||
/* The next stuff is used when none of the other types work.
|
||||
Should really only be used if the value you want to store in global_settings
|
||||
is very different to the string you want to use in the config. */
|
||||
|
@ -138,7 +145,16 @@ struct custom_setting {
|
|||
};
|
||||
|
||||
#define F_TIME_SETTING 0x10000 /* int,table format hh:mm:ss.mss auto ranged */
|
||||
#define F_THEMESETTING 0x0800000
|
||||
#define F_HAS_CFGVALS 0x20000 /* uses setting union to carry cfg_vals */
|
||||
|
||||
|
||||
/* these use the _isfunc_type type for the function */
|
||||
/* typedef int (*_isfunc_type)(void); */
|
||||
#define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */
|
||||
#define F_MAX_ISFUNC 0x200000 /* max(above) is function pointer to above type */
|
||||
#define F_DEF_ISFUNC 0x400000 /* default_val is function pointer to above type */
|
||||
|
||||
#define F_THEMESETTING 0x800000
|
||||
#define F_RECSETTING 0x1000000
|
||||
#define F_EQSETTING 0x2000000
|
||||
#define F_SOUNDSETTING 0x4000000
|
||||
|
@ -151,9 +167,6 @@ struct custom_setting {
|
|||
- number of bytes for a NVRAM setting is changed
|
||||
- a NVRAM setting is removed
|
||||
*/
|
||||
#define F_TEMPVAR 0x0400 /* used if the setting should be set using a temp var */
|
||||
#define F_PADTITLE 0x0800 /* pad the title with spaces to force it to scroll */
|
||||
#define F_NO_WRAP 0x1000 /* used if the list should not wrap */
|
||||
|
||||
#define F_CB_ON_SELECT_ONLY 0x10000000 /* option_callback only called if selected */
|
||||
#define F_CB_ONLY_IF_CHANGED 0x20000000 /* option_callback only called if setting changed */
|
||||
|
@ -168,9 +181,7 @@ struct settings_list {
|
|||
int lang_id; /* -1 for none */
|
||||
union storage_type default_val;
|
||||
const char *cfg_name; /* this settings name in the cfg file */
|
||||
const char *cfg_vals; /* comma seperated symbolic values for bool
|
||||
* or choice/table settings -- the i'th value
|
||||
* maps to the integer i */
|
||||
|
||||
union {
|
||||
const void *RESERVED; /* to stop compile errors, will be removed */
|
||||
const struct sound_setting *sound_setting; /* use F_T_SOUND for this */
|
||||
|
@ -180,6 +191,8 @@ struct settings_list {
|
|||
const struct choice_setting *choice_setting; /* F_CHOICE_SETTING */
|
||||
const struct table_setting *table_setting; /* F_TABLE_SETTING */
|
||||
const struct custom_setting *custom_setting; /* F_CUSTOM_SETTING */
|
||||
const char *cfg_vals; /* comma separated symbolic values for custom settings
|
||||
* -- the i'th value maps to the integer i */
|
||||
};
|
||||
};
|
||||
const struct settings_list* get_settings_list(int*count);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue