projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Simplify storage API
[fw/altos]
/
src
/
ao_log.c
diff --git
a/src/ao_log.c
b/src/ao_log.c
index d550d40850cde2a8eef8b71c8d4828f7ea49306c..30acc50a02eab5652e970b42df6a62aace5cf7ed 100644
(file)
--- a/
src/ao_log.c
+++ b/
src/ao_log.c
@@
-18,6
+18,7
@@
#include "ao.h"
static __pdata uint32_t ao_log_current_pos;
#include "ao.h"
static __pdata uint32_t ao_log_current_pos;
+static __pdata uint32_t ao_log_end_pos;
static __pdata uint32_t ao_log_start_pos;
static __xdata uint8_t ao_log_running;
static __xdata uint8_t ao_log_mutex;
static __pdata uint32_t ao_log_start_pos;
static __xdata uint8_t ao_log_running;
static __xdata uint8_t ao_log_mutex;
@@
-33,30
+34,31
@@
ao_log_csum(__xdata uint8_t *b) __reentrant
return -sum;
}
return -sum;
}
-void
+uint8_t
ao_log_data(__xdata struct ao_log_record *log) __reentrant
{
ao_log_data(__xdata struct ao_log_record *log) __reentrant
{
+ uint8_t wrote = 0;
/* set checksum */
log->csum = 0;
log->csum = ao_log_csum((__xdata uint8_t *) log);
ao_mutex_get(&ao_log_mutex); {
/* set checksum */
log->csum = 0;
log->csum = ao_log_csum((__xdata uint8_t *) log);
ao_mutex_get(&ao_log_mutex); {
+ if (ao_log_current_pos >= ao_log_end_pos)
+ ao_log_running = 0;
if (ao_log_running) {
if (ao_log_running) {
- ao_ee_write(ao_log_current_pos,
- (uint8_t *) log,
- sizeof (struct ao_log_record));
+ wrote = 1;
+ ao_storage_write(ao_log_current_pos,
+ log,
+ sizeof (struct ao_log_record));
ao_log_current_pos += sizeof (struct ao_log_record);
ao_log_current_pos += sizeof (struct ao_log_record);
- if (ao_log_current_pos >= AO_EE_DATA_SIZE)
- ao_log_current_pos = 0;
- if (ao_log_current_pos == ao_log_start_pos)
- ao_log_running = 0;
}
} ao_mutex_put(&ao_log_mutex);
}
} ao_mutex_put(&ao_log_mutex);
+ return wrote;
}
void
ao_log_flush(void)
{
}
void
ao_log_flush(void)
{
- ao_
e
e_flush();
+ ao_
storag
e_flush();
}
__xdata struct ao_log_record log;
}
__xdata struct ao_log_record log;
@@
-73,7
+75,7
@@
ao_log_dump_check_data(void)
static void
ao_log_scan(void)
{
static void
ao_log_scan(void)
{
- if (!ao_
ee_read(0, (uint8_t *)
&log, sizeof (struct ao_log_record)))
+ if (!ao_
storage_read(0,
&log, sizeof (struct ao_log_record)))
ao_panic(AO_PANIC_LOG);
if (ao_log_dump_check_data() && log.type == AO_LOG_FLIGHT) {
ao_flight_number = log.u.flight.flight + 1;
ao_panic(AO_PANIC_LOG);
if (ao_log_dump_check_data() && log.type == AO_LOG_FLIGHT) {
ao_flight_number = log.u.flight.flight + 1;
@@
-94,6
+96,12
@@
typedef uint8_t check_log_size[1-(256 % sizeof(struct ao_log_record))] ;
void
ao_log(void)
{
void
ao_log(void)
{
+ ao_storage_setup();
+
+ /* For now, use all of the available space */
+ ao_log_current_pos = 0;
+ ao_log_end_pos = ao_storage_config;
+
ao_log_scan();
while (!ao_log_running)
ao_log_scan();
while (!ao_log_running)
@@
-176,8
+184,6
@@
ao_log_init(void)
ao_log_running = 0;
/* For now, just log the flight starting at the begining of eeprom */
ao_log_running = 0;
/* For now, just log the flight starting at the begining of eeprom */
- ao_log_start_pos = 0;
- ao_log_current_pos = ao_log_start_pos;
ao_log_state = ao_flight_invalid;
/* Create a task to log events to eeprom */
ao_log_state = ao_flight_invalid;
/* Create a task to log events to eeprom */