ao_data_get(&packet);
);
- value = (AO_IGNITER_CLOSED>>1);
value = AO_SENSE_PYRO(&packet, p);
- if (value < AO_IGNITER_OPEN)
- return ao_igniter_open;
- else if (value > AO_IGNITER_CLOSED)
- return ao_igniter_ready;
- else
- return ao_igniter_unknown;
+ return ao_igniter_check(value, AO_SENSE_PBATT(&packet));
}
void
if (delay < 0)
delay = 0;
delay_done = ao_time() + (AO_TICK_TYPE) delay;
- if (!delay_done)
+
+ /*
+ * delay_done is the time at which the
+ * delay ends, but it is also used as
+ * an indication that a delay is
+ * active -- non-zero values indicate
+ * an active delay. This code ensures
+ * the value is non-zero, which might
+ * introduce an additional tick
+ * of delay.
+ */
+ if (delay_done == 0)
delay_done = 1;
pyro_delay_done[p] = delay_done;
}
/* Check to see if we're just waiting for
* the delay to expire
*/
- if (pyro_delay_done[p]) {
+ if (pyro_delay_done[p] != 0) {
/* Check to make sure the required conditions
* remain valid. If not, inhibit the channel
for (v = 0; v < NUM_PYRO_VALUES; v++)
{
- value = ao_pyro_get_1_24(&pyro_1_24[p], ao_pyro_values[v].flag);
- ao_pyro_put(&tmp, ao_pyro_values[v].offset,
- ao_pyro_size(ao_pyro_values[v].flag), value);
+ if (ao_pyro_values[v].offset != NO_VALUE) {
+ value = ao_pyro_get_1_24(&pyro_1_24[p], ao_pyro_values[v].flag);
+ ao_pyro_put(&tmp, ao_pyro_values[v].offset,
+ ao_pyro_size(ao_pyro_values[v].flag), value);
+ }
}
memcpy(&pyro_1_25[p], &tmp, sizeof(tmp));
}