diff options
author | Mike Beattie <mike@ethernal.org> | 2013-03-10 19:07:01 +1300 |
---|---|---|
committer | Mike Beattie <mike@ethernal.org> | 2013-03-10 19:07:01 +1300 |
commit | d029acad6a992be9b7b4498e70605f8a1e1a4ef6 (patch) | |
tree | 851283be0bcb5915bd54e2c19073531336080bd5 /ao-tools/lib/cc-telemetry.c | |
parent | eba7b2ef8ef23bdb61b0390e47be6f27ffde31dc (diff) | |
parent | 72c5b1429bdfd6e9d2185bad7d0adb281fdf659a (diff) |
Merge branch 'master' into altosdroid
Diffstat (limited to 'ao-tools/lib/cc-telemetry.c')
-rw-r--r-- | ao-tools/lib/cc-telemetry.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/ao-tools/lib/cc-telemetry.c b/ao-tools/lib/cc-telemetry.c index 99da2680..88da7f03 100644 --- a/ao-tools/lib/cc-telemetry.c +++ b/ao-tools/lib/cc-telemetry.c @@ -60,3 +60,33 @@ cc_telemetry_parse(const char *input_line, union ao_telemetry_all *telemetry) memcpy(telemetry, hex+1, 34); return TRUE; } + +uint8_t +cc_telemetry_cksum(const union ao_telemetry_all *telemetry) +{ + const uint8_t *x = (const uint8_t *) telemetry; + int i; + uint8_t sum = 0x5a; + for (i = 0; i < 34; i++) + sum += x[i]; + return sum; +} + +void +cc_telemetry_unparse(const union ao_telemetry_all *telemetry, char output_line[CC_TELEMETRY_BUFSIZE]) +{ + uint8_t hex[36]; + int i; + int p; + + hex[0] = 34; + memcpy(hex+1, telemetry, 34); + hex[35] = cc_telemetry_cksum(telemetry); + strcpy(output_line, "TELEM "); + p = strlen(output_line); + for (i = 0; i < 36; i++) { + sprintf(output_line + p, "%02x", hex[i]); + p += 2; + } +} + |