projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Make ao_gps_print deal with telem containing 32-bit altitude values
[fw/altos]
/
src
/
kernel
/
ao_log.c
diff --git
a/src/kernel/ao_log.c
b/src/kernel/ao_log.c
index 20febefe27f2df4693ad4cd02b6f31b96aaa20ea..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;
@@
-38,13
+42,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
+68,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
+100,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
+161,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
+221,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
@@
-225,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)
@@
-235,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;
@@
-248,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;
}
@@
-284,7
+320,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