/* Hard wired for ^16+^15+^2+1, "CRC-16" */

static unsigned int parityEven(unsigned char  data)
{
    unsigned int  pe = !0;

    while(data)
    {
        if (1 & data)
        {
            pe = !pe;
        }

        data >>= 1;
    }

    return pe;
}


unsigned int add2CRCESP(unsigned char  newData, unsigned int  oldCRC)
{
    unsigned int  tempCRC = 0xFF & (oldCRC ^ newData);

    if (parityEven(tempCRC))
    {
        oldCRC >>= 8;
    }
    else
    {
        oldCRC = (oldCRC >> 8) ^ 0xC001;
    }

    tempCRC <<= 7;
    oldCRC ^= tempCRC;
    tempCRC >>= 1;
    oldCRC ^= tempCRC;

    return oldCRC;
}

