X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fkernel%2Fao_microflight.c;h=f415420d6ea900015e220f894f5e0a0bdbf16e0d;hp=df624e7922275b6a2b0f4aef98f6ab59ab9cfe79;hb=HEAD;hpb=d1527a5457210eb914312cf8857bfb88982a8462 diff --git a/src/kernel/ao_microflight.c b/src/kernel/ao_microflight.c index df624e79..bf994b8f 100644 --- a/src/kernel/ao_microflight.c +++ b/src/kernel/ao_microflight.c @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,6 +24,7 @@ uint32_t pa; uint32_t pa_ground; +uint32_t pa_ground_next; uint32_t pa_min; static void @@ -44,7 +46,7 @@ ao_microflight(void) { int16_t sample_count; int16_t log_count; - uint16_t time; + AO_TICK_TYPE time; uint32_t pa_interval_min, pa_interval_max; int32_t pa_diff; uint8_t h; @@ -57,33 +59,43 @@ ao_microflight(void) time = ao_time(); ao_pa_get(); ao_microkalman_init(); - pa_ground = pa; + pa_ground_next = pa_ground = pa; sample_count = 0; h = 0; for (;;) { time += SAMPLE_SLEEP; +#if BOOST_DETECT if ((sample_count & 0x1f) == 0) ao_led_on(AO_LED_REPORT); +#endif ao_delay_until(time); ao_microsample(); +#if BOOST_DETECT if ((sample_count & 0x1f) == 0) ao_led_off(AO_LED_REPORT); +#endif pa_hist[h] = pa; h = SKIP_PA_HIST(h,1); - pa_diff = pa_ground - ao_pa; + pa_diff = (int32_t) (pa_ground - ao_pa); +#if BOOST_DETECT /* Check for a significant pressure change */ if (pa_diff > BOOST_DETECT) break; +#endif if (sample_count < GROUND_AVG * 2) { if (sample_count < GROUND_AVG) pa_sum += pa; ++sample_count; } else { - pa_ground = pa_sum >> GROUND_AVG_SHIFT; + pa_ground = pa_ground_next; + pa_ground_next = pa_sum >> GROUND_AVG_SHIFT; pa_sum = 0; sample_count = 0; +#if !BOOST_DETECT + break; +#endif } } @@ -133,7 +145,7 @@ ao_microflight(void) pa_min = ao_pa; if (sample_count == (GROUND_AVG - 1)) { - pa_diff = pa_interval_max - pa_interval_min; + pa_diff = (int32_t) (pa_interval_max - pa_interval_min); /* Check to see if the pressure is now stable */ if (pa_diff < LAND_DETECT)