summaryrefslogtreecommitdiff
path: root/ao-tools
diff options
context:
space:
mode:
Diffstat (limited to 'ao-tools')
-rw-r--r--ao-tools/ao-view/aoview.h2
-rw-r--r--ao-tools/ao-view/aoview_monitor.c23
-rw-r--r--ao-tools/ao-view/aoview_state.c6
3 files changed, 26 insertions, 5 deletions
diff --git a/ao-tools/ao-view/aoview.h b/ao-tools/ao-view/aoview.h
index c582159c..b6d5bcdf 100644
--- a/ao-tools/ao-view/aoview.h
+++ b/ao-tools/ao-view/aoview.h
@@ -104,6 +104,8 @@ struct aodata {
int flight_vel;
int flight_pres;
int ground_pres;
+ int accel_plus_g;
+ int accel_minus_g;
struct aogps gps;
struct aogps_tracking gps_tracking;
};
diff --git a/ao-tools/ao-view/aoview_monitor.c b/ao-tools/ao-view/aoview_monitor.c
index 48e20320..6d57f556 100644
--- a/ao-tools/ao-view/aoview_monitor.c
+++ b/ao-tools/ao-view/aoview_monitor.c
@@ -77,7 +77,9 @@ gboolean
aoview_monitor_parse(const char *input_line)
{
char *saveptr;
- char *words[PARSE_MAX_WORDS];
+ char *raw_words[PARSE_MAX_WORDS];
+ char **words;
+ int version = 0;
int nword;
char line_buf[8192], *line;
struct aodata data;
@@ -89,13 +91,19 @@ aoview_monitor_parse(const char *input_line)
line_buf[sizeof(line_buf) - 1] = '\0';
line = line_buf;
for (nword = 0; nword < PARSE_MAX_WORDS; nword++) {
- words[nword] = strtok_r(line, " \t\n", &saveptr);
+ raw_words[nword] = strtok_r(line, " \t\n", &saveptr);
line = NULL;
- if (words[nword] == NULL)
+ if (raw_words[nword] == NULL)
break;
}
if (nword < 36)
return FALSE;
+ words = raw_words;
+ if (strcmp(words[0], "VERSION") == 0) {
+ aoview_parse_int(&version, words[1]);
+ words += 2;
+ nword -= 2;
+ }
if (strcmp(words[0], "CALL") != 0)
return FALSE;
aoview_parse_string(data.callsign, sizeof (data.callsign), words[1]);
@@ -115,6 +123,15 @@ aoview_monitor_parse(const char *input_line)
aoview_parse_int(&data.flight_vel, words[28]);
aoview_parse_int(&data.flight_pres, words[30]);
aoview_parse_int(&data.ground_pres, words[32]);
+ if (version >= 1) {
+ aoview_parse_int(&data.accel_plus_g, words[34]);
+ aoview_parse_int(&data.accel_minus_g, words[36]);
+ words += 4;
+ nword -= 4;
+ } else {
+ data.accel_plus_g = data.ground_accel;
+ data.accel_minus_g = data.ground_accel + 530;
+ }
aoview_parse_int(&data.gps.nsat, words[34]);
if (strcmp (words[36], "unlocked") == 0) {
data.gps.gps_connected = 1;
diff --git a/ao-tools/ao-view/aoview_state.c b/ao-tools/ao-view/aoview_state.c
index f75066dd..f8f01685 100644
--- a/ao-tools/ao-view/aoview_state.c
+++ b/ao-tools/ao-view/aoview_state.c
@@ -105,6 +105,7 @@ aoview_state_derive(struct aodata *data, struct aostate *state)
double new_height;
double height_change;
double time_change;
+ double accel_counts_per_mss;
int tick_count;
state->report_time = aoview_time();
@@ -123,8 +124,9 @@ aoview_state_derive(struct aodata *data, struct aostate *state)
state->height = new_height;
if (time_change)
state->baro_speed = (state->baro_speed * 3 + (height_change / time_change)) / 4.0;
- state->acceleration = (data->ground_accel - data->flight_accel) / 27.0;
- state->speed = data->flight_vel / 2700.0;
+ accel_counts_per_mss = ((data->accel_minus_g - data->accel_plus_g) / 2.0) / 9.80665;
+ state->acceleration = (data->ground_accel - data->flight_accel) / accel_counts_per_mss;
+ state->speed = data->flight_vel / (accel_counts_per_mss * 100.0);
state->temperature = ((data->temp / 32767.0 * 3.3) - 0.5) / 0.01;
state->drogue_sense = data->drogue / 32767.0 * 15.0;
state->main_sense = data->main / 32767.0 * 15.0;