Timer 3 working with slower clock and all 16 bits.
[fw/altos] / src / core / ao_monitor.c
index 4ca641b74d7ed59307b4590b8d2d5394fefa3c6b..d492e32a8424d312d104ba24772c1d1baeaff8aa 100644 (file)
@@ -103,6 +103,13 @@ ao_monitor_blink(void)
 
 #if HAS_MONITOR_PUT
 
+static const char xdigit[16] = {
+       '0', '1', '2', '3', '4', '5', '6', '7',
+       '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+};
+
+#define hex(c) do { putchar(xdigit[(c) >> 4]); putchar(xdigit[(c)&0xf]); } while (0)
+
 void
 ao_monitor_put(void)
 {
@@ -134,8 +141,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;
@@ -210,17 +216,30 @@ ao_monitor_put(void)
                        break;
 #endif /* LEGACY_MONITOR */
                default:
-                       printf ("TELEM %02x", ao_monitoring + 2);
+#if AO_PROFILE
+               {
+                       extern uint32_t ao_rx_start_tick, ao_rx_packet_tick, ao_rx_done_tick, ao_rx_last_done_tick;
+                       extern uint32_t ao_fec_decode_start, ao_fec_decode_end;
+
+                       printf ("between packet: %d\n", ao_rx_start_tick - ao_rx_last_done_tick);
+                       printf ("receive start delay: %d\n", ao_rx_packet_tick - ao_rx_start_tick);
+                       printf ("decode time: %d\n", ao_fec_decode_end - ao_fec_decode_start);
+                       printf ("rx cleanup: %d\n", ao_rx_done_tick - ao_fec_decode_end);
+               }
+#endif
+                       printf("TELEM ");
+                       hex((uint8_t) (ao_monitoring + 2));
                        sum = 0x5a;
                        for (state = 0; state < ao_monitoring + 2; state++) {
                                byte = recv_raw.packet[state];
                                sum += byte;
-                               printf("%02x", byte);
+                               hex(byte);
                        }
-                       printf("%02x\n", sum);
+                       hex(sum);
+                       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