rendered paste bodyuchar calculateNextShiftRegister(uchar message, uchar shiftRegister) {
for (int b = 0; b < 8; b++, message >>= 1) {
uchar messageXor0 = (message & 1) ^ (shiftRegister & 1);
uchar nextShiftRegister =
(messageXor0 << 7) | // next bit 7
(((shiftRegister >> 7) & 1) << 6) | // next bit 6
((((shiftRegister >> 6) & 1) ^ messageXor0) << 5) | // next bit 5
((((shiftRegister >> 5) & 1) ^ messageXor0) << 4) | // next bit 4
((((shiftRegister >> 4) & 1) ^ messageXor0) << 3) | // next bit 3
(((shiftRegister >> 3) & 1) << 2) | // next bit 2
(((shiftRegister >> 2) & 1) << 1) | // next bit 1
((shiftRegister >> 1) & 1); // next bit 0
shiftRegister = nextShiftRegister;
}
return shiftRegister;
}
uchar calculateCRC(uchar* data) {
uchar shiftRegister = 0xff;
for (int i = 0; i < 23; i++) {
shiftRegister = calculateNextShiftRegister(data[i], shiftRegister);
}
return shiftRegister;
}