altos/telefireone-v1.0: Track ao_led_init API change
[fw/altos] / src / drivers / ao_lco_bits.c
index 6c5182f29add29a76679a9ddb62d17394fd477aa..6e50e44db4f8bec93edf71a42ab72a8f940f64c2 100644 (file)
@@ -20,20 +20,28 @@ uint8_t             ao_lco_debug;
 
 uint8_t                ao_lco_pad;
 int16_t                ao_lco_box;
-uint8_t                ao_lco_drag_race;
 
-uint8_t                ao_lco_armed;   /* arm active */
-uint8_t                ao_lco_firing;  /* fire active */
+uint8_t                ao_lco_armed;                                   /* arm active */
+uint8_t                ao_lco_firing;                                  /* fire active */
 
 uint8_t                ao_lco_min_box, ao_lco_max_box;
-uint8_t                ao_lco_selected[AO_PAD_MAX_BOXES];
-uint8_t                ao_lco_valid[AO_PAD_MAX_BOXES];
-uint8_t                ao_lco_channels[AO_PAD_MAX_BOXES];
-uint16_t       ao_lco_tick_offset[AO_PAD_MAX_BOXES];
 
-struct ao_pad_query    ao_pad_query;
+#if AO_LCO_DRAG
+uint8_t                ao_lco_drag_race;
+#endif
+
+struct ao_pad_query    ao_pad_query;                           /* latest query response */
 
-static AO_LED_TYPE     continuity_led[AO_LED_CONTINUITY_NUM] = {
+static uint8_t         ao_lco_channels[AO_PAD_MAX_BOXES];      /* pad channels available on each box */
+static uint16_t                ao_lco_tick_offset[AO_PAD_MAX_BOXES];   /* offset from local to remote tick count */
+static uint8_t         ao_lco_selected[AO_PAD_MAX_BOXES];      /* pads selected to fire */
+
+#define AO_LCO_VALID_LAST      1
+#define AO_LCO_VALID_EVER      2
+
+static uint8_t         ao_lco_valid[AO_PAD_MAX_BOXES];         /* AO_LCO_VALID bits per box */
+
+static const AO_LED_TYPE       continuity_led[AO_LED_CONTINUITY_NUM] = {
 #ifdef AO_LED_CONTINUITY_0
        AO_LED_CONTINUITY_0,
 #endif
@@ -68,9 +76,11 @@ ao_lco_igniter_status(void)
        uint8_t         t = 0;
 
        for (;;) {
+#if AO_LCO_DRAG
                if (ao_lco_drag_race)
                        ao_sleep_for(&ao_pad_query, AO_MS_TO_TICKS(50));
                else
+#endif
                        ao_sleep(&ao_pad_query);
                PRINTD("RSSI %d VALID %d\n", ao_radio_cmac_rssi, ao_lco_valid[ao_lco_box]);
                if (!(ao_lco_valid[ao_lco_box] & AO_LCO_VALID_LAST)) {
@@ -98,6 +108,7 @@ ao_lco_igniter_status(void)
                        else
                                status = AO_PAD_IGNITER_STATUS_NO_IGNITER_RELAY_OPEN;
 
+#if AO_LCO_DRAG
                        if (ao_lco_drag_race && (ao_lco_selected[ao_lco_box] & (1 << c))) {
                                uint8_t on = 0;
                                if (status == AO_PAD_IGNITER_STATUS_GOOD_IGNITER_RELAY_OPEN) {
@@ -111,7 +122,9 @@ ao_lco_igniter_status(void)
                                        ao_led_on(continuity_led[c]);
                                else
                                        ao_led_off(continuity_led[c]);
-                       } else {
+                       } else
+#endif
+                       {
                                if (status == AO_PAD_IGNITER_STATUS_GOOD_IGNITER_RELAY_OPEN)
                                        ao_led_on(continuity_led[c]);
                                else
@@ -173,7 +186,7 @@ ao_lco_update(void)
                                ao_lco_set_pad(ao_lco_pad_first(ao_lco_box));
                }
                if (ao_lco_pad == AO_LCO_PAD_VOLTAGE)
-                       ao_lco_show_display();
+                       ao_lco_show();
        }
 }
 
@@ -203,19 +216,17 @@ void
 ao_lco_set_pad(uint8_t new_pad)
 {
        ao_lco_pad = new_pad;
-       ao_lco_show_display();
+       ao_lco_show();
 }
 
 void
 ao_lco_set_box(uint16_t new_box)
 {
        ao_lco_box = new_box;
-#if AO_LCO_DRAG
-       if (ao_lco_box != AO_LCO_BOX_DRAG)
-#endif
+       if (ao_lco_box < AO_PAD_MAX_BOXES)
                ao_lco_channels[ao_lco_box] = 0;
        ao_lco_pad = 1;
-       ao_lco_show_display();
+       ao_lco_show();
 }
 
 void
@@ -242,6 +253,7 @@ ao_lco_set_armed(uint8_t armed)
        ao_lco_armed = armed;
        PRINTD("Armed %d\n", ao_lco_armed);
        if (ao_lco_armed) {
+#if AO_LCO_DRAG
                if (ao_lco_drag_race) {
                        uint8_t box;
 
@@ -250,7 +262,9 @@ ao_lco_set_armed(uint8_t armed)
                                        break;
                        if (box > ao_lco_max_box)
                                ao_lco_armed = 0;
-               } else {
+               } else
+#endif
+               {
                        memset(ao_lco_selected, 0, sizeof (ao_lco_selected));
                        if (ao_lco_pad != 0)
                                ao_lco_selected[ao_lco_box] = (1 << (ao_lco_pad - 1));
@@ -278,12 +292,11 @@ ao_lco_search(void)
        uint8_t         boxes = 0;
 
        ao_lco_box_reset_present();
-       ao_lco_set_pad(0);
+       ao_lco_show_box(0);
+       ao_lco_show_pad(0);
        for (box = 0; box < AO_PAD_MAX_BOXES; box++) {
-               if ((box % 10) == 0) {
-                       ao_lco_box = box;
-                       ao_lco_show_display();
-               }
+               if ((box % 10) == 0)
+                       ao_lco_show_box(box);
                for (try = 0; try < 3; try++) {
                        ao_lco_tick_offset[box] = 0;
                        r = ao_lco_query(box, &ao_pad_query, &ao_lco_tick_offset[box]);
@@ -291,7 +304,7 @@ ao_lco_search(void)
                        if (r == AO_RADIO_CMAC_OK) {
                                ++boxes;
                                ao_lco_box_set_present(box);
-                               ao_lco_set_pad(boxes % 10);
+                               ao_lco_show_pad(boxes % 10);
                                ao_delay(AO_MS_TO_TICKS(30));
                                break;
                        }
@@ -427,7 +440,7 @@ ao_lco_drag_enable(void)
                ao_led_on(AO_LED_DRAG);
 #endif
                ao_lco_drag_add_beeps(5);
-               ao_lco_show_display();
+               ao_lco_show();
        }
 }
 
@@ -442,7 +455,7 @@ ao_lco_drag_disable(void)
 #endif
                memset(ao_lco_selected, 0, sizeof (ao_lco_selected));
                ao_lco_drag_add_beeps(2);
-               ao_lco_show_display();
+               ao_lco_show();
        }
 }