diff --git a/src/ChecksumConverter.cc b/src/ChecksumConverter.cc old mode 100644 new mode 100755 index 731a607..0e30e07 --- a/src/ChecksumConverter.cc +++ b/src/ChecksumConverter.cc @@ -504,6 +504,18 @@ static uint32_t leybold(const uint8_t* data, size_t len, uint32_t sum) return sum; } +// Checksum used by Brooks Cryopumps +static uint32_t brksCryo(const uint8_t* data, size_t len, uint32_t sum) +{ + uint32_t xsum; + while (len--) { + sum += (*data++) & 0x7F; + } + xsum = (((sum >> 6) ^ sum) & 0x3F) + 0x30; + return xsum; +} + + struct checksum { const char* name; @@ -521,8 +533,13 @@ static checksum checksumMap[] = {"sum8", sum, 0x00, 0x00, 1}, // 0xDD {"sum16", sum, 0x0000, 0x0000, 2}, // 0x01DD {"sum32", sum, 0x00000000, 0x00000000, 4}, // 0x000001DD + {"nsum8", sum, 0xFF, 0xFF, 1}, // 0x23 + {"nsum16", sum, 0xFFFF, 0xFFFF, 2}, // 0xFE23 + {"nsum32", sum, 0xFFFFFFFF, 0xFFFFFFFF, 4}, // 0xFFFFFE23 + {"notsum", sum, 0x00, 0xFF, 1}, // 0x22 {"xor", xor8, 0x00, 0x00, 1}, // 0x31 {"xor8", xor8, 0x00, 0x00, 1}, // 0x31 + {"xor8ff", xor8, 0x00, 0xFF, 1}, // 0xCE {"xor7", xor7, 0x00, 0x00, 1}, // 0x31 {"crc8", crc_0x07, 0x00, 0x00, 1}, // 0xF4 {"ccitt8", crc_0x31, 0x00, 0x00, 1}, // 0xA1 @@ -541,6 +558,7 @@ static checksum checksumMap[] = {"hexsum8", hexsum, 0x00, 0x00, 1}, // 0x2D {"cpi", CPI, 0x00, 0x00, 1}, // 0x7E {"leybold", leybold, 0x00, 0x00, 1}, // 0x22 + {"brksCryo",brksCryo, 0x00, 0x00, 1} // 0x4A }; static uint32_t mask[5] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF};