summaryrefslogtreecommitdiff
path: root/ao-tools/lib
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-11-14 22:24:37 -0800
committerKeith Packard <keithp@keithp.com>2009-11-14 22:24:37 -0800
commit4cffc9c4b079e39c8196ddbaf91129cda6df7f8b (patch)
tree624fbbd5e838da5fbb0676c9e1137a911e53a81e /ao-tools/lib
parent0e0db8ca3af4c07bae909938486766c646bf580b (diff)
Share telemetry parsing code in cc library.
ao-view had a private copy of the telemetry parsing code which included the ability to parse the newer version of that file. Those changes have been moved to the library version and the private copy removed. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'ao-tools/lib')
-rw-r--r--ao-tools/lib/cc-telem.c24
-rw-r--r--ao-tools/lib/cc.h2
2 files changed, 23 insertions, 3 deletions
diff --git a/ao-tools/lib/cc-telem.c b/ao-tools/lib/cc-telem.c
index a6ac0313..f82ab961 100644
--- a/ao-tools/lib/cc-telem.c
+++ b/ao-tools/lib/cc-telem.c
@@ -62,7 +62,9 @@ int
cc_telem_parse(const char *input_line, struct cc_telem *telem)
{
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;
int tracking_pos;
@@ -72,13 +74,20 @@ cc_telem_parse(const char *input_line, struct cc_telem *telem)
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) {
+ cc_parse_int(&version, words[1]);
+ words += 2;
+ nword -= 2;
+ }
+
if (strcmp(words[0], "CALL") != 0)
return FALSE;
cc_parse_string(telem->callsign, sizeof (telem->callsign), words[1]);
@@ -98,6 +107,15 @@ cc_telem_parse(const char *input_line, struct cc_telem *telem)
cc_parse_int(&telem->flight_vel, words[28]);
cc_parse_int(&telem->flight_pres, words[30]);
cc_parse_int(&telem->ground_pres, words[32]);
+ if (version >= 1) {
+ cc_parse_int(&telem->accel_plus_g, words[34]);
+ cc_parse_int(&telem->accel_minus_g, words[36]);
+ words += 4;
+ nword -= 4;
+ } else {
+ telem->accel_plus_g = telem->ground_accel;
+ telem->accel_minus_g = telem->ground_accel + 530;
+ }
cc_parse_int(&telem->gps.nsat, words[34]);
if (strcmp (words[36], "unlocked") == 0) {
telem->gps.gps_connected = 1;
diff --git a/ao-tools/lib/cc.h b/ao-tools/lib/cc.h
index b5f1132f..fd461e5c 100644
--- a/ao-tools/lib/cc.h
+++ b/ao-tools/lib/cc.h
@@ -252,6 +252,8 @@ struct cc_telem {
int flight_vel;
int flight_pres;
int ground_pres;
+ int accel_plus_g;
+ int accel_minus_g;
struct cc_gps gps;
struct cc_gps_tracking gps_tracking;
};