altos: Allow TT/TBT reports to escape landed state
[fw/altos] / src / core / ao_report.c
index 70f0b49d1174058fbbb9401b8ca582cbc145f3d9..7c9287928e28a5cdbd5ac8b6bce75a48594c88ee 100644 (file)
@@ -99,14 +99,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
@@ -159,9 +155,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 +174,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;
        }
 }