crc16.c


1
/*
2
 * crc16.c
3
 *
4
 * Created: 19.11.2016 09:24:16
5
 *  Author: Admin
6
 */ 
7
8
#include "crc16.h"
9
10
unsigned int crc16;
11
12
13
void InitCRC(void) {
14
  crc16 = 0xffff;
15
}
16
17
18
unsigned int CalcCRC(unsigned char data) {
19
  unsigned char bitCount;
20
  unsigned char PolynomFlag;
21
  for (bitCount = 0; bitCount <8; bitCount++) {
22
    PolynomFlag = (crc16 &0x8000) != 0;
23
    crc16 <<= 1;
24
    if (data &0x80) {
25
      crc16 |= 1;
26
    }
27
    data <<= 1;
28
    if (PolynomFlag)
29
    crc16 ^= CRC16_POLYNOM;
30
  }
31
  
32
  return crc16;
33
}
34
35
uCRC16_t CalcCRCBuffer(unsigned char *data, unsigned int length)
36
{
37
  uCRC16_t result;
38
  
39
  InitCRC();
40
  for(int i =0; i<length; i++)
41
  {
42
    result.iCRC16 = CalcCRC(*data++);
43
  }
44
  result.iCRC16 = CalcCRC(0);
45
  result.iCRC16 = CalcCRC(0);
46
  
47
  return result;
48
}
49
50
bool CheckCRC(unsigned char *data, unsigned int length)
51
{
52
  bool result = false;
53
  uCRC16_t crc;
54
  int a;
55
  crc = CalcCRCBuffer(data,length);
56
  if((crc.cCRC16[CRC_LO]== *(data +length +1)) &&(crc.cCRC16[CRC_HI]== *(data +length)))
57
  {
58
    a = 1;
59
    result = true;
60
  }
61
  
62
  return result;
63
  
64
}