diff options
| author | Keith Packard <keithp@keithp.com> | 2014-08-29 15:12:38 -0500 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-08-29 15:12:38 -0500 | 
| commit | 5872bd10df14b47de0e541bff16d9220af0558aa (patch) | |
| tree | abac06223e010688a351bed869e19a4d283537de /src | |
| parent | 54994d02a5ca5bb91512f31748a48a0140d3a640 (diff) | |
altos: Make sure pyro remains valid during delay
Keep checking pyro status while waiting for delay to expire to make
sure nothing changes. Disable pyro channel if something does.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel/ao_pyro.c | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/src/kernel/ao_pyro.c b/src/kernel/ao_pyro.c index 0b286466..154edad5 100644 --- a/src/kernel/ao_pyro.c +++ b/src/kernel/ao_pyro.c @@ -252,7 +252,7 @@ ao_pyro_check(void)  	struct ao_pyro	*pyro;  	uint8_t		p, any_waiting;  	uint16_t	fire = 0; -	 +  	any_waiting = 0;  	for (p = 0; p < AO_PYRO_NUM; p++) {  		pyro = &ao_config.pyro[p]; @@ -288,6 +288,16 @@ ao_pyro_check(void)  		 * the delay to expire  		 */  		if (pyro->delay_done) { + +			/* Check to make sure the required conditions +			 * remain valid. If not, inhibit the channel +			 * by setting the fired bit +			 */ +			if (!ao_pyro_ready(pyro)) { +				pyro->fired = 1; +				continue; +			} +  			if ((int16_t) (ao_time() - pyro->delay_done) < 0)  				continue;  		} @@ -465,7 +475,7 @@ ao_pyro_set(void)  		printf ("invalid pyro channel %d\n", p);  		return;  	} -	pyro_tmp.flags = 0; +	memset(&pyro_tmp, '\0', sizeof (pyro_tmp));  	for (;;) {  		ao_cmd_white();  		if (ao_cmd_lex_c == '\n') | 
