altos: Broke TeleMetrum GPS reporting by holding the GPS mutex too much
[fw/altos] / src / core / ao_monitor.c
index 51d614254ab5e19db14a0cd6c89fb7ae887f30de..18f170b49912af18c707e2e8780a03db522f2419 100644 (file)
@@ -81,7 +81,7 @@ ao_monitor_get(void)
                        size = ao_monitoring;
                        break;
                }
-               if (!ao_radio_recv(&ao_monitor_ring[ao_monitor_head], size + 2))
+               if (!ao_radio_recv(&ao_monitor_ring[ao_monitor_head], size + 2, 0))
                        continue;
                ao_monitor_head = ao_monitor_ring_next(ao_monitor_head);
                ao_wakeup(DATA_TO_XDATA(&ao_monitor_head));
@@ -132,6 +132,8 @@ ao_monitor_put(void)
                        ao_sleep(DATA_TO_XDATA(&ao_external_monitoring));
                while (ao_monitor_tail == ao_monitor_head && ao_external_monitoring)
                        ao_sleep(DATA_TO_XDATA(&ao_monitor_head));
+               if (!ao_external_monitoring)
+                       continue;
                m = &ao_monitor_ring[ao_monitor_tail];
                ao_monitor_tail = ao_monitor_ring_next(ao_monitor_tail);
                switch (ao_monitoring) {
@@ -141,8 +143,7 @@ ao_monitor_put(void)
                case AO_MONITORING_ORIG:
                        state = recv_orig.telemetry_orig.flight_state;
 
-                       /* Typical RSSI offset for 38.4kBaud at 433 MHz is 74 */
-                       rssi = (int16_t) (recv_orig.rssi >> 1) - 74;
+                       rssi = (int16_t) AO_RSSI_FROM_RADIO(recv_orig.rssi);
                        ao_xmemcpy(callsign, recv_orig.telemetry_orig.callsign, AO_MAX_CALLSIGN);
                        if (state > ao_flight_invalid)
                                state = ao_flight_invalid;
@@ -240,7 +241,7 @@ ao_monitor_put(void)
                        putchar ('\n');
 #if HAS_RSSI
                        if (recv_raw.packet[ao_monitoring + 1] & PKT_APPEND_STATUS_1_CRC_OK) {
-                               rssi = ((int16_t) recv_raw.packet[ao_monitoring] >> 1) - 74;
+                               rssi = AO_RSSI_FROM_RADIO(recv_raw.packet[ao_monitoring]);
                                ao_rssi_set(rssi);
                        }
 #endif