X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Fcrc.h;h=5ad39c0092539343a7a90c4d7c791defde1ea873;hb=edce74d23db44bb7857440e8144484dc73c22ee9;hp=ae28e4d3253ea601b595c30d450530e3fe034179;hpb=3dc4fcd4fabb9e2bc848c56052a648821d70e3db;p=bertos.git diff --git a/mware/crc.h b/mware/crc.h index ae28e4d3..5ad39c00 100755 --- a/mware/crc.h +++ b/mware/crc.h @@ -1,50 +1,79 @@ /*! * \file * * - * \brief Definitions for CRC generator - * \version $Id$ + * \brief XModem-CRC16 algorithm (interface) + * + * \note This algorithm is incompatible with the CCITT-CRC16. * + * This code is based on the article Copyright 1986 Stephen Satchell. + * + * Programmers may incorporate any or all code into their programs, + * giving proper credit within the source. Publication of the + * source routines is permitted so long as proper credit is given + * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg, + * Omen Technology. + * + * \version $Id$ * \author Bernardo Innocenti */ -/* - * $Log$ - * Revision 1.1 2004/06/03 08:58:16 bernie - * Import into DevLib - * - */ +/*#* + *#* $Log$ + *#* Revision 1.4 2004/08/25 14:12:09 rasky + *#* Aggiornato il comment block dei log RCS + *#* + *#* Revision 1.3 2004/08/15 05:47:26 bernie + *#* updcrc16(): inline version of UPDCRC16(); Cleanup documentation. + *#* + *#* Revision 1.2 2004/06/03 11:27:09 bernie + *#* Add dual-license information. + *#* + *#* Revision 1.1 2004/06/03 08:58:16 bernie + *#* Import into DevLib + *#* + *#*/ #ifndef CRC_H #define CRC_H +#include + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -#include // uint16_t -#include // size_t /* CRC table */ extern const uint16_t crc16tab[256]; /*! - * updcrc macro derived from article Copyright (C) 1986 Stephen Satchell. - * \note First argument must be in range 0 to 255. - * \note Second argument is referenced twice. + * \brief Compute the updated CRC16 value for one octet (macro version) * - * Programmers may incorporate any or all code into their programs, - * giving proper credit within the source. Publication of the - * source routines is permitted so long as proper credit is given - * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg, - * Omen Technology. + * \note This version is only intended for old/broken compilers. + * Use the inline function in new code. + * + * \param c New octet (range 0-255) + * \param oldcrc Previous CRC16 value (referenced twice, beware of side effects) */ #define UPDCRC16(c, oldcrc) (crc16tab[((oldcrc) >> 8) ^ ((unsigned char)(c))] ^ ((oldcrc) << 8)) + +#ifdef INLINE +/*! + * \brief Compute the updated CRC16 value for one octet (macro version) + */ +INLINE uint16_t updcrc16(uint8_t c, uint16_t oldcrc) +{ + return crc16tab[(oldcrc >> 8) ^ c] ^ (oldcrc << 8); +} +#endif // INLINE + + /*! * This function implements the CRC 16 calculation on a buffer. * @@ -52,7 +81,7 @@ extern const uint16_t crc16tab[256]; * \param buf The buffer to perform CRC calculation on. * \param len The length of the Buffer. * - * \return The updated CRC 16 value. + * \return The updated CRC16 value. */ extern uint16_t crc16(uint16_t crc, const void *buf, size_t len);