Skip to content

Commit 0ae3e7c

Browse files
peterbarkertridge
authored andcommitted
AP_Math: allow initial value to be specified for crc8_generic
some crc8's start with a non-zero value
1 parent a514af1 commit 0ae3e7c

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

libraries/AP_Math/crc.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ uint8_t crc_crc8(const uint8_t *p, uint8_t len)
9393
}
9494

9595
// CRC8 that does not use a lookup table: for generic polynomials
96-
uint8_t crc8_generic(const uint8_t *buf, const uint16_t buf_len, const uint8_t polynomial)
96+
uint8_t crc8_generic(const uint8_t *buf, const uint16_t buf_len, const uint8_t polynomial, uint8_t initial_value)
9797
{
98-
uint8_t crc = 0;
98+
uint8_t crc = initial_value;
9999
for (uint16_t i = 0; i < buf_len; i++) {
100100
crc = crc8_dvb(buf[i], crc, polynomial);
101101
}

libraries/AP_Math/crc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
uint16_t crc_crc4(uint16_t *data);
2323
uint8_t crc_crc8(const uint8_t *p, uint8_t len);
24-
uint8_t crc8_generic(const uint8_t *buf, const uint16_t buf_len, const uint8_t polynomial); // CRC8 that does not use a lookup table for generic polynomials
24+
uint8_t crc8_generic(const uint8_t *buf, const uint16_t buf_len, const uint8_t polynomial, uint8_t initial_value=0); // CRC8 that does not use a lookup table for generic polynomials
2525
uint8_t crc8_dvb_s2(uint8_t crc, uint8_t a);
2626
uint8_t crc8_dvb(uint8_t crc, uint8_t a, uint8_t seed);
2727
uint8_t crc8_dvb_s2_update(uint8_t crc, const void *data, uint32_t length);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include <AP_gtest.h>
2+
3+
#include <AP_Math/AP_Math.h>
4+
5+
const AP_HAL::HAL& hal = AP_HAL::get_HAL();
6+
7+
TEST(CRC8, crc8_dvb_buffer)
8+
{
9+
const uint8_t buffer[2] { 0xBE, 0xEF };
10+
EXPECT_EQ(0x92, crc8_generic(buffer, 2, 0x31, 0xff));
11+
}
12+
13+
AP_GTEST_PANIC()
14+
AP_GTEST_MAIN()

0 commit comments

Comments
 (0)