diff options
| -rw-r--r-- | ao-tools/lib/cc-telemetry.c | 30 | ||||
| -rw-r--r-- | ao-tools/lib/cc-telemetry.h | 12 | 
2 files changed, 42 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; +	} +} +		 diff --git a/ao-tools/lib/cc-telemetry.h b/ao-tools/lib/cc-telemetry.h index e849cd3b..9a5be49f 100644 --- a/ao-tools/lib/cc-telemetry.h +++ b/ao-tools/lib/cc-telemetry.h @@ -237,7 +237,19 @@ union ao_telemetry_all {  	struct ao_telemetry_baro		baro;  }; +#define CC_TELEMETRY_HEADER	"TELEM" + +/* "TELEM " 1 byte length 32 data bytes 1 rssi 1 status 1 checksum 1 null */ + +#define CC_TELEMETRY_BUFSIZE	(6 + (1 + 32 + 3) * 2 + 1) +  int  cc_telemetry_parse(const char *input_line, union ao_telemetry_all *telemetry); +uint8_t +cc_telemetry_cksum(const union ao_telemetry_all *telemetry); + +void +cc_telemetry_unparse(const union ao_telemetry_all *telemetry, char output_line[CC_TELEMETRY_BUFSIZE]); +  #endif | 
