/**
 * \file
 * Functions and types for CRC checks.
 *
 * Generated on Sat May 12 09:41:12 2018
 * by pycrc v0.9.1, https://pycrc.org
 * using the configuration:
 *  - Width         = 4
 *  - Poly          = 0x3
 *  - XorIn         = 0x0
 *  - ReflectIn     = False
 *  - XorOut        = 0x0
 *  - ReflectOut    = False
 *  - Algorithm     = table-driven
 *
 * This file defines the functions crc4itu_init(), crc4itu_update() and crc_finalize().
 *
 * The crc4itu_init() function returns the inital \c crc value and must be called
 * before the first call to crc4itu_update().
 * Similarly, the crc_finalize() function must be called after the last call
 * to crc4itu_update(), before the \c crc is being used.
 * is being used.
 *
 * The crc4itu_update() function can be called any number of times (including zero
 * times) in between the crc4itu_init() and crc_finalize() calls.
 *
 * This pseudo-code shows an example usage of the API:
 * \code{.c}
 * crc_t crc;
 * unsigned char data[MAX_DATA_LEN];
 * size_t data_len;
 *
 * crc = crc4itu_init();
 * while ((data_len = read_data(data, MAX_DATA_LEN)) > 0) {
 *     crc = crc4itu_update(crc, data, data_len);
 * }
 * crc = crc_finalize(crc);
 * \endcode
 */
#ifndef CRC4ITU_H
#define CRC4ITU_H

#include <stdlib.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif


/**
 * The definition of the used algorithm.
 *
 * This is not used anywhere in the generated code, but it may be used by the
 * application code to call algorithm-specific code, if desired.
 */
#define CRC_ALGO_TABLE_DRIVEN 1


/**
 * The type of the CRC values.
 *
 * This type must be big enough to contain at least 4 bits.
 */
typedef uint_fast8_t crc_t;


/**
 * Calculate the initial crc value.
 *
 * \return     The initial crc value.
 */
static inline crc_t crc4itu_init(void)
{
    return 0x0;
}


/**
 * Update the crc value with new data.
 *
 * \param[in] crc      The current crc value.
 * \param[in] data     Pointer to a buffer of \a data_len bytes.
 * \param[in] data_len Number of bytes in the \a data buffer.
 * \return             The updated crc value.
 */
crc_t crc4itu_update(crc_t crc, const void *data, size_t data_len);


/**
 * Calculate the final crc value.
 *
 * \param[in] crc  The current crc value.
 * \return     The final crc value.
 */
static inline crc_t crc_finalize(crc_t crc)
{
    return crc;
}


#ifdef __cplusplus
}           /* closing brace for extern "C" */
#endif

#endif      /* CRC4ITU_H */
