package static ushort calcHeaderCrc(bool aStartupFrame, bool aSyncFrame, ushort aFrameId, ushort aPayloadWords) { | |
uint crcData = aPayloadWords; | |
crcData |= (aFrameId << 7); | |
if (aSyncFrame) { | |
crcData |= BIT_19; | |
} | |
if (aStartupFrame) { | |
crcData |= BIT_18; | |
} | |
ushort crc = 0x1a; | |
const ushort table[16] = [ | |
0x0000, 0x0385, 0x070A, 0x048F, | |
0x0591, 0x0614, 0x029B, 0x011E, | |
0x00A7, 0x0322, 0x07AD, 0x0428, | |
0x0536, 0x06B3, 0x023C, 0x01B9]; | |
for (int i = 0; i < 5; ++i) { | |
if (i != 0) { | |
crcData <<= 4; | |
} | |
crc = ((crc << 4) & 0x7FF) ^ table[((crc >> 7) ^ (crcData >> 16)) & 0x0F]; | |
} | |
return(crc); | |
} | |