summaryrefslogtreecommitdiff
path: root/ao-tools/lib/cc-telem.c
diff options
context:
space:
mode:
Diffstat (limited to 'ao-tools/lib/cc-telem.c')
-rw-r--r--ao-tools/lib/cc-telem.c24
1 files changed, 21 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;