mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-14 07:49:01 +00:00
38 lines
814 B
C++
38 lines
814 B
C++
#include "Crc16.h"
|
|
|
|
Crc16Class::Crc16Class()
|
|
{
|
|
unsigned short value;
|
|
unsigned short temp;
|
|
for (unsigned short i = 0; i < 256; ++i)
|
|
{
|
|
value = 0;
|
|
temp = i;
|
|
for (byte j = 0; j < 8; ++j)
|
|
{
|
|
if (((value ^ temp) & 0x0001) != 0)
|
|
{
|
|
value = (ushort)((value >> 1) ^ polynomial);
|
|
}
|
|
else
|
|
{
|
|
value >>= 1;
|
|
}
|
|
temp >>= 1;
|
|
}
|
|
table[i] = value;
|
|
}
|
|
}
|
|
|
|
unsigned short Crc16Class::ComputeChecksum(byte *data, int start, int length)
|
|
{
|
|
ushort fcs = 0xffff;
|
|
for (int i = start; i < (start + length); i++)
|
|
{
|
|
byte index = (fcs ^ data[i]) & 0xff;
|
|
fcs = (ushort)((fcs >> 8) ^ table[index]);
|
|
}
|
|
fcs ^= 0xffff;
|
|
return fcs;
|
|
}
|