diff options
author | Keith Packard <keithp@keithp.com> | 2014-06-07 10:54:14 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-06-07 10:54:14 -0700 |
commit | 5d973570ef2324b21a64477eecb0a292652ff467 (patch) | |
tree | ec6c6688035b095eb21e412d9bcdf02558d7812f /src | |
parent | 1d6ca536c688d35b3cba0a829b04b93c5124b328 (diff) |
altos: Clear out eeprom erase records when writing entry 0
When writing config/erase to eeprom, there's no 'erase' operation as
on-chip eeprom is writable at a byte level. As such, we can't tell
when the erase blocks get reset when the config gets written. When
this happens, erase block 0 gets written explicitly, so just use that
call to trigger explicit erasing of the data.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/kernel/ao_log.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/kernel/ao_log.c b/src/kernel/ao_log.c index 76e0e68c..3cf85a33 100644 --- a/src/kernel/ao_log.c +++ b/src/kernel/ao_log.c @@ -67,6 +67,18 @@ ao_log_write_erase(uint8_t pos) erase.mark = LOG_ERASE_MARK; erase.flight = ao_flight_number; ao_config_write(ao_log_erase_pos(pos), &erase, sizeof (erase)); + +#if USE_EEPROM_CONFIG + if (pos == 0) { + uint8_t i; + for (i = 1; i < LOG_MAX_ERASE; i++) { + erase.mark = ~LOG_ERASE_MARK; + erase.flight = 0; + ao_config_write(ao_log_erase_pos(i), &erase, sizeof (erase)); + } + } +#endif + ao_config_flush(); } |