diff options
Diffstat (limited to 'avr/env.c')
-rw-r--r-- | avr/env.c | 58 |
1 files changed, 44 insertions, 14 deletions
@@ -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; } |