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