3 void FECEncode(uint8_t *incomingData
, uint8_t *FECBuffer
)
6 uint8_t encodedBuffer
[8 * 2] = {0};
7 for (uint8_t i
= 0; i
< 8; i
++)
9 encodedBuffer
[i
* 2 + 0] = HammingTableEncode(incomingData
[i
] & 0x0F); // LSB nibble
10 encodedBuffer
[i
* 2 + 1] = HammingTableEncode(incomingData
[i
] >> 4); // MSB nibble
14 for (uint8_t i
= 0; i
< (14 / 2); i
++)
16 for (uint8_t j
= 0; j
< 8; j
++)
18 FECBuffer
[i
* 2 + 0] |= ((encodedBuffer
[j
+ 0] >> i
) & 0x01) << j
;
19 FECBuffer
[i
* 2 + 1] |= ((encodedBuffer
[j
+ 8] >> i
) & 0x01) << j
;
24 void FECDecode(uint8_t *incomingFECBuffer
, uint8_t *outgoingData
)
27 uint8_t encodedBuffer
[16] = {0};
28 for (uint8_t i
= 0; i
< 8; i
++)
30 for (uint8_t j
= 0; j
< 7; j
++)
32 encodedBuffer
[i
+ 0] |= ((incomingFECBuffer
[j
* 2 + 0] >> i
) & 0x01) << j
;
33 encodedBuffer
[i
+ 8] |= ((incomingFECBuffer
[j
* 2 + 1] >> i
) & 0x01) << j
;
37 // Decode Hamming(7,4)
38 for (uint8_t i
= 0; i
< 8; i
++)
40 outgoingData
[i
] = HammingTableDecode(encodedBuffer
[i
* 2 + 0]); // LSB nibble
41 outgoingData
[i
] |= HammingTableDecode(encodedBuffer
[i
* 2 + 1]) << 4; // MSB nibble