Inhibiting channels happens when the channel conditions change during
the delay period and was done by marking them as already fired. This
worked, but the log file would then indicate that the channel had
fired when in fact it was inhibited instead. Separate out the inhibited status
so that the correct data appears in the log.
Signed-off-by: Keith Packard <keithp@keithp.com>
#endif
uint16_t ao_pyro_fired;
#endif
uint16_t ao_pyro_fired;
+uint16_t ao_pyro_inhibited;
#ifndef PYRO_DBG
#define PYRO_DBG 0
#ifndef PYRO_DBG
#define PYRO_DBG 0
for (p = 0; p < AO_PYRO_NUM; p++) {
pyro = &ao_config.pyro[p];
for (p = 0; p < AO_PYRO_NUM; p++) {
pyro = &ao_config.pyro[p];
- /* Ignore igniters which have already fired
+ /* Ignore igniters which have already fired or inhibited
- if (ao_pyro_fired & (1 << p))
+ if ((ao_pyro_fired|ao_pyro_inhibited) & (1 << p))
continue;
/* Ignore disabled igniters
continue;
/* Ignore disabled igniters
/* Check to make sure the required conditions
* remain valid. If not, inhibit the channel
/* Check to make sure the required conditions
* remain valid. If not, inhibit the channel
- * by setting the fired bit
+ * by setting the inhibited bit
*/
if (!ao_pyro_ready(pyro)) {
*/
if (!ao_pyro_ready(pyro)) {
- ao_pyro_fired |= (1 << p);
+ ao_pyro_inhibited |= (1 << p);