projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altoslib: Handle wide GPS altitude values in eeprom and telemetry
[fw/altos]
/
src
/
kernel
/
ao_log.c
diff --git
a/src/kernel/ao_log.c
b/src/kernel/ao_log.c
index 76e0e68c56c89a3286a5f53500210f709b4ef497..91617d93531842dfe50b8469d0304817c254eb04 100644
(file)
--- a/
src/kernel/ao_log.c
+++ b/
src/kernel/ao_log.c
@@
-18,7
+18,11
@@
#include "ao.h"
#include <ao_log.h>
#include <ao_config.h>
#include "ao.h"
#include <ao_log.h>
#include <ao_config.h>
+#if HAS_TRACKER
+#include <ao_tracker.h>
+#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;
__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));
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();
}
ao_config_flush();
}
@@
-238,6
+254,7
@@
ao_log_delete(void) __reentrant
{
uint8_t slot;
uint8_t slots;
{
uint8_t slot;
uint8_t slots;
+ uint32_t log_current_pos, log_end_pos;
ao_cmd_decimal();
if (ao_cmd_status != ao_cmd_success)
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 (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_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;
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++) {
* 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;
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;
}
puts("Erased");
return;
}