summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-12-24 22:35:31 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-12-24 22:35:31 +0000
commitb8bc45ded0d5c5765ea4686f373c49c91010aad8 (patch)
tree85f0107e52e872517aaa6c9e9004bdae774222c3
parent557ae970de0cd5d4f172322a3cadb839d48bd1a5 (diff)
downloadrockbox-b8bc45ded0d5c5765ea4686f373c49c91010aad8.tar.gz
rockbox-b8bc45ded0d5c5765ea4686f373c49c91010aad8.zip
FS#8353 - add a quick way to make a .cfg from the sound settings.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15971 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/lang/english.lang14
-rw-r--r--apps/menus/main_menu.c4
-rw-r--r--apps/settings.c4
-rw-r--r--apps/settings.h1
-rw-r--r--apps/settings_list.c57
-rw-r--r--apps/settings_list.h3
6 files changed, 53 insertions, 30 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 2eadfc4d1a..34eaed5343 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -11526,3 +11526,17 @@
11526 *: "Random" 11526 *: "Random"
11527 </voice> 11527 </voice>
11528</phrase> 11528</phrase>
11529<phrase>
11530 id: LANG_SAVE_SOUND
11531 desc: save a sound config file
11532 user:
11533 <source>
11534 *: "Save Sound Settings"
11535 </source>
11536 <dest>
11537 *: "Save Sound Settings"
11538 </dest>
11539 <voice>
11540 *: "Save Sound Settings"
11541 </voice>
11542</phrase>
diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c
index a0786f9bc6..b70295649e 100644
--- a/apps/menus/main_menu.c
+++ b/apps/menus/main_menu.c
@@ -90,12 +90,14 @@ MENUITEM_FUNCTION(save_settings_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_SETTING
90 write_settings_file, (void*)SETTINGS_SAVE_ALL, NULL, Icon_NOICON); 90 write_settings_file, (void*)SETTINGS_SAVE_ALL, NULL, Icon_NOICON);
91MENUITEM_FUNCTION(save_theme_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_THEME), 91MENUITEM_FUNCTION(save_theme_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_THEME),
92 write_settings_file, (void*)SETTINGS_SAVE_THEME, NULL, Icon_NOICON); 92 write_settings_file, (void*)SETTINGS_SAVE_THEME, NULL, Icon_NOICON);
93MENUITEM_FUNCTION(save_sound_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_SOUND),
94 write_settings_file, (void*)SETTINGS_SAVE_SOUND, NULL, Icon_NOICON);
93MENUITEM_FUNCTION(reset_settings_item, 0, ID2P(LANG_RESET), 95MENUITEM_FUNCTION(reset_settings_item, 0, ID2P(LANG_RESET),
94 reset_settings, NULL, NULL, Icon_NOICON); 96 reset_settings, NULL, NULL, Icon_NOICON);
95 97
96MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, Icon_Config, 98MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, Icon_Config,
97 &browse_configs, &reset_settings_item, 99 &browse_configs, &reset_settings_item,
98 &save_settings_item, &save_theme_item); 100 &save_settings_item, &save_sound_item, &save_theme_item);
99/* MANAGE SETTINGS MENU */ 101/* MANAGE SETTINGS MENU */
100/**********************************/ 102/**********************************/
101 103
diff --git a/apps/settings.c b/apps/settings.c
index 7f0de3e8ad..2814a6f57a 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -469,6 +469,9 @@ static bool settings_write_config(char* filename, int options)
469 if ((options == SETTINGS_SAVE_CHANGED) && 469 if ((options == SETTINGS_SAVE_CHANGED) &&
470 !is_changed(i)) 470 !is_changed(i))
471 continue; 471 continue;
472 else if ((options == SETTINGS_SAVE_SOUND) &&
473 ((settings[i].flags&F_SOUNDSETTING) == 0))
474 continue;
472 else if ((options == SETTINGS_SAVE_THEME) && 475 else if ((options == SETTINGS_SAVE_THEME) &&
473 ((settings[i].flags&F_THEMESETTING) == 0)) 476 ((settings[i].flags&F_THEMESETTING) == 0))
474 continue; 477 continue;
@@ -624,6 +627,7 @@ bool settings_save_config(int options)
624 folder = EQS_DIR; 627 folder = EQS_DIR;
625 break; 628 break;
626#endif 629#endif
630 case SETTINGS_SAVE_SOUND:
627 default: 631 default:
628 folder = ROCKBOX_DIR; 632 folder = ROCKBOX_DIR;
629 } 633 }
diff --git a/apps/settings.h b/apps/settings.h
index d0e2a490a4..3ae9ef0221 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -204,6 +204,7 @@ enum {
204 SETTINGS_SAVE_CHANGED = 0, 204 SETTINGS_SAVE_CHANGED = 0,
205 SETTINGS_SAVE_ALL, 205 SETTINGS_SAVE_ALL,
206 SETTINGS_SAVE_THEME, 206 SETTINGS_SAVE_THEME,
207 SETTINGS_SAVE_SOUND,
207#ifdef HAVE_RECORDING 208#ifdef HAVE_RECORDING
208 SETTINGS_SAVE_RECPRESETS, 209 SETTINGS_SAVE_RECPRESETS,
209#endif 210#endif
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 1010d6b437..ef4e6be5b1 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -74,7 +74,7 @@
74 74
75/* Use for int settings which use the set_sound() function to set them */ 75/* Use for int settings which use the set_sound() function to set them */
76#define SOUND_SETTING(flags,var,lang_id,name,setting) \ 76#define SOUND_SETTING(flags,var,lang_id,name,setting) \
77 {flags|F_T_INT|F_T_SOUND, &global_settings.var, \ 77 {flags|F_T_INT|F_T_SOUND|F_SOUNDSETTING, &global_settings.var, \
78 lang_id, NODEFAULT,name,NULL, \ 78 lang_id, NODEFAULT,name,NULL, \
79 {.sound_setting=(struct sound_setting[]){{setting}}} } 79 {.sound_setting=(struct sound_setting[]){{setting}}} }
80 80
@@ -331,20 +331,21 @@ const struct settings_list settings[] = {
331 331
332#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 332#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
333 SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS), 333 SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS),
334 STRINGCHOICE_SETTING(0,avc,LANG_AUTOVOL,0,"auto volume", 334 STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume",
335 "off,20ms,2,4,8,", sound_set_avc, 5, 335 "off,20ms,2,4,8,", sound_set_avc, 5,
336 LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC), 336 LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC),
337 TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)), 337 TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)),
338 OFFON_SETTING(0, superbass, LANG_SUPERBASS, false, "superbass", set_superbass), 338 OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass", set_superbass),
339#endif 339#endif
340 340
341 CHOICE_SETTING(0,channel_config,LANG_CHANNEL_CONFIGURATION,0,"channels", 341 CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION,
342 0,"channels",
342 "stereo,mono,custom,mono left,mono right,karaoke", 343 "stereo,mono,custom,mono left,mono right,karaoke",
343 sound_set_channels, 344 sound_set_channels,
344 6, ID2P(LANG_CHANNEL_STEREO), ID2P(LANG_CHANNEL_MONO), 345 6, ID2P(LANG_CHANNEL_STEREO), ID2P(LANG_CHANNEL_MONO),
345 ID2P(LANG_CHANNEL_CUSTOM), ID2P(LANG_CHANNEL_LEFT), 346 ID2P(LANG_CHANNEL_CUSTOM), ID2P(LANG_CHANNEL_LEFT),
346 ID2P(LANG_CHANNEL_RIGHT), ID2P(LANG_CHANNEL_KARAOKE)), 347 ID2P(LANG_CHANNEL_RIGHT), ID2P(LANG_CHANNEL_KARAOKE)),
347 SOUND_SETTING(0,stereo_width, LANG_STEREO_WIDTH, 348 SOUND_SETTING(F_SOUNDSETTING, stereo_width, LANG_STEREO_WIDTH,
348 "stereo_width", SOUND_STEREO_WIDTH), 349 "stereo_width", SOUND_STEREO_WIDTH),
349 /* playback */ 350 /* playback */
350 OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL), 351 OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL),
@@ -679,19 +680,19 @@ const struct settings_list settings[] = {
679#endif /* HAVE_RECORDING */ 680#endif /* HAVE_RECORDING */
680#endif /* HAVE_LCD_BITMAP */ 681#endif /* HAVE_LCD_BITMAP */
681#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 682#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
682 SOUND_SETTING(0, mdb_strength, LANG_MDB_STRENGTH, 683 SOUND_SETTING(F_SOUNDSETTING, mdb_strength, LANG_MDB_STRENGTH,
683 "mdb strength", SOUND_MDB_STRENGTH), 684 "mdb strength", SOUND_MDB_STRENGTH),
684 SOUND_SETTING(0, mdb_harmonics, LANG_MDB_HARMONICS, 685 SOUND_SETTING(F_SOUNDSETTING, mdb_harmonics, LANG_MDB_HARMONICS,
685 "mdb harmonics", SOUND_MDB_HARMONICS), 686 "mdb harmonics", SOUND_MDB_HARMONICS),
686 SOUND_SETTING(0, mdb_center, LANG_MDB_CENTER, 687 SOUND_SETTING(F_SOUNDSETTING, mdb_center, LANG_MDB_CENTER,
687 "mdb center", SOUND_MDB_CENTER), 688 "mdb center", SOUND_MDB_CENTER),
688 SOUND_SETTING(0, mdb_shape, LANG_MDB_SHAPE, 689 SOUND_SETTING(F_SOUNDSETTING, mdb_shape, LANG_MDB_SHAPE,
689 "mdb shape", SOUND_MDB_SHAPE), 690 "mdb shape", SOUND_MDB_SHAPE),
690 OFFON_SETTING(0, mdb_enable, LANG_MDB_ENABLE, 691 OFFON_SETTING(F_SOUNDSETTING, mdb_enable, LANG_MDB_ENABLE,
691 false, "mdb enable", set_mdb_enable), 692 false, "mdb enable", set_mdb_enable),
692#endif 693#endif
693#if CONFIG_CODEC == MAS3507D 694#if CONFIG_CODEC == MAS3507D
694 OFFON_SETTING(0,line_in,LANG_LINE_IN,false,"line in",NULL), 695 OFFON_SETTING(F_SOUNDSETTING, line_in,LANG_LINE_IN,false,"line in",NULL),
695#endif 696#endif
696 /* voice */ 697 /* voice */
697 OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL), 698 OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL),
@@ -845,7 +846,7 @@ const struct settings_list settings[] = {
845#endif /* HAVE_RECORDING */ 846#endif /* HAVE_RECORDING */
846 847
847#ifdef HAVE_SPDIF_POWER 848#ifdef HAVE_SPDIF_POWER
848 OFFON_SETTING(0, spdif_enable, LANG_SPDIF_ENABLE, false, 849 OFFON_SETTING(F_SOUNDSETTING, spdif_enable, LANG_SPDIF_ENABLE, false,
849 "spdif enable", spdif_power_enable), 850 "spdif enable", spdif_power_enable),
850#endif 851#endif
851 CHOICE_SETTING(0, next_folder, LANG_NEXT_FOLDER, FOLDER_ADVANCE_OFF, 852 CHOICE_SETTING(0, next_folder, LANG_NEXT_FOLDER, FOLDER_ADVANCE_OFF,
@@ -855,13 +856,13 @@ const struct settings_list settings[] = {
855 856
856#if CONFIG_CODEC == SWCODEC 857#if CONFIG_CODEC == SWCODEC
857 /* replay gain */ 858 /* replay gain */
858 OFFON_SETTING(0, replaygain, LANG_REPLAYGAIN_ENABLE, false, "replaygain", NULL), 859 OFFON_SETTING(F_SOUNDSETTING, replaygain, LANG_REPLAYGAIN_ENABLE, false, "replaygain", NULL),
859 CHOICE_SETTING(0, replaygain_type, LANG_REPLAYGAIN_MODE, REPLAYGAIN_ALBUM, 860 CHOICE_SETTING(F_SOUNDSETTING, replaygain_type, LANG_REPLAYGAIN_MODE, REPLAYGAIN_ALBUM,
860 "replaygain type", "track,album,track shuffle", NULL, 3, 861 "replaygain type", "track,album,track shuffle", NULL, 3,
861 ID2P(LANG_TRACK_GAIN), ID2P(LANG_ALBUM_GAIN), ID2P(LANG_SHUFFLE_GAIN)), 862 ID2P(LANG_TRACK_GAIN), ID2P(LANG_ALBUM_GAIN), ID2P(LANG_SHUFFLE_GAIN)),
862 OFFON_SETTING(0, replaygain_noclip, LANG_REPLAYGAIN_NOCLIP, 863 OFFON_SETTING(F_SOUNDSETTING, replaygain_noclip, LANG_REPLAYGAIN_NOCLIP,
863 false, "replaygain noclip", NULL), 864 false, "replaygain noclip", NULL),
864 INT_SETTING_NOWRAP(0, replaygain_preamp, LANG_REPLAYGAIN_PREAMP, 0, "replaygain preamp", 865 INT_SETTING_NOWRAP(F_SOUNDSETTING, replaygain_preamp, LANG_REPLAYGAIN_PREAMP, 0, "replaygain preamp",
865 UNIT_DB, -120, 120, 5, db_format, NULL, NULL), 866 UNIT_DB, -120, 120, 5, db_format, NULL, NULL),
866 867
867 CHOICE_SETTING(0, beep, LANG_BEEP, 0, 868 CHOICE_SETTING(0, beep, LANG_BEEP, 0,
@@ -869,35 +870,35 @@ const struct settings_list settings[] = {
869 ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE), ID2P(LANG_STRONG)), 870 ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE), ID2P(LANG_STRONG)),
870 871
871 /* crossfade */ 872 /* crossfade */
872 CHOICE_SETTING(0, crossfade, LANG_CROSSFADE_ENABLE, 0, "crossfade", 873 CHOICE_SETTING(F_SOUNDSETTING, crossfade, LANG_CROSSFADE_ENABLE, 0, "crossfade",
873 "off,shuffle,track skip,shuffle and track skip,always",NULL, 5, 874 "off,shuffle,track skip,shuffle and track skip,always",NULL, 5,
874 ID2P(LANG_OFF), ID2P(LANG_SHUFFLE), ID2P(LANG_TRACKSKIP), 875 ID2P(LANG_OFF), ID2P(LANG_SHUFFLE), ID2P(LANG_TRACKSKIP),
875 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)), 876 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)),
876 INT_SETTING(0, crossfade_fade_in_delay, LANG_CROSSFADE_FADE_IN_DELAY, 0, 877 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_delay, LANG_CROSSFADE_FADE_IN_DELAY, 0,
877 "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL), 878 "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL),
878 INT_SETTING(0, crossfade_fade_out_delay, LANG_CROSSFADE_FADE_OUT_DELAY, 0, 879 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_delay, LANG_CROSSFADE_FADE_OUT_DELAY, 0,
879 "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL), 880 "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL),
880 INT_SETTING(0, crossfade_fade_in_duration, LANG_CROSSFADE_FADE_IN_DURATION, 2, 881 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_duration, LANG_CROSSFADE_FADE_IN_DURATION, 2,
881 "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL), 882 "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL),
882 INT_SETTING(0, crossfade_fade_out_duration, LANG_CROSSFADE_FADE_OUT_DURATION, 2, 883 INT_SETTING(F_SOUNDSETTING, crossfade_fade_out_duration, LANG_CROSSFADE_FADE_OUT_DURATION, 2,
883 "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL), 884 "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL),
884 CHOICE_SETTING(0, crossfade_fade_out_mixmode, LANG_CROSSFADE_FADE_OUT_MODE, 885 CHOICE_SETTING(F_SOUNDSETTING, crossfade_fade_out_mixmode, LANG_CROSSFADE_FADE_OUT_MODE,
885 0, "crossfade fade out mode", "crossfade,mix", NULL, 2, 886 0, "crossfade fade out mode", "crossfade,mix", NULL, 2,
886 ID2P(LANG_CROSSFADE), ID2P(LANG_MIX)), 887 ID2P(LANG_CROSSFADE), ID2P(LANG_MIX)),
887 888
888 /* crossfeed */ 889 /* crossfeed */
889 OFFON_SETTING(0,crossfeed, LANG_CROSSFEED, false, 890 OFFON_SETTING(F_SOUNDSETTING, crossfeed, LANG_CROSSFEED, false,
890 "crossfeed", dsp_set_crossfeed), 891 "crossfeed", dsp_set_crossfeed),
891 INT_SETTING_NOWRAP(0, crossfeed_direct_gain, LANG_CROSSFEED_DIRECT_GAIN, 892 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_direct_gain, LANG_CROSSFEED_DIRECT_GAIN,
892 -15, "crossfeed direct gain", UNIT_DB, -60, 0, 5, 893 -15, "crossfeed direct gain", UNIT_DB, -60, 0, 5,
893 db_format, NULL, dsp_set_crossfeed_direct_gain), 894 db_format, NULL, dsp_set_crossfeed_direct_gain),
894 INT_SETTING_NOWRAP(0, crossfeed_cross_gain, LANG_CROSSFEED_CROSS_GAIN, -60, 895 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_cross_gain, LANG_CROSSFEED_CROSS_GAIN, -60,
895 "crossfeed cross gain", UNIT_DB, -120, -30, 5, 896 "crossfeed cross gain", UNIT_DB, -120, -30, 5,
896 db_format, NULL, crossfeed_cross_set), 897 db_format, NULL, crossfeed_cross_set),
897 INT_SETTING_NOWRAP(0, crossfeed_hf_attenuation, LANG_CROSSFEED_HF_ATTENUATION, -160, 898 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_attenuation, LANG_CROSSFEED_HF_ATTENUATION, -160,
898 "crossfeed hf attenuation", UNIT_DB, -240, -60, 5, 899 "crossfeed hf attenuation", UNIT_DB, -240, -60, 5,
899 db_format, NULL, crossfeed_cross_set), 900 db_format, NULL, crossfeed_cross_set),
900 INT_SETTING_NOWRAP(0, crossfeed_hf_cutoff, LANG_CROSSFEED_HF_CUTOFF, 700, 901 INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_hf_cutoff, LANG_CROSSFEED_HF_CUTOFF, 700,
901 "crossfeed hf cutoff", UNIT_HERTZ, 500, 2000, 100, 902 "crossfeed hf cutoff", UNIT_HERTZ, 500, 2000, 100,
902 NULL, NULL, crossfeed_cross_set), 903 NULL, NULL, crossfeed_cross_set),
903 904
@@ -957,7 +958,7 @@ const struct settings_list settings[] = {
957 EQ_GAIN_STEP, db_format, NULL, NULL), 958 EQ_GAIN_STEP, db_format, NULL, NULL),
958 959
959 /* dithering */ 960 /* dithering */
960 OFFON_SETTING(0, dithering_enabled, LANG_DITHERING, 961 OFFON_SETTING(F_SOUNDSETTING, dithering_enabled, LANG_DITHERING,
961 false, "dithering enabled", dsp_dither_enable), 962 false, "dithering enabled", dsp_dither_enable),
962#endif 963#endif
963#ifdef HAVE_WM8758 964#ifdef HAVE_WM8758
diff --git a/apps/settings_list.h b/apps/settings_list.h
index b959789dfe..62631fd066 100644
--- a/apps/settings_list.h
+++ b/apps/settings_list.h
@@ -105,6 +105,7 @@ struct table_setting {
105#define F_THEMESETTING 0x0800000 105#define F_THEMESETTING 0x0800000
106#define F_RECSETTING 0x1000000 106#define F_RECSETTING 0x1000000
107#define F_EQSETTING 0x2000000 107#define F_EQSETTING 0x2000000
108#define F_SOUNDSETTING 0x4000000
108 109
109#define F_NVRAM_BYTES_MASK 0xE0000 /*0-4 bytes can be stored */ 110#define F_NVRAM_BYTES_MASK 0xE0000 /*0-4 bytes can be stored */
110#define F_NVRAM_MASK_SHIFT 17 111#define F_NVRAM_MASK_SHIFT 17
@@ -119,7 +120,7 @@ struct table_setting {
119#define F_NO_WRAP 0x1000 /* used if the list should not wrap */ 120#define F_NO_WRAP 0x1000 /* used if the list should not wrap */
120 121
121struct settings_list { 122struct settings_list {
122 uint32_t flags; /* ____ ___R TFFF NNN_ _ATW PTVC IFRB STTT */ 123 uint32_t flags; /* ____ _SER TFFF NNN_ _ATW PTVC IFRB STTT */
123 void *setting; 124 void *setting;
124 int lang_id; /* -1 for none */ 125 int lang_id; /* -1 for none */
125 union storage_type default_val; 126 union storage_type default_val;