From a8cd503dd5b68ab727fc9ed68f11d68bc6d7b41a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 12 Mar 2015 20:33:36 +0100 Subject: [PATCH] FIX: @marshmellow found out that the CRC-8/Maxim was not always giving the right checksum. Change POLY from 0x31 -> 0x8C --- common/crc.c | 10 ++++------ common/crc.h | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/common/crc.c b/common/crc.c index 153ff11c..1bd0cefe 100644 --- a/common/crc.c +++ b/common/crc.c @@ -42,14 +42,12 @@ uint32_t crc_finish(crc_t *crc) return ( crc->state ^ crc->final_xor ) & crc->mask; } -int CRC8Maxim(uint8_t *buff, size_t size ) { +uint32_t CRC8Maxim(uint8_t *buff, size_t size) { crc_t crc; - crc_init(&crc, 8, 0x31, 0x00, 0x00); - crc_clear(&crc); - - for ( int i=0; i < size; ++i){ + crc_init(&crc, 9, 0x8c, 0x00, 0x00); + for ( uint8_t i = 0; i < size; ++i){ crc_update(&crc, buff[i], 8); } return crc_finish(&crc); -} +} \ No newline at end of file diff --git a/common/crc.h b/common/crc.h index eb91196b..8c152fa2 100644 --- a/common/crc.h +++ b/common/crc.h @@ -38,7 +38,7 @@ extern void crc_clear(crc_t *crc); extern uint32_t crc_finish(crc_t *crc); // Calculate CRC-8/Maxim checksum -int CRC8Maxim(uint8_t *buff, size_t size ); +uint32_t CRC8Maxim(uint8_t *buff, size_t size ); /* Static initialization of a crc structure */ #define CRC_INITIALIZER(_order, _polynom, _initial_value, _final_xor) { \ -- 2.39.2