diff options
Diffstat (limited to 'ao-tools/ao-view')
| -rw-r--r-- | ao-tools/ao-view/aoview.h | 2 | ||||
| -rw-r--r-- | ao-tools/ao-view/aoview_monitor.c | 23 | ||||
| -rw-r--r-- | ao-tools/ao-view/aoview_state.c | 6 | 
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;  | 
