From 8ec51d698921d07c394e6e0e48ac5d587f70ece8 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 22 Jul 2020 09:04:30 -0700 Subject: [PATCH] altos: Add 'booster' mode for dual-deploy igniters Booster mode triggers the 'main' channel at first motor burnout allowing the use of a simple flight computer in the booster while providing both a separation charge and an apogee event for recovery. Signed-off-by: Keith Packard --- altosui/AltosConfigFCUI.java | 1 + doc/config-device.inc | 4 ++++ src/kernel/ao_config.c | 2 +- src/kernel/ao_config.h | 1 + src/kernel/ao_ignite.c | 6 ++++++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/altosui/AltosConfigFCUI.java b/altosui/AltosConfigFCUI.java index 8df3c022..3b11fb68 100644 --- a/altosui/AltosConfigFCUI.java +++ b/altosui/AltosConfigFCUI.java @@ -119,6 +119,7 @@ public class AltosConfigFCUI "Dual Deploy", "Redundant Apogee", "Redundant Main", + "Separation & Apogee", }; static String[] aprs_interval_values = { diff --git a/doc/config-device.inc b/doc/config-device.inc index 15f9129e..a533ca82 100644 --- a/doc/config-device.inc +++ b/doc/config-device.inc @@ -171,6 +171,10 @@ ifdef::altusmetrum[] is fired first, followed after a two second delay by the 'main' channel. + Separation & Apogee:: + This fires the 'main' channel when the first motor + burns out and fires the 'apogee' charge at apogee. + ifdef::telemetrum,telemega,easymega,easytimer[] ==== Pad Orientation diff --git a/src/kernel/ao_config.c b/src/kernel/ao_config.c index 217b0ab1..24eb79d9 100644 --- a/src/kernel/ao_config.c +++ b/src/kernel/ao_config.c @@ -1039,7 +1039,7 @@ const struct ao_config_var ao_config_vars[] = { ao_config_log_set, ao_config_log_show }, #endif #if HAS_IGNITE - { "i <0 dual, 1 apogee, 2 main>\0Igniter mode", + { "i <0 dual, 1 apogee, 2 main, 3 booster>\0Igniter mode", ao_config_ignite_mode_set, ao_config_ignite_mode_show }, #endif #if HAS_AES diff --git a/src/kernel/ao_config.h b/src/kernel/ao_config.h index 87509dff..3cfd0d07 100644 --- a/src/kernel/ao_config.h +++ b/src/kernel/ao_config.h @@ -139,6 +139,7 @@ extern uint32_t ao_send_radio_setting; #define AO_IGNITE_MODE_DUAL 0 #define AO_IGNITE_MODE_APOGEE 1 #define AO_IGNITE_MODE_MAIN 2 +#define AO_IGNITE_MODE_BOOSTER 3 #define AO_RADIO_ENABLE_CORE 1 #define AO_RADIO_DISABLE_TELEMETRY 2 diff --git a/src/kernel/ao_ignite.c b/src/kernel/ao_ignite.c index 692460d0..6c19a94c 100644 --- a/src/kernel/ao_ignite.c +++ b/src/kernel/ao_ignite.c @@ -127,6 +127,12 @@ ao_igniter(void) ao_igniter_fire(ao_igniter_main); } break; + case AO_IGNITE_MODE_BOOSTER: + if (ao_flight_fast <= ao_flight_state && ao_flight_state < ao_flight_landed) + ao_igniter_fire(ao_igniter_main); + if (ao_flight_drogue <= ao_flight_state && ao_flight_state < ao_flight_landed) + ao_igniter_fire(ao_igniter_drogue); + break; } } } -- 2.30.2