--- libelwix/inc/elwix/acrc.h 2017/12/08 00:07:48 1.6 +++ libelwix/inc/elwix/acrc.h 2025/08/21 15:43:00 1.11 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: acrc.h,v 1.6 2017/12/08 00:07:48 misho Exp $ +* $Id: acrc.h,v 1.11 2025/08/21 15:43:00 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004 - 2017 +Copyright 2004 - 2024 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -58,13 +58,16 @@ struct tagCRCPoly { }; /* size 24bytes */ typedef struct tagCRCPoly crcPoly_t; +#ifdef __cplusplus +extern "C" { +#endif /* * crcReflect() - Reflect all bits of number * * @crcNum = Number for reflection * @crcBits = Number width bits - * return: -1 error, !=-1 reflecting number + * return: reflecting number */ unsigned int crcReflect(unsigned int crcNum, unsigned char crcBits); /* @@ -76,27 +79,48 @@ unsigned int crcReflect(unsigned int crcNum, unsigned * @RevOpts = Options for computation (REVOPTS_REVERTBYTE, REVOPTS_REVERTCRC) * @initCRC = Initial CRC value * @xorCRC = Last xor CRC value - * return: -1 error, !=-1 CRC checksum + * return: CRC checksum */ unsigned int crcCalc(unsigned char * __restrict psBuf, unsigned int bufLen, unsigned char crcBits, unsigned char RevOpts, unsigned int initCRC, unsigned int xorCRC); +#define crc_32(x, l) crcCalc((x), (l), 32, REVOPTS_REVERTBYTE|REVOPTS_REVERTCRC, 0xFFFFFFFF, 0xFFFFFFFF) +#define crc_16(x, l) crcCalc((x), (l), 16, REVOPTS_REVERTBYTE|REVOPTS_REVERTCRC, 0x0, 0x0) +#define crc_16_ccitt(x, l) crcCalc((x), (l), 161, 0, 0x0, 0x0) +#define crc_16_xmodem(x, l) crcCalc((x), (l), 162, REVOPTS_REVERTBYTE|REVOPTS_REVERTCRC, 0x0, 0x0) +#define crc_8(x, l) crcCalc((x), (l), 8, 0, 0x0, 0x0) /* - * crcIP() - Checksum in IP communication + * crc16_ccitt() - Checksum calculation * * @buf = Data for calculation * @bufLen = Length of data - * return: -1 error, !=-1 Checksum + * return: Checksum */ -unsigned short crcIP(unsigned char * __restrict buf, int bufLen); +unsigned short crc16_ccitt(unsigned char * __restrict buf, int bufLen); /* + * crc16_xy() - Checksum calculation in X/Y modem communication + * + * @buf = Data for calculation + * @bufLen = Length of data + * return: Checksum + */ +unsigned short crc16_xy(unsigned char * __restrict buf, int bufLen); +/* + * crcIP() - Checksum in IP communication + * + * @buf = Data for calculation + * @len = Length of data in bytes + * return: Checksum + */ +unsigned short crcIP(unsigned short* __restrict buf, int len); +/* * crcTCP() - Checksum for TCP v4 communication * * @buf = Data for calculation * @bufLen = Length of data * @th = TCP header - * return: -1 error, !=-1 Checksum + * return: Checksum */ unsigned short crcTCP(struct in_addr src, struct in_addr dst, unsigned char * __restrict th); @@ -106,7 +130,7 @@ unsigned short crcTCP(struct in_addr src, struct in_ad * @buf = Data for calculation * @bufLen = Length of data * @uh = UDP header - * return: -1 error, !=-1 Checksum + * return: Checksum */ unsigned short crcUDP(struct in_addr src, struct in_addr dst, unsigned char * __restrict uh); @@ -116,7 +140,7 @@ unsigned short crcUDP(struct in_addr src, struct in_ad * * @nBuf = Data for calculation * @bufLen = Length of data - * return: -1 error, !=-1 Checksum + * return: Checksum */ unsigned short crcFletcher16(unsigned short * __restrict nBuf, int bufLen); /* @@ -124,7 +148,7 @@ unsigned short crcFletcher16(unsigned short * __restri * * @nBuf = Data for calculation * @bufLen = Length of data - * return: -1 error, !=-1 Checksum + * return: Checksum */ unsigned int crcFletcher(unsigned short * __restrict nBuf, int bufLen); /* @@ -132,7 +156,7 @@ unsigned int crcFletcher(unsigned short * __restrict n * * @psBuf = Data for calculation * @bufLen = Length of data - * return: -1 error, !=-1 Checksum + * return: Checksum */ unsigned int crcAdler(unsigned char * __restrict psBuf, int bufLen); @@ -141,19 +165,28 @@ unsigned int crcAdler(unsigned char * __restrict psBuf * * @psBuf = Data for calculation * @bufLen = Length of data - * return: -1 error, !=-1 Checksum + * return: Checksum */ #define crcEther(psBuf, bufLen) crcCalc((psBuf), (bufLen), 32, 3, 0xFFFFFFFF, 0xFFFFFFFF) /* - * crc_32() - CRC32 calculation from table + * crc8tbl() - CRC8 calculation from table * * @crc = Initial crc value * @buf = Data for calculation * @len = Length of data + * return: calculated CRC8 + */ +uint8_t crc8tbl(unsigned char crc, const unsigned char * __restrict buf, unsigned int len); +/* + * crc32tbl() - CRC32 calculation from table + * + * @crc = Initial crc value + * @buf = Data for calculation + * @len = Length of data * return: calculated CRC32 */ -unsigned int crc_32(unsigned int crc, const unsigned char * __restrict buf, unsigned int len); +unsigned int crc32tbl(unsigned int crc, const unsigned char * __restrict buf, unsigned int len); /* * crcPelco() - Calculate Pelco D/P CRC @@ -228,5 +261,8 @@ unsigned int hash_fnv1(const char *csStr, int nStrLen, */ #define hash_fnv(str, len) hash_fnv1((str), (len), 1) +#ifdef __cplusplus +} +#endif #endif