mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 14:25:20 +03:00
Added some sbuf utility functions
This commit is contained in:
parent
067f61f834
commit
81c1153533
4 changed files with 35 additions and 3 deletions
|
@ -77,3 +77,25 @@ void crc8_dvb_s2_sbuf_append(sbuf_t *dst, uint8_t *start)
|
|||
}
|
||||
sbufWriteU8(dst, crc);
|
||||
}
|
||||
|
||||
uint8_t crc8_xor_update(uint8_t crc, const void *data, uint32_t length)
|
||||
{
|
||||
const uint8_t *p = (const uint8_t *)data;
|
||||
const uint8_t *pend = p + length;
|
||||
|
||||
for (; p != pend; p++) {
|
||||
crc ^= *p;
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
void crc8_xor_sbuf_append(sbuf_t *dst, uint8_t *start)
|
||||
{
|
||||
uint8_t crc = 0;
|
||||
const uint8_t *end = dst->ptr;
|
||||
for (uint8_t *ptr = start; ptr < end; ++ptr) {
|
||||
crc ^= *ptr;
|
||||
}
|
||||
sbufWriteU8(dst, crc);
|
||||
}
|
||||
|
||||
|
|
|
@ -17,9 +17,12 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
struct sbuf_s;
|
||||
|
||||
uint16_t crc16_ccitt(uint16_t crc, unsigned char a);
|
||||
uint16_t crc16_ccitt_update(uint16_t crc, const void *data, uint32_t length);
|
||||
uint8_t crc8_dvb_s2(uint8_t crc, unsigned char a);
|
||||
uint8_t crc8_dvb_s2_update(uint8_t crc, const void *data, uint32_t length);
|
||||
struct sbuf_s;
|
||||
void crc8_dvb_s2_sbuf_append(struct sbuf_s *dst, uint8_t *start);
|
||||
uint8_t crc8_xor_update(uint8_t crc, const void *data, uint32_t length);
|
||||
void crc8_xor_sbuf_append(struct sbuf_s *dst, uint8_t *start);
|
||||
|
|
|
@ -61,6 +61,12 @@ void sbufWriteU32BigEndian(sbuf_t *dst, uint32_t val)
|
|||
}
|
||||
|
||||
|
||||
void sbufFill(sbuf_t *dst, uint8_t data, int len)
|
||||
{
|
||||
memset(dst->ptr, data, len);
|
||||
dst->ptr += len;
|
||||
}
|
||||
|
||||
void sbufWriteData(sbuf_t *dst, const void *data, int len)
|
||||
{
|
||||
memcpy(dst->ptr, data, len);
|
||||
|
|
|
@ -20,19 +20,20 @@
|
|||
#include <stdint.h>
|
||||
|
||||
// simple buffer-based serializer/deserializer without implicit size check
|
||||
// little-endian encoding implemneted now
|
||||
|
||||
typedef struct sbuf_s {
|
||||
uint8_t *ptr; // data pointer must be first (sbuff_t* is equivalent to uint8_t **)
|
||||
uint8_t *ptr; // data pointer must be first (sbuf_t* is equivalent to uint8_t **)
|
||||
uint8_t *end;
|
||||
} sbuf_t;
|
||||
|
||||
sbuf_t *sbufInit(sbuf_t *sbuf, uint8_t *ptr, uint8_t *end);
|
||||
|
||||
void sbufWriteU8(sbuf_t *dst, uint8_t val);
|
||||
void sbufWriteU16(sbuf_t *dst, uint16_t val);
|
||||
void sbufWriteU32(sbuf_t *dst, uint32_t val);
|
||||
void sbufWriteU16BigEndian(sbuf_t *dst, uint16_t val);
|
||||
void sbufWriteU32BigEndian(sbuf_t *dst, uint32_t val);
|
||||
void sbufFill(sbuf_t *dst, uint8_t data, int len);
|
||||
void sbufWriteData(sbuf_t *dst, const void *data, int len);
|
||||
void sbufWriteString(sbuf_t *dst, const char *string);
|
||||
void sbufWriteStringWithZeroTerminator(sbuf_t *dst, const char *string);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue