Newbie looking for assistance.
I am reading and writing commands (10 bytes) and messages (up to 100 bytes) hex bytes to and from a device. The packets are terminated with 2-byte CRC16. Because of the variable length packets the CRC16 is calculated byte-wise - the standard look-up table method doesn't give the correct results. I have tried numerous on-line calculators and none give the correct results.
I am able to extract and process received bytes from the msg.payload using function nodes but the algorithm to calculate the CRC for sending commands has me stumped.
I have the following from the C code:
It is CCITT CRC-16. The code is as follows:
/**	@brief  Add a single byte to a running calculation of a CCITT CRC-16.
- 
Result is in global uCrcAccum.
- 
@param  ch  Byte to add.
 */
 void calc_crc(char ch) {
 unsigned int shifter, flag;
 for (shifter = 0x80; shifter; shifter >>= 1) {
 flag = uCrcAccum & 0x8000;
 uCrcAccum <<= 1;
 uCrcAccum |= ((shifter & ch) ? 1 : 0);
 if (flag)
 uCrcAccum ^= 0x1021;
 }
 }
An example 10 byte message with 2 byte CRC: 0222000000000000000081B3
Any assistance would be appreciated. TNX.