"apogee", "drogue", "main", "landed", "invalid"
};
+__xdata uint8_t ao_monitoring;
+
void
ao_monitor(void)
{
uint8_t state;
for (;;) {
+ __critical while (!ao_monitoring)
+ ao_sleep(&ao_monitoring);
ao_radio_recv(&recv);
state = recv.telemetry.flight_state;
if (state > ao_flight_invalid)
ao_state_names[state]);
if (!(recv.status & PKT_APPEND_STATUS_1_CRC_OK))
printf("CRC INVALID ");
- switch (recv.telemetry.type) {
- case AO_TELEMETRY_SENSOR:
- printf("%5u a: %d p: %d t: %d v: %d d: %d m: %d\n",
- recv.telemetry.u.adc.tick,
- recv.telemetry.u.adc.accel,
- recv.telemetry.u.adc.pres,
- recv.telemetry.u.adc.temp,
- recv.telemetry.u.adc.v_batt,
- recv.telemetry.u.adc.sense_d,
- recv.telemetry.u.adc.sense_m);
- break;
- case AO_TELEMETRY_GPS:
- ao_gps_print(&recv.telemetry.u.gps);
- break;
- }
+ printf("%5u a: %d p: %d t: %d v: %d d: %d m: %d\n",
+ recv.telemetry.adc.tick,
+ recv.telemetry.adc.accel,
+ recv.telemetry.adc.pres,
+ recv.telemetry.adc.temp,
+ recv.telemetry.adc.v_batt,
+ recv.telemetry.adc.sense_d,
+ recv.telemetry.adc.sense_m);
+ ao_gps_print(&recv.telemetry.gps);
ao_usb_flush();
}
}
__xdata struct ao_task ao_monitor_task;
+static void
+ao_set_monitor(void)
+{
+ ao_cmd_hex();
+ ao_monitoring = ao_cmd_lex_i != 0;
+ ao_wakeup(&ao_monitoring);
+}
+
+__code struct ao_cmds ao_monitor_cmds[] = {
+ { 'M', ao_set_monitor, "M Enable/disable radio monitoring" },
+ { 0, ao_set_monitor, NULL },
+};
+
void
ao_monitor_init(void)
{
+ ao_monitoring = 0;
+ ao_cmd_register(&ao_monitor_cmds[0]);
ao_add_task(&ao_monitor_task, ao_monitor, "monitor");
}