- return crc16(message, length, 0xffff, 0x1021);
+ return crc16(message, length, 0xffff, 0x1021);
+}
+
+uint16_t crc16_ccitt_kermit(uint8_t const *message, int length) {
+ if (length == 0) return 0;
+ uint32_t crc = 0, q = 0;
+ uint8_t c;
+
+ for (int i = 0; i < length; i++){
+ c = message[i];
+ q = (crc ^ c ) & 0xF;
+ crc = (crc >> 4) ^ (q * 0x1081);
+ q = (crc ^ (c >> 4)) & 0xF;
+ crc = (crc >> 4) ^ (q * 0x1081);
+ }
+ return crc;