4 * Copyright © 2009 Keith Packard
6 * Permission to use, copy, modify, distribute, and sell this software and its
7 * documentation for any purpose is hereby granted without fee, provided that
8 * the above copyright notice appear in all copies and that both that
9 * copyright notice and this permission notice appear in supporting
10 * documentation, and that the name of Keith Packard not be used in
11 * advertising or publicity pertaining to distribution of the software without
12 * specific, written prior permission. Keith Packard makes no
13 * representations about the suitability of this software for any purpose. It
14 * is provided "as is" without express or implied warranty.
16 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22 * PERFORMANCE OF THIS SOFTWARE.
27 const char const * const ao_state_names[] = {
28 "startup", "idle", "pad", "boost", "coast",
29 "apogee", "drogue", "main", "landed", "invalid"
32 __xdata uint8_t ao_monitoring;
37 __xdata struct ao_radio_recv recv;
41 __critical while (!ao_monitoring)
42 ao_sleep(&ao_monitoring);
44 state = recv.telemetry.flight_state;
45 if (state > ao_flight_invalid)
46 state = ao_flight_invalid;
47 printf ("SERIAL %3d RSSI %3d STATUS %02x STATE %s ",
48 recv.telemetry.addr, recv.rssi, recv.status,
49 ao_state_names[state]);
50 if (!(recv.status & PKT_APPEND_STATUS_1_CRC_OK))
51 printf("CRC INVALID ");
52 printf("%5u a: %d p: %d t: %d v: %d d: %d m: %d\n",
53 recv.telemetry.adc.tick,
54 recv.telemetry.adc.accel,
55 recv.telemetry.adc.pres,
56 recv.telemetry.adc.temp,
57 recv.telemetry.adc.v_batt,
58 recv.telemetry.adc.sense_d,
59 recv.telemetry.adc.sense_m);
60 ao_gps_print(&recv.telemetry.gps);
65 __xdata struct ao_task ao_monitor_task;
71 ao_monitoring = ao_cmd_lex_i != 0;
72 ao_wakeup(&ao_monitoring);
75 __code struct ao_cmds ao_monitor_cmds[] = {
76 { 'M', ao_set_monitor, "M Enable/disable radio monitoring" },
77 { 0, ao_set_monitor, NULL },
84 ao_cmd_register(&ao_monitor_cmds[0]);
85 ao_add_task(&ao_monitor_task, ao_monitor, "monitor");