X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_log.c;h=91617d93531842dfe50b8469d0304817c254eb04;hb=ed2a08c50d6b8ebcc8c1d2f15e73c1f2a1e25041;hp=76e0e68c56c89a3286a5f53500210f709b4ef497;hpb=1d6ca536c688d35b3cba0a829b04b93c5124b328;p=fw%2Faltos diff --git a/src/kernel/ao_log.c b/src/kernel/ao_log.c index 76e0e68c..91617d93 100644 --- a/src/kernel/ao_log.c +++ b/src/kernel/ao_log.c @@ -18,7 +18,11 @@ #include "ao.h" #include #include +#if HAS_TRACKER +#include +#endif +__xdata uint8_t ao_log_mutex; __pdata uint32_t ao_log_current_pos; __pdata uint32_t ao_log_end_pos; __pdata uint32_t ao_log_start_pos; @@ -67,6 +71,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(); } @@ -238,6 +254,7 @@ ao_log_delete(void) __reentrant { uint8_t slot; uint8_t slots; + uint32_t log_current_pos, log_end_pos; ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) @@ -248,10 +265,13 @@ ao_log_delete(void) __reentrant if (ao_cmd_lex_i) { for (slot = 0; slot < slots; slot++) { if (ao_log_flight(slot) == ao_cmd_lex_i) { +#if HAS_TRACKER + ao_tracker_erase_start(ao_cmd_lex_i); +#endif ao_log_erase_mark(); - ao_log_current_pos = ao_log_pos(slot); - ao_log_end_pos = ao_log_current_pos + ao_config.flight_log_max; - while (ao_log_current_pos < ao_log_end_pos) { + log_current_pos = ao_log_pos(slot); + log_end_pos = log_current_pos + ao_config.flight_log_max; + while (log_current_pos < log_end_pos) { uint8_t i; static __xdata uint8_t b; @@ -261,15 +281,18 @@ ao_log_delete(void) __reentrant * memory over and over again */ for (i = 0; i < 16; i++) { - if (ao_storage_read(ao_log_current_pos + i, &b, 1)) + if (ao_storage_read(log_current_pos + i, &b, 1)) if (b != 0xff) break; } if (i == 16) break; - ao_storage_erase(ao_log_current_pos); - ao_log_current_pos += ao_storage_block; + ao_storage_erase(log_current_pos); + log_current_pos += ao_storage_block; } +#if HAS_TRACKER + ao_tracker_erase_end(); +#endif puts("Erased"); return; }