You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1.6 KiB

* Copyright 2016 Freie Universität Berlin
* Copyright 2016 Ludwig Knüpfer <>
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
* @defgroup sys_checksum Checksum
* @ingroup sys
* @brief Checksum function libraries
* This module provides a number of checksum functions. Most notably is the
* @ref sys_checksum_crc16_ccitt and the @ref sys_checksum_ucrc16 modules which
* provide support for the CRC16 checksum.
* @ref sys_checksum_crc16_ccitt only provides an implementation of the CCITT
* flavor of CRC16 (polynomial @$ x^{16} + x^{12} + x^{5} + 1 @$) for big-endian
* numbers with starting seed `0x1d0f` (though others can be provided), while
* @ref sys_checksum_ucrc16 is more generalized, since it takes the
* hexadecimal representation of the polynomial as a parameter and provides
* functions and standardized polynomials for both big- and little-endian
* numbers.
* The caveat of @ref sys_checksum_ucrc16 is that it is significantly slower
* (approximately factor 8) than @ref sys_checksum_crc16_ccitt since the latter
* is able to calculate the checksum byte-wise, while the first calculates
* needs to calculate it bit-wise. @ref sys_checksum_crc16_ccitt achieves this
* advantage by using a look-up table that provides the checksum for every
* possible byte-value. It thus trades of memory against speed. If your
* platform is rather small equipped in memory you should prefer the
* @ref sys_checksum_ucrc16 version.