summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ao.h2
-rw-r--r--src/core/ao_log_telem.c10
-rw-r--r--src/core/ao_report.c18
3 files changed, 23 insertions, 7 deletions
diff --git a/src/core/ao.h b/src/core/ao.h
index f2e40fc6..a541d8ac 100644
--- a/src/core/ao.h
+++ b/src/core/ao.h
@@ -1436,6 +1436,8 @@ extern __xdata struct ao_ignition ao_ignition[2];
enum ao_igniter_status
ao_igniter_status(enum ao_igniter igniter);
+extern __pdata uint8_t ao_igniter_present;
+
void
ao_ignite_set_pins(void);
diff --git a/src/core/ao_log_telem.c b/src/core/ao_log_telem.c
index 193c11f3..096ad919 100644
--- a/src/core/ao_log_telem.c
+++ b/src/core/ao_log_telem.c
@@ -23,6 +23,7 @@ static __data uint8_t ao_log_monitor_pos;
__pdata enum ao_flight_state ao_flight_state;
__pdata int16_t ao_max_height; /* max of ao_height */
__pdata int16_t sense_d, sense_m;
+__pdata uint8_t ao_igniter_present;
static void
ao_log_telem_track() {
@@ -30,10 +31,15 @@ ao_log_telem_track() {
switch (ao_log_single_write_data.telemetry.generic.type) {
case AO_TELEMETRY_SENSOR_TELEMETRUM:
case AO_TELEMETRY_SENSOR_TELEMINI:
- sense_d = ao_log_single_write_data.telemetry.sensor.sense_d;
- sense_m = ao_log_single_write_data.telemetry.sensor.sense_m;
/* fall through ... */
case AO_TELEMETRY_SENSOR_TELENANO:
+ if (ao_log_single_write_data.telemetry.generic.type == AO_TELEMETRY_SENSOR_TELENANO) {
+ ao_igniter_present = 0;
+ } else {
+ sense_d = ao_log_single_write_data.telemetry.sensor.sense_d;
+ sense_m = ao_log_single_write_data.telemetry.sensor.sense_m;
+ ao_igniter_present = 1;
+ }
if (ao_log_single_write_data.telemetry.sensor.height > ao_max_height) {
ao_max_height = ao_log_single_write_data.telemetry.sensor.height;
}
diff --git a/src/core/ao_report.c b/src/core/ao_report.c
index e0355d96..70f0b49d 100644
--- a/src/core/ao_report.c
+++ b/src/core/ao_report.c
@@ -119,7 +119,13 @@ ao_report_igniter_ready(enum ao_igniter igniter)
static void
ao_report_continuity(void) __reentrant
{
- uint8_t c = (ao_report_igniter_ready(ao_igniter_drogue) |
+ uint8_t c;
+
+#if !HAS_IGNITE
+ if (!ao_igniter_present)
+ return;
+#endif
+ c = (ao_report_igniter_ready(ao_igniter_drogue) |
(ao_report_igniter_ready(ao_igniter_main) << 1));
if (c) {
while (c--) {
@@ -145,9 +151,6 @@ ao_report_continuity(void) __reentrant
}
}
#endif
- c = 50;
- while (c-- && ao_flight_state == ao_flight_pad)
- pause(AO_MS_TO_TICKS(100));
}
#endif
@@ -162,8 +165,13 @@ ao_report(void)
#if HAS_IGNITE_REPORT
if (ao_flight_state == ao_flight_idle)
ao_report_continuity();
- while (ao_flight_state == ao_flight_pad)
+ while (ao_flight_state == ao_flight_pad) {
+ uint8_t c;
ao_report_continuity();
+ c = 50;
+ while (c-- && ao_flight_state == ao_flight_pad)
+ pause(AO_MS_TO_TICKS(100));
+ }
#endif
__critical {
while (ao_report_state == ao_flight_state)