summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-12-12 11:01:48 -0800
committerKeith Packard <keithp@keithp.com>2012-12-12 11:03:20 -0800
commita4678cd848da994dc893b75790e4c9a86e54d895 (patch)
treeb87c6dccd60589de1afcaea357b10396a9497548
parent07a45c50429389ae7b51e12bc847d34fb1577bc6 (diff)
altos: Log in-flight data for MicroPeak
This logs the low 16 bits of the pressure value to the remaining on-chip eeprom. It can be read out with a standard AVR programming dongle. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/micropeak/ao_micropeak.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/micropeak/ao_micropeak.c b/src/micropeak/ao_micropeak.c
index 8ae26ec1..525cfa42 100644
--- a/src/micropeak/ao_micropeak.c
+++ b/src/micropeak/ao_micropeak.c
@@ -65,18 +65,40 @@ ao_compute_height(void)
}
#if !HAS_EEPROM
+
+#define PA_GROUND_OFFSET 0
+#define PA_MIN_OFFSET 4
+#define N_SAMPLES_OFFSET 8
+#define STARTING_LOG_OFFSET 10
+#define MAX_LOG_OFFSET 512
+
+static uint16_t ao_log_offset = STARTING_LOG_OFFSET;
+
void
ao_save_flight(void)
{
- ao_eeprom_write(0, &pa_ground, sizeof (pa_ground));
- ao_eeprom_write(sizeof (pa_ground), &pa_min, sizeof (pa_min));
+ uint16_t n_samples = (ao_log_offset - STARTING_LOG_OFFSET) / sizeof (uint16_t);
+ ao_eeprom_write(PA_GROUND_OFFSET, &pa_ground, sizeof (pa_ground));
+ ao_eeprom_write(PA_MIN_OFFSET, &pa_min, sizeof (pa_min));
+ ao_eeprom_write(N_SAMPLES_OFFSET, &n_samples, sizeof (n_samples));
}
void
ao_restore_flight(void)
{
- ao_eeprom_read(0, &pa_ground, sizeof (pa_ground));
- ao_eeprom_read(sizeof (pa_ground), &pa_min, sizeof (pa_min));
+ ao_eeprom_read(PA_GROUND_OFFSET, &pa_ground, sizeof (pa_ground));
+ ao_eeprom_read(PA_MIN_OFFSET, &pa_min, sizeof (pa_min));
+}
+
+void
+ao_log_micro(void)
+{
+ uint16_t low_bits = pa;
+
+ if (ao_log_offset < MAX_LOG_OFFSET) {
+ ao_eeprom_write(ao_log_offset, &low_bits, sizeof (low_bits));
+ ao_log_offset += sizeof (low_bits);
+ }
}
#endif
@@ -180,6 +202,9 @@ main(void)
ao_led_off(AO_LED_REPORT);
#if HAS_EEPROM
ao_log_micro_data(AO_LOG_MICRO_DATA | pa);
+#else
+ if (sample_count & 1)
+ ao_log_micro();
#endif
pa_avg = pa_avg - (pa_avg >> FILTER_SHIFT) + pa;
if (pa_avg < pa_min)