*
* 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
ao_microflight(void)
{
int16_t sample_count;
+ int16_t log_count;
uint16_t time;
uint32_t pa_interval_min, pa_interval_max;
int32_t pa_diff;
- uint8_t h, i;
+ uint8_t h;
+ uint8_t i;
uint8_t accel_lock = 0;
uint32_t pa_sum = 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;
+#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_ground = pa_sum >> GROUND_AVG_SHIFT;
pa_sum = 0;
sample_count = 0;
+#if !BOOST_DETECT
+ break;
+#endif
}
}
}
/* Log the remaining samples so we get a complete history since leaving the ground */
- for (; i != h; i = SKIP_PA_HIST(i,2)) {
+#if LOG_INTERVAL < NUM_PA_HIST
+ for (; i != h; i = SKIP_PA_HIST(i,2))
+#endif
+ {
pa = pa_hist[i];
ao_log_micro_data();
}
/* Now sit around until the pressure is stable again and record the max */
sample_count = 0;
+ log_count = 0;
pa_min = ao_pa;
pa_interval_min = ao_pa;
pa_interval_max = ao_pa;
ao_microsample();
if ((sample_count & 3) == 0)
ao_led_off(AO_LED_REPORT);
- if (sample_count & 1)
+ if (log_count == LOG_INTERVAL - 1) {
ao_log_micro_data();
+ log_count = 0;
+ } else
+ log_count++;
/* If accelerating upwards, don't look for min pressure */
if (ao_pa_accel < ACCEL_LOCK_PA)