Skip to content

Instantly share code, notes, and snippets.

@andresv
Last active March 16, 2024 11:12
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save andresv/4611897 to your computer and use it in GitHub Desktop.
Save andresv/4611897 to your computer and use it in GitHub Desktop.
AX25 CRC16 implementation
uint16_t ax25crc16(unsigned char *data_p, uint16_t length) {
uint16_t crc = 0xFFFF;
uint32_t data;
uint16_t crc16_table[] = {
0x0000, 0x1081, 0x2102, 0x3183,
0x4204, 0x5285, 0x6306, 0x7387,
0x8408, 0x9489, 0xa50a, 0xb58b,
0xc60c, 0xd68d, 0xe70e, 0xf78f
};
while(length--){
crc = ( crc >> 4 ) ^ crc16_table[(crc & 0xf) ^ (*data_p & 0xf)];
crc = ( crc >> 4 ) ^ crc16_table[(crc & 0xf) ^ (*data_p++ >> 4)];
}
data = crc;
crc = (crc << 8) | (data >> 8 & 0xff); // do byte swap here that is needed by AX25 standard
return (~crc);
}
@karaketir16
Copy link

Thanks for that

@TaLucGiaHoang
Copy link

Thank you for your code. I found this when searching CRC16-X25.

@0xA50C1A1
Copy link

Tyvm

@qwedgh
Copy link

qwedgh commented Dec 5, 2023

thanks, misspell -> length

@andresv
Copy link
Author

andresv commented Dec 5, 2023

Typo fixed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment