Line data Source code
1 : /**
2 : * @ingroup pn9
3 : *
4 : * @file pn9.c
5 : *
6 : * @{
7 : */
8 :
9 : #include "../firmware.h"
10 :
11 9 : void Util_pn9(uint8_t *buffer, uint32_t preroll, uint32_t length)
12 : {
13 : /* Uses CC1120 PN9 Sequence */
14 : uint16_t state;
15 : uint16_t j;
16 :
17 9 : if(length == 0)
18 1 : return;
19 :
20 8 : state = 0x01FF;
21 :
22 8 : if(preroll == 0)
23 : {
24 6 : *buffer++ ^= 0xFF;
25 6 : length--;
26 : }
27 : else
28 : {
29 548 : while(preroll--)
30 : {
31 4896 : for(j=0; j<8; j++)
32 : {
33 4352 : state = (uint16_t)((state >> 1) + ((((state & 0x01) ^ (state >> 5)) & 0x01) << 8));
34 : }
35 : }
36 2 : *buffer++ ^= (uint8_t)state;
37 2 : length--;
38 : }
39 :
40 2440 : while(length--)
41 : {
42 21816 : for(j=0; j<8; j++)
43 : {
44 19392 : state = (uint16_t)((state >> 1) + ((((state & 0x01) ^ (state >> 5)) & 0x01) << 8));
45 : }
46 :
47 2424 : *buffer++ ^= (uint8_t)state;
48 : }
49 : }
50 :
51 : /**
52 : * @}
53 : */
|