projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altosuilib: Skip voice announcements for invalid values
[fw/altos]
/
src
/
kernel
/
ao_log.c
diff --git
a/src/kernel/ao_log.c
b/src/kernel/ao_log.c
index 20febefe27f2df4693ad4cd02b6f31b96aaa20ea..3cf85a334f704b00375d6adac45410c972645642 100644
(file)
--- a/
src/kernel/ao_log.c
+++ b/
src/kernel/ao_log.c
@@
-38,13
+38,22
@@
ao_log_flush(void)
*/
struct ao_log_erase {
*/
struct ao_log_erase {
- uint8_t
unused
;
+ uint8_t
mark
;
uint16_t flight;
};
static __xdata struct ao_log_erase erase;
uint16_t flight;
};
static __xdata struct ao_log_erase erase;
+#ifndef LOG_MAX_ERASE
#define LOG_MAX_ERASE 16
#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)
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)
{
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));
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();
}
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);
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;
return;
- if (erase.
unused == 0xff
) {
+ if (erase.
mark != LOG_ERASE_MARK
) {
ao_log_write_erase(i);
return;
}
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);
*/
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;
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;
}
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
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
#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
/* Create a task to log events to eeprom */
ao_add_task(&ao_log_task, ao_log, "log");
#endif