X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_log.c;h=3cf85a334f704b00375d6adac45410c972645642;hb=9ef32b103c5c312aaa90b6546e504f2edeb1f99a;hp=20febefe27f2df4693ad4cd02b6f31b96aaa20ea;hpb=24167015705ae831692b95735968b04a876f935e;p=fw%2Faltos diff --git a/src/kernel/ao_log.c b/src/kernel/ao_log.c index 20febefe..3cf85a33 100644 --- a/src/kernel/ao_log.c +++ b/src/kernel/ao_log.c @@ -38,13 +38,22 @@ ao_log_flush(void) */ struct ao_log_erase { - uint8_t unused; + uint8_t mark; uint16_t flight; }; static __xdata struct ao_log_erase erase; +#ifndef LOG_MAX_ERASE #define LOG_MAX_ERASE 16 +#endif + +#ifndef LOG_ERASE_MARK +#if USE_EEPROM_CONFIG +#error "Must define LOG_ERASE_MARK with USE_EEPROM_CONFIG" +#endif +#define LOG_ERASE_MARK 0x00 +#endif static uint32_t ao_log_erase_pos(uint8_t i) @@ -55,9 +64,21 @@ ao_log_erase_pos(uint8_t i) void ao_log_write_erase(uint8_t pos) { - erase.unused = 0x00; + 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(); } @@ -75,9 +96,9 @@ ao_log_erase_mark(void) for (i = 0; i < LOG_MAX_ERASE; i++) { ao_log_read_erase(i); - if (erase.unused == 0 && erase.flight == ao_flight_number) + if (erase.mark == LOG_ERASE_MARK && erase.flight == ao_flight_number) return; - if (erase.unused == 0xff) { + if (erase.mark != LOG_ERASE_MARK) { ao_log_write_erase(i); return; } @@ -136,7 +157,7 @@ ao_log_scan(void) __reentrant */ for (log_slot = LOG_MAX_ERASE; log_slot-- > 0;) { ao_log_read_erase(log_slot); - if (erase.unused == 0) { + if (erase.mark == LOG_ERASE_MARK) { if (ao_flight_number == 0 || (int16_t) (erase.flight - ao_flight_number) > 0) ao_flight_number = erase.flight; @@ -196,7 +217,11 @@ ao_log_full(void) return ao_log_current_pos == ao_log_end_pos; } -#if HAS_ADC +#ifndef LOG_ADC +#define LOG_ADC HAS_ADC +#endif + +#if LOG_ADC static __xdata struct ao_task ao_log_task; #endif @@ -284,7 +309,7 @@ ao_log_init(void) #ifndef HAS_ADC #error Define HAS_ADC for ao_log.c #endif -#if HAS_ADC +#if LOG_ADC /* Create a task to log events to eeprom */ ao_add_task(&ao_log_task, ao_log, "log"); #endif