mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-20 23:05:19 +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);
|
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
|
#pragma once
|
||||||
|
|
||||||
|
struct sbuf_s;
|
||||||
|
|
||||||
uint16_t crc16_ccitt(uint16_t crc, unsigned char a);
|
uint16_t crc16_ccitt(uint16_t crc, unsigned char a);
|
||||||
uint16_t crc16_ccitt_update(uint16_t crc, const void *data, uint32_t length);
|
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(uint8_t crc, unsigned char a);
|
||||||
uint8_t crc8_dvb_s2_update(uint8_t crc, const void *data, uint32_t length);
|
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);
|
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)
|
void sbufWriteData(sbuf_t *dst, const void *data, int len)
|
||||||
{
|
{
|
||||||
memcpy(dst->ptr, data, len);
|
memcpy(dst->ptr, data, len);
|
||||||
|
|
|
@ -20,19 +20,20 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
// simple buffer-based serializer/deserializer without implicit size check
|
// simple buffer-based serializer/deserializer without implicit size check
|
||||||
// little-endian encoding implemneted now
|
|
||||||
|
|
||||||
typedef struct sbuf_s {
|
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;
|
uint8_t *end;
|
||||||
} sbuf_t;
|
} sbuf_t;
|
||||||
|
|
||||||
sbuf_t *sbufInit(sbuf_t *sbuf, uint8_t *ptr, uint8_t *end);
|
sbuf_t *sbufInit(sbuf_t *sbuf, uint8_t *ptr, uint8_t *end);
|
||||||
|
|
||||||
void sbufWriteU8(sbuf_t *dst, uint8_t val);
|
void sbufWriteU8(sbuf_t *dst, uint8_t val);
|
||||||
void sbufWriteU16(sbuf_t *dst, uint16_t val);
|
void sbufWriteU16(sbuf_t *dst, uint16_t val);
|
||||||
void sbufWriteU32(sbuf_t *dst, uint32_t val);
|
void sbufWriteU32(sbuf_t *dst, uint32_t val);
|
||||||
void sbufWriteU16BigEndian(sbuf_t *dst, uint16_t val);
|
void sbufWriteU16BigEndian(sbuf_t *dst, uint16_t val);
|
||||||
void sbufWriteU32BigEndian(sbuf_t *dst, uint32_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 sbufWriteData(sbuf_t *dst, const void *data, int len);
|
||||||
void sbufWriteString(sbuf_t *dst, const char *string);
|
void sbufWriteString(sbuf_t *dst, const char *string);
|
||||||
void sbufWriteStringWithZeroTerminator(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