PNI SeaTRAX User Manual
Page 69
PNI Sensor Corporation
DOC#1018154 r02
SeaTRAX User Manual
Page 64
if(len > kBufferSize - kPacketMinSize) return;
// Store the total len of the packet including the len bytes
// (2), the frame ID (1),
// the data (len), and the crc (2). If no data is sent, the
// min len is 5
mOutData[index++] = count >> 8;
mOutData[index++] = count & 0xFF;
// store the frame ID
mOutData[index++] = frameType ;
// copy the data to be sent
while(len--) mOutData[index++] = *data++;
// compute and add the crc
crc = CRC(mOutData, index);
mOutData[index++] = crc >> 8 ;
mOutData[index++] = crc & 0xFF ;
// Write block will copy and send the data out the serial port
mSerialPort->WriteBlock(mOutData, index);
}
//
// Call the functions in serial port necessary to change the
// baud rate
//
void CommProtocol::SetBaud(UInt32 baud)
{
mSerialPort->SetBaudRate(baud);
mSerialPort->InClear();
// clear any data that was already waiting in the buffer
}
//
// Update the CRC for transmitted and received data using the
// CCITT 16bit algorithm (X^16 + X^12 + X^5 + 1).
//
UInt16 CommProtocol::CRC(void * data, UInt32 len)
{
UInt8 * dataPtr = (UInt8 *)data;
UInt32 index = 0;
UInt16 crc = 0;
while(len--)
{
crc = (unsigned char)(crc >> 8) | (crc << 8);
crc ^= dataPtr[index++];
crc ^= (unsigned char)(crc & 0xff) >> 4;
crc ^= (crc << 8) << 4;