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; |