+ao_lco_monitor(void)
+{
+ uint16_t delay;
+
+ ao_lco_search();
+ ao_add_task(&ao_lco_input_task, ao_lco_input, "lco input");
+ ao_add_task(&ao_lco_arm_warn_task, ao_lco_arm_warn, "lco arm warn");
+ ao_add_task(&ao_lco_igniter_status_task, ao_lco_igniter_status, "lco igniter status");
+ for (;;) {
+ PRINTD("monitor armed %d firing %d offset %d\n",
+ ao_lco_armed, ao_lco_firing, ao_lco_tick_offset);
+
+ if (ao_lco_armed && ao_lco_firing) {
+ PRINTD("Firing box %d pad %d: valid %d\n",
+ ao_lco_box, ao_lco_pad, ao_lco_valid);
+ if (!ao_lco_valid)
+ ao_lco_update();
+ if (ao_lco_valid)
+ ao_lco_ignite(ao_lco_box, 1 << ao_lco_pad, ao_lco_tick_offset);
+ } else if (ao_lco_armed) {
+ PRINTD("Arming box %d pad %d\n",
+ ao_lco_box, ao_lco_pad);
+ if (!ao_lco_valid)
+ ao_lco_update();
+ ao_lco_arm(ao_lco_box, 1 << ao_lco_pad, ao_lco_tick_offset);
+ ao_lco_update();
+ } else {
+ ao_lco_update();
+ }
+ if (ao_lco_armed && ao_lco_firing)
+ delay = AO_MS_TO_TICKS(100);
+ else
+ delay = AO_SEC_TO_TICKS(1);
+ ao_sleep_for(&ao_lco_armed, delay);
+ }
+}
+
+#if DEBUG
+void
+ao_lco_set_debug(void)