ACwing FC firmware
STM32WB55: attitude IEKF, altitude Kalman filter, flight core, protocol v2
Loading...
Searching...
No Matches
telemetry.c
Go to the documentation of this file.
1
4#include "telemetry.h"
5#include <string.h>
6
7uint16_t tlm_crc16(const uint8_t *data, size_t len)
8{
9 uint16_t crc = 0xFFFFu;
10 while (len--) {
11 crc ^= (uint16_t)(*data++) << 8;
12 for (int i = 0; i < 8; ++i)
13 crc = (crc & 0x8000u) ? (uint16_t)((crc << 1) ^ 0x1021u) : (uint16_t)(crc << 1);
14 }
15 return crc;
16}
17
18size_t tlm_encode(uint8_t type, const void *payload, uint8_t len, uint8_t *out, size_t cap)
19{
20 const size_t total = (size_t)len + TLM_OVERHEAD;
21 if (cap < total) return 0;
22 out[0] = TLM_SYNC0;
23 out[1] = TLM_SYNC1;
24 out[2] = type;
25 out[3] = len;
26 memcpy(&out[4], payload, len);
27 const uint16_t crc = tlm_crc16(&out[2], (size_t)len + 2u);
28 out[4 + len] = (uint8_t)(crc & 0xFFu);
29 out[5 + len] = (uint8_t)(crc >> 8);
30 return total;
31}
float cap[6][3]
Definition calib_mgr.c:36
size_t tlm_encode(uint8_t type, const void *payload, uint8_t len, uint8_t *out, size_t cap)
Writes the complete frame into out; returns its length, 0 if cap is too small.
Definition telemetry.c:18
uint16_t tlm_crc16(const uint8_t *data, size_t len)
Definition telemetry.c:7
Telemetry packet format (shared with 02 - Tools/00 - Matlab/Telemetry/parseTelemetry....
#define TLM_SYNC1
Definition telemetry.h:27
#define TLM_OVERHEAD
Definition telemetry.h:32
#define TLM_SYNC0
Definition telemetry.h:26