summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2022-12-12 02:59:20 -0500
committerWilliam Wilgus <me.theuser@yahoo.com>2022-12-12 23:12:31 -0500
commit0747415277f2f7b0a589d53d90100df29c636b38 (patch)
tree64eed77f9a1c82bfb76f24025a8b01ef3473147c
parent2b79ad43bdac59c422d860b7e3f16dc28ff935d4 (diff)
downloadrockbox-0747415277f2f7b0a589d53d90100df29c636b38.tar.gz
rockbox-0747415277f2f7b0a589d53d90100df29c636b38.zip
Settings.c add logf debugging to verify settings
decodes saved settings and available settings & flags Change-Id: I46bea15e7cef23fe9e41778455564f38bf00eeb1
-rw-r--r--apps/settings.c148
1 files changed, 147 insertions, 1 deletions
diff --git a/apps/settings.c b/apps/settings.c
index a627cce65b..bc6f066e22 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -19,6 +19,12 @@
19 * KIND, either express or implied. 19 * KIND, either express or implied.
20 * 20 *
21 ****************************************************************************/ 21 ****************************************************************************/
22/* Define LOGF_ENABLE to enable logf output in this file */
23/*#define LOGF_ENABLE*/
24/*Define DEBUG_AVAIL_SETTINGS to get a list of all available settings and flags */
25/*#define DEBUG_AVAIL_SETTINGS*/ /* Needs (LOGF_ENABLE) */
26#include "logf.h"
27
22#include <stdio.h> 28#include <stdio.h>
23#include <stddef.h> 29#include <stddef.h>
24#include <stdlib.h> 30#include <stdlib.h>
@@ -102,6 +108,12 @@ struct system_status global_status;
102#else /* creates temp files on save, renames next load, saves old file if desired */ 108#else /* creates temp files on save, renames next load, saves old file if desired */
103#define CONFIGFILE_TEMP CONFIGFILE".new" 109#define CONFIGFILE_TEMP CONFIGFILE".new"
104#define NVRAM_FILE_TEMP NVRAM_FILE".new" 110#define NVRAM_FILE_TEMP NVRAM_FILE".new"
111
112#ifdef LOGF_ENABLE
113static char *debug_get_flags(uint32_t flags);
114#endif
115static void debug_available_settings(void);
116
105static void rename_temp_file(const char *tempfile, 117static void rename_temp_file(const char *tempfile,
106 const char *file, 118 const char *file,
107 const char *oldfile) 119 const char *oldfile)
@@ -228,6 +240,9 @@ static void write_nvram_data(void)
228 */ 240 */
229void settings_load(int which) 241void settings_load(int which)
230{ 242{
243 logf("\r\n%s()\r\n", __func__);
244 debug_available_settings();
245
231 if (which & SETTINGS_RTC) 246 if (which & SETTINGS_RTC)
232 read_nvram_data(); 247 read_nvram_data();
233 if (which & SETTINGS_HD) 248 if (which & SETTINGS_HD)
@@ -318,6 +333,7 @@ bool copy_filename_setting(char *buf, size_t buflen, const char *input,
318 333
319bool settings_load_config(const char* file, bool apply) 334bool settings_load_config(const char* file, bool apply)
320{ 335{
336 logf("%s()\r\n", __func__);
321 const struct settings_list *setting; 337 const struct settings_list *setting;
322 int index; 338 int index;
323 int fd; 339 int fd;
@@ -346,17 +362,22 @@ bool settings_load_config(const char* file, bool apply)
346 { 362 {
347 case F_T_CUSTOM: 363 case F_T_CUSTOM:
348 setting->custom_setting->load_from_cfg(setting->setting, value); 364 setting->custom_setting->load_from_cfg(setting->setting, value);
365 logf("Val: %s\r\n",value);
349 break; 366 break;
350 case F_T_INT: 367 case F_T_INT:
351 case F_T_UINT: 368 case F_T_UINT:
352#ifdef HAVE_LCD_COLOR 369#ifdef HAVE_LCD_COLOR
353 if (setting->flags & F_RGB) 370 if (setting->flags & F_RGB)
371 {
354 hex_to_rgb(value, (int*)setting->setting); 372 hex_to_rgb(value, (int*)setting->setting);
373 logf("Val: %s\r\n", value);
374 }
355 else 375 else
356#endif 376#endif
357 if (setting->cfg_vals == NULL) 377 if (setting->cfg_vals == NULL)
358 { 378 {
359 *(int*)setting->setting = atoi(value); 379 *(int*)setting->setting = atoi(value);
380 logf("Val: %s\r\n",value);
360 } 381 }
361 else 382 else
362 { 383 {
@@ -368,10 +389,17 @@ bool settings_load_config(const char* file, bool apply)
368 *v = setting->table_setting->values[temp]; 389 *v = setting->table_setting->values[temp];
369 else 390 else
370 *v = temp; 391 *v = temp;
392 logf("Val: %d\r\n", *v);
371 } 393 }
372 else if (setting->flags & F_ALLOW_ARBITRARY_VALS) 394 else if (setting->flags & F_ALLOW_ARBITRARY_VALS)
373 { 395 {
374 *v = atoi(value); 396 *v = atoi(value);
397 logf("Val: %s\r\n",value);
398 }
399 else
400 {
401 logf("Error: %s: Not Found! [%s]\r\n",
402 setting->cfg_name, value);
375 } 403 }
376 } 404 }
377 break; 405 break;
@@ -379,9 +407,14 @@ bool settings_load_config(const char* file, bool apply)
379 { 407 {
380 int temp; 408 int temp;
381 if (cfg_string_to_int(setting, &temp, value)) 409 if (cfg_string_to_int(setting, &temp, value))
410 {
382 *(bool*)setting->setting = !!temp; 411 *(bool*)setting->setting = !!temp;
412 logf("Val: %s\r\n", value);
413 }
383 if (setting->bool_setting->option_callback) 414 if (setting->bool_setting->option_callback)
415 {
384 setting->bool_setting->option_callback(!!temp); 416 setting->bool_setting->option_callback(!!temp);
417 }
385 break; 418 break;
386 } 419 }
387 /* these can be plain text, filenames, or dirnames */ 420 /* these can be plain text, filenames, or dirnames */
@@ -391,6 +424,7 @@ bool settings_load_config(const char* file, bool apply)
391 const struct filename_setting *fs = setting->filename_setting; 424 const struct filename_setting *fs = setting->filename_setting;
392 copy_filename_setting((char*)setting->setting, 425 copy_filename_setting((char*)setting->setting,
393 fs->max_len, value, fs); 426 fs->max_len, value, fs);
427 logf("Val: %s\r\n", value);
394 break; 428 break;
395 } 429 }
396 } 430 }
@@ -544,6 +578,7 @@ static bool is_changed(const struct settings_list *setting)
544 578
545static bool settings_write_config(const char* filename, int options) 579static bool settings_write_config(const char* filename, int options)
546{ 580{
581 logf("%s\r\n", __func__);
547 int i; 582 int i;
548 int fd; 583 int fd;
549 char value[MAX_PATH]; 584 char value[MAX_PATH];
@@ -583,8 +618,9 @@ static bool settings_write_config(const char* filename, int options)
583 continue; 618 continue;
584 break; 619 break;
585 } 620 }
586
587 cfg_to_string(setting, value, MAX_PATH); 621 cfg_to_string(setting, value, MAX_PATH);
622 logf("Written: '%s: %s'\r\n",setting->cfg_name, value);
623
588 fdprintf(fd,"%s: %s\r\n",setting->cfg_name,value); 624 fdprintf(fd,"%s: %s\r\n",setting->cfg_name,value);
589 } /* for(...) */ 625 } /* for(...) */
590 close(fd); 626 close(fd);
@@ -631,6 +667,7 @@ void status_save(void)
631 667
632int settings_save(void) 668int settings_save(void)
633{ 669{
670 logf("%s", __func__);
634 update_runtime(); 671 update_runtime();
635 register_storage_idle_func(flush_config_block_callback); 672 register_storage_idle_func(flush_config_block_callback);
636 return 0; 673 return 0;
@@ -772,6 +809,7 @@ void sound_settings_apply(void)
772 809
773void settings_apply(bool read_disk) 810void settings_apply(bool read_disk)
774{ 811{
812 logf("%s", __func__);
775 int rc; 813 int rc;
776 CHART(">set_codepage"); 814 CHART(">set_codepage");
777 set_codepage(global_settings.default_codepage); 815 set_codepage(global_settings.default_codepage);
@@ -1114,18 +1152,22 @@ const struct settings_list* find_setting(const void* variable, int *id)
1114 } 1152 }
1115 return NULL; 1153 return NULL;
1116} 1154}
1155
1117const struct settings_list* find_setting_by_cfgname(const char* name, int *id) 1156const struct settings_list* find_setting_by_cfgname(const char* name, int *id)
1118{ 1157{
1119 int i; 1158 int i;
1159 logf("Searching for Setting: '%s'",name);
1120 for (i=0; i<nb_settings; i++) 1160 for (i=0; i<nb_settings; i++)
1121 { 1161 {
1122 if (settings[i].cfg_name && 1162 if (settings[i].cfg_name &&
1123 !strcasecmp(settings[i].cfg_name, name)) 1163 !strcasecmp(settings[i].cfg_name, name))
1124 { 1164 {
1165 logf("Found, flags: %s", debug_get_flags(settings[i].flags));
1125 if (id) *id = i; 1166 if (id) *id = i;
1126 return &settings[i]; 1167 return &settings[i];
1127 } 1168 }
1128 } 1169 }
1170 logf("Setting: '%s' Not Found!",name);
1129 return NULL; 1171 return NULL;
1130} 1172}
1131 1173
@@ -1282,3 +1324,107 @@ void set_file(const char* filename, char* setting, const int maxlen)
1282 strmemccpy(setting, fptr, len); 1324 strmemccpy(setting, fptr, len);
1283 settings_save(); 1325 settings_save();
1284} 1326}
1327
1328#ifdef LOGF_ENABLE
1329static char *debug_get_flags(uint32_t flags)
1330{
1331 static char buf[256] = {0};
1332 uint32_t ftype = flags & F_T_MASK; /* the variable type for the setting */
1333 flags &= ~F_T_MASK;
1334 switch (ftype)
1335 {
1336 case F_T_CUSTOM:
1337 strlcpy(buf, "[Type CUSTOM] ", sizeof(buf));
1338 break;
1339 case F_T_INT:
1340 strlcpy(buf, "[Type INT] ", sizeof(buf));
1341 break;
1342 case F_T_UINT:
1343 strlcpy(buf, "[Type UINT] ", sizeof(buf));
1344 break;
1345 case F_T_BOOL:
1346 strlcpy(buf, "[Type BOOL] ", sizeof(buf));
1347 break;
1348 case F_T_CHARPTR:
1349 strlcpy(buf, "[Type CHARPTR] ", sizeof(buf));
1350 break;
1351 case F_T_UCHARPTR:
1352 strlcpy(buf, "[Type UCHARPTR] ", sizeof(buf));
1353 break;
1354 }
1355
1356#define SETTINGFLAGS(n) \
1357 if(flags & n) { \
1358 flags &= ~n; \
1359 strlcat(buf, "["#n"]", sizeof(buf));}
1360
1361 SETTINGFLAGS(F_T_SOUND);
1362 SETTINGFLAGS(F_BOOL_SETTING);
1363 SETTINGFLAGS(F_RGB);
1364 SETTINGFLAGS(F_FILENAME);
1365 SETTINGFLAGS(F_INT_SETTING);
1366 SETTINGFLAGS(F_CHOICE_SETTING);
1367 SETTINGFLAGS(F_CHOICETALKS);
1368 SETTINGFLAGS(F_TABLE_SETTING);
1369 SETTINGFLAGS(F_ALLOW_ARBITRARY_VALS);
1370 SETTINGFLAGS(F_CB_ON_SELECT_ONLY);
1371 SETTINGFLAGS(F_MIN_ISFUNC);
1372 SETTINGFLAGS(F_MAX_ISFUNC);
1373 SETTINGFLAGS(F_DEF_ISFUNC);
1374 SETTINGFLAGS(F_CUSTOM_SETTING);
1375 SETTINGFLAGS(F_TIME_SETTING);
1376 SETTINGFLAGS(F_THEMESETTING);
1377 SETTINGFLAGS(F_RECSETTING);
1378 SETTINGFLAGS(F_EQSETTING);
1379 SETTINGFLAGS(F_SOUNDSETTING);
1380 SETTINGFLAGS(F_TEMPVAR);
1381 SETTINGFLAGS(F_PADTITLE);
1382 SETTINGFLAGS(F_NO_WRAP);
1383 SETTINGFLAGS(F_BANFROMQS);
1384 SETTINGFLAGS(F_DEPRECATED);
1385#undef SETTINGFLAGS
1386
1387 if (flags & F_NVRAM_BYTES_MASK)
1388 {
1389 flags &= ~F_NVRAM_BYTES_MASK;
1390 strlcat(buf, "[NVRAM]", sizeof(buf));
1391 }
1392 /* anything left is unknown */
1393 if (flags)
1394 {
1395 strlcat(buf, "[UNKNOWN FLAGS]", sizeof(buf));
1396 size_t len = strlen(buf);
1397 if (len < sizeof(buf))
1398 snprintf(buf + len, sizeof(buf) - len - 1, "[%x]", flags);
1399 }
1400 return buf;
1401}
1402#endif
1403static void debug_available_settings(void)
1404{
1405#if defined(DEBUG_AVAIL_SETTINGS) && defined(LOGF_ENABLE)
1406 logf("\r\nAvailable Settings:");
1407 for (int i=0; i<nb_settings; i++)
1408 {
1409 uint32_t flags = settings[i].flags;
1410 const char *name;
1411 if (settings[i].cfg_name)
1412 name = settings[i].cfg_name;
1413 else if (settings[i].RESERVED == NULL)
1414 {
1415 name = "SYS (NVRAM?)";
1416 if (flags & F_NVRAM_BYTES_MASK)
1417 {
1418 flags &= ~F_NVRAM_BYTES_MASK;
1419 flags |= 0x80000; /* unused by other flags */
1420 }
1421 }
1422 else
1423 {
1424 name = "?? UNKNOWN NAME ?? ";
1425 }
1426 logf("'%s' flags: %s",name, debug_get_flags(flags));
1427 }
1428 logf("End Available Settings\r\n");
1429#endif
1430}