9size_t pv2_frame(uint8_t type,
const void *payload, uint8_t len, uint8_t *out,
size_t cap)
14size_t pv2_event(uint8_t level, uint16_t code, int32_t arg,
const char *text, uint8_t *out,
size_t cap)
17 size_t n = text ? strlen(text) : 0u;
21 memcpy(pl, &h,
sizeof h);
22 if (
n) memcpy(pl +
sizeof h, text,
n);
32size_t pv2_param(uint16_t
id,
float value, uint8_t flags, uint16_t index, uint16_t count, uint8_t *out,
size_t cap)
36 memcpy(&p.
value, &value,
sizeof value);
45 pl[0] = ready ? 1u : 0u;
47 memcpy(&pl[2], items, 4u *
n);
56 memcpy(&pl[1], m, 4u *
n);
64 memcpy(pl, h,
sizeof *h);
65 if (data_len) memcpy(pl +
sizeof *h, data, data_len);
72 memcpy(&f, p,
sizeof f);
static void result(const fc_cmd_t *c, uint8_t res, uint8_t why)
size_t pv2_calib(const pv2_calib_hdr_t *h, const void *data, uint8_t data_len, uint8_t *out, size_t cap)
size_t pv2_event(uint8_t level, uint16_t code, int32_t arg, const char *text, uint8_t *out, size_t cap)
size_t pv2_ack(uint8_t op, uint8_t seq, uint8_t result, uint8_t reason, uint8_t *out, size_t cap)
float pv2_rd_f32(const uint8_t *p)
size_t pv2_param(uint16_t id, float value, uint8_t flags, uint16_t index, uint16_t count, uint8_t *out, size_t cap)
size_t pv2_motors(const pv2_motor_t *m, uint8_t n, uint8_t *out, size_t cap)
size_t pv2_frame(uint8_t type, const void *payload, uint8_t len, uint8_t *out, size_t cap)
size_t pv2_checks(uint8_t ready, const pv2_check_t *items, uint8_t n, uint8_t *out, size_t cap)
ACwing Pilot app protocol v2: identifiers and frame layouts.
#define PV2_EVENT_TEXT_MAX
uint8_t level
< 0x0B EVENT header, then text[len]
uint8_t flags
bit0 dirty (RAM != flash), bit1 read-only
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.
Telemetry packet format (shared with 02 - Tools/00 - Matlab/Telemetry/parseTelemetry....