Chapter 5 ________________________________________________________________ Operation
VAISALA ______________________________________________________________________ 155
CRC16 Checksum
The CRC16 checksum can be calculated using the following algorithm
written in the programming language C:
/* 16 bit type */
typedef unsigned short Word16;
/* Calculate CRC-16 value as used in LT31 protocol */
Word16 crc16(const unsigned char *buf, int len)
{
Word16
crc;
int
i,
j;
crc=0xffff;
for (i=0;i<len;++i)
{
crc^=buf[i]<<8;
for (j=0;j<8;++j)
{
Word16
xmask=(crc&0x8000)?0x1021:0;
crc<<=1;
crc^=xmask;
}
}
return crc^0xffff;
}
The calculation of the checksum starts after the ! (Start of Heading,
ASCII 1) character and ends after the # (End of text, ASCII 3) character.
Checksums should be used for proper operation. However, giving XXXX
(four times X [ASCII 88
DEC
/58
HEX
]) will skip checksum testing in the
LT31 system.