- } while (!ao_lco_pad_present(ao_lco_box, new_pad));
- ao_lco_set_pad(new_pad);
+ } while (!ao_lco_pad_present(ao_lco_box, (uint8_t) new_pad));
+ ao_lco_set_pad((uint8_t) new_pad);
+}
+
+uint8_t
+ao_lco_box_present(uint16_t box)
+{
+ if (box == AO_LCO_LCO_VOLTAGE)
+ return 1;
+ if (box >= AO_PAD_MAX_BOXES)
+ return 0;
+ return (ao_lco_box_mask[AO_LCO_MASK_ID(box)] >> AO_LCO_MASK_SHIFT(box)) & 1;
+}
+
+void
+ao_lco_step_box(int8_t dir)
+{
+ int32_t new_box = (int32_t) ao_lco_box;
+
+ do {
+ new_box += dir;
+ if (new_box > ao_lco_max_box)
+ new_box = AO_LCO_LCO_VOLTAGE;
+ else if (new_box < 0)
+ new_box = ao_lco_max_box;
+ if (new_box == ao_lco_box)
+ break;
+ } while (!ao_lco_box_present((uint16_t) new_box));
+ ao_lco_set_box((uint16_t) new_box);