altos: Build TeleLCO v3.0 bits by default
[fw/altos] / src / drivers / ao_lco_bits.c
index eca39d5bfe2e7aed9699293f3c15d02b6bc3135d..b32a56fe02d34f99f7d9a9e0068ba8d89c2dc45a 100644 (file)
@@ -84,7 +84,7 @@ ao_lco_igniter_status(void)
                else
 #endif
                        ao_sleep(&ao_pad_query);
-               if (ao_lco_box == AO_LCO_LCO_VOLTAGE) {
+               if (ao_lco_box_pseudo(ao_lco_box)) {
                        ao_led_off(AO_LED_GREEN|AO_LED_AMBER|AO_LED_RED);
                        continue;
                }
@@ -184,7 +184,7 @@ ao_lco_get_channels(uint16_t box, struct ao_pad_query *query)
 void
 ao_lco_update(void)
 {
-       if (ao_lco_box == AO_LCO_LCO_VOLTAGE) {
+       if (ao_lco_box_pseudo(ao_lco_box)) {
                ao_lco_show();
                return;
        }
@@ -235,8 +235,7 @@ void
 ao_lco_set_box(uint16_t new_box)
 {
        ao_lco_box = new_box;
-       if (ao_lco_box != AO_LCO_LCO_VOLTAGE)
-       {
+       if (!ao_lco_box_pseudo(ao_lco_box)) {
                if (ao_lco_box < AO_PAD_MAX_BOXES) {
                        if (ao_lco_pretending)
                                ao_lco_channels[ao_lco_box] = 0xff;
@@ -263,13 +262,14 @@ ao_lco_step_pad(int8_t dir)
                if (new_pad == ao_lco_pad)
                        break;
        } while (!ao_lco_pad_present(ao_lco_box, (uint8_t) new_pad));
+       PRINTD("New pad %d\n", 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)
+       if (ao_lco_box_pseudo(box))
                return 1;
        if (box >= AO_PAD_MAX_BOXES)
                return 0;
@@ -284,19 +284,20 @@ ao_lco_step_box(int8_t dir)
        do {
                new_box += dir;
                if (new_box > ao_lco_max_box)
-                       new_box = AO_LCO_LCO_VOLTAGE;
+                       new_box = AO_LCO_BOX_FIRST;
                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));
+       PRINTD("New box %ld\n", new_box);
        ao_lco_set_box((uint16_t) new_box);
 }
 
 void
 ao_lco_set_armed(uint8_t armed)
 {
-       if (ao_lco_box == AO_LCO_LCO_VOLTAGE)
+       if (ao_lco_box_pseudo(ao_lco_box))
                return;
 
        ao_lco_armed = armed;
@@ -391,7 +392,7 @@ ao_lco_pretend(void)
        ao_lco_pretending = 1;
        ao_lco_min_box = 1;
        ao_lco_max_box = AO_PAD_MAX_BOXES - 1;
-       for (box = ao_lco_min_box; box < ao_lco_max_box; box++)
+       for (box = ao_lco_min_box; box <= ao_lco_max_box; box++)
                ao_lco_box_set_present(box);
        ao_lco_box = ao_lco_min_box;
        memset(ao_lco_valid, 0, sizeof (ao_lco_valid));
@@ -459,7 +460,7 @@ ao_lco_drag_add_beeps(uint8_t beeps)
 void
 ao_lco_toggle_drag(void)
 {
-       if (ao_lco_drag_race && ao_lco_pad != AO_LCO_PAD_VOLTAGE && ao_lco_box != AO_LCO_LCO_VOLTAGE) {
+       if (ao_lco_drag_race && ao_lco_pad != AO_LCO_PAD_VOLTAGE && !ao_lco_box_pseudo(ao_lco_box)) {
                ao_lco_selected[ao_lco_box] ^= (uint8_t) (1 << (ao_lco_pad - 1));
                PRINTD("Toggle box %d pad %d (pads now %x) to drag race\n",
                       ao_lco_pad, ao_lco_box, ao_lco_selected[ao_lco_box]);