diff --git a/libraries/AP_Math/crc.cpp b/libraries/AP_Math/crc.cpp index 6ab0612317..b57227d779 100644 --- a/libraries/AP_Math/crc.cpp +++ b/libraries/AP_Math/crc.cpp @@ -334,3 +334,16 @@ uint32_t crc_crc24(const uint8_t *bytes, uint16_t len) } return crc; } + +// simple 8 bit checksum used by FPort +uint8_t crc_sum8(const uint8_t *p, uint8_t len) +{ + uint16_t sum = 0; + for (uint8_t i=0; i> 8; + sum &= 0xFF; + } + sum = 0xff - ((sum & 0xff) + (sum >> 8)); + return sum; +} diff --git a/libraries/AP_Math/crc.h b/libraries/AP_Math/crc.h index e80eb77363..bf000cadcd 100644 --- a/libraries/AP_Math/crc.h +++ b/libraries/AP_Math/crc.h @@ -28,6 +28,9 @@ uint32_t crc_crc32(uint32_t crc, const uint8_t *buf, uint32_t size); uint32_t crc32_small(uint32_t crc, const uint8_t *buf, uint32_t size); uint32_t crc_crc24(const uint8_t *bytes, uint16_t len); +// checksum used by SPORT/FPort +uint8_t crc_sum8(const uint8_t *p, uint8_t len); + // Copyright (C) 2010 Swift Navigation Inc. // Contact: Fergus Noble uint16_t crc16_ccitt(const uint8_t *buf, uint32_t len, uint16_t crc);