X-Git-Url: http://git.linex4red.de/pub/USBaspLoader.git/blobdiff_plain/31e49de4348d9ce27211f08e0a58346ef8f85394..360bfa6d963be278944fdf71e58591af6d79e95b:/updater/crccheck.c diff --git a/updater/crccheck.c b/updater/crccheck.c new file mode 100644 index 0000000..798c37a --- /dev/null +++ b/updater/crccheck.c @@ -0,0 +1,36 @@ +/****************************************************************************/ +/* CRC32 stuff taken and adapted from lib_crc version 1.16 : */ +/* Library : lib_crc */ +/* File : lib_crc.c */ +/* Author : Lammert Bies 1999-2008 */ +/* E-mail : info@lammertbies.nl */ +/****************************************************************************/ + +/* the ATxmega series NVM CRC compatible polynom */ +/* on ATxmega you can do this much faster in hardware */ +#define P_32 0xEDB88320L +#define D_32 0xFFFFFFFFL + +uint32_t crc_tab32_value(uint8_t address) { + uint32_t result; + uint8_t j; + + result = (uint32_t)address & 0xffL; + for (j=0; j<8; j++) { + if (result & 0x00000001L) result = (result >> 1) ^ P_32; + else result = result >> 1; + } + + return result; +} + +uint32_t update_crc_32(uint32_t crc, uint8_t c) { + uint32_t tmp, long_c; + + long_c = (uint32_t)c & 0xffL; + + tmp = crc ^ long_c; + crc = (crc >> 8) ^ crc_tab32_value(tmp & 0xffL); + + return crc; +}