Chapter 5 ________________________________________________________________ Operation
VAISALA_______________________________________________________________________ 69
NOTE
The next line is omitted if the message subclass is 5.
5TH LINE (6TH LINE IN MESSAGE NO. 2)
Example: 1a3f
where
= End-of-Text character
1a3f = Checksum, see below for calculation procedure
= End-of-Transmission character
= Carriage Return + Line Feed
CRC16 Checksum
The CRC16 checksum can be calculated using the following algorithm
written in the C programming language:
/* 16-bit type. */
typedef unsigned short Word16;
/* Calculate CRC-16 value as used in CL31. */
Word16 crc16(const unsigned char *buf, int len)
{
Word16 crc;
Word16 xmask;
int i, j;
crc = 0xffff;
for (i = 0; i < len; ++i)
{
crc ^= buf[i] << 8;
for (j = 0; j < 8; ++j)
{
xmask = (crc & 0x8000) ? 0x1021 : 0;
crc <<= 1;
crc ^= xmask;
}
}
return crc ^ 0xffff;
}
The calculation of the checksum starts after the Start-of-Heading
character and ends after the End-of-Text character, that is, the first
character included is C and the last one included is End-of-Text.