diff options
| author | Keith Packard <keithp@keithp.com> | 2012-10-22 08:52:08 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-10-22 08:52:08 -0700 | 
| commit | fd619a01bf3489b1df017aca20362757b087ec11 (patch) | |
| tree | 57280f51c5b98bf7d747a8e9af9d1d62a30ade5f /src/core/ao_pyro.c | |
| parent | 8cb09f8a3e2dae5f7f3d2d3dbbc81ba40b491e75 (diff) | |
altos: Add state comparisons to pyro channel conditions
Let pyro channels block waiting for flight state changes. This
allows for pyro channels to be synchronized with the main iginiter
channels.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/core/ao_pyro.c')
| -rw-r--r-- | src/core/ao_pyro.c | 16 | 
1 files changed, 15 insertions, 1 deletions
| diff --git a/src/core/ao_pyro.c b/src/core/ao_pyro.c index 4f37e979..b1cfd9d8 100644 --- a/src/core/ao_pyro.c +++ b/src/core/ao_pyro.c @@ -113,6 +113,15 @@ ao_pyro_ready(struct ao_pyro *pyro)  			/* handled separately */  			continue; +		case ao_pyro_state_less: +			if (ao_flight_state < pyro->state_less) +				continue; +			break; +		case ao_pyro_state_greater_or_equal: +			if (ao_flight_state >= pyro->state_greater_or_equal) +				continue; +			break; +  		default:  			continue;  		} @@ -166,7 +175,7 @@ uint8_t	ao_pyro_wakeup;  static void  ao_pyro(void)  { -	uint8_t		p; +	uint8_t		p, any_waiting;  	struct ao_pyro	*pyro;  	ao_config_get(); @@ -177,6 +186,7 @@ ao_pyro(void)  		ao_alarm(AO_MS_TO_TICKS(100));  		ao_sleep(&ao_pyro_wakeup);  		ao_clear_alarm(); +		any_waiting = 0;  		for (p = 0; p < AO_PYRO_NUM; p++) {  			pyro = &ao_config.pyro[p]; @@ -190,6 +200,7 @@ ao_pyro(void)  			if (!pyro->flags)  				continue; +			any_waiting = 1;  			/* Check pyro state to see if it shoule fire  			 */  			if (!pyro->delay_done) { @@ -213,7 +224,10 @@ ao_pyro(void)  			ao_pyro_fire(p);  		} +		if (!any_waiting) +			break;  	} +	ao_exit();  }  __xdata struct ao_task ao_pyro_task; | 
