summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-05-22 13:03:06 -0700
committerKeith Packard <keithp@keithp.com>2013-08-25 22:24:00 -0700
commitd0b4e926ecececa7499a301b6135189be119512e (patch)
treea2c8a67bf1528745a25acfc202d238e7b3242e49 /src/core
parent3ded57394f6dfd7beb9526c031a5c6c6c9926917 (diff)
Initial TeleMini bits
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ao_data.c2
-rw-r--r--src/core/ao_data.h2
-rw-r--r--src/core/ao_log_mini.c1
-rw-r--r--src/core/ao_telemetry.c40
-rw-r--r--src/core/ao_telemetry.h27
5 files changed, 67 insertions, 5 deletions
diff --git a/src/core/ao_data.c b/src/core/ao_data.c
index 38d2f7ff..6a3d02a1 100644
--- a/src/core/ao_data.c
+++ b/src/core/ao_data.c
@@ -22,6 +22,7 @@ volatile __xdata struct ao_data ao_data_ring[AO_DATA_RING];
volatile __data uint8_t ao_data_head;
volatile __data uint8_t ao_data_present;
+#ifndef ao_data_count
void
ao_data_get(__xdata struct ao_data *packet)
{
@@ -32,3 +33,4 @@ ao_data_get(__xdata struct ao_data *packet)
#endif
memcpy(packet, (void *) &ao_data_ring[i], sizeof (struct ao_data));
}
+#endif
diff --git a/src/core/ao_data.h b/src/core/ao_data.h
index b0f086f8..080a534f 100644
--- a/src/core/ao_data.h
+++ b/src/core/ao_data.h
@@ -101,7 +101,7 @@ extern volatile __data uint8_t ao_data_count;
* signaled by the timer tick
*/
#define AO_DATA_WAIT() do { \
- ao_sleep((void *) &ao_data_count); \
+ ao_sleep(DATA_TO_XDATA ((void *) &ao_data_count)); \
} while (0)
#endif /* AO_DATA_RING */
diff --git a/src/core/ao_log_mini.c b/src/core/ao_log_mini.c
index 1273b0e3..46b285f3 100644
--- a/src/core/ao_log_mini.c
+++ b/src/core/ao_log_mini.c
@@ -79,7 +79,6 @@ void
ao_log(void)
{
__pdata uint16_t next_sensor, next_other;
- uint8_t i;
ao_storage_setup();
diff --git a/src/core/ao_telemetry.c b/src/core/ao_telemetry.c
index 03a8a273..9c673030 100644
--- a/src/core/ao_telemetry.c
+++ b/src/core/ao_telemetry.c
@@ -171,6 +171,36 @@ ao_send_mega_data(void)
}
#endif /* AO_SEND_MEGA */
+#ifdef AO_SEND_MINI
+
+static void
+ao_send_mini(void)
+{
+ __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)];
+
+ telemetry.generic.tick = packet->tick;
+ telemetry.generic.type = AO_TELEMETRY_MINI;
+
+ telemetry.mini.state = ao_flight_state;
+
+ telemetry.mini.v_batt = packet->adc.v_batt;
+ telemetry.mini.sense_a = packet->adc.sense_a;
+ telemetry.mini.sense_m = packet->adc.sense_m;
+
+ telemetry.mini.pres = ao_data_pres(packet);
+ telemetry.mini.temp = ao_data_temp(packet);
+
+ telemetry.mini.acceleration = ao_accel;
+ telemetry.mini.speed = ao_speed;
+ telemetry.mini.height = ao_height;
+
+ telemetry.mini.ground_pres = ao_ground_pres;
+
+ ao_radio_send(&telemetry, sizeof (telemetry));
+}
+
+#endif
+
#ifdef AO_SEND_ALL_BARO
static uint8_t ao_baro_sample;
@@ -323,12 +353,16 @@ ao_telemetry(void)
ao_send_baro();
#endif
#if HAS_FLIGHT
-#ifdef AO_SEND_MEGA
+# ifdef AO_SEND_MEGA
ao_send_mega_sensor();
ao_send_mega_data();
-#else
+# else
+# ifdef AO_SEND_MINI
+ ao_send_mini();
+# else
ao_send_sensor();
-#endif
+# endif
+# endif
#endif
#if HAS_COMPANION
diff --git a/src/core/ao_telemetry.h b/src/core/ao_telemetry.h
index f2d201de..77601529 100644
--- a/src/core/ao_telemetry.h
+++ b/src/core/ao_telemetry.h
@@ -207,6 +207,32 @@ struct ao_telemetry_mega_data {
};
+#define AO_TELEMETRY_MINI 0x10
+
+struct ao_telemetry_mini {
+ uint16_t serial; /* 0 */
+ uint16_t tick; /* 2 */
+ uint8_t type; /* 4 */
+
+ uint8_t state; /* 5 flight state */
+
+ int16_t v_batt; /* 6 battery voltage */
+ int16_t sense_a; /* 8 apogee continuity */
+ int16_t sense_m; /* 10 main continuity */
+
+ int32_t pres; /* 12 Pa * 10 */
+ int16_t temp; /* 16 °C * 100 */
+
+ int16_t acceleration; /* 18 m/s² * 16 */
+ int16_t speed; /* 20 m/s * 16 */
+ int16_t height; /* 22 m */
+
+ int32_t ground_pres; /* 24 average pres on pad */
+
+ int32_t pad28; /* 28 */
+ /* 32 */
+};
+
/* #define AO_SEND_ALL_BARO */
#define AO_TELEMETRY_BARO 0x80
@@ -240,6 +266,7 @@ union ao_telemetry_all {
struct ao_telemetry_companion companion;
struct ao_telemetry_mega_sensor mega_sensor;
struct ao_telemetry_mega_data mega_data;
+ struct ao_telemetry_mini mini;
struct ao_telemetry_baro baro;
};