altoslib: Missed a couple of easy mini voltage API changes
[fw/altos] / src / core / ao_report.c
index 70f0b49d1174058fbbb9401b8ca582cbc145f3d9..1104cd82532ff8173334591ee06c534b968e1f42 100644 (file)
@@ -16,6 +16,8 @@
  */
 
 #include "ao.h"
+#include <ao_flight.h>
+#include <ao_sample.h>
 
 #define BIT(i,x)          ((x) ? (1 << (i)) : 0)
 #define MORSE1(a)          (1 | BIT(3,a))
@@ -99,14 +101,10 @@ ao_report_altitude(void)
                agl /= 10;
        } while (agl);
 
-       for (;;) {
-               ao_report_beep();
-               i = ndigits;
-               do
-                       ao_report_digit(digits[--i]);
-               while (i != 0);
-               pause(AO_SEC_TO_TICKS(5));
-       }
+       i = ndigits;
+       do
+               ao_report_digit(digits[--i]);
+       while (i != 0);
 }
 
 #if HAS_IGNITE_REPORT
@@ -116,6 +114,13 @@ ao_report_igniter_ready(enum ao_igniter igniter)
        return ao_igniter_status(igniter) == ao_igniter_ready ? 1 : 0;
 }
 
+uint8_t
+ao_report_igniter(void)
+{
+       return (ao_report_igniter_ready(ao_igniter_drogue) |
+                    (ao_report_igniter_ready(ao_igniter_main) << 1));
+}
+
 static void
 ao_report_continuity(void) __reentrant
 {
@@ -125,8 +130,7 @@ ao_report_continuity(void) __reentrant
        if (!ao_igniter_present)
                return;
 #endif
-       c = (ao_report_igniter_ready(ao_igniter_drogue) |
-                    (ao_report_igniter_ready(ao_igniter_main) << 1));
+       c = ao_report_igniter();
        if (c) {
                while (c--) {
                        high(AO_MS_TO_TICKS(25));
@@ -159,9 +163,14 @@ ao_report(void)
 {
        ao_report_state = ao_flight_state;
        for(;;) {
-               if (ao_flight_state == ao_flight_landed)
-                       ao_report_altitude();
                ao_report_beep();
+               if (ao_flight_state == ao_flight_landed) {
+                       ao_report_altitude();
+#if HAS_FLIGHT
+                       ao_delay(AO_SEC_TO_TICKS(5));
+                       continue;
+#endif
+               }
 #if HAS_IGNITE_REPORT
                if (ao_flight_state == ao_flight_idle)
                        ao_report_continuity();
@@ -173,11 +182,10 @@ ao_report(void)
                                pause(AO_MS_TO_TICKS(100));
                }
 #endif
-               __critical {
-                       while (ao_report_state == ao_flight_state)
-                               ao_sleep(DATA_TO_XDATA(&ao_flight_state));
-                       ao_report_state = ao_flight_state;
-               }
+
+               while (ao_report_state == ao_flight_state)
+                       ao_sleep(DATA_TO_XDATA(&ao_flight_state));
+               ao_report_state = ao_flight_state;
        }
 }