#include "crc_8.h"
u8 get_crc8(const u8* pp_Data, u32 vp_len)
{
unsigned char i;
unsigned char crc = 0;
while (vp_len--) {
for (i = 0x80; i != 0; i >>= 1) {
if ((crc & 0x80) != 0) {
crc <<= 1;
crc ^= 0x07;
}
else {
crc <<= 1;
}
if ((*pp_Data&i) != 0) crc ^= 0x07;
}
pp_Data++;
}
return crc;
}
u8 calc_crc8(u8 vp_crc, const u8* pp_Data, u32 vp_len)
{
unsigned char i;
while (vp_len--) {
for (i = 0x80; i != 0; i >>= 1) {
if ((vp_crc & 0x80) != 0) {
vp_crc <<= 1;
vp_crc ^= 0x07;
}
else {
vp_crc <<= 1;
}
if ((*pp_Data&i) != 0) vp_crc ^= 0x07;
}
pp_Data++;
}
return vp_crc;
}
u8 file_crc8(FILE* pp_fp, u32 vp_crc_offset)
{
u32 vl_Len = 0;
u8 vl_Crc = 0;
u8 pBuff[512];
u32 vlCnt = 0;
fseek(pp_fp, vp_crc_offset, SEEK_SET);
while ( (vl_Len = fread(pBuff, 1, 512, pp_fp)) > 0)
{
vl_Crc = calc_crc8(vl_Crc, pBuff, vl_Len);
vlCnt += vl_Len;
}
fseek(pp_fp, 0, SEEK_SET);
return vl_Crc;
}