/************************************************************************* * (C) 2008 AITNET ltd - Sofia/Bulgaria - * by Michael Pounov * * $Author: misho $ * $Id: aitcrc.h,v 1.3 2010/06/13 16:13:51 misho Exp $ * *************************************************************************/ #ifndef __AITCRC_H #define __AITCRC_H #include #define REVOPTS_REVERTBYTE 1 #define REVOPTS_REVERTCRC 2 struct tagCRCPoly { u_char poly_bits; u_int poly_num; char poly_name[19]; }; // size 24bytes typedef struct tagCRCPoly crcPoly_t; // ------------------------------------------------------- // crc_GetErrno() Get error code of last operation inline int crc_GetErrno(); // crc_GetError() Get error text of last operation inline const char *crc_GetError(); // ------------------------------------------------------- /* * crcReflect() Reflect all bits of number * @crcNum = Number for reflection * @crcBits = Number width bits * return: -1 error, !=-1 reflecting number */ inline u_int crcReflect(u_int crcNum, u_char crcBits); /* * crcCalc() Generic CRC calculation function for many sub variants of CRC algorithms * @psBuf = Data for calculation * @bufLen = Length of data * @crcBits = CRC algorithm bits (1, 4, 5, 6, 7, 8, 10, 11, 12, 15, 16, 24, 30, 32) * @RevOpts = Options for computation (REVOPTS_REVERTBYTE, REVOPTS_REVERTCRC) * @initCRC = Initial CRC value * @xorCRC = Last xor CRC value * return: -1 error, !=-1 CRC checksum */ inline u_int crcCalc(u_char * __restrict psBuf, u_int bufLen, u_char crcBits, u_char RevOpts, u_int initCRC, u_int xorCRC); /* * crcIP() Checksum in IP communication * @nBuf = Data for calculation * @bufLen = Length of data * return: -1 error, !=-1 Checksum */ inline u_short crcIP(u_short * __restrict nBuf, int bufLen); /* * crcFletcher16() Fletcher-16 Checksum computing * @nBuf = Data for calculation * @bufLen = Length of data * return: -1 error, !=-1 Checksum */ inline u_short crcFletcher16(u_short * __restrict nBuf, int bufLen); /* * crcFletcher() Fletcher-32 Checksum computing * @nBuf = Data for calculation * @bufLen = Length of data * return: -1 error, !=-1 Checksum */ inline u_int crcFletcher(u_short * __restrict nBuf, int bufLen); /* * crcAdler() crcAdler-32 Checksum computing * @psBuf = Data for calculation * @bufLen = Length of data * return: -1 error, !=-1 Checksum */ inline u_int crcAdler(u_char * __restrict psBuf, int bufLen); /* * crcEther() Checksum in Ethernet communication * @psBuf = Data for calculation * @bufLen = Length of data * return: -1 error, !=-1 Checksum */ #define crcEther(psBuf, bufLen) crcCalc((psBuf), (bufLen), 32, 3, 0xFFFFFFFF, 0xFFFFFFFF) /* * crcPelco() Calculate Pelco D/P CRC * @ver = Pelco protocol version (Dd | Pp) * @pkt = Packet for calculate crc * return: crc for packet, if is 0 check and crc_GetErrno() == 1 Pelco protocol not supported */ inline u_char crcPelco(u_char ver, u_char *pkt); #endif