1 //-----------------------------------------------------------------------------
2 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
3 // at your option, any later version. See the LICENSE.txt file for the text of
5 //-----------------------------------------------------------------------------
7 //-----------------------------------------------------------------------------
12 unsigned short update_crc16( unsigned short crc
, unsigned char c
)
14 unsigned short i
, v
, tcrc
= 0;
17 for (i
= 0; i
< 8; i
++) {
18 tcrc
= ( (tcrc
^ v
) & 1 ) ? ( tcrc
>> 1 ) ^ 0x8408 : tcrc
>> 1;
22 return ((crc
>> 8) ^ tcrc
)&0xffff;
25 uint16_t crc16(uint8_t const *message
, int length
, uint16_t remainder
, uint16_t polynomial
) {
30 for (int byte
= 0; byte
< length
; ++byte
) {
31 remainder
^= (message
[byte
] << 8);
32 for (uint8_t bit
= 8; bit
> 0; --bit
) {
33 if (remainder
& 0x8000) {
34 remainder
= (remainder
<< 1) ^ polynomial
;
36 remainder
= (remainder
<< 1);
43 uint16_t crc16_ccitt(uint8_t const *message
, int length
) {
44 return crc16(message
, length
, 0xffff, 0x1021);