xref: /libbtbb/python/utils/encode_sw.py (revision 29daedccddb5412f36a794cdda4ad13c170d9836)
1#!/usr/bin/python
2
3# produce a sync word for a given LAP
4
5lap = 0xffffff
6
7pn = 0x83848D96BBCC54FC
8
9# generator matrix for (64,30) linear block code
10# based on polynomial 0260534236651
11# (see gen_check_tables.py for automatic generation)
12g = (
13	0x8000000000000001,
14	0x40000002c2b89ed4,
15	0x20000001615c4f6a,
16	0x10000000b0ae27b5,
17	0x080000029aef8d0e,
18	0x040000014d77c687,
19	0x0200000264037d97,
20	0x01000003f0b9201f,
21	0x008000033ae40edb,
22	0x004000035fca99b9,
23	0x002000036d5dd208,
24	0x00100001b6aee904,
25	0x00080000db577482,
26	0x000400006dabba41,
27	0x00020002f46d43f4,
28	0x000100017a36a1fa,
29	0x00008000bd1b50fd,
30	0x000040029c3536aa,
31	0x000020014e1a9b55,
32	0x0000100265b5d37e,
33	0x0000080132dae9bf,
34	0x000004025bd5ea0b,
35	0x00000203ef526bd1,
36	0x000001033511ab3c,
37	0x000000819a88d59e,
38	0x00000040cd446acf,
39	0x00000022a41aabb3,
40	0x0000001390b5cb0d,
41	0x0000000b0ae27b52,
42	0x0000000585713da9)
43
44def encode(data):
45	assert data < 2**30
46	codeword = 0
47	for i in range(30):
48		if (data & (0x20000000 >> i)):
49			codeword ^= g[i]
50	return codeword
51
52# append barker code
53if (lap & 0x800000):
54	data = 0x13000000 | lap
55else:
56	data = 0x2c000000 | lap
57
58# scramble
59data ^= (pn >> 34)
60
61# encode
62codeword = encode(data)
63
64# scramble again
65syncword = codeword ^ pn
66
67print "0x%06x 0x%016x 0x%016x" % (lap, codeword, syncword)
68