2024-04-22 00:09:51 +08:00

85 lines
2.0 KiB
C

/*********************************************************************************************************
* ------------------------------------------------------------------------------------------------------
* file description
* ------------------------------------------------------------------------------------------------------
* \file check.c
* \unit check
* \brief This is a C language version of commonly used check code algorithms
* \author Lamdonn
* \version v1.0.0
* \license GPL-2.0
* \copyright Copyright (C) 2023 Lamdonn.
********************************************************************************************************/
#include "check.h"
/**
* \brief check_sum.
* \param[in] data: address of data
* \param[in] len: length of data
* \return check value
*/
uint8_t check_sum(uint8_t* data, uint32_t len)
{
uint32_t i;
uint8_t check = 0;
for (i = 0; i < len; i++)
{
check += data[i];
}
return check;
}
/**
* \brief check_parity.
* \param[in] data: address of data
* \param[in] len: length of data
* \return check value
*/
uint8_t check_parity(uint8_t* data, uint32_t len)
{
uint32_t i, b;
uint8_t check = 0;
for (i = 0; i < len; i++)
{
for (b = 0; b < 8; b++)
{
if ((data[i] >> b) & 1) check++;
}
}
return check % 2;
}
/**
* \brief check_lrc.
* \param[in] data: address of data
* \param[in] len: length of data
* \return check value
*/
uint8_t check_lrc(uint8_t* data, uint32_t len)
{
uint32_t i;
uint8_t check = 0;
for (i = 0; i < len; i++)
{
check += data[i];
}
return 0xFF - check + 1;
}
/**
* \brief check_xor.
* \param[in] data: address of data
* \param[in] len: length of data
* \return check value
*/
uint8_t check_xor(uint8_t* data, uint32_t len)
{
uint32_t i;
uint8_t check = 0;
for (i = 0; i < len; i++)
{
check ^= data[i];
}
return check;
}