X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_lco_bits.c;h=bc54dc22b8ab9992d4b8b2a0419fc9774a62e228;hb=ff2dc6ea0e62f6534b5fb1b0ec2edd4702cf4a41;hp=197bf8aa3c6c5b974092e232e827a0b5458b7429;hpb=38fb80e5e6af87f8c734448e4aa69b2c39854903;p=fw%2Faltos diff --git a/src/drivers/ao_lco_bits.c b/src/drivers/ao_lco_bits.c index 197bf8aa..bc54dc22 100644 --- a/src/drivers/ao_lco_bits.c +++ b/src/drivers/ao_lco_bits.c @@ -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]; /* 16 bit 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 @@ -210,9 +223,7 @@ 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(); @@ -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)); @@ -308,7 +322,7 @@ ao_lco_search(void) void ao_lco_monitor(void) { - uint16_t delay; + AO_TICK_TYPE delay; uint8_t box; for (;;) { @@ -344,8 +358,8 @@ ao_lco_monitor(void) uint8_t ao_lco_drag_beep_count; static uint8_t ao_lco_drag_beep_on; -static uint16_t ao_lco_drag_beep_time; -static uint16_t ao_lco_drag_warn_time; +static AO_TICK_TYPE ao_lco_drag_beep_time; +static AO_TICK_TYPE ao_lco_drag_warn_time; #define AO_LCO_DRAG_BEEP_TIME AO_MS_TO_TICKS(50) #define AO_LCO_DRAG_WARN_TIME AO_SEC_TO_TICKS(5) @@ -377,14 +391,14 @@ ao_lco_toggle_drag(void) * turn it on or off as necessary and bump the remaining beep counts */ -uint16_t -ao_lco_drag_beep_check(uint16_t now, uint16_t delay) +AO_TICK_TYPE +ao_lco_drag_beep_check(AO_TICK_TYPE now, AO_TICK_TYPE delay) { PRINTD("beep check count %d delta %d\n", ao_lco_drag_beep_count, - (int16_t) (now - ao_lco_drag_beep_time)); + (AO_TICK_SIGNED) (now - ao_lco_drag_beep_time)); if (ao_lco_drag_beep_count) { - if ((int16_t) (now - ao_lco_drag_beep_time) >= 0) { + if ((AO_TICK_SIGNED) (now - ao_lco_drag_beep_time) >= 0) { if (ao_lco_drag_beep_on) { ao_beep(0); PRINTD("beep stop\n"); @@ -404,7 +418,7 @@ ao_lco_drag_beep_check(uint16_t now, uint16_t delay) } if (ao_lco_drag_beep_count) { - uint16_t beep_delay = 0; + AO_TICK_TYPE beep_delay = 0; if (ao_lco_drag_beep_time > now) beep_delay = ao_lco_drag_beep_time - now; @@ -449,13 +463,13 @@ ao_lco_drag_disable(void) * active */ -uint16_t -ao_lco_drag_warn_check(uint16_t now, uint16_t delay) +AO_TICK_TYPE +ao_lco_drag_warn_check(AO_TICK_TYPE now, AO_TICK_TYPE delay) { if (ao_lco_drag_race) { - uint16_t warn_delay; + AO_TICK_TYPE warn_delay; - if ((int16_t) (now - ao_lco_drag_warn_time) >= 0) { + if ((AO_TICK_SIGNED) (now - ao_lco_drag_warn_time) >= 0) { ao_lco_drag_add_beeps(1); ao_lco_drag_warn_time = now + AO_LCO_DRAG_WARN_TIME; }