diff options
| author | Keith Packard <keithp@keithp.com> | 2011-05-23 11:32:29 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-07-17 08:14:09 -0700 | 
| commit | 51796e2f1ebce3ee8dc1ac90648381410c1379ee (patch) | |
| tree | bdf221ce19ac4d529c6852e1197d8edea901eff1 /src/ao_ignite.c | |
| parent | 1332ed55192f22525f31574f60fae4c6579e6f7f (diff) | |
altos, altosui: Add igniter mode (dual, apogee, main)split-telemetry
This provides for redundant charges for either apogee or main.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/ao_ignite.c')
| -rw-r--r-- | src/ao_ignite.c | 50 | 
1 files changed, 40 insertions, 10 deletions
| diff --git a/src/ao_ignite.c b/src/ao_ignite.c index e1b91bea..512ec622 100644 --- a/src/ao_ignite.c +++ b/src/ao_ignite.c @@ -51,7 +51,7 @@ void  ao_ignite(enum ao_igniter igniter) __critical  {  	ao_ignition[igniter].request = 1; -	ao_wakeup(&ao_ignition[0]); +	ao_wakeup(&ao_ignition);  }  enum ao_igniter_status @@ -91,16 +91,46 @@ void  ao_igniter_fire(enum ao_igniter igniter) __critical  {  	ao_ignition[igniter].firing = 1; -	switch (igniter) { -	case ao_igniter_drogue: -		AO_IGNITER_DROGUE = 1; -		ao_delay(AO_IGNITER_FIRE_TIME); -		AO_IGNITER_DROGUE = 0; +	switch(ao_config.ignite_mode) { +	case AO_IGNITE_MODE_DUAL: +		switch (igniter) { +		case ao_igniter_drogue: +			AO_IGNITER_DROGUE = 1; +			ao_delay(AO_IGNITER_FIRE_TIME); +			AO_IGNITER_DROGUE = 0; +			break; +		case ao_igniter_main: +			AO_IGNITER_MAIN = 1; +			ao_delay(AO_IGNITER_FIRE_TIME); +			AO_IGNITER_MAIN = 0; +			break; +		}  		break; -	case ao_igniter_main: -		AO_IGNITER_MAIN = 1; -		ao_delay(AO_IGNITER_FIRE_TIME); -		AO_IGNITER_MAIN = 0; +	case AO_IGNITE_MODE_APOGEE: +		switch (igniter) { +		case ao_igniter_drogue: +			AO_IGNITER_DROGUE = 1; +			ao_delay(AO_IGNITER_FIRE_TIME); +			AO_IGNITER_DROGUE = 0; +			ao_delay(AO_IGNITER_CHARGE_TIME); +			AO_IGNITER_MAIN = 1; +			ao_delay(AO_IGNITER_FIRE_TIME); +			AO_IGNITER_MAIN = 0; +			break; +		} +		break; +	case AO_IGNITE_MODE_MAIN: +		switch (igniter) { +		case ao_igniter_main: +			AO_IGNITER_DROGUE = 1; +			ao_delay(AO_IGNITER_FIRE_TIME); +			AO_IGNITER_DROGUE = 0; +			ao_delay(AO_IGNITER_CHARGE_TIME); +			AO_IGNITER_MAIN = 1; +			ao_delay(AO_IGNITER_FIRE_TIME); +			AO_IGNITER_MAIN = 0; +			break; +		}  		break;  	}  	ao_ignition[igniter].firing = 0; | 
