|
|
|
|
@ -68,38 +68,20 @@ const uint8_t CRC8_TABLE[] = {
|
|
|
|
|
0xFA, 0xFD, 0xF4, 0xF3, 0x01 };
|
|
|
|
|
|
|
|
|
|
const uint16_t CRC9_TABLE[] = {
|
|
|
|
|
0x000, 0x059, 0x0B2, 0x0EB, 0x164, 0x13D, 0x1D6, 0x18F,
|
|
|
|
|
0x091, 0x0C8, 0x023, 0x07A, 0x1F5, 0x1AC, 0x147, 0x11E,
|
|
|
|
|
0x122, 0x17B, 0x190, 0x1C9, 0x046, 0x01F, 0x0F4, 0x0AD,
|
|
|
|
|
0x1B3, 0x1EA, 0x101, 0x158, 0x0d7, 0x08E, 0x065, 0x03C,
|
|
|
|
|
0x01D, 0x044, 0x0AF, 0x0F6, 0x179, 0x120, 0x1CB, 0x192,
|
|
|
|
|
0x08C, 0x0D5, 0x03E, 0x067, 0x1E8, 0x1B1, 0x15A, 0x103,
|
|
|
|
|
0x13F, 0x166, 0x18D, 0x1D4, 0x05B, 0x002, 0x0E9, 0x0B0,
|
|
|
|
|
0x1AE, 0x1F7, 0x11C, 0x145, 0x0CA, 0x093, 0x078, 0x021,
|
|
|
|
|
0x03A, 0x063, 0x088, 0x0D1, 0x15E, 0x107, 0x1EC, 0x1B5,
|
|
|
|
|
0x0AB, 0x0F2, 0x019, 0x040, 0x1CF, 0x196, 0x17D, 0x124,
|
|
|
|
|
0x118, 0x141, 0x1AA, 0x1F3, 0x07C, 0x025, 0x0CE, 0x097,
|
|
|
|
|
0x189, 0x1D0, 0x13B, 0x162, 0x0ED, 0x0B4, 0x05F, 0x006,
|
|
|
|
|
0x027, 0x07E, 0x095, 0x0CC, 0x143, 0x11A, 0x1F1, 0x1A8,
|
|
|
|
|
0x0B6, 0x0EF, 0x004, 0x05D, 0x1D2, 0x18B, 0x160, 0x139,
|
|
|
|
|
0x105, 0x15C, 0x1B7, 0x1EE, 0x061, 0x038, 0x0D3, 0x08A,
|
|
|
|
|
0x194, 0x1CD, 0x126, 0x17F, 0x0F0, 0x0A9, 0x042, 0x01B,
|
|
|
|
|
0x074, 0x02D, 0x0C6, 0x09F, 0x110, 0x149, 0x1A2, 0x1FB,
|
|
|
|
|
0x0E5, 0x0BC, 0x057, 0x00E, 0x181, 0x1D8, 0x133, 0x16A,
|
|
|
|
|
0x156, 0x10F, 0x1E4, 0x1BD, 0x032, 0x06B, 0x080, 0x0D9,
|
|
|
|
|
0x1C7, 0x19E, 0x175, 0x12C, 0x0A3, 0x0FA, 0x011, 0x048,
|
|
|
|
|
0x069, 0x030, 0x0DB, 0x082, 0x10D, 0x154, 0x1BF, 0x1E6,
|
|
|
|
|
0x0F8, 0x0A1, 0x04A, 0x013, 0x19C, 0x1C5, 0x12E, 0x177,
|
|
|
|
|
0x14B, 0x112, 0x1F9, 0x1A0, 0x02F, 0x076, 0x09D, 0x0C4,
|
|
|
|
|
0x1DA, 0x183, 0x168, 0x131, 0x0BE, 0x0E7, 0x00C, 0x055,
|
|
|
|
|
0x04E, 0x017, 0x0FC, 0x0A5, 0x12A, 0x173, 0x198, 0x1C1,
|
|
|
|
|
0x0DF, 0x086, 0x06D, 0x034, 0x1BB, 0x1E2, 0x109, 0x150,
|
|
|
|
|
0x16C, 0x135, 0x1DE, 0x187, 0x008, 0x051, 0x0BA, 0x0E3,
|
|
|
|
|
0x1FD, 0x1A4, 0x14F, 0x116, 0x099, 0x0C0, 0x02B, 0x072,
|
|
|
|
|
0x053, 0x00A, 0x0E1, 0x0B8, 0x137, 0x16E, 0x185, 0x1DC,
|
|
|
|
|
0x0C2, 0x09B, 0x070, 0x029, 0x1A6, 0x1FF, 0x114, 0x14D,
|
|
|
|
|
0x171, 0x128, 0x1C3, 0x19A, 0x015, 0x04C, 0x0A7, 0x0FE,
|
|
|
|
|
0x1E0, 0x1B9, 0x152, 0x10B, 0x084, 0x0DD, 0x036, 0x06F };
|
|
|
|
|
0x1E7, 0x1F3, 0x1F9, 0x1FC, 0x0D2, 0x045, 0x122, 0x0BD, 0x15E, 0x083,
|
|
|
|
|
0x141, 0x1A0, 0x0FC, 0x052, 0x005, 0x102, 0x0AD, 0x156, 0x087, 0x143,
|
|
|
|
|
0x1A1, 0x1D0, 0x0C4, 0x04E, 0x00B, 0x105, 0x182, 0x0ED, 0x176, 0x097,
|
|
|
|
|
0x14B, 0x1A5, 0x1D2, 0x0C5, 0x162, 0x09D, 0x14E, 0x08B, 0x145, 0x1A2,
|
|
|
|
|
0x0FD, 0x17E, 0x093, 0x149, 0x1A4, 0x0FE, 0x053, 0x129, 0x194, 0x0E6,
|
|
|
|
|
0x05F, 0x12F, 0x197, 0x1CB, 0x1E5, 0x1F2, 0x0D5, 0x16A, 0x099, 0x14C,
|
|
|
|
|
0x08A, 0x069, 0x134, 0x0B6, 0x077, 0x13B, 0x19D, 0x1CE, 0x0CB, 0x165,
|
|
|
|
|
0x1B2, 0x0F5, 0x17A, 0x091, 0x148, 0x088, 0x068, 0x018, 0x020, 0x03C,
|
|
|
|
|
0x032, 0x035, 0x11A, 0x0A1, 0x150, 0x084, 0x06E, 0x01B, 0x10D, 0x186,
|
|
|
|
|
0x0EF, 0x177, 0x1BB, 0x1DD, 0x1EE, 0x0DB, 0x16D, 0x1B6, 0x0F7, 0x17B,
|
|
|
|
|
0x1BD, 0x1DE, 0x0C3, 0x161, 0x1B0, 0x0F4, 0x056, 0x007, 0x103, 0x181,
|
|
|
|
|
0x1C0, 0x0CC, 0x04A, 0x009, 0x104, 0x0AE, 0x07B, 0x13D, 0x19E, 0x0E3,
|
|
|
|
|
0x171, 0x1B8, 0x0F0, 0x054, 0x006, 0x02F, 0x117, 0x18B, 0x1C5, 0x1E2,
|
|
|
|
|
0x0DD, 0x16E, 0x09B, 0x14D, 0x1A6 };
|
|
|
|
|
|
|
|
|
|
const uint16_t CCITT16_TABLE1[] = {
|
|
|
|
|
0x0000U, 0x1189U, 0x2312U, 0x329bU, 0x4624U, 0x57adU, 0x6536U, 0x74bfU,
|
|
|
|
|
@ -427,27 +409,21 @@ uint8_t CRC::crc8(const uint8_t *in, uint32_t length)
|
|
|
|
|
/// Generate 9-bit CRC.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="in">Input byte array.</param>
|
|
|
|
|
/// <param name="length">Length of byte array.</param>
|
|
|
|
|
/// <param name="length">Length of byte array (in bits).</param>
|
|
|
|
|
/// <returns>Calculated 9-bit CRC value.</returns>
|
|
|
|
|
uint16_t CRC::crc9(const uint8_t* in, uint32_t length)
|
|
|
|
|
{
|
|
|
|
|
assert(in != NULL);
|
|
|
|
|
|
|
|
|
|
uint16_t crc = 0U;
|
|
|
|
|
uint16_t tmp = 0U;
|
|
|
|
|
|
|
|
|
|
while (length--)
|
|
|
|
|
{
|
|
|
|
|
tmp = (crc >> 1) & 0xFF;
|
|
|
|
|
crc = crc << 8;
|
|
|
|
|
crc = crc ^ CRC9_TABLE[tmp ^ (*in >> 8)];
|
|
|
|
|
|
|
|
|
|
tmp = (crc >> 1) & 0xFF;
|
|
|
|
|
crc = crc << 8;
|
|
|
|
|
crc = crc ^ CRC9_TABLE[tmp ^ (*in & 0xFF)];
|
|
|
|
|
|
|
|
|
|
in++;
|
|
|
|
|
uint32_t n = 0U;
|
|
|
|
|
for (uint32_t i = 0U; i < length; i++, n++) {
|
|
|
|
|
bool bit = READ_BIT(in, n);
|
|
|
|
|
if (bit) {
|
|
|
|
|
crc ^= CRC9_TABLE[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ((~crc) & 0x1FF);
|
|
|
|
|
return crc;
|
|
|
|
|
}
|
|
|
|
|
|