add encode_u32/decode_u32 to firmware protocol

This commit is contained in:
jess 2026-04-03 06:59:54 -07:00
parent 3239eaf9c8
commit bb894b42be
2 changed files with 26 additions and 1 deletions

View File

@ -35,6 +35,29 @@ static void encode_u16(uint16_t val, uint8_t *out)
out[2] = p[1] & 0x7F; out[2] = p[1] & 0x7F;
} }
void encode_u32(uint32_t val, uint8_t *out)
{
uint8_t *p = (uint8_t *)&val;
out[0] = ((p[0] >> 7) & 1) | ((p[1] >> 6) & 2) |
((p[2] >> 5) & 4) | ((p[3] >> 4) & 8);
out[1] = p[0] & 0x7F;
out[2] = p[1] & 0x7F;
out[3] = p[2] & 0x7F;
out[4] = p[3] & 0x7F;
}
uint32_t decode_u32(const uint8_t *d)
{
uint8_t b[4];
b[0] = d[1] | ((d[0] & 1) << 7);
b[1] = d[2] | ((d[0] & 2) << 6);
b[2] = d[3] | ((d[0] & 4) << 5);
b[3] = d[4] | ((d[0] & 8) << 4);
uint32_t v;
memcpy(&v, b, 4);
return v;
}
float decode_float(const uint8_t *d) float decode_float(const uint8_t *d)
{ {
uint8_t b[4]; uint8_t b[4];

View File

@ -106,7 +106,9 @@ int protocol_init(void);
int protocol_recv_command(Command *cmd, uint32_t timeout_ms); int protocol_recv_command(Command *cmd, uint32_t timeout_ms);
void protocol_push_command(const Command *cmd); void protocol_push_command(const Command *cmd);
/* 7-bit decode helpers */ /* 7-bit encode/decode helpers */
void encode_u32(uint32_t val, uint8_t *out);
uint32_t decode_u32(const uint8_t *d);
float decode_float(const uint8_t *d); float decode_float(const uint8_t *d);
uint16_t decode_u16(const uint8_t *d); uint16_t decode_u16(const uint8_t *d);