add encode_u32/decode_u32 to firmware protocol
This commit is contained in:
parent
3239eaf9c8
commit
bb894b42be
|
|
@ -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];
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue