Browse Source

sysvar: fix a few broken pointers; don't reset status; add debug

Fix a few broken pointers in the sysvar implementation.
Don't reset the status information when loading a configuration.
Add some (optional) debug output to the sysvar system.
H. Peter Anvin 1 year ago
parent
commit
aae59a22f3

+ 1 - 1
esp32/max80/config.c

@@ -172,7 +172,7 @@ void init_config(void)
 		   spiffs_conf.base_path, err);
     }
 
-    sysvar_reset();
+    sysvar_reset(sysvar_ns_config);
 
     FILE *f = fopen(CONFIG_FILE, "r");
     if (!f)

+ 2 - 0
esp32/max80/max80.ino

@@ -102,6 +102,8 @@ void setup() {
     TTY::init();
     heap_info();
 
+    sysvar_init();
+
     printf("[FW]   MAX80 firmware compiled on %s\n", fwdate);
     printf("[PCB]  MAX80 board version: %s\n", board_info.version_str);
     setvar_str(status_max80_hw_ver, board_info.version_str);

+ 36 - 5
esp32/max80/sysvars.c

@@ -1,3 +1,4 @@
+#include "common.h"
 #include "sysvars.h"
 
 #include <stdlib.h>
@@ -5,6 +6,12 @@
 #include <stdio.h>
 #include <time.h>
 
+#define DEBUG 1
+
+#ifndef DEBUG
+# define DEBUG 0
+#endif
+
 static const char *sysvar_bool_tostr(sysvar_t from, char *buf)
 {
     buf[0] = '0' + from.v_bool;
@@ -266,6 +273,13 @@ static bool do_setvar(size_t var, sysvar_t val, bool is_set)
     if (type->datasize)
 	free_ptr = to->v_ptr;
 
+    if (DEBUG) {
+	char tostr_buf[SYSVAR_BUFLEN];
+	printf("%ssetvar %zu %s <- %s\n", is_set ? "" : "un",
+	       var, sysvar_name[var],
+	       notempty(type->tostr(val, tostr_buf)));
+    }
+
     if (!type->set || (type->datasize && !val.v_ptr)) {
 	sysvar_val[var] = val;
     } else {
@@ -336,6 +350,10 @@ bool setvar_fromstr(size_t var, const char *str)
     if (type->datasize)
 	free_ptr = to->v_ptr;
 
+    if (DEBUG) {
+	printf("setvar_fromstr %zu %s <- %s\n", var, sysvar_name[var], str);
+    }
+
     /* A fromstr method is required */
     if (!type->fromstr(to, str))
 	return false;
@@ -368,8 +386,8 @@ size_t sysvar_find(size_t ns, const char *name)
     const char * const *varname;
     const size_t count = nsi[1].first - nsi->first;
 
-    varname = bsearch(name, sysvar_name + nsi->first,
-		      count, sizeof(const char *),
+    varname = bsearch(&name, sysvar_name + nsi->first,
+		      count, sizeof *sysvar_name,
 		      string_ptr_compare);
     if (!varname)
 	return 0;
@@ -379,10 +397,23 @@ size_t sysvar_find(size_t ns, const char *name)
 
 /* --- Initialization/reset to defaults --- */
 
-void sysvar_reset(void)
+void sysvar_reset(size_t ns)
+{
+    if (ns >= (size_t)sysvar_nscount)
+	return;
+
+    enum sysvar_enum i;
+    for (i = sysvar_ns[ns].first; i < sysvar_ns[ns+1].first; i++)
+	unsetvar(i);
+
+    if (sysvar_changed < i)
+	sysvar_changed = i;
+}
+
+void sysvar_init(void)
 {
-    for (enum sysvar_enum i = sysvar_null; i < sysvar_count; i++)
+    for (enum sysvar_enum i = sysvar_null+1; i < sysvar_count; i++)
 	unsetvar(i);
 
-    sysvar_changed = sysvar_null;
+    sysvar_changed = sysvar_count;
 }

+ 2 - 1
esp32/max80/sysvars.h

@@ -72,7 +72,8 @@ extern_c bool unsetvar(size_t var);
 extern_c const char *getvar_tostr(size_t var);
 extern_c const char *getvar_tostr_r(size_t var, char *buf);
 extern_c bool setvar_fromstr(size_t var, const char *str);
-extern_c void sysvar_reset(void);
+extern_c void sysvar_init(void);
+extern_c void sysvar_reset(size_t ns);
 extern_c size_t sysvar_find(size_t ns, const char *name);
 extern_c size_t sysvar_marshall(enum sysvar_enum first, size_t count,
 				void *buf, size_t *buflen, uintptr_t extaddr);

BIN
esp32/output/max80.ino.bin


+ 3 - 3
fpga/max80.qpf

@@ -19,15 +19,15 @@
 #
 # Quartus Prime
 # Version 22.1std.0 Build 915 10/25/2022 SC Lite Edition
-# Date created = 22:49:04  August 30, 2023
+# Date created = 13:58:18  September 05, 2023
 #
 # -------------------------------------------------------------------------- #
 
 QUARTUS_VERSION = "22.1"
-DATE = "22:49:04  August 30, 2023"
+DATE = "13:58:18  September 05, 2023"
 
 # Revisions
 
-PROJECT_REVISION = "v2"
 PROJECT_REVISION = "v1"
+PROJECT_REVISION = "v2"
 PROJECT_REVISION = "bypass"

BIN
fpga/output/bypass.jic


BIN
fpga/output/bypass.rbf.gz


BIN
fpga/output/bypass.rpd.gz


BIN
fpga/output/bypass.svf.gz


BIN
fpga/output/bypass.xsvf.gz


BIN
fpga/output/max80.fw


BIN
fpga/output/v1.fw


BIN
fpga/output/v1.jic


BIN
fpga/output/v1.rbf.gz


BIN
fpga/output/v1.rpd.gz


BIN
fpga/output/v1.sof


BIN
fpga/output/v1.svf.gz


BIN
fpga/output/v1.xsvf.gz


BIN
fpga/output/v2.fw


BIN
fpga/output/v2.jic


BIN
fpga/output/v2.rbf.gz


BIN
fpga/output/v2.rpd.gz


BIN
fpga/output/v2.sof


BIN
fpga/output/v2.svf.gz


BIN
fpga/output/v2.xsvf.gz


+ 1 - 1
rv32/checksum.h

@@ -1,4 +1,4 @@
 #ifndef CHECKSUM_H
 #define CHECKSUM_H
-#define SDRAM_SUM 0x8751cf2a
+#define SDRAM_SUM 0x674c2aeb
 #endif