remove HDLC framing including CRC
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit
This commit is contained in:
12
thirdparty/tas/hdlc.c
vendored
12
thirdparty/tas/hdlc.c
vendored
@ -55,15 +55,15 @@ void hdlc_add_framing(const uint8_t *src, size_t slen, uint8_t *dst, size_t *dle
|
||||
*dlen = tlen;
|
||||
}
|
||||
|
||||
int hdlc_remove_framing(const uint8_t *src, size_t slen, uint8_t *dst, size_t *dlen)
|
||||
int hdlc_remove_framing_with_crc_check(const uint8_t *src, size_t slen, uint8_t *dst, size_t *dlen)
|
||||
{
|
||||
uint16_t tlen = 0;
|
||||
uint16_t ii;
|
||||
uint8_t bt;
|
||||
|
||||
*dlen = 0;
|
||||
if (slen == 0) return -1;
|
||||
if ((src[tlen] != 0x7E) && (src[slen-1] != 0x7C)) return -1;
|
||||
if (slen < 4) return -1;
|
||||
if ((src[tlen] != 0x7E) && (src[slen-1] != 0x7C)) return -2;
|
||||
for (ii = 1; ii < slen-1; ii++)
|
||||
{
|
||||
bt = *src++;
|
||||
@ -74,7 +74,11 @@ int hdlc_remove_framing(const uint8_t *src, size_t slen, uint8_t *dst, size_t *d
|
||||
}
|
||||
dst[tlen++] = bt;
|
||||
}
|
||||
*dlen = tlen;
|
||||
// calc crc16
|
||||
if(calc_crc16_buff_reflected( dst, tlen ) != 0) {
|
||||
return 1;
|
||||
}
|
||||
*dlen = tlen - 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user