summaryrefslogtreecommitdiff
path: root/avr/env.c
diff options
context:
space:
mode:
Diffstat (limited to 'avr/env.c')
-rw-r--r--avr/env.c58
1 files changed, 44 insertions, 14 deletions
diff --git a/avr/env.c b/avr/env.c
index 3488afc..48413f3 100644
--- a/avr/env.c
+++ b/avr/env.c
@@ -15,13 +15,24 @@
#define DELIM "\0"
-#define ENV_SIZE CONFIG_ENV_SIZE-2
#define ENV_GET_VAL (1<<0)
/*
+ * Default Environment
+ */
+const FLASH char default_env[] = {
+ "bootdelay=" "3" DELIM
+ "bootcmd=" "reset; loadf; go $(startaddr)" DELIM
+ "baudrate=" "115200" DELIM
+ "startaddr=" "0" DELIM
+ DELIM
+};
+
+
+/*
* Debugging
*
* TODO: move elsewhere
@@ -97,15 +108,7 @@ void dump_eep(const uint8_t *addr, int len)
putchar('\n');
}
-
-const FLASH char default_env[] = {
- "bootdelay=" "3" DELIM
- "bootcmd=" "echo hallo" DELIM
- "baudrate=" "115200" DELIM
- DELIM
-};
-
-
+#define ENV_SIZE CONFIG_ENV_SIZE-2
typedef struct environment_s {
uint16_t crc; /* CRC16 over data bytes */
char data[ENV_SIZE]; /* Environment data */
@@ -470,7 +473,7 @@ int set_default_env(void)
char buf[64];
uint16_t crc = 0xffff;
uint16_t eep = CONFIG_ENV_OFFSET + offsetof(env_t, data);
- unsigned int len = CONFIG_ENV_SIZE - offsetof(env_t, data);
+ unsigned int len = ENV_SIZE;
unsigned int i, src = 0;
char c = 0xff, c0 = c;
#if 0
@@ -502,6 +505,10 @@ printf_P(PSTR("\n\n** set_default_env()\n"));
src += sizeof(buf);
eep += sizeof(buf);
}
+
+ eeprom_update_word(
+ (uint16_t *) CONFIG_ENV_OFFSET + offsetof(env_t, crc),
+ crc);
#if 0
dump_eep(0, 128);
#endif
@@ -524,14 +531,15 @@ int env_check(void)
crc = 0xffff;
c = 0xff;
for (i = offsetof(env_t, data);
- !(c == 0 && c0 == 0) && i < CONFIG_ENV_SIZE;
+ !(c == 0 && c0 == 0) && i < ENV_SIZE;
i++)
{
c0 = c;
c = eeprom_read_byte((const uint8_t *) CONFIG_ENV_OFFSET + i);
crc = crc16(crc, c);
}
- debug("** crc eep: 0x%.4x, crc new: 0x%.4x\n", stored_crc, crc);
+ debug_cond((crc != stored_crc),
+ "** crc eep: 0x%.4x, crc new: 0x%.4x\n", stored_crc, crc);
return crc == stored_crc;
}
@@ -591,7 +599,28 @@ static int env_print(char *name)
return len;
}
-
+int env_print_ramsize(void)
+{
+ int size = 0;
+ uint8_t name_cnt = 0;
+ uint8_t val_cnt = 0;
+
+ for (int i = 0 ; i < entrycount; i++) {
+ if ((env_list[i].flags & EF_N_EEP) == 0 &&
+ (env_list[i].name.ram != NULL)) {
+ name_cnt++;
+ size += strlen(env_list[i].name.ram) + 3;
+ }
+ if ((env_list[i].flags & EF_V_EEP) == 0 &&
+ (env_list[i].val.ram != NULL)) {
+ val_cnt++;
+ size += strlen(env_list[i].val.ram) + 3;
+ }
+ }
+ printf_P(PSTR("%d bytes RAM used for %u names and %u values\n"),
+ size, name_cnt, val_cnt);
+ return size;
+}
int do_env_print(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
@@ -608,6 +637,7 @@ int do_env_print(cmd_tbl_t *cmdtp, int flag, int argc,
return 1;
printf_P(PSTR("\nEnvironment size: %d/%d bytes\n"),
rcode, ENV_SIZE);
+ env_print_ramsize();
return 0;
}