1 #include "whitening.h" 2 #include <stdint.h> 3 #include <string.h> 4 #include <stdbool.h> 5 decode_whitening(uint8_t * input,uint8_t * output,uint8_t num)6void decode_whitening(uint8_t* input, uint8_t* output, uint8_t num) { 7 uint16_t wsr = 0b111001001; 8 memset(output, 0, (num + 7) / 8); 9 int i; 10 for (i = 0; i < num; i++) { 11 int pos = i / 8; 12 int shift = 7 - i % 8; 13 14 bool wb = wsr & 1; 15 16 output[pos] |= (input[pos] & (1 << shift)) ^ (wb << shift); 17 18 // shift and perform xor 19 wb = ((wsr >> 4) & 1) ^ wb; 20 wsr = ((wsr & 0b111111110) >> 1) | (wb << 8); 21 } 22 } 23