- printf ("Pad altitude: %dm\n", aoview_pres_to_altitude(pad_pres));
- printf ("AGL: %dm\n", altitude);
- printf ("Acceleration: %gm/s²\n", accel);
- printf ("Velocity: %gm/s\n", velocity);
- printf ("Lat: %g\n", state->lat);
- printf ("Lon: %g\n", state->lon);
- printf ("GPS alt: %d\n", state->alt);
- aoview_great_circle(pad_lat, pad_lon, state->lat, state->lon,
- &dist, &bearing);
- printf ("Course: %gkm %g°\n", dist, bearing);
+ aoview_table_start();
+
+ if (npad_gps >= NUM_PAD_SAMPLES)
+ aoview_table_add_row("Ground state", "ready");
+ else
+ aoview_table_add_row("Ground state", "waiting for gps (%d)",
+ NUM_PAD_SAMPLES - npad_gps);
+ aoview_table_add_row("Rocket state", "%s", state->state);
+ aoview_table_add_row("Callsign", "%s", state->callsign);
+ aoview_table_add_row("Rocket serial", "%d", state->serial);
+
+ aoview_table_add_row("RSSI", "%ddBm", state->rssi);
+ aoview_table_add_row("Height", "%dm", altitude);
+ aoview_table_add_row("Max height", "%dm",
+ aoview_pres_to_altitude(min_pres) -
+ aoview_pres_to_altitude(state->ground_pres));
+ aoview_table_add_row("Acceleration", "%gm/s²", accel);
+ aoview_table_add_row("Max acceleration", "%gm/s²", max_accel);
+ aoview_table_add_row("Velocity", "%gm/s", velocity);
+ aoview_table_add_row("Temperature", "%g°C", temp);
+ aoview_table_add_row("Battery", "%gV", battery);
+ aoview_table_add_row("Drogue", "%gV", drogue_sense);
+ aoview_table_add_row("Main", "%gV", main_sense);
+ aoview_table_add_row("Pad altitude", "%dm", aoview_pres_to_altitude(state->ground_pres));
+ aoview_table_add_row("Satellites", "%d", state->nsat);
+ if (state->locked) {
+ aoview_state_add_deg("Latitude", state->lat, 'N', 'S');
+ aoview_state_add_deg("Longitude", state->lon, 'E', 'W');
+ aoview_table_add_row("GPS alt", "%d", state->alt);
+ aoview_table_add_row("GPS time", "%02d:%02d:%02d",
+ state->gps_time.hour,
+ state->gps_time.minute,
+ state->gps_time.second);
+ aoview_table_add_row("GPS ground speed", "%fm/s %d°",
+ state->ground_speed,
+ state->course);
+ aoview_table_add_row("GPS climb rate", "%fm/s",
+ state->climb_rate);
+ aoview_table_add_row("GPS precision", "%f(hdop) %dm(h) %dm(v)\n",
+ state->hdop, state->h_error, state->v_error);
+ aoview_great_circle(pad_lat, pad_lon, state->lat, state->lon,
+ &dist, &bearing);
+ aoview_table_add_row("Distance from pad", "%gm", dist * 1000);
+ aoview_table_add_row("Direction from pad", "%g°", bearing);
+ } else {
+ aoview_table_add_row("GPS", "unlocked");
+ }
+ if (npad_gps) {
+ aoview_state_add_deg("Pad latitude", pad_lat, 'N', 'S');
+ aoview_state_add_deg("Pad longitude", pad_lon, 'E', 'W');
+ aoview_table_add_row("Pad GPS alt", "%gm", pad_alt);
+ }
+ aoview_table_finish();
+ aoview_state_speak(state);
+}
+
+void
+aoview_state_new(void)
+{
+ pad_lat_total = 0;
+ pad_lon_total = 0;
+ pad_alt_total = 0;
+ npad_gps = 0;
+ prev_tick = 0;
+ prev_accel = 0;
+ pad_lat = 0;
+ pad_lon = 0;
+ pad_alt = 0;
+ min_pres = 32767;
+ min_accel = 32767;