fix: fdx crc calc
This commit is contained in:
@@ -46,6 +46,9 @@ void init_table(CrcType_t crctype) {
|
||||
case CRC_KERMIT:
|
||||
generate_table(CRC16_POLY_CCITT, true);
|
||||
break;
|
||||
case CRC_11784:
|
||||
generate_table(CRC16_POLY_CCITT, false);
|
||||
break;
|
||||
case CRC_NONE:
|
||||
crc_table_init = false;
|
||||
current_crc_type = CRC_NONE;
|
||||
@@ -185,6 +188,9 @@ void compute_crc(CrcType_t ct, const uint8_t *d, size_t n, uint8_t *first, uint8
|
||||
case CRC_KERMIT:
|
||||
crc = crc16_kermit(d, n);
|
||||
break;
|
||||
case CRC_11784:
|
||||
crc = crc16_fdx(d, n);
|
||||
break;
|
||||
case CRC_LEGIC:
|
||||
// TODO
|
||||
return;
|
||||
@@ -215,6 +221,8 @@ uint16_t Crc16ex(CrcType_t ct, const uint8_t *d, size_t n) {
|
||||
return crc16_ccitt(d, n);
|
||||
case CRC_KERMIT:
|
||||
return crc16_kermit(d, n);
|
||||
case CRC_11784:
|
||||
return crc16_fdx(d, n);
|
||||
case CRC_LEGIC:
|
||||
// TODO
|
||||
return 0;
|
||||
@@ -257,6 +265,8 @@ bool check_crc(CrcType_t ct, const uint8_t *d, size_t n) {
|
||||
return (crc16_ccitt(d, n) == 0);
|
||||
case CRC_KERMIT:
|
||||
return (crc16_kermit(d, n) == 0);
|
||||
case CRC_11784:
|
||||
return (crc16_fdx(d, n) == 0);
|
||||
case CRC_LEGIC:
|
||||
// TODO
|
||||
return false;
|
||||
@@ -272,7 +282,12 @@ uint16_t crc16_ccitt(uint8_t const *d, size_t n) {
|
||||
return crc16_fast(d, n, 0xffff, false, false);
|
||||
}
|
||||
|
||||
// FDX-B ISO11784/85) uses KERMIT
|
||||
// FDX-B ISO11784/85) uses KERMIT/CCITT
|
||||
// poly 0x xx init=0x000 refin=false refout=true xorout=0x0000 ...
|
||||
uint16_t crc16_fdx(uint8_t const *d, size_t n) {
|
||||
return crc16_fast(d, n, 0x0000, false, true);
|
||||
}
|
||||
|
||||
// poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 name="KERMIT"
|
||||
uint16_t crc16_kermit(uint8_t const *d, size_t n) {
|
||||
return crc16_fast(d, n, 0x0000, true, true);
|
||||
|
||||
@@ -10,14 +10,16 @@
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define CRC16_POLY_CCITT 0x1021
|
||||
#define CRC16_POLY_LEGIC 0xc6c6 //0x6363
|
||||
#define CRC16_POLY_DNP 0x3d65
|
||||
#define CRC16_POLY_CCITT 0x1021
|
||||
#define CRC16_POLY_KERMIT 0x8408
|
||||
#define CRC16_POLY_LEGIC 0xc6c6 //0x6363
|
||||
#define CRC16_POLY_DNP 0x3d65
|
||||
|
||||
#define X25_CRC_CHECK ((uint16_t)(~0xF0B8 & 0xFFFF)) // use this for checking of a correct crc
|
||||
|
||||
typedef enum {
|
||||
CRC_NONE,
|
||||
CRC_11784,
|
||||
CRC_14443_A,
|
||||
CRC_14443_B,
|
||||
CRC_15693,
|
||||
@@ -41,6 +43,9 @@ bool check_crc(CrcType_t ct, const uint8_t *d, size_t n);
|
||||
uint16_t crc16_ccitt(uint8_t const *d, size_t n);
|
||||
|
||||
// Calculate CRC-16/KERMIT (FDX-B ISO11784/85) LF
|
||||
uint16_t crc16_fdx(uint8_t const *d, size_t n);
|
||||
|
||||
// Calculate CRC-16/KERMIT
|
||||
uint16_t crc16_kermit(uint8_t const *d, size_t n);
|
||||
|
||||
// Calculate CRC-16/XMODEM (FeliCa)
|
||||
|
||||
Reference in New Issue
Block a user