X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcore%2Fao_fec.h;h=f3f55fa82760b3cd5f6171de7810f83ed7e333cb;hb=b292c14790fc225029cba3f80ce8ad6c5652bc4e;hp=db5523a36c94c61299e1939087638a4f38aae957;hpb=75e4521ec42a368cebc67a07f8713d7a854ea265;p=fw%2Faltos diff --git a/src/core/ao_fec.h b/src/core/ao_fec.h index db5523a3..f3f55fa8 100644 --- a/src/core/ao_fec.h +++ b/src/core/ao_fec.h @@ -24,12 +24,22 @@ #define AO_FEC_TRELLIS_TERMINATOR 0x0b #define AO_FEC_PREPARE_EXTRA 4 +extern const uint8_t ao_fec_whiten_table[]; + void -ao_fec_dump_bytes(uint8_t *bytes, uint8_t len, char *name); +ao_fec_dump_bytes(uint8_t *bytes, uint16_t len, char *name); uint16_t ao_fec_crc(uint8_t *bytes, uint8_t len); +/* + * 'len' is the length of the original data; 'bytes' + * must be four bytes longer than that, and the first + * two after 'len' must be the received crc + */ +uint8_t +ao_fec_check_crc(uint8_t *bytes, uint8_t len); + /* * Append CRC and terminator bytes, returns resulting length. * 'out' must be at least len + AO_FEC_PREPARE_EXTRA bytes long @@ -42,19 +52,27 @@ ao_fec_prepare(uint8_t *in, uint8_t len, uint8_t *out); * must be 'len' bytes long. 'out' and 'in' can be * the same array */ -uint8_t +void ao_fec_whiten(uint8_t *in, uint8_t len, uint8_t *out); /* - * Encode data. 'out' must be len*2 bytes long + * Encode and interleave data. 'out' must be len*2 bytes long */ uint8_t ao_fec_encode(uint8_t *in, uint8_t len, uint8_t *out); /* - * Interleave data. 'out' must be 'len' bytes long + * Decode data. 'in' is one byte per bit, soft decision + * 'out' must be len/8 bytes long */ + uint8_t -ao_fec_interleave(uint8_t *in, uint8_t len, uint8_t *out); +ao_fec_decode(uint8_t *in, uint16_t in_len, uint8_t *out); + +/* + * Interleave data packed in bytes. 'out' must be 'len' bytes long. + */ +uint16_t +ao_fec_interleave_bytes(uint8_t *in, uint16_t len, uint8_t *out); #endif /* _AO_FEC_H_ */