#ifndef FCS_H
#define FCS_H

#ifdef CRC32
#define FCS_INIT_VALUE 0xFFFFFFFF /* FCS initialization value. */
    #define FCS_GOOD_VALUE 0xDEBB20E3 /* FCS value for valid frames. */
    #define FCS_INVERT_MASK 0xFFFFFFFF /* Invert the FCS value accordingly to the specification */
    #define FCS_SIZE unsigned int
#else
#define FCS_INIT_VALUE 0xFFFF /* FCS initialization value. */
#define FCS_GOOD_VALUE 0xF0B8 /* FCS value for valid frames. */
#define FCS_INVERT_MASK 0xFFFF /* Invert the FCS value accordingly to the specification */
#define FCS_SIZE unsigned short
#endif

/**
 * Вычисляет новый Frame Check Sequence на основе текущего значения и ценности данных.
 *
 * @param fcs Current FCS value
 * @param value The value to be added
 * @returns Calculated FCS value
 */
FCS_SIZE calc_fcs(FCS_SIZE fcs, unsigned char value);

#endif //FCS_H