Initial import
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/crc@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
/* CRC16.C */
|
||||||
|
|
||||||
|
/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
|
||||||
|
|
||||||
|
/* 16-bit CRC routines */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
/* Updates 16-bit "rcrc" with character 'ch' */
|
||||||
|
/****************************************************************************/
|
||||||
|
uint16_t Upd_crc16(uint8_t ch, uint16_t poly, uint16_t crc)
|
||||||
|
{
|
||||||
|
uint16_t i, cy;
|
||||||
|
uint8_t nch = ch;
|
||||||
|
|
||||||
|
for (i=0; i<8; i++)
|
||||||
|
{
|
||||||
|
cy = crc & 0x8000;
|
||||||
|
crc <<= 1;
|
||||||
|
if (nch & 0x80)
|
||||||
|
crc |= 1;
|
||||||
|
|
||||||
|
nch<<=1;
|
||||||
|
|
||||||
|
if (cy)
|
||||||
|
crc ^= poly;
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
/* Returns 16-crc of string (not counting terminating NULL) */
|
||||||
|
/****************************************************************************/
|
||||||
|
uint16_t Crc16(uint16_t poly, uint16_t crc, uint8_t *pBuf, uint32_t len)
|
||||||
|
{
|
||||||
|
while(len)
|
||||||
|
{
|
||||||
|
crc = Upd_crc16(*pBuf, poly, crc);
|
||||||
|
pBuf++;
|
||||||
|
len--;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// --------------------------------------------------------------
|
||||||
|
#ifndef CRC_H
|
||||||
|
#define CRC_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint16_t Upd_crc16(uint8_t ch, uint16_t poly, uint16_t crc);
|
||||||
|
uint16_t Crc16(uint16_t poly, uint16_t crc, uint8_t *pBuf, uint32_t len);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
#endif // CRC_H
|
||||||
Reference in New Issue
Block a user