summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-06-07 10:54:14 -0700
committerKeith Packard <keithp@keithp.com>2014-06-07 10:54:14 -0700
commit5d973570ef2324b21a64477eecb0a292652ff467 (patch)
treeec6c6688035b095eb21e412d9bcdf02558d7812f
parent1d6ca536c688d35b3cba0a829b04b93c5124b328 (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>
-rw-r--r--src/kernel/ao_log.c12
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();
}