Don't abort the radio when enabling telemetry monitoring
[fw/altos] / src / ao_monitor.c
index 5997d427a4388536687bf1a0c3a4c93238d655bb..f2f3fc2e39650b98482dd44eff84f11881db3bbe 100644 (file)
@@ -30,18 +30,22 @@ ao_monitor(void)
        for (;;) {
                __critical while (!ao_monitoring)
                        ao_sleep(&ao_monitoring);
-               ao_radio_recv(&recv);
+               if (!ao_radio_recv(&recv))
+                       continue;
                state = recv.telemetry.flight_state;
                memcpy(callsign, recv.telemetry.callsign, AO_MAX_CALLSIGN);
                if (state > ao_flight_invalid)
                        state = ao_flight_invalid;
                if (recv.status & PKT_APPEND_STATUS_1_CRC_OK) {
-                       printf ("CALL %s SERIAL %3d RSSI %4d STATUS %02x STATE %7s ",
-                               callsign,
-                               recv.telemetry.addr,
-                               (int) recv.rssi - 74, recv.status,
-                               ao_state_names[state]);
-                       printf("%5u a: %5d p: %5d t: %5d v: %5d d: %5d m: %5d fa: %5d ga: %d fv: %7ld fp: %5d gp: %5d ",
+                       printf("VERSION %d CALL %s SERIAL %3d FLIGHT %5u RSSI %4d STATUS %02x STATE %7s ",
+                              AO_TELEMETRY_VERSION,
+                              callsign,
+                              recv.telemetry.addr,
+                              recv.telemetry.flight,
+                              (int) recv.rssi - 74, recv.status,
+                              ao_state_names[state]);
+                       printf("%5u a: %5d p: %5d t: %5d v: %5d d: %5d m: %5d "
+                              "fa: %5d ga: %d fv: %7ld fp: %5d gp: %5d a+: %5d a-: %5d ",
                               recv.telemetry.adc.tick,
                               recv.telemetry.adc.accel,
                               recv.telemetry.adc.pres,
@@ -53,8 +57,13 @@ ao_monitor(void)
                               recv.telemetry.ground_accel,
                               recv.telemetry.flight_vel,
                               recv.telemetry.flight_pres,
-                              recv.telemetry.ground_pres);
+                              recv.telemetry.ground_pres,
+                              recv.telemetry.accel_plus_g,
+                              recv.telemetry.accel_minus_g);
                        ao_gps_print(&recv.telemetry.gps);
+                       putchar(' ');
+                       ao_gps_tracking_print(&recv.telemetry.gps_tracking);
+                       putchar('\n');
                        ao_rssi_set((int) recv.rssi - 74);
                } else {
                        printf("CRC INVALID RSSI %3d\n", (int) recv.rssi - 74);
@@ -71,6 +80,8 @@ ao_set_monitor(uint8_t monitoring)
 {
        ao_monitoring = monitoring;
        ao_wakeup(&ao_monitoring);
+       if (!ao_monitoring)
+               ao_radio_abort();
 }
 
 static void