I need some help with a CRC. I have fair experience with Arduino programming, however I don't even know where to start here. I'm sure the answer is simple and I'm over complicating it. Here is what I read from a protocol manual for a device I want to communicate with.
"The ROC Plus protocol applies a cyclical redundancy check (CRC) to the message string to produce a 16-bit remainder. This remainder is referred to as the CRC-16 code. The CRC-16 code is appended to the end of the message string. The ROC800 uses the 16-bit polynomial CRC-16: X16 + X15 + X2 + 1 The ROC800 uses the standard GPLIB CRC routine, and calculates CRC by table lookup, with the initial condition (seed) of 0000 (zeros)."
Welcome to the most confusing world of CRC. The beauty (not) of CRC is that there are as many options as there are implementations. So much for standards. Everybody thinks his/her polynomial is best. You can develop the code given the polynomial, which you have, or try to find the name of the poly and find code already written for it. As an example, the most common 8 bit CRC uses the Dallas-Maxim inverse polynomial which can be found everywhere.
If you decide to do it yourself, understand that the seed 0000 should be written as 0x0000 as you start the twos compliment math with a string twice as wide as the result.