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)6 void 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