Code police raid on the settings code, consting and putting headers alongside their implementation.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16798 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Steve Bavin 2008-03-25 15:24:03 +00:00
parent 222994f180
commit cd88e2ad93
8 changed files with 158 additions and 82 deletions

View file

@ -65,4 +65,5 @@ extern void option_select_next(struct option_select * opt);
*/ */
extern void option_select_prev(struct option_select * opt); extern void option_select_prev(struct option_select * opt);
#endif /* _GUI_OPTION_SELECT_H_ */ #endif /* _GUI_OPTION_SELECT_H_ */

View file

@ -275,7 +275,7 @@ static int talk_menu_item(int selected_item, void *data)
} }
return 0; return 0;
} }
#define MAX_OPTIONS 32
bool do_setting_from_menu(const struct menu_item_ex *temp) bool do_setting_from_menu(const struct menu_item_ex *temp)
{ {
int setting_id; int setting_id;

View file

@ -41,6 +41,9 @@
#if CONFIG_TUNER #if CONFIG_TUNER
#include "radio.h" #include "radio.h"
#endif #endif
#if CONFIG_RTC
#include "screens.h"
#endif
/***********************************/ /***********************************/
/* TAGCACHE MENU */ /* TAGCACHE MENU */

View file

@ -119,12 +119,12 @@
#define PLUGIN_MAGIC 0x526F634B /* RocK */ #define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */ /* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 101 #define PLUGIN_API_VERSION 102
/* update this to latest version if a change to the api struct breaks /* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */ new function which are "waiting" at the end of the function table) */
#define PLUGIN_MIN_API_VERSION 101 #define PLUGIN_MIN_API_VERSION 102
/* plugin return codes */ /* plugin return codes */
enum plugin_status { enum plugin_status {
@ -562,20 +562,21 @@ struct plugin_api {
void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw); void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw);
/* options */ /* options */
const struct settings_list* (*find_setting)(void* variable, int *id); const struct settings_list* (*find_setting)(const void* variable, int *id);
bool (*option_screen)(struct settings_list *setting, bool (*option_screen)(struct settings_list *setting,
bool use_temp_var, unsigned char* option_title); bool use_temp_var, unsigned char* option_title);
bool (*set_option)(const char* string, void* variable, bool (*set_option)(const char* string, const void* variable,
enum optiontype type, const struct opt_items* options, const enum optiontype type, const struct opt_items* options,
int numoptions, void (*function)(int)); const int numoptions, void (*function)(int));
bool (*set_bool_options)(const char* string, bool* variable, bool (*set_bool_options)(const char* string, const bool* variable,
const char* yes_str, int yes_voice, const char* yes_str, const int yes_voice,
const char* no_str, int no_voice, const char* no_str, const int no_voice,
void (*function)(bool)); void (*function)(bool));
bool (*set_int)(const unsigned char* string, const char* unit, int voice_unit, bool (*set_int)(const unsigned char* string, const char* unit, const int voice_unit,
int* variable, void (*function)(int), int step, int min, const int* variable, void (*function)(int), const int step,
int max, void (*formatter)(char*, size_t, int, const char*) ); const int min, const int max,
bool (*set_bool)(const char* string, bool* variable ); void (*formatter)(char*, size_t, int, const char*) );
bool (*set_bool)(const char* string, const bool* variable );
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
bool (*set_color)(struct screen *display, char *title, unsigned *color, bool (*set_color)(struct screen *display, char *title, unsigned *color,

View file

@ -7,7 +7,7 @@
* \/ \/ \/ \/ \/ * \/ \/ \/ \/ \/
* $Id$ * $Id$
* *
* Copyright (C) 2002 by wavey@wavey.org * Copyright (C) 2002 by Stuart Martin
* RTC config saving code (C) 2002 by hessu@hes.iki.fi * RTC config saving code (C) 2002 by hessu@hes.iki.fi
* *
* All files in this archive are subject to the GNU General Public License. * All files in this archive are subject to the GNU General Public License.
@ -62,6 +62,7 @@
#include "list.h" #include "list.h"
#include "settings_list.h" #include "settings_list.h"
#include "filetypes.h" #include "filetypes.h"
#include "option_select.h"
#if (LCD_DEPTH > 1) || (defined(HAVE_LCD_REMOTE) && (LCD_REMOTE_DEPTH > 1)) #if (LCD_DEPTH > 1) || (defined(HAVE_LCD_REMOTE) && (LCD_REMOTE_DEPTH > 1))
#include "backdrop.h" #include "backdrop.h"
@ -112,7 +113,7 @@ long lasttime = 0;
#define NVRAM_FILE ROCKBOX_DIR "/nvram.bin" #define NVRAM_FILE ROCKBOX_DIR "/nvram.bin"
static char nvram_buffer[NVRAM_BLOCK_SIZE]; static char nvram_buffer[NVRAM_BLOCK_SIZE];
static bool read_nvram_data(char* buf, int max_len) static bool read_nvram_data(char* buf, const int max_len)
{ {
unsigned crc32 = 0xffffffff; unsigned crc32 = 0xffffffff;
int var_count = 0, i = 0, buf_pos = 0; int var_count = 0, i = 0, buf_pos = 0;
@ -162,7 +163,7 @@ static bool read_nvram_data(char* buf, int max_len)
} }
return true; return true;
} }
static bool write_nvram_data(char* buf, int max_len) static bool write_nvram_data(char* buf, const int max_len)
{ {
unsigned crc32 = 0xffffffff; unsigned crc32 = 0xffffffff;
int i = 0, buf_pos = 0; int i = 0, buf_pos = 0;
@ -220,7 +221,7 @@ static bool write_nvram_data(char* buf, int max_len)
/* /*
* load settings from disk or RTC RAM * load settings from disk or RTC RAM
*/ */
void settings_load(int which) void settings_load(const int which)
{ {
DEBUGF( "reload_all_settings()\n" ); DEBUGF( "reload_all_settings()\n" );
if (which&SETTINGS_RTC) if (which&SETTINGS_RTC)
@ -232,7 +233,7 @@ void settings_load(int which)
} }
} }
static bool cfg_string_to_int(int setting_id, int* out, char* str) static bool cfg_string_to_int(const int setting_id, int* out, const char* str)
{ {
const char* start = settings[setting_id].cfg_vals; const char* start = settings[setting_id].cfg_vals;
char* end = NULL; char* end = NULL;
@ -263,7 +264,7 @@ static bool cfg_string_to_int(int setting_id, int* out, char* str)
return false; return false;
} }
bool settings_load_config(const char* file, bool apply) bool settings_load_config(const char* file, const bool apply)
{ {
int fd; int fd;
char line[128]; char line[128];
@ -361,7 +362,7 @@ bool settings_load_config(const char* file, bool apply)
/** Writing to a config file and saving settings **/ /** Writing to a config file and saving settings **/
bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len) bool cfg_int_to_string(const int setting_id, const int val, char* buf, const int buf_len)
{ {
int flags = settings[setting_id].flags; int flags = settings[setting_id].flags;
const char* start = settings[setting_id].cfg_vals; const char* start = settings[setting_id].cfg_vals;
@ -416,7 +417,9 @@ bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len)
} }
return true; return true;
} }
static bool is_changed(int setting_id)
static bool is_changed(const int setting_id)
{ {
const struct settings_list *setting = &settings[setting_id]; const struct settings_list *setting = &settings[setting_id];
switch (setting->flags&F_T_MASK) switch (setting->flags&F_T_MASK)
@ -450,7 +453,7 @@ static bool is_changed(int setting_id)
return true; return true;
} }
static bool settings_write_config(char* filename, int options) static bool settings_write_config(const char* filename, const int options)
{ {
int i; int i;
int fd; int fd;
@ -581,7 +584,7 @@ static void update_runtime(void)
global_status.topruntime = global_status.runtime; global_status.topruntime = global_status.runtime;
} }
void status_save( void ) void status_save(void)
{ {
update_runtime(); update_runtime();
#ifdef HAVE_RTC_RAM #ifdef HAVE_RTC_RAM
@ -593,7 +596,7 @@ void status_save( void )
#endif #endif
} }
int settings_save( void ) int settings_save(void)
{ {
update_runtime(); update_runtime();
#ifdef HAVE_RTC_RAM #ifdef HAVE_RTC_RAM
@ -604,7 +607,8 @@ int settings_save( void )
register_ata_idle_func(flush_config_block_callback); register_ata_idle_func(flush_config_block_callback);
return 0; return 0;
} }
bool settings_save_config(int options)
bool settings_save_config(const int options)
{ {
char filename[MAX_PATH]; char filename[MAX_PATH];
char *folder; char *folder;
@ -714,7 +718,7 @@ void sound_settings_apply(void)
#endif #endif
} }
void settings_apply(bool read_disk) void settings_apply(const bool read_disk)
{ {
char buf[64]; char buf[64];
#if CONFIG_CODEC == SWCODEC #if CONFIG_CODEC == SWCODEC
@ -945,8 +949,8 @@ void settings_apply(bool read_disk)
/* /*
* reset all settings to their default value * reset all settings to their default value
*/ */
void settings_reset(void) { void settings_reset(void)
{
int i; int i;
DEBUGF( "settings_reset()\n" ); DEBUGF( "settings_reset()\n" );
@ -979,7 +983,7 @@ void settings_reset(void) {
} }
/** Changing setting values **/ /** Changing setting values **/
const struct settings_list* find_setting(void* variable, int *id) const struct settings_list* find_setting(const void* variable, int *id)
{ {
int i; int i;
for(i=0;i<nb_settings;i++) for(i=0;i<nb_settings;i++)
@ -994,19 +998,7 @@ const struct settings_list* find_setting(void* variable, int *id)
return NULL; return NULL;
} }
void talk_setting(void *global_settings_variable) bool set_bool(const char* string, const bool* variable )
{
const struct settings_list *setting;
if (!global_settings.talk_menu)
return;
setting = find_setting(global_settings_variable, NULL);
if (setting == NULL)
return;
if (setting->lang_id)
talk_id(setting->lang_id,false);
}
bool set_bool(const char* string, bool* variable )
{ {
return set_bool_options(string, variable, return set_bool_options(string, variable,
(char *)STR(LANG_SET_BOOL_YES), (char *)STR(LANG_SET_BOOL_YES),
@ -1015,14 +1007,14 @@ bool set_bool(const char* string, bool* variable )
} }
bool set_bool_options(const char* string, bool* variable, bool set_bool_options(const char* string, const bool* variable,
const char* yes_str, int yes_voice, const char* yes_str, const int yes_voice,
const char* no_str, int no_voice, const char* no_str, const int no_voice,
void (*function)(bool)) void (*function)(bool))
{ {
struct opt_items names[] = { struct opt_items names[] = {
{(unsigned char *)no_str, no_voice}, {(unsigned const char *)no_str, no_voice},
{(unsigned char *)yes_str, yes_voice} {(unsigned const char *)yes_str, yes_voice}
}; };
bool result; bool result;
@ -1033,22 +1025,89 @@ bool set_bool_options(const char* string, bool* variable,
bool set_int(const unsigned char* string, bool set_int(const unsigned char* string,
const char* unit, const char* unit,
int voice_unit, const int voice_unit,
int* variable, const int* variable,
void (*function)(int), void (*function)(int),
int step, const int step,
int min, const int min,
int max, const int max,
void (*formatter)(char*, size_t, int, const char*) ) void (*formatter)(char*, size_t, int, const char*) )
{ {
return set_int_ex(string, unit, voice_unit, variable, function, return set_int_ex(string, unit, voice_unit, variable, function,
step, min, max, formatter, NULL); step, min, max, formatter, NULL);
} }
bool set_int_ex(const unsigned char* string,
const char* unit,
const int voice_unit,
const int* variable,
void (*function)(int),
const int step,
const int min,
const int max,
void (*formatter)(char*, size_t, int, const char*),
int32_t (*get_talk_id)(int, int))
{
(void)unit;
struct settings_list item;
struct int_setting data = {
function, voice_unit, min, max, step,
formatter, get_talk_id
};
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, false, NULL);
}
/** extra stuff which is probably misplaced **/
void set_file(char* filename, char* setting, int maxlen) static const struct opt_items *set_option_options;
static void set_option_formatter(char* buf, size_t size, int item, const char* unit)
{
(void)unit;
const unsigned char *text = set_option_options[item].string;
snprintf(buf, size, "%s", P2STR(text));
}
static int32_t set_option_get_talk_id(int value, int unit)
{
(void)unit;
return set_option_options[value].voice_id;
}
bool set_option(const char* string, const void* variable, const enum optiontype type,
const struct opt_items* options,
const int numoptions, void (*function)(int))
{
int temp;
struct settings_list item;
struct int_setting data = {
function, UNIT_INT, 0, numoptions-1, 1,
set_option_formatter, set_option_get_talk_id
};
set_option_options = options;
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 == BOOL)
temp = *(bool*)variable? 1: 0;
else
temp = *(int*)variable;
if (!option_screen(&item, false, NULL))
{
if (type == BOOL)
*(bool*)variable = (temp == 1? true: false);
else
*(int*)variable = temp;
return false;
}
return true;
}
void set_file(const char* filename, char* setting, const int maxlen)
{ {
char* fptr = strrchr(filename,'/'); char* fptr = strrchr(filename,'/');
int len; int len;

View file

@ -7,7 +7,7 @@
* \/ \/ \/ \/ \/ * \/ \/ \/ \/ \/
* $Id$ * $Id$
* *
* Copyright (C) 2002 by wavey@wavey.org * Copyright (C) 2002 by Stuart Martin
* *
* All files in this archive are subject to the GNU General Public License. * All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement. * See the file COPYING in the source tree root for full license agreement.
@ -195,10 +195,10 @@ extern unsigned char vp_dummy[VIRT_SIZE];
#define SETTINGS_RTC 1 /* only the settings from the RTC nonvolatile RAM */ #define SETTINGS_RTC 1 /* only the settings from the RTC nonvolatile RAM */
#define SETTINGS_HD 2 /* only the settings from the disk sector */ #define SETTINGS_HD 2 /* only the settings from the disk sector */
#define SETTINGS_ALL 3 /* both */ #define SETTINGS_ALL 3 /* both */
void settings_load(int which); void settings_load(const int which);
bool settings_load_config(const char* file, bool apply); bool settings_load_config(const char* file, const bool apply);
void status_save( void ); void status_save(void);
int settings_save(void); int settings_save(void);
/* defines for the options paramater */ /* defines for the options paramater */
enum { enum {
@ -213,44 +213,41 @@ enum {
SETTINGS_SAVE_EQPRESET, SETTINGS_SAVE_EQPRESET,
#endif #endif
}; };
bool settings_save_config(int options); bool settings_save_config(const int options);
void settings_reset(void); void settings_reset(void);
void sound_settings_apply(void); void sound_settings_apply(void);
void settings_apply(bool read_disk); void settings_apply(const bool read_disk);
void settings_apply_pm_range(void); void settings_apply_pm_range(void);
void settings_display(void); void settings_display(void);
enum optiontype { INT, BOOL }; enum optiontype { INT, BOOL };
const struct settings_list* find_setting(void* variable, int *id); const struct settings_list* find_setting(const void* variable, int *id);
bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len); bool cfg_int_to_string(const int setting_id, const int val, char* buf, const int buf_len);
void talk_setting(void *global_settings_variable); bool set_bool_options(const char* string, const bool* variable,
bool set_sound(const unsigned char * string, const char* yes_str, const int yes_voice,
int* variable, int setting); const char* no_str, const int no_voice,
bool set_bool_options(const char* string, bool* variable,
const char* yes_str, int yes_voice,
const char* no_str, int no_voice,
void (*function)(bool)); void (*function)(bool));
bool set_bool(const char* string, bool* variable ); bool set_bool(const char* string, const bool* variable);
bool set_option(const char* string, void* variable, enum optiontype type, bool set_int(const unsigned char* string, const char* unit, const int voice_unit,
const struct opt_items* options, int numoptions, void (*function)(int)); const int* variable,
bool set_int(const unsigned char* string, const char* unit, int voice_unit, void (*function)(int), const int step, const int min, const int max,
int* variable,
void (*function)(int), int step, int min, int max,
void (*formatter)(char*, size_t, int, const char*) ); void (*formatter)(char*, size_t, int, const char*) );
/* use this one if you need to create a lang from the value (i.e with TALK_ID()) */ /* use this one if you need to create a lang from the value (i.e with TALK_ID()) */
bool set_int_ex(const unsigned char* string, const char* unit, int voice_unit, bool set_int_ex(const unsigned char* string, const char* unit, const int voice_unit,
int* variable, const int* variable,
void (*function)(int), int step, int min, int max, void (*function)(int), const int step, const int min, const int max,
void (*formatter)(char*, size_t, int, const char*), void (*formatter)(char*, size_t, int, const char*),
int32_t (*get_talk_id)(int, int)); int32_t (*get_talk_id)(int, int));
/* the following are either not in setting.c or shouldnt be */ void set_file(const char* filename, char* setting, const int maxlen);
bool set_time_screen(const char* string, struct tm *tm);
int read_line(int fd, char* buffer, int buffer_size); bool set_option(const char* string, const void* variable, const enum optiontype type,
void set_file(char* filename, char* setting, int maxlen); const struct opt_items* options, const int numoptions, void (*function)(int));
/** global_settings and global_status struct definitions **/ /** global_settings and global_status struct definitions **/

View file

@ -29,6 +29,7 @@
#include "system.h" #include "system.h"
#include "kernel.h" #include "kernel.h"
#include "settings.h" #include "settings.h"
#include "settings_list.h"
#include "mp3_playback.h" #include "mp3_playback.h"
#include "audio.h" #include "audio.h"
#include "lang.h" #include "lang.h"
@ -876,6 +877,19 @@ void talk_disable(bool disable)
talk_temp_disable_count--; talk_temp_disable_count--;
} }
void talk_setting(const void *global_settings_variable)
{
const struct settings_list *setting;
if (!global_settings.talk_menu)
return;
setting = find_setting(global_settings_variable, NULL);
if (setting == NULL)
return;
if (setting->lang_id)
talk_id(setting->lang_id,false);
}
#if CONFIG_RTC #if CONFIG_RTC
void talk_date(struct tm *tm, bool enqueue) void talk_date(struct tm *tm, bool enqueue)
{ {

View file

@ -78,6 +78,7 @@ int talk_file(const char* filename, bool enqueue); /* play a thumbnail from file
int talk_number(long n, bool enqueue); /* say a number */ int talk_number(long n, bool enqueue); /* say a number */
int talk_value(long n, int unit, bool enqueue); /* say a numeric value */ int talk_value(long n, int unit, bool enqueue); /* say a numeric value */
int talk_spell(const char* spell, bool enqueue); /* spell a string */ int talk_spell(const char* spell, bool enqueue); /* spell a string */
void talk_setting(const void *global_settings_variable); /* read a setting */
void talk_disable(bool disable); /* temporarily disable (or re-enable) talking (temporarily, not persisted) */ void talk_disable(bool disable); /* temporarily disable (or re-enable) talking (temporarily, not persisted) */
void talk_force_shutup(void); /* kill voice unconditionally */ void talk_force_shutup(void); /* kill voice unconditionally */
void talk_shutup(void); /* Interrupt voice, as when enqueue is false */ void talk_shutup(void); /* Interrupt voice, as when enqueue is false */