altos: TELEMETRY PROTOCOL CHANGE. Switch to 16-bit serial numbers.
[fw/altos] / src / ao_monitor.c
index f2f3fc2e39650b98482dd44eff84f11881db3bbe..4ba3da6d848949b27e31495bbde9af68fb56c9eb 100644 (file)
@@ -23,26 +23,30 @@ __pdata uint8_t ao_monitor_led;
 void
 ao_monitor(void)
 {
-       __xdata struct ao_radio_recv recv;
+       __xdata struct ao_telemetry_recv recv;
        __xdata char callsign[AO_MAX_CALLSIGN+1];
        uint8_t state;
+       int16_t rssi;
 
        for (;;) {
                __critical while (!ao_monitoring)
                        ao_sleep(&ao_monitoring);
-               if (!ao_radio_recv(&recv))
+               if (!ao_radio_recv(&recv, sizeof (recv)))
                        continue;
                state = recv.telemetry.flight_state;
+
+               /* Typical RSSI offset for 38.4kBaud at 433 MHz is 74 */
+               rssi = (int16_t) (recv.rssi >> 1) - 74;
                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("VERSION %d CALL %s SERIAL %3d FLIGHT %5u RSSI %4d STATUS %02x STATE %7s ",
+                       printf("VERSION %d CALL %s SERIAL %d FLIGHT %5u RSSI %4d STATUS %02x STATE %7s ",
                               AO_TELEMETRY_VERSION,
                               callsign,
-                              recv.telemetry.addr,
+                              recv.telemetry.serial,
                               recv.telemetry.flight,
-                              (int) recv.rssi - 74, recv.status,
+                              rssi, 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 ",
@@ -64,9 +68,9 @@ ao_monitor(void)
                        putchar(' ');
                        ao_gps_tracking_print(&recv.telemetry.gps_tracking);
                        putchar('\n');
-                       ao_rssi_set((int) recv.rssi - 74);
+                       ao_rssi_set(rssi);
                } else {
-                       printf("CRC INVALID RSSI %3d\n", (int) recv.rssi - 74);
+                       printf("CRC INVALID RSSI %3d\n", rssi);
                }
                ao_usb_flush();
                ao_led_toggle(ao_monitor_led);
@@ -81,7 +85,7 @@ ao_set_monitor(uint8_t monitoring)
        ao_monitoring = monitoring;
        ao_wakeup(&ao_monitoring);
        if (!ao_monitoring)
-               ao_radio_abort();
+               ao_radio_recv_abort();
 }
 
 static void