Pedja,
Whatever you are doing in that example does not look like a CRC computation (see e.g. http://www.relisoft.com/Science/CrcMath.html ), but I'm no expert here. (Also, you seem to be doing FF+1-X in the code as opposed to FF-1+X described in your post).
Again, I am pretty sure that your device expects the raw string, and not the hexadecimally formatted representation of it.
Do you have more detailed instructions on what your device expects, maybe an example command together with the resulting string that needs to be sent? How long are the commands? How many bits in the CRC?