__xdata struct ao_radio_recv recv;
__xdata char callsign[AO_MAX_CALLSIGN+1];
uint8_t state;
+ int16_t rssi;
for (;;) {
__critical while (!ao_monitoring)
if (!ao_radio_recv(&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 ("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,
+ 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 ",
recv.telemetry.adc.tick,
recv.telemetry.adc.accel,
recv.telemetry.adc.pres,
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);
+ 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);
{
ao_monitoring = monitoring;
ao_wakeup(&ao_monitoring);
- ao_radio_abort();
+ if (!ao_monitoring)
+ ao_radio_abort();
}
static void